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