//===- ResolveInfoFactory.cpp ---------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/LD/ResolveInfoFactory.h" #include <cstring> #include <cstdlib> using namespace mcld; //========================== // ResolveInfoFactory ResolveInfoFactory::entry_type* ResolveInfoFactory::produce(const ResolveInfoFactory::key_type& pKey) { entry_type* result = static_cast<entry_type*>( malloc(sizeof(entry_type)+pKey.size()+1)); if (NULL == result) return NULL; new (result) entry_type(); std::memcpy(result->m_Name, pKey.data(), pKey.size()); result->m_Name[pKey.size()] = '\0'; result->m_BitField &= ~ResolveInfo::RESOLVE_MASK; result->m_BitField |= (pKey.size() << ResolveInfo::NAME_LENGTH_OFFSET); return result; } void ResolveInfoFactory::destroy(ResolveInfoFactory::entry_type* pEntry) { if (NULL != pEntry) { pEntry->~entry_type(); free(pEntry); } }