template<class dicttype>
bool FX::QDictByMemLoadResizeAggr ( dicttype &  dict,
const char *  file = 0,
int  lineno = 0 
) [inline]

Definition at line 577 of file qdictbase.h.

References fx2powerprimes(), fxmessage(), and FX::FXProcess::memoryFull().

00578 {
00579     FXuint memload=FXProcess::memoryFull(), dictcount=dict.count(), dictsize=dict.size();
00580     FXuint newsize=dictsize;
00581     if(dictcount<=16+48*dicttype::HasSlowKeyCompare
00582 #ifndef FXDISABLE_QDICTSLOWINSERTSOPT
00583         || dict.dictionaryBias()<16 /* slush factor */)
00584 #else
00585         )
00586 #endif
00587     {   // Better performance if we leave it purely to std::map
00588         newsize=1;
00589     }
00590     else if(dictcount>=dictsize/2 || (memload && dictsize>=31 && dictcount<=dictsize/8))
00591     {   // 31*(4+4+12+4)=31*24=744 bytes
00592         const FXuint *primes=fx2powerprimes(dictcount*2);
00593         newsize=primes[0];
00594     }
00595     if(newsize!=dictsize)
00596     {
00597 #ifdef DEBUG
00598         fxmessage("QDICTDYNRESIZEAGGR at %s:%d resizing %p from %u to %u (load %d)\n", file, lineno, &(dict), dictsize, newsize, memload);
00599 #endif
00600         dict.safeResize(newsize);
00601         return true;
00602     }
00603     return false;
00604 }


(C) 2002-2009 Niall Douglas. Some parts (C) to assorted authors.
Generated on Fri Nov 20 18:32:27 2009 for TnFOX by doxygen v1.4.7