Hauptseite   Klassenhierarchie   Übersicht   Auflistung der Dateien   Elementübersicht   Datei-Elemente  

indexpage.h

gehe zur Dokumentation dieser Datei
00001 
00008 #ifndef INDEX_PAGE_H
00009 #define INDEX_PAGE_H
00010 #include"allg.h"
00011 #include<rpointer.h>
00012 #include"mempl.h"
00013 #include"keypage.h"
00014 
00019 struct Keyentry
00020 {
00021   off_t offset;
00022   octet_t key[1];  
00023 };
00024 
00025 struct IndexPage : KeyPage
00026 {
00027   uint16_t keylen;  // All keys have a Fixed length
00028   Keyentry keys[1]; // growing Array
00029 };
00030 
00031 class IndexPageAccess : public KeyPageAccess
00032 {
00033 public:
00034   IndexPageAccess():KeyPageAccess() {}
00035   IndexPageAccess(CommonPage* base):KeyPageAccess(base) {}
00036  
00037   virtual Page_type_t pagetype();
00038   virtual size_t space();
00042   void init(uint16_t keylen);
00043   void init(CommonPage *base,uint16_t keylen)
00044   {
00045     RAMS::Mseg::setto((char *)base,PAGESIZE);
00046     init(keylen);
00047   }
00048 
00049   int  maxcount() 
00050   {
00051     return (PAGESIZE-offsetof(IndexPage,keys))
00052                /(sizeof_Keyentry());
00053   }
00054 
00059   int insert(const octet_t *key,size_t keylen,off_t offset);
00060   int insert(mempl_t key,off_t offset)  { return insert(key.ptr,key.l,offset); }
00061   virtual mempl_t key(int i);
00062   virtual int keycmp(int i,const octet_t *other,size_t olen);
00063 
00064   off_t off(int i) { return keyentry(i)->offset; }
00065   void changeoffset(mempl_t key,off_t off)
00066   {
00067     int f = find(key);
00068     keyentry(f)->offset = off;
00069   }
00070   int replacelargestkey(const octet_t *key,size_t keylen);
00071   int splitt(CommonPage *neu1,CommonPage *neu2);
00072   
00073  
00074 protected:
00075   IndexPage *page() { return (IndexPage *)begin(); }
00076   size_t sizeof_Keyentry() { return sizeof(off_t)+page()->keylen; }
00077   Keyentry* keyentry(int i)
00078   {
00079     return (Keyentry *)((octet_t *)(page()->keys)+i*sizeof_Keyentry());
00080   }
00081 };
00082 #endif
00083 
00084 
00085 

Erzeugt am Sat Dec 7 22:11:52 2002 für ramsbtree von doxygen1.2.12 geschrieben von Dimitri van Heesch, © 1997-2001