00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef LDB_H
00023 
00024 
00025 
00026 
00027 
00028 
00029 #include "luti.h"
00030 #include "lll.h"
00031 
00032  
00033 
00034 
00035 enum { 
00036         LMFR_MFN = 1, 
00037         LMFR_RECL,      
00038         LMFR_BWB, 
00039         LMFR_BWP, 
00040         LMFR_BASE,      
00041         LMFR_NVF,       
00042         LMFR_STAT,      
00043         LMFR__FL, 
00044         LMFR_TAG = 0,
00045         LMFR_POS,
00046         LMFR_LEN,
00047         LMFR__RL 
00048 };
00049 
00050 
00055 extern int *ldb_readRec ( int db, int rowid );
00056 
00057 
00062 typedef int lxref;
00063 
00064 
00069 extern int *ldb_readRecAtOff ( int dbid, lxref off, int *nxtoff );
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 
00080 
00081 enum {
00082         LDB_MAX_KEYLEN = 31, 
00083         LDB_TERMBUF = 128, 
00084         LDB_INDEXES = 2
00085 };
00086 
00087 
00111 typedef union {
00112         char bytes[8];
00113         lll  val;
00114 } LdbP;
00115 
00116 
00117 
00118 
00119 
00120 #define LDBP_ROW( p ) (0xffffffL & (int)((p)->val >> 40))
00121 #define LDBP_TAG( p ) (  0xffffL & (int)((p)->val >> 24))
00122 #define LDBP_POS( p ) (0xff7fffL & (int)((p)->val))
00123 #define LDBP_MARK( p ) (  0x8000 & (int)((p)->val))
00124 
00125 #define LDBP_SETMARK( p ) ((p)->val |= LLL(            0x8000))
00126 #define LDBP_CLRMARK( p ) ((p)->val &= LLL(0xffffffffffff7fff))
00127 
00128 #define LDBP_IGNMARK( p ) ((p)->val & LLL(0xffffffffffff7fff))
00129 
00130 
00131 #define LDBP_EQ( a, b ) ((a)->val == (b)->val)
00132 #define LDBP_GT( a, b ) ((a)->val > (b)->val)
00133 
00134 #define LDBP_EQM( a, b ) (LDBP_IGNMARK(a) == LDBP_IGNMARK(b))
00135 #define LDBP_GTM( a, b ) (LDBP_IGNMARK(a) > LDBP_IGNMARK(b))
00136 
00137 
00138 #define LDBP_SETROWBOT( d, s ) ((d)->val = (s)->val & LLL(0xffffff0000000000))
00139 #define LDBP_SETROWTOP( d, s ) ((d)->val = (s)->val | LLL(      0xffffffffff))
00140 
00141 
00147 typedef struct {
00148         short mode; 
00149         short near; 
00150         int   tag; 
00151         int   skp; 
00152         int   len; 
00153         int   fil; 
00154         int   cut; 
00155         LdbP p[OPENISIS_SETLEN];
00160 } LdbPost;
00161 
00162 enum {
00163         LDB_OR,
00164         LDB_AND,
00165         LDB_NOT, 
00166         LDB_PFX = 4, 
00167         LDB_KEEPMARKS = 8 
00168 };
00169 
00170 enum {
00171         LDB_NEAR_F = 0x7fff, 
00172         LDB_NEAR_G = -0x8000 
00173 };
00174 
00177 extern int ldb_search ( int db, const char *key, LdbPost *post,
00178         OpenIsisRec *rec );
00179 
00180 
00181 extern int ldb_p2s ( OpenIsisSet *set, LdbPost *post );
00182 
00183 extern Db* ldb_getdb (int dbid);
00184 
00185 #define LDB_H
00186 #endif