1 | /**************** Array H Declares Source Code File (.H) ***************/ |
2 | /* Name: ARRAY.H Version 3.1 */ |
3 | /* */ |
4 | /* (C) Copyright to the author Olivier BERTRAND 2005-2017 */ |
5 | /* */ |
6 | /* This file contains the ARRAY and VALBASE derived classes declares. */ |
7 | /***********************************************************************/ |
8 | #ifndef __ARRAY_H |
9 | #define __ARRAY_H |
10 | |
11 | |
12 | /***********************************************************************/ |
13 | /* Include required application header files */ |
14 | /***********************************************************************/ |
15 | #include "xobject.h" |
16 | #include "valblk.h" |
17 | #include "csort.h" |
18 | |
19 | typedef class ARRAY *PARRAY; |
20 | |
21 | /***********************************************************************/ |
22 | /* Definition of class ARRAY with all its method functions. */ |
23 | /* Note: This is not a general array class that could be defined as */ |
24 | /* a template class, but rather a specific object containing a list */ |
25 | /* of values to be processed by the filter IN operator. */ |
26 | /* In addition it must act as a metaclass by being able to give back */ |
27 | /* the type of values it contains. */ |
28 | /* It must also be able to convert itself from some type to another. */ |
29 | /***********************************************************************/ |
30 | class DllExport ARRAY : public XOBJECT, public CSORT { // Array descblock |
31 | friend class MULAR; |
32 | //friend class VALLST; |
33 | //friend class SFROW; |
34 | public: |
35 | // Constructors |
36 | ARRAY(PGLOBAL g, int type, int size, int len = 1, int prec = 0); |
37 | //ARRAY(PGLOBAL g, PQUERY qryp); |
38 | //ARRAY(PGLOBAL g, PARRAY par, int k); |
39 | |
40 | // Implementation |
41 | virtual int GetType(void) {return TYPE_ARRAY;} |
42 | virtual int GetResultType(void) {return Type;} |
43 | virtual int GetLength(void) {return Len;} |
44 | virtual int GetLengthEx(void) {return Len;} |
45 | virtual int GetScale() {return 0;} |
46 | int GetNval(void) {return Nval;} |
47 | int GetSize(void) {return Size;} |
48 | // PVAL GetValp(void) {return Valp;} |
49 | void SetType(int atype) {Type = atype;} |
50 | // void SetCorrel(bool b) {Correlated = b;} |
51 | |
52 | // Methods |
53 | using XOBJECT::GetIntValue; |
54 | virtual void Reset(void) {Bot = -1;} |
55 | virtual int Qcompare(int *, int *); |
56 | virtual bool Compare(PXOB) {assert(false); return false;} |
57 | virtual bool SetFormat(PGLOBAL, FORMAT&) {assert(false); return false;} |
58 | //virtual int CheckSpcCol(PTDB, int) {return 0;} |
59 | virtual void Printf(PGLOBAL g, FILE *f, uint n); |
60 | virtual void Prints(PGLOBAL g, char *ps, uint z); |
61 | // void Empty(void); |
62 | void SetPrecision(PGLOBAL g, int p); |
63 | bool AddValue(PGLOBAL g, PSZ sp); |
64 | bool AddValue(PGLOBAL g, void *p); |
65 | bool AddValue(PGLOBAL g, short n); |
66 | bool AddValue(PGLOBAL g, int n); |
67 | bool AddValue(PGLOBAL g, double f); |
68 | bool AddValue(PGLOBAL g, PXOB xp); |
69 | bool AddValue(PGLOBAL g, PVAL vp); |
70 | void GetNthValue(PVAL valp, int n); |
71 | int GetIntValue(int n); |
72 | char *GetStringValue(int n); |
73 | BYTE Vcompare(PVAL vp, int n); |
74 | void Save(int); |
75 | void Restore(int); |
76 | void Move(int, int); |
77 | bool Sort(PGLOBAL g); |
78 | void *GetSortIndex(PGLOBAL g); |
79 | bool Find(PVAL valp); |
80 | bool FilTest(PGLOBAL g, PVAL valp, OPVAL opc, int opm); |
81 | int Convert(PGLOBAL g, int k, PVAL vp = NULL); |
82 | int BlockTest(PGLOBAL g, int opc, int opm, |
83 | void *minp, void *maxp, bool s); |
84 | PSZ MakeArrayList(PGLOBAL g); |
85 | bool CanBeShort(void); |
86 | bool GetSubValue(PGLOBAL g, PVAL valp, int *kp); |
87 | |
88 | protected: |
89 | // Members |
90 | PMBV Valblk; // To the MBVALS class |
91 | PVBLK Vblp; // To Valblock of the data array |
92 | //PVAL Valp; // The value used for Save and Restore is Value |
93 | int Size; // Size of value array |
94 | int Nval; // Total number of items in array |
95 | int Ndif; // Total number of distinct items in array |
96 | int Xsize; // Size of Index (used for correlated arrays) |
97 | int Type; // Type of individual values in the array |
98 | int Len; // Length of character string |
99 | int Bot; // Bottom of research index |
100 | int Top; // Top of research index |
101 | int X, Inf, Sup; // Used for block optimization |
102 | //bool Correlated; // -----------> Temporary |
103 | }; // end of class ARRAY |
104 | |
105 | /***********************************************************************/ |
106 | /* Definition of class MULAR with all its method functions. */ |
107 | /* This class is used when constructing the arrays of constants used */ |
108 | /* for indexing. Its only purpose is to provide a way to sort, reduce */ |
109 | /* and reorder the arrays of multicolumn indexes as one block. Indeed */ |
110 | /* sorting the arrays independantly would break the correspondance of */ |
111 | /* column values. */ |
112 | /***********************************************************************/ |
113 | class MULAR : public CSORT, public BLOCK { // No need to be an XOBJECT |
114 | public: |
115 | // Constructor |
116 | MULAR(PGLOBAL g, int n); |
117 | |
118 | // Implementation |
119 | void SetPars(PARRAY par, int i) {Pars[i] = par;} |
120 | |
121 | // Methods |
122 | virtual int Qcompare(int *i1, int *i2); // Sort compare routine |
123 | bool Sort(PGLOBAL g); |
124 | |
125 | protected: |
126 | // Members |
127 | int Narray; // The number of sub-arrays |
128 | PARRAY *Pars; // To the block of real arrays |
129 | }; // end of class ARRAY |
130 | |
131 | #endif // __ARRAY_H |
132 | |