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 17 namespace mcld { 18 19 typedef GCFactory<WildcardPattern, MCLD_SYMBOLS_PER_INPUT> 20 WildcardPatternFactory; 21 static llvm::ManagedStatic<WildcardPatternFactory> g_WildcardPatternFactory; 22 23 //===----------------------------------------------------------------------===// 24 // WildcardPattern 25 //===----------------------------------------------------------------------===// WildcardPattern()26WildcardPattern::WildcardPattern() : m_bIsPrefix(false) { 27 } 28 WildcardPattern(const std::string & pPattern,SortPolicy pPolicy)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 ~WildcardPattern()38WildcardPattern::~WildcardPattern() { 39 } 40 prefix() const41llvm::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 create(const std::string & pPattern,SortPolicy pPolicy)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 destroy(WildcardPattern * & pWildcardPattern)55void WildcardPattern::destroy(WildcardPattern*& pWildcardPattern) { 56 g_WildcardPatternFactory->destroy(pWildcardPattern); 57 g_WildcardPatternFactory->deallocate(pWildcardPattern); 58 pWildcardPattern = NULL; 59 } 60 clear()61void WildcardPattern::clear() { 62 g_WildcardPatternFactory->clear(); 63 } 64 65 } // namespace mcld 66