//===- StringEntry.tcc -----------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // StringEntry template<typename DataType> StringEntry<DataType>::StringEntry() : m_KeyLen(0) { } template<typename DataType> StringEntry<DataType>::StringEntry(const StringEntry::key_type& pKey) : m_KeyLen(pKey.size()) { } template<typename DataType> StringEntry<DataType>::StringEntry(const StringEntry<DataType>& pCopy) : m_KeyLen(pCopy.m_KeyLen), m_Value(pCopy.m_Value) { assert("Copy constructor of StringEntry should not be called!"); } template<typename DataType> StringEntry<DataType>::~StringEntry() { } //===----------------------------------------------------------------------===// // StringEntryFactory template<typename DataType> StringEntryFactory<DataType>::StringEntryFactory() { } template<typename DataType> StringEntryFactory<DataType>::~StringEntryFactory() { } template<typename DataType> StringEntry<DataType>* StringEntryFactory<DataType>::produce(const typename StringEntryFactory<DataType>::key_type& pKey) { StringEntry<DataType>* result = static_cast<StringEntry<DataType>*>( malloc(sizeof(StringEntry<DataType>) + pKey.size() + 1)); if (NULL == result) return NULL; size_t len = pKey.size(); new (result) StringEntry<DataType>(); std::memcpy(result->m_Key, pKey.data(), len); result->m_Key[len] = '\0'; result->m_KeyLen = len; return result; } template<typename DataType> void StringEntryFactory<DataType>::destroy(StringEntry<DataType>* pEntry) { if (NULL != pEntry) { pEntry->~StringEntry<DataType>(); free(pEntry); } }