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