//===- 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);
}
}