00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _terimber_byterep_h_
00029 #define _terimber_byterep_h_
00030
00031 #include "base/memory.h"
00032
00033 BEGIN_TERIMBER_NAMESPACE
00034 #pragma pack(4)
00035
00041
00042 template < unsigned char N >
00043 class byte_tank
00044 {
00047 typedef ub8_t rooms_type_t;
00048 public:
00051 enum BACKET
00052 {
00053 LENGTH = (1<<N) + 4,
00054 ROOMS = 8*sizeof(rooms_type_t)
00055 };
00056
00058 byte_tank( byte_allocator& all
00059 );
00060
00062 inline
00063 bool
00064 full() const;
00066 inline
00067 bool
00068 empty() const ;
00070 inline
00071 char*
00072 get_chunk();
00074 inline
00075 void
00076 put_chunk( char* ptr
00077 );
00079 inline
00080 void
00081 reset();
00082
00083 private:
00084 char* _head;
00085 rooms_type_t _states;
00086 };
00087
00090 template < unsigned char N, ub4_t M >
00091 class byte_backet
00092 {
00093 public:
00095 byte_backet();
00097 ~byte_backet();
00099 inline
00100 char*
00101 allocate();
00103 inline
00104 void
00105 deallocate( char* ptr
00106 );
00108 inline
00109 void
00110 reset();
00112 inline
00113 void
00114 release();
00115
00116 private:
00117 byte_allocator _all;
00118 byte_tank< N >* _pages[M];
00119 ub4_t _page;
00120 };
00121
00125 class byte_repository
00126 {
00128 friend class byte_repository_factory;
00129 public:
00131 inline
00132 char*
00133 allocate( size_t len
00134 );
00136 inline
00137 void
00138 deallocate( char* ptr
00139 );
00140
00142 inline
00143 void
00144 reset();
00145
00146 private:
00148 byte_repository()
00149 {
00150 }
00151
00152
00153 byte_backet< 4, 64*1024 > _backet4;
00154 byte_backet< 5, 32*1024 > _backet5;
00155 byte_backet< 6, 16*1024 > _backet6;
00156 byte_backet< 7, 8*1024 > _backet7;
00157 byte_backet< 8, 4*1024 > _backet8;
00158 byte_backet< 9, 2*1024 > _backet9;
00159 byte_backet< 10, 1*1024 > _backet10;
00160 byte_backet< 11, 512 > _backet11;
00161 byte_backet< 12, 256 > _backet12;
00162 byte_backet< 13, 128 > _backet13;
00163 };
00164
00167 class byte_repository_factory
00168 {
00169 public:
00171 byte_repository_factory();
00173 ~byte_repository_factory();
00175 inline
00176 bool
00177 is_ready() const;
00179 inline
00180 byte_repository* operator->();
00181 private:
00182 byte_repository* _repository;
00183 };
00184
00185 #pragma pack()
00186 END_TERIMBER_NAMESPACE
00187
00188 #endif // _terimber_byterep_h_