28 using namespace Opcode;
31 #ifdef CONTAINER_STATS
32 udword Container::mNbContainers = 0;
33 udword Container::mUsedRam = 0;
43 #ifdef CONTAINER_STATS
56 #ifdef CONTAINER_STATS
70 #ifdef CONTAINER_STATS
85 #ifdef CONTAINER_STATS
100 #ifdef CONTAINER_STATS
101 mUsedRam-=mMaxNbEntries*
sizeof(
udword);
104 mCurNbEntries = mMaxNbEntries = 0;
114 bool Container::Resize(
udword needed)
117 #ifdef CONTAINER_STATS
119 mUsedRam-=mMaxNbEntries*
sizeof(
udword);
123 mMaxNbEntries = mMaxNbEntries ?
udword(
float(mMaxNbEntries)*mGrowthFactor) : 2;
124 if(mMaxNbEntries<mCurNbEntries + needed) mMaxNbEntries = mCurNbEntries + needed;
127 udword* NewEntries =
new udword[mMaxNbEntries];
130 #ifdef CONTAINER_STATS
132 mUsedRam+=mMaxNbEntries*
sizeof(
udword);
136 if(mCurNbEntries)
CopyMemory(NewEntries, mEntries, mCurNbEntries*
sizeof(udword));
142 mEntries = NewEntries;
160 if(!nb)
return false;
166 mEntries =
new udword[mMaxNbEntries];
169 #ifdef CONTAINER_STATS
171 mUsedRam+=mMaxNbEntries*
sizeof(
udword);
184 #ifdef CONTAINER_STATS
186 mUsedRam-=mMaxNbEntries*
sizeof(
udword);
190 mMaxNbEntries = mCurNbEntries;
191 if(!mMaxNbEntries)
return false;
194 udword* NewEntries =
new udword[mMaxNbEntries];
197 #ifdef CONTAINER_STATS
199 mUsedRam+=mMaxNbEntries*
sizeof(
udword);
203 CopyMemory(NewEntries, mEntries, mCurNbEntries*
sizeof(udword));
209 mEntries = NewEntries;
228 for(udword i=0;
i<mCurNbEntries;
i++)
230 if(mEntries[i]==entry)
232 if(location) *location =
i;
250 for(udword i=0;
i<mCurNbEntries;
i++)
252 if(mEntries[i]==entry)
273 for(udword i=0;
i<mCurNbEntries;
i++)
275 if(mEntries[i]==entry)
280 for(udword j=i;
j<mCurNbEntries;
j++)
282 mEntries[
j] = mEntries[
j+1];
304 if(Location==mCurNbEntries) Location = find_mode==
FIND_WRAP ? 0 : mCurNbEntries-1;
305 entry = mEntries[Location];
324 if(Location==0xffffffff) Location = find_mode==
FIND_WRAP ? mCurNbEntries-1 : 0;
325 entry = mEntries[Location];
338 return sizeof(
Container) + mMaxNbEntries *
sizeof(udword);
345 mCurNbEntries = mMaxNbEntries;