#ifndef __VARFHEAP_HPP #define __VARFHEAP_HPP #include "fileheap.hpp" struct VarFileHeap_header; struct VarFileHeap_directory; class VarFileHeap : public FileHeap { public: VarFileHeap(FileHeapStorage *s); VarFileHeap(FileHeapStorage *s, unsigned long bsize); ~VarFileHeap(); recid Alloc(int rsize); int Free(recid r); int Read(recid r, void *data, int datalen); int Write(recid r, const void *data, int datalen); void Flush(); int FindFirst(recid r[], int maxrecids, int *recids); int FindNext(recid from, recid r[], int maxrecids, int *recids); int cardinality(); unsigned long count_approx(); unsigned long count_exact(); private: VarFileHeap_header *header; int headerdirty; VarFileHeap_directory *dir; int dirdirty; unsigned long dirno; void makenewblock(); void fetchdir(unsigned long bn); int finddir(recid r); int finddirentry(recid r); void syncdir(); recid findfree(unsigned long size); unsigned long findfreeareaindir(unsigned long size); void insertdirentry(recid r, unsigned long offset, unsigned long size); }; #endif