Main Page   Class Hierarchy   Compound List   File List   Compound Members  

blob.h

00001 //-< BLOB.H >--------------------------------------------------------*--------*
00002 // GigaBASE                  Version 1.0         (c) 1999  GARRET    *     ?  *
00003 // (Post Relational Database Management System)                      *   /\|  *
00004 //                                                                   *  /  \  *
00005 //                          Created:     04-Jun-2000  K.A. Knizhnik  * / [] \ *
00006 //                          Last update: 27-Jun-2000  K.A. Knizhnik  * GARRET *
00007 //-------------------------------------------------------------------*--------*
00008 // Binary large object
00009 //-------------------------------------------------------------------*--------*
00010 
00011 #ifndef __BLOB_H__
00012 #define __BLOB_H__
00013 
00014 BEGIN_GIGABASE_NAMESPACE
00015 
00021 class GIGABASE_DLL_ENTRY dbBlobIterator {
00022   protected:
00023     size_t      size;
00024     offs_t      pos;
00025     dbDatabase& db;
00026     oid_t       oid;
00027     oid_t       next;
00028     void*       buf;
00029     bool        closed;
00030 
00031   public:
00037     virtual size_t getAvailableSize() = 0;
00038 
00044     size_t getAvailableBufferSize() {
00045         size_t rest = dbPageSize - ((int)pos & (dbPageSize-1));
00046         return rest < size ? rest : size;
00047     }
00048 
00053     virtual void* mapBuffer() = 0;
00054     
00059     virtual void  unmapBuffer(size_t proceeded);
00060 
00064     virtual void close();
00065 
00071     dbBlobIterator(dbDatabase& db, oid_t oid);
00072 
00076     virtual ~dbBlobIterator();
00077 };
00078 
00079 
00083 class GIGABASE_DLL_ENTRY dbBlobReadIterator : public dbBlobIterator {
00084   public:
00091     size_t read(void* buf, size_t bufSize);
00092     
00098     dbBlobReadIterator(dbDatabase& db, oid_t oid) : dbBlobIterator(db,oid) {}
00099     
00103     ~dbBlobReadIterator();
00104 
00109     virtual void* mapBuffer();
00110     
00116     virtual size_t getAvailableSize();
00117 
00121     virtual void   close();
00122 };
00123 
00124 class GIGABASE_DLL_ENTRY dbBlobWriteIterator : public dbBlobIterator {
00125   public:
00131     void   write(void const* buf, size_t bufSize);
00132 
00138     dbBlobWriteIterator(dbDatabase& db, oid_t oid, size_t maxExtent) : dbBlobIterator(db,oid) {
00139         extent = maxExtent;
00140     }
00141 
00145     ~dbBlobWriteIterator();
00146 
00151     virtual void*  mapBuffer();
00152 
00159     virtual size_t getAvailableSize();
00160 
00164     virtual void   close();
00165 
00166   private:
00167     size_t extent;
00168 };
00169 
00173 const size_t dbDefaultFirstBlobSegmentSize = 16000;
00174 const size_t dbDefaultBlobExtent = 64000;
00175 
00176 
00183 class GIGABASE_DLL_ENTRY dbBlob : public dbAnyReference {
00184   public:
00185     dbBlob(oid_t oid = 0) : dbAnyReference(oid) {}
00186 
00193     void create(dbDatabase& dbase, size_t size = dbDefaultFirstBlobSegmentSize);
00194 
00200     size_t getSize(dbDatabase& db);
00201 
00207     dbBlobReadIterator  getReadIterator(dbDatabase& db);
00208 
00218     dbBlobWriteIterator getWriteIterator(dbDatabase& db, size_t maxExtent = dbDefaultBlobExtent);
00219 
00226     dbBlob& operator = (dbAnyReference const& ref) {
00227         oid = ref.getOid();
00228         return *this;
00229     }
00230 
00236     void free(dbDatabase& db);
00237 };
00238 
00239 END_GIGABASE_NAMESPACE
00240 
00241 #endif
00242 
00243 
00244 
00245 

Generated on Thu Feb 14 21:46:02 2008 for GigaBASE by doxygen1.2.18