1 // TABXCL.H Olivier Bertrand 2013
2 // Defines the XCOL tables
3
main(int argc,char ** argv)4 #include "tabutil.h"
5
6 typedef class XCLDEF *PXCLDEF;
7 typedef class TDBXCL *PTDBXCL;
8 typedef class XCLCOL *PXCLCOL;
9
10 /* -------------------------- XCOL classes --------------------------- */
11
12 /***********************************************************************/
13 /* XCOL: table having one column containing several values comma */
14 /* (or any other character) separated. When creating the table, the */
15 /* name of the X column is given by the NAME option. */
16 /* This sample has a limitation: */
17 /* - The X column has the same length than in the physical file. */
18 /* This tables produces as many rows for a physical row than the */
19 /* number of items in the X column (eventually 0). */
20 /***********************************************************************/
21
22 /***********************************************************************/
23 /* XCL table. */
24 /***********************************************************************/
25 class XCLDEF : public PRXDEF { /* Logical table description */
26 friend class TDBXCL;
27 public:
28 // Constructor
29 XCLDEF(void);
30
31 // Implementation
32 virtual const char *GetType(void) {return "XCL";}
33
34 // Methods
35 virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
36 virtual PTDB GetTable(PGLOBAL g, MODE mode);
37
38 protected:
39 // Members
40 char *Xcol; /* The column containing separated fields */
41 char Sep; /* The field separator, defaults to comma */
42 int Mult; /* Multiplication factor */
43 }; // end of XCLDEF
44
45 /***********************************************************************/
46 /* This is the class declaration for the XCOL table. */
47 /***********************************************************************/
48 class TDBXCL : public TDBPRX {
49 friend class XCLDEF;
50 friend class PRXCOL;
51 friend class XCLCOL;
52 public:
53 // Constructor
54 TDBXCL(PXCLDEF tdp);
55
56 // Implementation
57 virtual AMT GetAmType(void) {return TYPE_AM_XCOL;}
58
59 // Methods
60 virtual void ResetDB(void) {N = 0; Tdbp->ResetDB();}
61 virtual int RowNumber(PGLOBAL g, bool b = FALSE);
62
63 // Database routines
64 virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
65 virtual int GetMaxSize(PGLOBAL g);
66 virtual bool OpenDB(PGLOBAL g);
67 virtual int ReadDB(PGLOBAL g);
68
69 protected:
70 // Members
71 char *Xcolumn; // Multiple column name
72 PXCLCOL Xcolp; // To the XCVCOL column
73 int Mult; // Multiplication factor
74 int N; // The current table index
75 int M; // The occurence rank
76 BYTE RowFlag; // 0: Ok, 1: Same, 2: Skip
77 bool New; // TRUE for new line
78 char Sep; // The Xcol separator
79 }; // end of class TDBXCL
80
81 /***********************************************************************/
82 /* Class XCLCOL: for the multiple CSV column. */
83 /***********************************************************************/
84 class XCLCOL : public PRXCOL {
85 friend class TDBXCL;
86 public:
87 // Constructors
88 XCLCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);
89
90 // Methods
91 using PRXCOL::Init;
92 virtual void Reset(void) {} // Evaluated only by TDBXCL
93 virtual void ReadColumn(PGLOBAL g);
94 virtual bool Init(PGLOBAL g, PTDB tp = NULL);
95
96 protected:
97 // Default constructor not to be used
98 XCLCOL(void) {}
99
100 // Members
101 char *Cbuf; // The column buffer
102 char *Cp; // Pointer to current position
103 char Sep; // The separator
104 }; // end of class XCLCOL
105