in src/xalanc/Include/XalanMap.hpp [475:529]
iterator doCreateEntry(const key_type & key, const data_type* data = 0)
{
// if there are no buckets, create initial minimum set of buckets
if (m_buckets.empty())
{
m_buckets.insert(
m_buckets.begin(),
m_minBuckets,
BucketType(*m_memoryManager));
}
// if the load factor has been reached, rehash
if (size_type(m_loadFactor * size()) > m_buckets.size())
{
rehash();
}
const size_type index = doHash(key);
if (m_freeEntries.empty())
{
m_freeEntries.push_back(Entry(allocate(1)));
}
// insert a new entry as the first position in the bucket
Entry& newEntry = m_freeEntries.back();
newEntry.erased = false;
FirstConstructor::construct(
const_cast<key_type*>(&newEntry.value->first),
key,
*m_memoryManager);
if (data != 0)
{
SecondConstructor::construct(
&newEntry.value->second,
*data,
*m_memoryManager);
}
else
{
SecondConstructor::construct(
&newEntry.value->second,
*m_memoryManager);
}
m_entries.splice(m_entries.end(), m_freeEntries, --m_freeEntries.end());
m_buckets[index].push_back(--m_entries.end());
++m_size;
return iterator(--m_entries.end());
}