WildcardPattern.cpp revision 87f34658dec9097d987d254a990ea7f311bfc95f
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