home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cslio205.zip / EXAMPLES / 2 / DEMODB.H < prev    next >
C/C++ Source or Header  |  1996-10-09  |  6KB  |  195 lines

  1. #ifndef CLASS__DEMO_h
  2. #define CLASS__DEMO_h
  3.  
  4.  
  5. #include "csdate.h" 
  6. #include "cstbase.h" 
  7. #include "csbtree.h" 
  8.  
  9. #define DEMO_NAME_LENGTH     50 
  10. #define DEMO_DATA_LENGTH     32 
  11.  
  12. ////////// Indexes to be used with the 'order()' function./////////////
  13.  
  14. #define UNSORTED     0
  15. #define DEMO_NAME_INDEX     1 
  16. #define DEMO_DATA_INDEX     2 
  17.  
  18.  
  19.  
  20. typedef struct 
  21. {
  22.    char   _name[DEMO_NAME_LENGTH+1]; 
  23.    char   _data[DEMO_DATA_LENGTH+1]; 
  24. } Record;
  25.  
  26.  
  27. ///////////////////////////////////////////////////////////////////////
  28. //////////////////////////// The New Class ////////////////////////////
  29. ///////////////////////////////////////////////////////////////////////
  30.  
  31.  
  32. class DEMO
  33. {
  34.  protected:
  35.  
  36.    Record *static_rec;
  37.  
  38.    csSTR   e_name; // Used in error messages.
  39.    long    current;
  40.    int     dirty;
  41.    int     is_open;
  42.    int     iOrder;
  43.    int     NeedSync;
  44.    int     errnr;
  45.  
  46.  
  47.    int  (DEMO::*bof_fun)(void);
  48.    int  (DEMO::*eof_fun)(void);
  49.    int  (DEMO::*skip_fun)(int delta);
  50.    void (DEMO::*top_fun)(void);
  51.    void (DEMO::*bottom_fun)(void);
  52.    int  (DEMO::*search_fun)(void *k);
  53.  
  54.    TBASE  db;
  55.    BTREEa in1;        //Index on field name  
  56.    BTREEa in2;        //Index on field data  
  57.  
  58.    int bof0(void)        { return (current==1); }
  59.    int bof1(void)        { return in1.tBOF(); }
  60.    int bof2(void)        { return in2.tBOF(); }
  61.  
  62.    int eof0(void)        { return (current==db.numrec()); }
  63.    int eof1(void)        { return in1.tEOF(); }
  64.    int eof2(void)        { return in2.tEOF(); }
  65.  
  66.    void top0(void)        { current=1; }
  67.    void top1(void)        { in1.min_dat(¤t); }
  68.    void top2(void)        { in2.min_dat(¤t); }
  69.  
  70.    void bottom0(void)        { current=db.numrec(); }
  71.    void bottom1(void)        { in1.max_dat(¤t); }
  72.    void bottom2(void)        { in2.max_dat(¤t); }
  73.  
  74.    void find1(void *k)        { in1.find(k,¤t); }
  75.    void find2(void *k)        { in2.find(k,¤t); }
  76.  
  77.    int  search0(void * )    { return TRUE; } 
  78.    int  search1(void *k)    { return in1.search_dat_ge(k,¤t); }
  79.    int  search2(void *k)    { return in2.search_dat_ge(k,¤t); }
  80.  
  81.    int  skip0(int delta); 
  82.    int  skip1(int delta)    { return in1.skip_dat(delta,¤t); }
  83.    int  skip2(int delta)    { return in2.skip_dat(delta,¤t); }
  84.  
  85.    Record *locate_curr(void) { return (Record *)db.locate_rec(current); } 
  86.    void write_rec2(void);
  87.    void write_rec(void) { if(dirty) write_rec2(); }
  88.    void read_rec(void);
  89.  
  90.    void synch_index(void);
  91.    void visible_error(int ErrorNr,char *Parm=""); 
  92.    void te(void);  
  93.  
  94.  public:
  95.  
  96.  //////////////////////////////// class constructor ////////////////////////////
  97.    DEMO(void); 
  98.  
  99.  //////////////////////////////// class destructor /////////////////////////////
  100.    ~DEMO(void);
  101.  
  102.  //////////////////////////////// current record number ////////////////////////
  103.    long curr_rec(void)   { return current; }
  104.  
  105.  //////////////////////////////// messages & errors ////////////////////////////
  106.    U16  display_error(void); 
  107.  
  108.    int  error_nr(void); 
  109.    void error_nr(int ErrorNr) { errnr=ErrorNr; } 
  110.  
  111.  
  112.  //////////////////////////////// read-only ////////////////////////////////////
  113.    int  read_only(int TrueOrFalse);
  114.    int  read_only(void) { return db.read_only(); }
  115.  
  116.  //////////////////////////////// lock files ///////////////////////////////////
  117.    int  use_lock_file(int TrueOrFalse);
  118.    int  use_lock_file(void) { return db.use_lock_file(); } 
  119.  
  120.    int  lock_file_exist(void);  
  121.    int  remove_lock_file(void); 
  122.  
  123.  //////////////////////////////// define ///////////////////////////////////////
  124.    int  define(void);  
  125.  
  126.  //////////////////////////////// open & close ////////////////////////////////
  127.    int  open(int kB=100); // Use 100 kB ram for buffering.   
  128.    int  close(void);  
  129.  
  130.    int  close2(void);  
  131.  
  132.    int  already_open(void)  { return is_open; }  
  133.  
  134.  //////////////////////////////// delete //////////////////////////////////////
  135.    int  is_delet(void)   { te(); return db.is_delet(current); } 
  136.    void undelet(void)    { te(); db.undelet(current); }         
  137.    void delet(void)      { te(); db.delet(current); }           
  138.  
  139.    int  is_delet(long n) { te(); return db.is_delet(n); } 
  140.    void undelet(long n)  { te(); db.undelet(n);         } 
  141.    void delet(long n)    { te(); db.delet(n);           } 
  142.  
  143.  //////////////////////////////// number of records ///////////////////////////
  144.    long numrec(void)     { return db.numrec(); } 
  145.  
  146.  //////////////////////////////// import/export ///////////////////////////////
  147.    int  import(char *s);
  148.    int  export(char *s);
  149.    int  to_DBASE(char *s);
  150.  
  151.  //////////////////////////////// reindexing //////////////////////////////////
  152.    int  reindex(void); 
  153.  
  154.  //////////////////////////////// append //////////////////////////////////////
  155.    void append(void);        //Indexes are NOT updated.
  156.    void append_blank(void);  //Indexes ARE updated.
  157.  
  158.  //////////////////////////////// data in header //////////////////////////////
  159.    int data_2_header(void *p,U16 size) { return db.data_2_header(p,size); } 
  160.    int header_2_data(void *p,U16 size) { return db.header_2_data(p,size); } 
  161.    U16 max_data_in_header(void)        { return db.max_data_in_header();  } 
  162.  
  163.  //////////////////////////////// pack ////////////////////////////////////////
  164.    int  pack(void);
  165.  
  166.  //////////////////////////////// (change) active index ///////////////////////
  167.    int  order(int nr);    
  168.    int  order(void)      { return iOrder; } 
  169.  
  170.  //////////////////////////////// testing begin/end ///////////////////////////
  171.    int  tBOF(void);
  172.    int  tEOF(void);
  173.  
  174.  //////////////////////////////// relocating //////////////////////////////////
  175.    int  skip(int delta=1);
  176.    int  prev(int delta=1) { return -skip(-delta); }
  177.    int  next(int delta=1) { return  skip( delta); }
  178.    int  bottom(void);
  179.    int  top(void);
  180.    int  search(void *k);
  181.    int  go_to(long n);
  182.  
  183.  /////////////////////////reading fields //////////////////////////////////////
  184.    char * name(void)           { te(); return static_rec->_name; } 
  185.    char * data(void)           { te(); return static_rec->_data; } 
  186.  
  187.  /////////////////////////writing fields //////////////////////////////////////
  188.    void   name(char *s)        { te(); strncpy(static_rec->_name,s,DEMO_NAME_LENGTH); dirty=TRUE; } 
  189.    void   data(char *s)        { te(); strncpy(static_rec->_data,s,DEMO_DATA_LENGTH); dirty=TRUE; } 
  190.  
  191. };
  192.  
  193.  
  194. #endif
  195.