1//===- WildcardPattern.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/WildcardPattern.h>
10#include <mcld/Support/raw_ostream.h>
11#include <mcld/Support/GCFactory.h>
12#include <llvm/Support/ManagedStatic.h>
13#include <cassert>
14
15using namespace mcld;
16
17typedef GCFactory<WildcardPattern,
18                  MCLD_SYMBOLS_PER_INPUT> WildcardPatternFactory;
19static llvm::ManagedStatic<WildcardPatternFactory> g_WildcardPatternFactory;
20
21//===----------------------------------------------------------------------===//
22// WildcardPattern
23//===----------------------------------------------------------------------===//
24WildcardPattern::WildcardPattern()
25  : m_bIsPrefix(false)
26{
27}
28
29WildcardPattern::WildcardPattern(const std::string& pPattern,
30                                 SortPolicy pPolicy)
31  : StrToken(StrToken::Wildcard, pPattern), m_SortPolicy(pPolicy)
32{
33  if (pPattern.find_first_of('*') == (pPattern.size() - 1))
34    m_bIsPrefix = true;
35  else
36    m_bIsPrefix = false;
37}
38
39WildcardPattern::~WildcardPattern()
40{
41}
42
43llvm::StringRef WildcardPattern::prefix() const
44{
45  if (isPrefix())
46    return llvm::StringRef(name().c_str(), name().size() - 1);
47
48  return llvm::StringRef(name());
49}
50
51WildcardPattern* WildcardPattern::create(const std::string& pPattern,
52                                         SortPolicy pPolicy)
53{
54  WildcardPattern* result = g_WildcardPatternFactory->allocate();
55  new (result) WildcardPattern(pPattern, pPolicy);
56  return result;
57}
58
59void WildcardPattern::destroy(WildcardPattern*& pWildcardPattern)
60{
61  g_WildcardPatternFactory->destroy(pWildcardPattern);
62  g_WildcardPatternFactory->deallocate(pWildcardPattern);
63  pWildcardPattern = NULL;
64}
65
66void WildcardPattern::clear()
67{
68  g_WildcardPatternFactory->clear();
69}
70