home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cslio205.zip / INCLUDE / CSTABLE.H < prev    next >
C/C++ Source or Header  |  1997-01-21  |  5KB  |  169 lines

  1. /***********************************************************************
  2.  
  3.                       CSDB Library, Free Evaluation Version 2.0.5 
  4.                                        Release: January 22th 1997 
  5.  
  6.        Header file of the TABLE class.
  7.  
  8.                                            Copyright(c) 1994-1997 
  9.                                                           ComBits 
  10.                                                   The Netherlands 
  11. ***********************************************************************/
  12.  
  13. #ifndef __CSTABLE_H
  14. #define __CSTABLE_H
  15.  
  16. #include "cstools.h"
  17. #include "csstr.h"
  18. #include "stdio.h"
  19. #include "csheap.h"
  20.  
  21.  
  22.  
  23. class TABLE
  24. {
  25.  
  26.   public:
  27.  
  28.       typedef union
  29.       {
  30.          void * p;
  31.          long    l;
  32.       }dapo;
  33.  
  34.  
  35.       typedef struct
  36.       {
  37.          long key;
  38.          dapo data;
  39.       }dast;           //Used in the Import & Export functions.
  40.  
  41.  
  42.       typedef struct
  43.       {
  44.          void *up;
  45.          void *le;
  46.          void *ri;
  47.          long key;
  48.          void *dw;
  49.          int  count;
  50.       }  inbl;         //INdex Block
  51.  
  52.       typedef struct
  53.       {
  54.          void *up;
  55.          void *le;
  56.          void *ri;
  57.          long key;
  58.          dapo data;
  59.       }  dabl;         //DAta Block
  60.  
  61.  
  62.  protected:
  63.  
  64.       HEAP   data;
  65.       csSTR  d_name;
  66.  
  67.       void  *anchor;
  68.       int    max_lin_search;
  69.       int    nr_layers;
  70.       int    anco;
  71.       long   daco;     // number of data blocks
  72.       long   chle;     // chain length count
  73.       long   nrse;     // number of searches
  74.       void  *current;
  75.       int    is_open;
  76.  
  77. public:
  78.       long blocks(void)         { return data.blocks(); }
  79.  
  80. protected:
  81.       int  locate(long l,void * &data,void * &index,int &depth);
  82.       int  loc_near(long l,void *& p);
  83.       void remove_d(void *p)    { data.vfree(p); }
  84.       void remove_i(void *p)    { data.vfree(p); }
  85.       dabl *create_d(long l,dapo d);
  86.       inbl *create_i(long l);
  87.       void inc_ia(void *i)      { if(i) ((inbl *)i)->count++; else anco++; }
  88.       void dec_ia(void *i)      { if(i) ((inbl *)i)->count--; else anco--; }
  89.       int  insert_i(void *ib,void *hi);
  90.       void insert_nl(void *ne);
  91.       int  c_mls(void)          { return max_lin_search; }
  92.       void set_dc(long l)       { daco=l; }
  93.       void inc_dc(void)         { daco++; }
  94.       void dec_dc(void)         { daco--; }
  95.       void reorg_i(void *p);
  96.       void check_hole(void *ip);
  97.  
  98.       int  zap2(void);
  99.  
  100.  
  101.       void connect_h(void *le,void *ri)  { if(ri) ((inbl *)ri)->le=le; if(le) ((inbl *)le)->ri=ri; }
  102.       void connect_ud(void *up,void *dw) { ((inbl *)up)->dw=dw; ((inbl *)dw)->up=up; }
  103.       void connect_ad(void *dw)          { anchor=dw; }
  104.       void connect_uds(void *up,int count,void *dw);
  105.       void connect_uds(void *up,void *dw) { ((inbl *)up)->dw=dw;  connect_uds(up, ((inbl *)up)->count, dw); }
  106.  
  107.  
  108.  
  109.    public:
  110.       TABLE(void);
  111.       virtual ~TABLE(void);
  112.  
  113.       void init_vars(void);
  114.       void init_defaults(void);
  115.  
  116.  
  117. //////////////////////// Work ///////////////////////////////
  118.  
  119.  
  120.       int insert(long l,dapo  d,dapo  *& daddr);
  121.       int insert(long l,void *d,void **& daddr);
  122.       int insert(long l,long  d,long  *& daddr);
  123.  
  124.       int insert(long l,void *d) { void **ad; return insert(l,d,ad); }
  125.       int insert(long l,dapo  d) { dapo  *ad; return insert(l,d,ad); }
  126.       int insert(long l,long  d) { long  *ad; return insert(l,d,ad); }
  127.  
  128.       int delet(long l);
  129.       int report(csCHAR *filename,int sub=10);
  130.       void report(FILE *fp,int sub=10);
  131.  
  132.       int search(long l,dapo  &d,dapo *&daddr);
  133.       int search(long l,void * &d,void **& daddr);
  134.       int search(long l,void * &d) { void ** add; return search(l,d,add); }
  135.       int search(long l,long   &d,long *& daddr);
  136.       int search(long l,long   &d) { long * add; return search(l,d,add); }
  137.  
  138.       int search_lt(long key,long &l,void * &d);
  139.       int search_le(long key,long &l,void * &d);
  140.       int search_gt(long key,long &l,void * &d);
  141.       int search_ge(long key,long &l,void * &d,void ** &addr);
  142.       int next(long &l,void * &d,void ** &addr);
  143.       int prev(long &l,void * &d);
  144.       long number(void) { return daco; }
  145.  
  146. //////////////////////// Im/Ex-port ////////////////////////////////////
  147.  
  148.       long export(FILE *fp);
  149.       long import(FILE *fp,long number);
  150.  
  151.  
  152. //////////////////////// Setup //////////////////////////////
  153.       int     set_mls(int l) { return max_lin_search=MAX(l,2); }
  154.       void    name(csCHAR *s)  { debug_name(s); }
  155.       void    debug_name(csCHAR *s);
  156.  
  157.       csCHAR *e_name(void) { return ((csCHAR *)d_name); }
  158.       void    e_name(csCHAR *s) { debug_name(s);  }
  159.  
  160. //////////////////////// Control ////////////////////////////////////////
  161.       int  empty(void);
  162.       int  zap(void);
  163.       int  open(void);
  164.       int  close(void);
  165.  
  166. };
  167.  
  168. #endif
  169.