1 /*************** FilAMap H Declares Source Code File (.H) **************/
2 /*  Name: FILAMAP.H     Version 1.3                                    */
3 /*                                                                     */
4 /*  (C) Copyright to the author Olivier BERTRAND          2005-2014    */
5 /*                                                                     */
6 /*  This file contains the MAP file access method classes declares.    */
7 /***********************************************************************/
8 #ifndef __FILAMAP_H
9 #define __FILAMAP_H
10 
11 #include "block.h"
12 #include "filamtxt.h"
13 
14 typedef class MAPFAM *PMAPFAM;
15 
16 /***********************************************************************/
17 /*  This is the variable file access method using file mapping.        */
18 /***********************************************************************/
19 class DllExport MAPFAM : public TXTFAM {
20   friend class TDBJSON;
21  public:
22   // Constructor
23   MAPFAM(PDOSDEF tdp);
24   MAPFAM(PMAPFAM tmfp);
25 
26   // Implementation
GetAmType(void)27   virtual AMT   GetAmType(void) {return TYPE_AM_MAP;}
28   virtual int   GetPos(void);
29   virtual int   GetNextPos(void);
Duplicate(PGLOBAL g)30   virtual PTXF  Duplicate(PGLOBAL g)
31                   {return (PTXF)new(g) MAPFAM(this);}
32 
33   // Methods
34   virtual void  Reset(void);
35   virtual int   GetFileLength(PGLOBAL g);
Cardinality(PGLOBAL g)36   virtual int   Cardinality(PGLOBAL g) {return (g) ? -1 : 0;}
MaxBlkSize(PGLOBAL g,int s)37   virtual int   MaxBlkSize(PGLOBAL g, int s) {return s;}
38   virtual int   GetRowID(void);
39   virtual bool  RecordPos(PGLOBAL g);
40   virtual bool  SetPos(PGLOBAL g, int recpos);
41   virtual int   SkipRecord(PGLOBAL g, bool header);
42   virtual bool  OpenTableFile(PGLOBAL g);
DeferReading(void)43   virtual bool  DeferReading(void) {return false;}
GetNext(PGLOBAL g)44 	virtual int   GetNext(PGLOBAL g) {return RC_EF;}
45 	virtual int   ReadBuffer(PGLOBAL g);
46   virtual int   WriteBuffer(PGLOBAL g);
47   virtual int   DeleteRecords(PGLOBAL g, int irc);
48   virtual void  CloseTableFile(PGLOBAL g, bool abort);
49   virtual void  Rewind(void);
50 
51  protected:
52   virtual int   InitDelete(PGLOBAL g, int fpos, int spos);
53 
54   // Members
55   char *Memory;               // Pointer on file mapping view.
56   char *Mempos;               // Position of next data to read
57   char *Fpos;                 // Position of last read record
58   char *Tpos;                 // Target Position for delete move
59   char *Spos;                 // Start position for delete move
60   char *Top;                  // Mark end of file mapping view
61   }; // end of class MAPFAM
62 
63 /***********************************************************************/
64 /*  This is the blocked file access method using file mapping.         */
65 /***********************************************************************/
66 class DllExport MBKFAM : public MAPFAM {
67  public:
68   // Constructor
69   MBKFAM(PDOSDEF tdp);
MBKFAM(PMAPFAM tmfp)70   MBKFAM(PMAPFAM tmfp) : MAPFAM(tmfp) {}
71 
72   // Implementation
Duplicate(PGLOBAL g)73   virtual PTXF Duplicate(PGLOBAL g)
74                   {return (PTXF)new(g) MBKFAM(this);}
75 
76   // Methods
77   virtual void Reset(void);
78   virtual int  Cardinality(PGLOBAL g);
MaxBlkSize(PGLOBAL g,int s)79   virtual int  MaxBlkSize(PGLOBAL g, int s)
80                 {return TXTFAM::MaxBlkSize(g, s);}
81   virtual int  GetRowID(void);
82   virtual int  SkipRecord(PGLOBAL g, bool header);
83   virtual int  ReadBuffer(PGLOBAL g);
84   virtual void Rewind(void);
85 
86  protected:
87   // No additional members
88   }; // end of class MBKFAM
89 
90 /***********************************************************************/
91 /*  This is the fixed file access method using file mapping.           */
92 /***********************************************************************/
93 class DllExport MPXFAM : public MBKFAM {
94  public:
95   // Constructor
96   MPXFAM(PDOSDEF tdp);
MPXFAM(PMAPFAM tmfp)97   MPXFAM(PMAPFAM tmfp) : MBKFAM(tmfp) {}
98 
99   // Implementation
100   virtual int   GetPos(void);
Duplicate(PGLOBAL g)101   virtual PTXF  Duplicate(PGLOBAL g)
102                   {return (PTXF)new(g) MPXFAM(this);}
103 
104   // Methods
Cardinality(PGLOBAL g)105   virtual int   Cardinality(PGLOBAL g) {return TXTFAM::Cardinality(g);}
MaxBlkSize(PGLOBAL g,int s)106   virtual int   MaxBlkSize(PGLOBAL g, int s)
107                 {return TXTFAM::MaxBlkSize(g, s);}
108   virtual bool  SetPos(PGLOBAL g, int recpos);
GetNextPos(void)109   virtual int   GetNextPos(void) {return GetPos() + 1;}
DeferReading(void)110   virtual bool  DeferReading(void) {return false;}
111   virtual int   ReadBuffer(PGLOBAL g);
112   virtual int   WriteBuffer(PGLOBAL g);
113 
114  protected:
115   virtual int   InitDelete(PGLOBAL g, int fpos, int spos);
116 
117   // No additional members
118   }; // end of class MPXFAM
119 
120 #endif // __FILAMAP_H
121