xdr_off.h

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
00022 */
00023 
00024 
00025 #ifndef _EYEDBSM_XDR_OFF_H
00026 #define _EYEDBSM_XDR_OFF_H
00027 
00028 #define MapHeader_SIZE 68
00029 #define DatafileDesc_SIZE 376
00030 #define DataspaceDesc_SIZE 104
00031 #define DbHeader_SIZE 250696
00032 #define DbRootEntry_SIZE 80
00033 #define DbRootEntries_SIZE 2560
00034 
00035 #define MapHeader_mtype_OFF 0
00036 #define MapHeader_sizeslot_OFF 4
00037 #define MapHeader_pow2_OFF 8
00038 #define MapHeader_nslots_OFF 12
00039 #define MapHeader_nbobjs_OFF 16
00040 #define MapHeader_mstat_OFF 24
00041 #define MapHeader_mstat_mtype_OFF 24
00042 #define MapHeader_u_bmh_OFF 56
00043 #define MapHeader_u_bmh_slot_cur_OFF 56
00044 #define MapHeader_u_bmh_slot_lastbusy_OFF 60
00045 #define MapHeader_u_bmh_retry_OFF 64
00046 #define MapHeader_mstat_u_bmstat_OFF 32
00047 #define MapHeader_mstat_u_bmstat_obj_count_OFF 32
00048 #define MapHeader_mstat_u_bmstat_busy_slots_OFF 36
00049 #define MapHeader_mstat_u_bmstat_busy_size_OFF 40
00050 #define MapHeader_mstat_u_bmstat_hole_size_OFF 48
00051 #define MapHeader_mstat_u_lmstat_OFF 32
00052 #define MapHeader_mstat_u_lmstat_nfreecells_OFF 32
00053 #define MapHeader_u_lmh_OFF 56
00054 #define MapHeader_u_lmh_firstcell_OFF 56
00055 
00056 #define DatafileDesc_file_OFF 0
00057 #define DatafileDesc_name_OFF 256
00058 #define DatafileDesc___maxsize_OFF 288
00059 #define DatafileDesc_mp_OFF 296
00060 #define DatafileDesc___lastslot_OFF 368
00061 #define DatafileDesc___dspid_OFF 372
00062 
00063 #define DataspaceDesc_name_OFF 0
00064 #define DataspaceDesc___cur_OFF 32
00065 #define DataspaceDesc___ndat_OFF 36
00066 #define DataspaceDesc___datid_OFF(datid) (40 + (datid) * sizeof(eyedblib::int16))
00067 
00068 #define DbRootEntry_key_OFF 0
00069 #define DbRootEntry_data_OFF 16
00070 
00071 #define DbHeader___magic_OFF 0
00072 #define DbHeader___dbid_OFF 4
00073 #define DbHeader_state_OFF 8
00074 #define DbHeader___guest_uid_OFF 12
00075 #define DbHeader___prot_uid_oid_OFF 16
00076 #define DbHeader___prot_list_oid_OFF 24
00077 #define DbHeader___prot_lock_oid_OFF 32
00078 #define DbHeader_shmfile_OFF 40
00079 #define DbHeader___nbobjs_OFF 296
00080 #define DbHeader___ndat_OFF 300
00081 #define DbHeader_dat_OFF(datid) (304 + (datid) * DatafileDesc_SIZE)
00082 #define DbHeader___ndsp_OFF 192816
00083 #define DbHeader_dsp_OFF(dspid) (192820 + (dspid) * DataspaceDesc_SIZE)
00084 #define DbHeader___def_dspid_OFF 246068
00085 #define DbHeader_vre_OFF(idx) (246070 + (idx) * DbRootEntry_SIZE)
00086 #define DbHeader___lastidxbusy_OFF 248632
00087 #define DbHeader___curidxbusy_OFF 248636
00088 #define DbHeader___lastidxblkalloc_OFF 248640
00089 #define DbHeader___lastnsblkalloc_OFF(datid) (248644 + (datid) * sizeof(eyedbsm::Oid::NX))
00090 
00091 // access field macros
00092 
00093 // Generic macros
00094 #define Struct_Ref_X(Struct, addr, Attr, X) ((addr) + Struct##_##Attr##_OFF X)
00095 
00096 #define Struct_X(Struct, Type, addr, Attr, X) (*(Type *)((addr) + Struct##_##Attr##_OFF X))
00097 //#define Struct_(Struct, Type, addr, Attr) (*(Type *)((addr) + Struct##_##Attr##_OFF))
00098 #define Struct_(Struct, Type, addr, Attr) Struct_X(Struct, Type, addr, Attr, )
00099 
00100 #define Struct_ptr(Struct, Type, addr, Attr) (Type)((addr) + Struct##_##Attr##_OFF)
00101 
00102 // Type oriented macros
00103 #define MapHeader_(Type, addr, Attr) Struct_(MapHeader, Type, addr,  Attr)
00104 #define DatafileDesc_(Type, addr, Attr) Struct_(DatafileDesc, Type, addr,  Attr)
00105 #define DataspaceDesc_(Type, addr, Attr) Struct_(DataspaceDesc, Type, addr,  Attr)
00106 #define DbRootEntry_(Type, addr, Attr) Struct_(DbRootEntry, Type, addr, Attr)
00107 #define DbHeader_(Type, addr, Attr) Struct_(DbHeader, Type, addr, Attr)
00108 
00109 #define DatafileDesc_ptr(Type, addr, Attr) Struct_ptr(DatafileDesc, Type, addr,  Attr)
00110 #define DataspaceDesc_ptr(Type, addr, Attr) Struct_ptr(DataspaceDesc, Type, addr,  Attr)
00111 #define DbRootEntry_ptr(Type, addr, Attr) Struct_ptr(DbRootEntry, Type, addr, Attr)
00112 #define DbHeader_ptr(Type, addr, Attr) Struct_ptr(DbHeader, Type, addr, Attr)
00113 
00114 // Field oriented macros
00115 #define MapHeader_mtype(addr) MapHeader_(short, addr, mtype)
00116 #define MapHeader_sizeslot(addr) MapHeader_(unsigned int, addr, sizeslot)
00117 #define MapHeader_pow2(addr) MapHeader_(unsigned int, addr, pow2)
00118 #define MapHeader_nslots(addr) MapHeader_(Oid::NX, addr, nslots)
00119 #define MapHeader_nbobjs(addr) MapHeader_(Oid::NX, addr, nbobjs)
00120 #define MapHeader_mstat_mtype(addr) MapHeader_(short, addr, mstat_mtype)
00121 #define MapHeader_u_bmh_slot_cur(addr) MapHeader_(Oid::NX, addr, u_bmh_slot_cur)
00122 #define MapHeader_u_bmh_slot_lastbusy(addr) MapHeader_(Oid::NX, addr, u_bmh_slot_lastbusy)
00123                                                
00124 #define MapHeader_u_bmh_retry(addr) MapHeader_(short, addr, u_bmh_retry)
00125                                                
00126 #define MapHeader_mstat_u_bmstat_obj_count(addr) MapHeader_(Oid::NX, addr, mstat_u_bmstat_obj_count)
00127 #define MapHeader_mstat_u_bmstat_busy_slots(addr) MapHeader_(NS, addr, mstat_u_bmstat_busy_slots)
00128 #define MapHeader_mstat_u_bmstat_busy_size(addr) MapHeader_(unsigned long long, addr, mstat_u_bmstat_busy_size)
00129 #define MapHeader_mstat_u_bmstat_hole_size(addr) MapHeader_(unsigned long long, addr, mstat_u_bmstat_hole_size)
00130 
00131 #define MapHeader_mstat_u_lmstat_nfreecells(addr) MapHeader_(unsigned int, addr, mstat_u_lmstat_nfreecells)
00132 
00133 #define MapHeader_u_lmh_firstcell(addr) MapHeader_(int, addr, u_lmh_firstcell)
00134 
00135 #define DatafileDesc_file(addr) DatafileDesc_ptr(char *, addr, file)
00136 #define DatafileDesc_name(addr) DatafileDesc_ptr(char *, addr, name)
00137 #define DatafileDesc___maxsize(addr) DatafileDesc_(unsigned int, addr, __maxsize)
00138 #define DatafileDesc___lastslot(addr) DatafileDesc_(unsigned int, addr, __lastslot)
00139 #define DatafileDesc___dspid(addr) DatafileDesc_(unsigned short, addr, __dspid)
00140 
00141 #define DataspaceDesc_name(addr) DataspaceDesc_ptr(char *, addr, name)
00142 #define DataspaceDesc___cur(addr) DataspaceDesc_(int, addr, __cur)
00143 #define DataspaceDesc___ndat(addr) DataspaceDesc_(int, addr, __ndat)
00144                                                
00145 // !!!!!
00146 #define DataspaceDesc___datid(addr, datid) Struct_X(DataspaceDesc, short, addr, __datid, (datid))
00147 
00148 #define DbRootEntry_key(addr) DbRootEntry_ptr(char *, addr, key)
00149 #define DbRootEntry_data(addr) DbRootEntry_ptr(char *, addr, data)
00150 
00151 #define DbHeader___magic(addr) DbHeader_(unsigned int, addr, __magic)
00152 #define DbHeader___dbid(addr) DbHeader_(int, addr, __dbid)
00153 #define DbHeader_state(addr) DbHeader_(char, addr, state)
00154 #define DbHeader___guest_uid(addr) DbHeader_(int, addr, __guest_uid)
00155 #define DbHeader___prot_uid_oid(addr) DbHeader_(Oid, addr, __prot_uid_oid)
00156 #define DbHeader___prot_list_oid(addr) DbHeader_(Oid, addr, __prot_list_oid)
00157 #define DbHeader___prot_lock_oid(addr) DbHeader_(Oid, addr, __prot_lock_oid)
00158 
00159 #define DbHeader_shmfile(addr) DbHeader_ptr(char *, addr, shmfile)
00160 
00161 #define DbHeader___nbobjs(addr) DbHeader_(Oid::NX, addr, __nbobjs)
00162 #define DbHeader___ndat(addr) DbHeader_(unsigned int, addr, __ndat)
00163 
00164 // !!!
00165 #define DbHeader_dat_ref(addr, datid) Struct_Ref_X(DbHeader, addr, dat, (datid))
00166 
00167 #define DbHeader___ndsp(addr) DbHeader_(unsigned int, addr, __ndsp)
00168 
00169 // !!!!
00170 #define DbHeader_dsp_ref(addr, datid) Struct_Ref_X(DbHeader, addr, dsp, (datid))
00171 
00172 #define DbHeader___def_dspid(addr) DbHeader_(short, addr, __def_dspid)
00173 #define DbHeader_vre(addr, idx) Struct_Ref_X(DbHeader, addr, vre, (idx))
00174 #define DbHeader___lastidxbusy(addr) DbHeader_(Oid::NX, addr, __lastidxbusy)
00175 #define DbHeader___curidxbusy(addr) DbHeader_(Oid::NX, addr, __curidxbusy)
00176 
00177 #define DbHeader___lastidxblkalloc(addr) DbHeader_(Oid::NX, addr, __lastidxblkalloc)
00178 
00179 // !!!
00180 #define DbHeader___lastnsblkalloc(addr, datid) Struct_X(DbHeader, Oid::NX, addr, __lastnsblkalloc, (datid))
00181 
00182 namespace eyedbsm {
00183 
00184   class DbRootEntry {
00185     unsigned char *addr;
00186 
00187   public:
00188     DbRootEntry(unsigned char *addr) : addr(addr) { }
00189 
00190     char *key() {
00191       return DbRootEntry_key(addr);
00192     }
00193 
00194     char *data() {
00195       return DbRootEntry_data(addr);
00196     }
00197   };
00198 
00199 
00200   //typedef DbRootEntry DbRootEntries[MAX_ROOT_ENTRIES];
00201 
00202   class MapHeader {
00203 
00204     unsigned char *addr;
00205     bool toFree;
00206 
00207   public:
00208     MapHeader() {addr = (unsigned char *)(new long long[MapHeader_SIZE / sizeof(unsigned long long)]); toFree = true;}
00209 
00210     MapHeader(unsigned char *addr) : addr(addr) { toFree = false;}
00211 
00212     ~MapHeader() { if (toFree) delete [] addr;}
00213 
00214     void memzero() {
00215       memset(addr, 0, MapHeader_SIZE);
00216     }
00217 
00218     unsigned char *_addr() {return addr;}
00219 
00220     short &mtype() {
00221       return MapHeader_mtype(addr);
00222     }
00223 
00224     short mtype() const {
00225       return MapHeader_mtype(addr);
00226     }
00227 
00228     unsigned int &sizeslot() {
00229       return MapHeader_sizeslot(addr);
00230     }
00231 
00232     unsigned int sizeslot() const {
00233       return MapHeader_sizeslot(addr);
00234     }
00235 
00236     unsigned int &pow2() {
00237       return MapHeader_pow2(addr);
00238     }
00239 
00240     unsigned int pow2() const {
00241       return MapHeader_pow2(addr);
00242     }
00243 
00244     NS &nslots() {
00245       return MapHeader_nslots(addr);
00246     }
00247 
00248     Oid::NX &nbobjs() {
00249       return MapHeader_nbobjs(addr);
00250     }
00251 
00252     short &mstat_mtype() {
00253       return MapHeader_mstat_mtype(addr);
00254     }
00255 
00256     Oid::NX &mstat_u_bmstat_obj_count() {
00257       return MapHeader_mstat_u_bmstat_obj_count(addr);
00258     }
00259 
00260     NS &mstat_u_bmstat_busy_slots() {
00261       return MapHeader_mstat_u_bmstat_busy_slots(addr);
00262     }
00263 
00264     unsigned long long &mstat_u_bmstat_busy_size() {
00265       return MapHeader_mstat_u_bmstat_busy_size(addr);
00266     }
00267 
00268     unsigned long long &mstat_u_bmstat_hole_size() {
00269       return MapHeader_mstat_u_bmstat_hole_size(addr);
00270     }
00271 
00272     Oid::NX &u_bmh_slot_cur() {
00273       return MapHeader_u_bmh_slot_cur(addr);
00274     }
00275 
00276     Oid::NX &u_bmh_slot_lastbusy() {
00277       return MapHeader_u_bmh_slot_lastbusy(addr);
00278     }
00279 
00280     short &u_bmh_retry() {
00281       return MapHeader_u_bmh_retry(addr);
00282     }
00283   };
00284 
00285   class DatafileDesc {
00286 
00287     unsigned char *addr;
00288 
00289   public:
00290     MapHeader _mp;
00291     DatafileDesc(unsigned char *addr) :
00292       addr(addr), _mp(addr + DatafileDesc_mp_OFF) { }
00293 
00294     char *file() {
00295       return DatafileDesc_file(addr);
00296     }
00297 
00298     char *name() {
00299       return DatafileDesc_name(addr);
00300     }
00301 
00302     unsigned int &__maxsize() {
00303       return DatafileDesc___maxsize(addr);
00304     }
00305 
00306     MapHeader *mp() {
00307       return &_mp;
00308     }
00309 
00310     unsigned int &__lastslot() {
00311       return DatafileDesc___lastslot(addr);
00312     }
00313 
00314     unsigned short &__dspid() {
00315       return DatafileDesc___dspid(addr);
00316     }
00317   };
00318 
00319   class DataspaceDesc {
00320 
00321     unsigned char *addr;
00322 
00323   public:
00324     DataspaceDesc(unsigned char *addr) : addr(addr) { }
00325 
00326     char *name() {
00327       return DataspaceDesc_name(addr);
00328     }
00329 
00330     int &__cur() {
00331       return DataspaceDesc___cur(addr);
00332     }
00333 
00334     int &__ndat() {
00335       return DataspaceDesc___ndat(addr);
00336     }
00337 
00338     short *__datid_ref() {
00339       return (short *)(addr + DataspaceDesc___datid_OFF(0));
00340     }
00341 
00342     short &__datid(int datid) {
00343       return DataspaceDesc___datid(addr, datid);
00344     }
00345   };
00346 
00347   class DbHeader {
00348 
00349     unsigned char *addr;
00350     bool toFree;
00351 
00352   public:
00353     DbHeader() {addr = (unsigned char *)(new long long[DbHeader_SIZE / sizeof(unsigned long long)]); toFree = true;}
00354     
00355     DbHeader(unsigned char *addr) : addr(addr) { toFree = false;}
00356 
00357     ~DbHeader() { if (toFree) delete [] addr;}
00358 
00359     void memzero() {
00360       memset(addr, 0, DbHeader_SIZE);
00361     }
00362 
00363     unsigned char *_addr() {return addr;}
00364 
00365     unsigned int &__magic() {
00366       return DbHeader___magic(addr);
00367     }
00368 
00369     unsigned int __magic() const {
00370       return DbHeader___magic(addr);
00371     }
00372 
00373     int &__dbid() {
00374       return DbHeader___dbid(addr);
00375     }
00376 
00377     char &state() {
00378       return DbHeader_state(addr);
00379     }
00380 
00381     int &__guest_uid() {
00382       return DbHeader___guest_uid(addr);
00383     }
00384 
00385     Oid &__prot_uid_oid() {
00386       return DbHeader___prot_uid_oid(addr);
00387     }
00388 
00389     Oid &__prot_list_oid() {
00390       return DbHeader___prot_list_oid(addr);
00391     }
00392 
00393     Oid &__prot_lock_oid() {
00394       return DbHeader___prot_lock_oid(addr);
00395     }
00396 
00397     char *shmfile() {
00398       return DbHeader_shmfile(addr);
00399     }
00400 
00401     Oid::NX &__nbobjs() {
00402       return DbHeader___nbobjs(addr);
00403     }
00404 
00405     unsigned int &__ndat() {
00406       return DbHeader___ndat(addr);
00407     }
00408 
00409     DatafileDesc dat(short datid) const {
00410       return DatafileDesc(dat_addr(datid));
00411     }
00412 
00413     unsigned char *dat_addr(short datid) const {
00414       return DbHeader_dat_ref(addr, datid);
00415     }
00416 
00417     unsigned int &__ndsp() {
00418       return DbHeader___ndsp(addr);
00419     }
00420 
00421     DataspaceDesc dsp(short datid) const {
00422       return DataspaceDesc(dsp_addr(datid));
00423     }
00424 
00425     unsigned char *dsp_addr(short dspid) const {
00426       return DbHeader_dsp_ref(addr, dspid);
00427     }
00428 
00429     short &__def_dspid() {
00430       return DbHeader___def_dspid(addr);
00431     }
00432 
00433     DbRootEntry vre(int idx) {
00434       return DbRootEntry(vre_addr(idx));
00435     }
00436 
00437     unsigned char *vre_addr(int idx) {
00438       return DbHeader_vre(addr, idx);
00439     }
00440 
00441     Oid::NX &__lastidxbusy() {
00442       return DbHeader___lastidxbusy(addr);
00443     }
00444 
00445     Oid::NX &__curidxbusy() {
00446       return DbHeader___curidxbusy(addr);
00447     }
00448 
00449     Oid::NX &__lastidxblkalloc() {
00450       return DbHeader___lastidxblkalloc(addr);
00451     }
00452 
00453     Oid::NX &__lastnsblkalloc(short datid) {
00454       return DbHeader___lastnsblkalloc(addr, datid);
00455     }
00456   };
00457 }
00458 
00459 #endif

Generated on Mon Dec 22 18:16:15 2008 for eyedb by  doxygen 1.5.3