summaryrefslogtreecommitdiff
path: root/docs/doxygen/latex/xbexp_8h_source.tex
blob: 5d215618d2f3b7c3b362e876e98bb0cb0b2fd7c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
\hypertarget{xbexp_8h_source}{}\doxysection{xbexp.\+h}
\label{xbexp_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h}}
\mbox{\hyperlink{xbexp_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/*  xbexp.h}}
\DoxyCodeLine{2 \textcolor{comment}{}}
\DoxyCodeLine{3 \textcolor{comment}{XBase64 Software Library}}
\DoxyCodeLine{4 \textcolor{comment}{}}
\DoxyCodeLine{5 \textcolor{comment}{Copyright (c) 1997,2003,2014,2022 Gary A Kunkel}}
\DoxyCodeLine{6 \textcolor{comment}{}}
\DoxyCodeLine{7 \textcolor{comment}{The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.}}
\DoxyCodeLine{8 \textcolor{comment}{}}
\DoxyCodeLine{9 \textcolor{comment}{Email Contact:}}
\DoxyCodeLine{10 \textcolor{comment}{}}
\DoxyCodeLine{11 \textcolor{comment}{    XDB-\/devel@lists.sourceforge.net}}
\DoxyCodeLine{12 \textcolor{comment}{    XDB-\/users@lists.sourceforge.net}}
\DoxyCodeLine{13 \textcolor{comment}{}}
\DoxyCodeLine{14 \textcolor{comment}{*/}}
\DoxyCodeLine{15 }
\DoxyCodeLine{16 }
\DoxyCodeLine{17 \textcolor{preprocessor}{\#ifndef \_\_XB\_EXP\_H\_\_}}
\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_EXP\_H\_\_}}
\DoxyCodeLine{19 }
\DoxyCodeLine{20 }
\DoxyCodeLine{21 \textcolor{comment}{// \#ifdef  CMAKE\_COMPILER\_IS\_GNUCC}}
\DoxyCodeLine{22 \textcolor{comment}{// \#pragma interface}}
\DoxyCodeLine{23 \textcolor{comment}{// \#endif}}
\DoxyCodeLine{24 }
\DoxyCodeLine{25 }
\DoxyCodeLine{26 }
\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
\DoxyCodeLine{28 \textcolor{preprocessor}{\#define XB\_EXP\_CHAR      'C'}}
\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_EXP\_DATE      'D'}}
\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_EXP\_LOGICAL   'L'}}
\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_EXP\_NUMERIC   'N'}}
\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_EXP\_UNKNOWN   'U'}}
\DoxyCodeLine{33 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{34 }
\DoxyCodeLine{35 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
\DoxyCodeLine{36 }
\DoxyCodeLine{37 \textcolor{preprocessor}{\#define XB\_EXP\_CONSTANT      'C'}}
\DoxyCodeLine{38 \textcolor{preprocessor}{\#define XB\_EXP\_FUNCTION      'F'}}
\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_EXP\_FIELD         'D'}}
\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_EXP\_OPERATOR      'O'}}
\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_EXP\_NOTROOT       'N'    }\textcolor{comment}{// not root node, needs further parsing}}
\DoxyCodeLine{42 \textcolor{preprocessor}{\#define XB\_EXP\_PRE\_OPERATOR  'B'    }\textcolor{comment}{// (B)efore) pre increment, pre decrement}}
\DoxyCodeLine{43 \textcolor{preprocessor}{\#define XB\_EXP\_POST\_OPERATOR 'A'    }\textcolor{comment}{// (A)fter)  post increment, pre decrement}}
\DoxyCodeLine{44 }
\DoxyCodeLine{45 \textcolor{preprocessor}{\#define XB\_END\_OF\_EXPRESSION -\/100}}
\DoxyCodeLine{46 }
\DoxyCodeLine{47 \textcolor{comment}{// \#define XB\_UNBALANCED\_PARENS -\/101}}
\DoxyCodeLine{48 \textcolor{comment}{// \#define XB\_UNBALANCED\_QUOTES -\/102}}
\DoxyCodeLine{49 }
\DoxyCodeLine{50 }
\DoxyCodeLine{51 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
\DoxyCodeLine{52 }
\DoxyCodeLine{54 \textcolor{keyword}{struct }XBDLLEXPORT xbExpToken \{}
\DoxyCodeLine{55   xbString sExpression;      \textcolor{comment}{// in -\/ expression to pull next token from}}
\DoxyCodeLine{56                              \textcolor{comment}{// out -\/ remainder of the expression after token removed}}
\DoxyCodeLine{57   xbString sToken;           \textcolor{comment}{// next token pulled from the expression}}
\DoxyCodeLine{58   \textcolor{keywordtype}{char}     cNodeType;        \textcolor{comment}{// one of XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR, XB\_EXP\_NOTROOT}}
\DoxyCodeLine{59   \textcolor{keywordtype}{char}     cReturnType;      \textcolor{comment}{// one of XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC, XB\_EXP\_UNKNOWN}}
\DoxyCodeLine{60   xbInt16  iSts;             \textcolor{comment}{// return status after retrieving or attempting next token from expression}}
\DoxyCodeLine{61                              \textcolor{comment}{// 0 = no error}}
\DoxyCodeLine{62                              \textcolor{comment}{// XB\_END\_OF\_EXPRESSION}}
\DoxyCodeLine{63                              \textcolor{comment}{// XB\_UNBALANCED\_PARENS}}
\DoxyCodeLine{64                              \textcolor{comment}{// XB\_UNBALANCED\_QUOTES}}
\DoxyCodeLine{65   \textcolor{keywordtype}{char}     cPrevNodeType;    \textcolor{comment}{// previous node type}}
\DoxyCodeLine{66   \textcolor{keywordtype}{char}     cPrevReturnType;  \textcolor{comment}{// previous return type}}
\DoxyCodeLine{67 }
\DoxyCodeLine{68   \textcolor{comment}{// constructor}}
\DoxyCodeLine{69   xbExpToken() \{ cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; \}}
\DoxyCodeLine{70 \};}
\DoxyCodeLine{72 }
\DoxyCodeLine{73 }
\DoxyCodeLine{74 \textcolor{comment}{/************************************************************************/}}
\DoxyCodeLine{75 }
\DoxyCodeLine{77 }
\DoxyCodeLine{132 \textcolor{keyword}{class }XBDLLEXPORT xbExp\{}
\DoxyCodeLine{133 }
\DoxyCodeLine{134   \textcolor{keyword}{public}:}
\DoxyCodeLine{135     xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} * );}
\DoxyCodeLine{136     xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * );}
\DoxyCodeLine{137     \textcolor{keyword}{virtual} \string~xbExp();}
\DoxyCodeLine{138     \textcolor{keywordtype}{void} ClearTreeHandle();}
\DoxyCodeLine{139 }
\DoxyCodeLine{140 }
\DoxyCodeLine{141 \textcolor{preprocessor}{    \#ifdef XB\_DEBUG\_SUPPORT}}
\DoxyCodeLine{142     \textcolor{keywordtype}{void}      DumpTree( xbInt16 iOption );}
\DoxyCodeLine{143     \textcolor{keywordtype}{void}      DumpToken( xbExpToken \&t, xbInt16 iOption = 0 );}
\DoxyCodeLine{144 \textcolor{preprocessor}{    \#endif}}
\DoxyCodeLine{145 }
\DoxyCodeLine{146     xbInt16   GetResultLen() \textcolor{keyword}{const};}
\DoxyCodeLine{147     \textcolor{keywordtype}{char}      GetReturnType() \textcolor{keyword}{const};}
\DoxyCodeLine{148     xbInt16   GetBoolResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
\DoxyCodeLine{149     xbInt16   GetDateResult( xbDate \&dtResult );}
\DoxyCodeLine{150     xbInt16   GetNumericResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dResult );}
\DoxyCodeLine{151     xbInt16   GetStringResult( xbString \&sResult );}
\DoxyCodeLine{152     xbInt16   GetStringResult( \textcolor{keywordtype}{char} * vpResult, xbUInt32 ulLen );}
\DoxyCodeLine{153     xbExpNode *GetTreeHandle();}
\DoxyCodeLine{154     xbInt16   ParseExpression( \textcolor{keyword}{const} xbString \&sExpression );}
\DoxyCodeLine{155     xbInt16   ParseExpression( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, \textcolor{keyword}{const} xbString \&sExpression );}
\DoxyCodeLine{156     xbInt16   ProcessExpression();}
\DoxyCodeLine{157     xbInt16   ProcessExpression( xbInt16 iRecBufSw );}
\DoxyCodeLine{158 }
\DoxyCodeLine{159 }
\DoxyCodeLine{160   \textcolor{keyword}{protected}:}
\DoxyCodeLine{161     xbInt16   GetNextToken( xbExpToken \&t );}
\DoxyCodeLine{162     xbInt16   OperatorWeight( \textcolor{keyword}{const} xbString \&sOperator );}
\DoxyCodeLine{163     xbExpNode *GetNextNode( xbExpNode * n ) \textcolor{keyword}{const};  \textcolor{comment}{// traverses the tree from bottom left node, right, then up}}
\DoxyCodeLine{164 }
\DoxyCodeLine{165   \textcolor{keyword}{private}:    \textcolor{comment}{// methods}}
\DoxyCodeLine{166 }
\DoxyCodeLine{167     \textcolor{comment}{// xbInt16 CalcExpressionResultLen();}}
\DoxyCodeLine{168     xbInt16 CalcFunctionResultLen( xbExpNode *n ) \textcolor{keyword}{const};}
\DoxyCodeLine{169     xbInt16 CalcCharNodeLen( xbExpNode *n );}
\DoxyCodeLine{170     xbInt16 CheckParensAndQuotes( \textcolor{keyword}{const} xbString \&sExpression );}
\DoxyCodeLine{171     xbInt16 GetExpressionResultLen() \textcolor{keyword}{const};}
\DoxyCodeLine{172 }
\DoxyCodeLine{173     xbInt16 GetTokenCharConstant   ( xbExpToken \&t );}
\DoxyCodeLine{174     xbInt16 GetTokenDatabaseField  ( xbExpToken \&t );}
\DoxyCodeLine{175     xbInt16 GetTokenDateConstant   ( xbExpToken \&t );}
\DoxyCodeLine{176     xbInt16 GetTokenFunction       ( xbExpToken \&t );}
\DoxyCodeLine{177     xbInt16 GetTokenLogicalConstant( xbExpToken \&t );}
\DoxyCodeLine{178     xbInt16 GetTokenNumericConstant( xbExpToken \&t );}
\DoxyCodeLine{179     xbInt16 GetTokenOperator       ( xbExpToken \&t );}
\DoxyCodeLine{180     xbInt16 GetTokenParen          ( xbExpToken \&t );}
\DoxyCodeLine{181 }
\DoxyCodeLine{182     \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}  IsFunction             ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} \&cReturnType );}
\DoxyCodeLine{183     \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}  IsLogicalConstant      ( \textcolor{keyword}{const} xbString \&sExp );}
\DoxyCodeLine{184     \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}  IsNumericConstant      ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} cPrevNodeType );}
\DoxyCodeLine{185     \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}  IsOperator             ( \textcolor{keyword}{const} xbString \&sExp );}
\DoxyCodeLine{186     \textcolor{keywordtype}{char}    IsTokenSeparator       ( \textcolor{keywordtype}{char} c );}
\DoxyCodeLine{187     \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}}  IsWhiteSpace           ( \textcolor{keywordtype}{char} c );}
\DoxyCodeLine{188 }
\DoxyCodeLine{189     xbInt16 ParseExpression        ( \textcolor{keyword}{const} xbString \&sExpression, xbInt16 iWeight );}
\DoxyCodeLine{190     xbInt16 ParseExpressionConstant( xbExpToken \&t, xbExpNode *n );}
\DoxyCodeLine{191     xbInt16 ParseExpressionFunction( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
\DoxyCodeLine{192     xbInt16 ParseExpressionFunctionParms( \textcolor{keyword}{const} xbString \&sParms, xbLinkList<xbString> \&llParms );}
\DoxyCodeLine{193     xbInt16 ParseExpressionField   ( xbExpToken \&t, xbExpNode *n );}
\DoxyCodeLine{194     xbInt16 ParseExpressionOperator( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
\DoxyCodeLine{195 }
\DoxyCodeLine{196     xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );}
\DoxyCodeLine{197     xbInt16 ProcessExpressionOperator( xbExpNode *n );}
\DoxyCodeLine{198 }
\DoxyCodeLine{199   \textcolor{keyword}{private}:   \textcolor{comment}{// fields}}
\DoxyCodeLine{200     \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}}   *xbase;}
\DoxyCodeLine{201     \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}}     *dbf;}
\DoxyCodeLine{202     xbExpNode *nTree;        \textcolor{comment}{// pointer to tree of expNodes}}
\DoxyCodeLine{203     \textcolor{comment}{// xbInt16   iExpLen;       // size of expression result}}
\DoxyCodeLine{204 }
\DoxyCodeLine{205 }
\DoxyCodeLine{206 \};}
\DoxyCodeLine{207 }
\DoxyCodeLine{208 \textcolor{comment}{/* Expression handler */}}
\DoxyCodeLine{209 }
\DoxyCodeLine{210 }
\DoxyCodeLine{211 \};}
\DoxyCodeLine{212 \textcolor{preprocessor}{\#endif        }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
\DoxyCodeLine{213 \textcolor{preprocessor}{\#endif        }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
\DoxyCodeLine{214 }
\DoxyCodeLine{215 }

\end{DoxyCode}