Hauptseite   Klassenhierarchie   Übersicht   Auflistung der Dateien   Datenstruktur-Elemente   Datei-Elemente  

once_alloc.h

gehe zur Dokumentation dieser Datei
00001 
00006 #ifndef ONCE_ALLOC_H
00007 #define ONCE_ALLOC_H
00008 #include"rpointer.h"
00009 #include"growingmseg.h"
00010 
00011 namespace RAMS
00012 {
00019 class Oncealloc
00020 {
00021  protected:
00022     Growingmseg mseg; 
00023     RcharPointer akt; 
00024     RcharPointer ao;  
00025     long align;       
00026  public:
00031     Oncealloc(int ini=1,long a=4):akt(0,&mseg),ao(0,&mseg)
00032         { mseg.grow(ini); align=a;
00033         }
00034 
00038     RcharPointer neu()
00039         { ao.setoff(align2(align,ao.offset()));
00040           akt=ao;
00041           return akt;
00042         }
00043 
00047     RcharPointer aktuell() { return akt; }
00051     RcharPointer aktende() { return ao; }
00052 
00060     void grow1(char c) throw(Growingmseg::Error)
00061         {
00062             if(ao.offset()>=mseg.length()) mseg.grow(1);
00063             *(ao.ptr())=c;
00064             ao+=1;
00065         }
00066 
00072     void garant(int l) throw(Growingmseg::Error) 
00073         {
00074             if(ao.offset()+l > mseg.length())
00075             {
00076                 long al=align2(getpagesize(),l)/getpagesize();
00077                 mseg.grow(al);
00078             }
00079         }
00080 
00086     RcharPointer reserve(int l) throw(Growingmseg::Error)
00087         {
00088             garant(l);
00089             ao+=l;
00090             return akt;
00091         }
00092 
00098     RcharPointer alloc(int l) throw(Growingmseg::Error)
00099         {
00100             neu();
00101             return reserve(l);
00102         }
00103 
00107     Mseg *getmseg() { return &mseg; }
00108 
00112     long reallength() const { return ao.offset(); }
00113 
00119     void write2file(char *filename) throw(Systemerror);
00120 };
00121 }
00122 #endif

Erzeugt am Sat Nov 29 19:45:39 2003 für rams_persito von doxygen1.2.14 geschrieben von Dimitri van Heesch, © 1997-2002