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 15 using namespace mcld; 16 17 typedef GCFactory<WildcardPattern, 18 MCLD_SYMBOLS_PER_INPUT> WildcardPatternFactory; 19 static llvm::ManagedStatic<WildcardPatternFactory> g_WildcardPatternFactory; 20 21 //===----------------------------------------------------------------------===// 22 // WildcardPattern 23 //===----------------------------------------------------------------------===// WildcardPattern()24WildcardPattern::WildcardPattern() 25 : m_bIsPrefix(false) 26 { 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 { 33 if (pPattern.find_first_of('*') == (pPattern.size() - 1)) 34 m_bIsPrefix = true; 35 else 36 m_bIsPrefix = false; 37 } 38 ~WildcardPattern()39WildcardPattern::~WildcardPattern() 40 { 41 } 42 prefix() const43llvm::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 create(const std::string & pPattern,SortPolicy pPolicy)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 destroy(WildcardPattern * & pWildcardPattern)59void WildcardPattern::destroy(WildcardPattern*& pWildcardPattern) 60 { 61 g_WildcardPatternFactory->destroy(pWildcardPattern); 62 g_WildcardPatternFactory->deallocate(pWildcardPattern); 63 pWildcardPattern = NULL; 64 } 65 clear()66void WildcardPattern::clear() 67 { 68 g_WildcardPatternFactory->clear(); 69 } 70