1//===- StrToken.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/Script/StrToken.h"
10
11#include "mcld/Support/GCFactory.h"
12
13#include <llvm/Support/ManagedStatic.h>
14
15namespace mcld {
16
17typedef GCFactory<StrToken, MCLD_SYMBOLS_PER_INPUT> StrTokenFactory;
18static llvm::ManagedStatic<StrTokenFactory> g_StrTokenFactory;
19
20//===----------------------------------------------------------------------===//
21// StrToken
22//===----------------------------------------------------------------------===//
23StrToken::StrToken() : m_Kind(Unknown) {
24}
25
26StrToken::StrToken(Kind pKind, const std::string& pString)
27    : m_Kind(pKind), m_Name(pString) {
28}
29
30StrToken::~StrToken() {
31}
32
33StrToken* StrToken::create(const std::string& pString) {
34  StrToken* result = g_StrTokenFactory->allocate();
35  new (result) StrToken(String, pString);
36  return result;
37}
38
39void StrToken::destroy(StrToken*& pStrToken) {
40  g_StrTokenFactory->destroy(pStrToken);
41  g_StrTokenFactory->deallocate(pStrToken);
42  pStrToken = NULL;
43}
44
45void StrToken::clear() {
46  g_StrTokenFactory->clear();
47}
48
49}  // namespace mcld
50