@@ -29,15 +29,35 @@ typedef struct List {
2929 void * itemMatch ;
3030} List ;
3131
32+
33+ typedef struct Flow {
34+ List * lists ;
35+ _int64 width ;
36+ _int64 i ;
37+ _int64 j ;
38+ _int64 length ;
39+ _int64 paddingValue ;
40+ } Flow ;
41+
3242typedef struct Record {
3343 void * allocAddr ;
3444 _int64 allocSize ;
3545 char * name ;
3646 char * location ;
3747 char * builtLocation ;
3848 HANDLE handle ;
49+ _int64 allocFlags ;
50+ char * jDelimiter ;
51+ char * iDelimiter ;
3952} Record ;
4053
54+ typedef enum StorageAllocFlags {
55+ STORAGE_ALLOC_LETTERS = 1 ,
56+ STORAGE_ALLOC_LIST = 2 ,
57+ STORAGE_ALLOC_FLOW = 4 ,
58+ STORAGE_ALLOC_BINARY = 8 ,
59+ } StorageAllocFlags ;
60+
4161typedef struct Matches {
4262 _int64 flags ;
4363 _int64 transformFlags ;
@@ -93,6 +113,73 @@ typedef struct Time{
93113 _int64 month ;
94114} Time ;
95115
116+ typedef struct NumericParsing {
117+ _int64 opFlags ;
118+ } NumericParsing ;
119+
120+ typedef enum NumericParsingOpFlags {
121+ NUM_PARS_OP_MORE = 1 ,
122+ NUM_PARS_OP_LESS = 2 ,
123+ NUM_PARS_OP_DIV = 4 ,
124+ NUM_PARS_OP_MUL = 8 ,
125+ } NumericParsingOpFlags ;
126+
127+ typedef struct NumericExpression {
128+ _int64 numericConditionFlag ;
129+ char * expressionAlloc ;
130+ List * expressionExtractList ;
131+ List * numExpRefValList ;
132+ _int64 evalFlags ;
133+ _int64 expressionFlags ;
134+ _int64 result ;
135+ NumericParsing * numericParsing ;
136+ } NumericExpression ;
137+
138+ typedef enum ExpressionFlags {
139+ NUM_EXP_MORE = 1 ,
140+ NUM_EXP_LESS = 2 ,
141+ NUM_EXP_SAME = 4 ,
142+ NUM_EXP_DEF_ONLY = 8 ,
143+ NUM_EXP_DEF_NUM = 16 ,
144+ NUM_EXP_CONTAINS = 32 ,
145+ NUM_EXP_WITHIN = 64
146+ } ExpressionFlags ;
147+
148+ typedef enum EvalFlags {
149+ NUM_EXP_EVAL_PARSED = 1 ,
150+ NUM_EXP_EVAL_REFS_PARSED = 2 ,
151+ NUM_EXP_EVAL_REFS_PROCESSED = 4 ,
152+ NUM_EXP_EVAL_PROCESSED = 8 ,
153+ NUM_EXP_EVAL_RESULT_EXISTS = 16 ,
154+ } EvalFlags ;
155+
156+ typedef struct NumExpRefVal {
157+ char * labelAlloc ;
158+ _int64 val ;
159+ _int64 flags ;
160+ _int64 refFlags ;
161+ _int64 refFilterFlags ;
162+ } NumExpRefVal ;
163+
164+ typedef enum NumExpRefValFlags {
165+ NUM_EXP_REF_VAL_REF = 1 ,
166+ NUM_EXP_REF_VAL_INTEGER = 2 ,
167+ NUM_EXP_REF_VAL_FLOAT = 4 ,
168+ NUM_EXP_REF_VAL_DATE = 8 ,
169+ } NumExpRefValFlags ;
170+
171+ typedef enum NumExpRefFlags {
172+ NUM_EXP_REF_LOC = 1 ,
173+ NUM_EXP_REF_LIST = 2 ,
174+ NUM_EXP_REF_FLOW = 4 ,
175+ } NumExpRefFlags ;
176+
177+ typedef enum NumExpRefFiltFlags {
178+ NUM_EXP_REF_FILT_NO_FILT = 1 ,
179+ NUM_EXP_REF_FILT_HAS_FILT = 2 ,
180+ } NumExpRefFiltFlags ;
181+
182+
96183
97184
98185///extern char* pathSepLettersChar;
@@ -104,9 +191,12 @@ extern "C" {
104191 _int64 letterLength (char * letters );
105192 char * lettersBetweenListsIndices (char * letters , List * indicesList );
106193 char * lettersBetweenIndices (char * letters , _int64 startIndex , _int64 endIndex );
194+ _int64 lettersAsNum (char * letters );
195+
107196
108197 // Allocate
109198 void * linearAllocate (int size );
199+ void * allocateNew (int lastMemberOffset ); // Initializes a struc
110200
111201 // List
112202 List * newList ();
@@ -126,6 +216,14 @@ extern "C" {
126216 void * getNextItemMatchComp (List * list , void * itemMatch , _int64 comp );
127217 List * extendList (List * list , List * extensionList );
128218
219+ //Flow
220+ Flow * newFlow ();
221+ void newLastFlowList (Flow * flow , List * list );
222+ void newLastFlowIVals (Flow * flow , List * iVals );
223+ void increaseFlowWidth (Flow * flow , _int64 width );
224+ void resetFlowIJ (Flow * );
225+ void * getNextFlowItem (Flow * );
226+
129227 //Storage
130228 Record * newStorage ();
131229 Record * defineRecordPath (Record * record , char * name , char * location );
@@ -134,6 +232,9 @@ extern "C" {
134232 Record * restoreLetters (Record * record , char * letters );
135233 List * retrieveRecordNames (Record * record );
136234 void removeRecord (Record * record );
235+ Record * storeList (Record * record , List * list );
236+ Record * restoreList (Record * record , List * list );
237+
137238 void debugNum (_int64 num );
138239 void debugLetters (char * letters );
139240 void debugNumMsg (_int64 num );
@@ -147,14 +248,33 @@ extern "C" {
147248 _int64 lettersSameExact (char * letters , char * containsExactLetters );
148249 _int64 getNextMatchIndex (char * letters , char * containsLetters );
149250 _int64 hasMatch (char * letters , char * containsLetters );
251+ _int64 listHasMatch (List * list , char * containsLetters );
252+ List * extractBetween (char * letters , char * delimiter );
253+ Flow * extractFlowBetween (char * letters , char * iDelimiter , char * jDelimiter );
150254
151255 //Replacement
152256 char * replaceLettersWithList (ReplaceFlags flags , char * letters , List * list , List * matchResultsList );
153257 char * replaceContainsLettersWithList (char * letters , List * list , char * containsLetters );
258+ List * replaceContainsLettersWithFlow (char * letters , Flow * flow , char * containsLetters );
154259
155260 //Time
156261 Time * newTime ();
157262 Time * getNow ();
263+
264+
265+ //NumericExpressions
266+ NumericExpression * newNumericExpression ();
267+ void parseNumExpression (NumericExpression * numericExpression );
268+ List * getNumExpTermList ();
269+ List * getCondExpTermList ();
270+ List * getDefExpTermList ();
271+
272+ NumExpRefVal * newNumExpRefVal ();
273+ NumExpRefVal * parseNumExpRefVal (NumExpRefVal * numExpRefVal );
274+ NumExpRefVal * processNumExpRefVal (NumExpRefVal * numExpRefVal );
275+
276+ NumericParsing * newNumericParsing ();
277+
158278}
159279
160280
0 commit comments