1//===- ResolveInfoFactory.cpp ---------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "mcld/LD/ResolveInfoFactory.h" 10#include <cstring> 11#include <cstdlib> 12 13using namespace mcld; 14 15//========================== 16// ResolveInfoFactory 17ResolveInfoFactory::entry_type* 18ResolveInfoFactory::produce(const ResolveInfoFactory::key_type& pKey) 19{ 20 entry_type* result = static_cast<entry_type*>( 21 malloc(sizeof(entry_type)+pKey.size()+1)); 22 if (NULL == result) 23 return NULL; 24 25 new (result) entry_type(); 26 std::memcpy(result->m_Name, pKey.data(), pKey.size()); 27 result->m_Name[pKey.size()] = '\0'; 28 result->m_BitField &= ~ResolveInfo::RESOLVE_MASK; 29 result->m_BitField |= (pKey.size() << ResolveInfo::NAME_LENGTH_OFFSET); 30 return result; 31} 32 33void ResolveInfoFactory::destroy(ResolveInfoFactory::entry_type* pEntry) 34{ 35 if (NULL != pEntry) { 36 pEntry->~entry_type(); 37 free(pEntry); 38 } 39} 40 41