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