1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- StringList.cpp ----------------------------------------------------===//
2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//                     The MCLinker Project
4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source
6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details.
7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/StringList.h"
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/StrToken.h"
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h"
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/raw_ostream.h"
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines
15f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/Support/ManagedStatic.h>
16f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
18f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinestypedef GCFactory<StringList, MCLD_SYMBOLS_PER_INPUT> StringListFactory;
20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesstatic llvm::ManagedStatic<StringListFactory> g_StringListFactory;
21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
23f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// StringList
24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
2537b74a387bb3993387029859c2d9d051c41c724eStephen HinesStringList::StringList() {
26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
27f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
2837b74a387bb3993387029859c2d9d051c41c724eStephen HinesStringList::~StringList() {
29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
30f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid StringList::push_back(StrToken* pToken) {
32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  m_Tokens.push_back(pToken);
33f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid StringList::dump() const {
36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  for (const_iterator it = begin(), ie = end(); it != ie; ++it)
37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines    mcld::outs() << (*it)->name() << "\t";
38f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  mcld::outs() << "\n";
39f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
4137b74a387bb3993387029859c2d9d051c41c724eStephen HinesStringList* StringList::create() {
42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  StringList* result = g_StringListFactory->allocate();
43f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  new (result) StringList();
44f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return result;
45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
4737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid StringList::destroy(StringList*& pStringList) {
48f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_StringListFactory->destroy(pStringList);
49f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_StringListFactory->deallocate(pStringList);
50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  pStringList = NULL;
51f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
5337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid StringList::clear() {
54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_StringListFactory->clear();
55f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines
5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
58