//===- WildcardPattern.cpp ------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/Script/WildcardPattern.h" #include "mcld/Support/GCFactory.h" #include "mcld/Support/raw_ostream.h" #include <llvm/Support/ManagedStatic.h> #include <cassert> namespace mcld { typedef GCFactory<WildcardPattern, MCLD_SYMBOLS_PER_INPUT> WildcardPatternFactory; static llvm::ManagedStatic<WildcardPatternFactory> g_WildcardPatternFactory; //===----------------------------------------------------------------------===// // WildcardPattern //===----------------------------------------------------------------------===// WildcardPattern::WildcardPattern() : m_bIsPrefix(false) { } WildcardPattern::WildcardPattern(const std::string& pPattern, SortPolicy pPolicy) : StrToken(StrToken::Wildcard, pPattern), m_SortPolicy(pPolicy) { if (pPattern.find_first_of('*') == (pPattern.size() - 1)) m_bIsPrefix = true; else m_bIsPrefix = false; } WildcardPattern::~WildcardPattern() { } llvm::StringRef WildcardPattern::prefix() const { if (isPrefix()) return llvm::StringRef(name().c_str(), name().size() - 1); return llvm::StringRef(name()); } WildcardPattern* WildcardPattern::create(const std::string& pPattern, SortPolicy pPolicy) { WildcardPattern* result = g_WildcardPatternFactory->allocate(); new (result) WildcardPattern(pPattern, pPolicy); return result; } void WildcardPattern::destroy(WildcardPattern*& pWildcardPattern) { g_WildcardPatternFactory->destroy(pWildcardPattern); g_WildcardPatternFactory->deallocate(pWildcardPattern); pWildcardPattern = NULL; } void WildcardPattern::clear() { g_WildcardPatternFactory->clear(); } } // namespace mcld