//===- HashEntry.tcc ------------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

//===--------------------------------------------------------------------===//
// template implementation of HashEntry
template <typename KeyType, typename ValueType, typename KeyCompare>
HashEntry<KeyType, ValueType, KeyCompare>::HashEntry(const KeyType& pKey)
  : m_Key(pKey) {
}

template <typename KeyType, typename ValueType, typename KeyCompare>
HashEntry<KeyType, ValueType, KeyCompare>::~HashEntry()
{
}

template <typename KeyType, typename ValueType, typename KeyCompare>
bool HashEntry<KeyType, ValueType, KeyCompare>::compare(const KeyType& pKey)
{
  static KeyCompare comparator;
  return comparator(m_Key, pKey);
}

//===--------------------------------------------------------------------===//
// template implementation of EntryFactory
template <typename HashEntryTy>
EntryFactory<HashEntryTy>::EntryFactory()
{
}

template <typename HashEntryTy>
EntryFactory<HashEntryTy>::~EntryFactory()
{
}

template <typename HashEntryTy>
void EntryFactory<HashEntryTy>::destroy(HashEntryTy* pEntry)
{
  delete pEntry;
}

template <typename HashEntryTy>
HashEntryTy*
EntryFactory<HashEntryTy>::produce(const typename EntryFactory<HashEntryTy>::key_type& pKey)
{
  return new HashEntryTy(pKey);
}
