22 #ifndef __STRINGPOOL_HPP
23 #define __STRINGPOOL_HPP
25 #include <xqilla/framework/XQillaExport.hpp>
37 StringPool(XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *mm);
41 const XMLCh* getPooledString(
const XMLCh *src);
43 const XMLCh* getPooledString(
const XMLCh *src,
unsigned int length);
45 const XMLCh* getPooledString(
const char *src);
47 unsigned int getCount()
const {
return _count; }
48 unsigned int getHits()
const {
return _hits; }
51 void dumpStatistics()
const;
57 static unsigned int hash(
const XMLCh *v,
unsigned int length);
58 const XMLCh *replicate(
const XMLCh *v,
unsigned int length)
const;
64 Bucket(
const XMLCh *v,
unsigned int l,
unsigned int h, Bucket *n)
65 : value(v), length(l), hashValue(h), next(n) {}
69 unsigned int hashValue;
73 XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *_mm;
75 unsigned int _modulus;
82 inline unsigned int StringPool::hash(
const XMLCh *v,
unsigned int length)
84 unsigned int hashVal = 0;
86 hashVal += (hashVal * 37) + (hashVal >> 24) + (
unsigned int)(*v);
93 inline const XMLCh *StringPool::replicate(
const XMLCh *v,
unsigned int length)
const
95 unsigned int size = length *
sizeof(XMLCh);
96 XMLCh *ret = (XMLCh*)_mm->
allocate(size +
sizeof(XMLCh));