1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- WildcardPattern.cpp ------------------------------------------------===// 2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// The MCLinker Project 4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source 6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details. 7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/WildcardPattern.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/raw_ostream.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines 14f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/Support/ManagedStatic.h> 15f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <cassert> 16f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 18f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestypedef GCFactory<WildcardPattern, MCLD_SYMBOLS_PER_INPUT> 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines WildcardPatternFactory; 21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesstatic llvm::ManagedStatic<WildcardPatternFactory> g_WildcardPatternFactory; 22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 23f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// WildcardPattern 25f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 2637b74a387bb3993387029859c2d9d051c41c724eStephen HinesWildcardPattern::WildcardPattern() : m_bIsPrefix(false) { 27f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 28f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesWildcardPattern::WildcardPattern(const std::string& pPattern, 30f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines SortPolicy pPolicy) 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines : StrToken(StrToken::Wildcard, pPattern), m_SortPolicy(pPolicy) { 32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (pPattern.find_first_of('*') == (pPattern.size() - 1)) 33f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bIsPrefix = true; 34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines else 35f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_bIsPrefix = false; 36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 3837b74a387bb3993387029859c2d9d051c41c724eStephen HinesWildcardPattern::~WildcardPattern() { 39f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesllvm::StringRef WildcardPattern::prefix() const { 42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (isPrefix()) 43f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return llvm::StringRef(name().c_str(), name().size() - 1); 44f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return llvm::StringRef(name()); 46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 48f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesWildcardPattern* WildcardPattern::create(const std::string& pPattern, 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines SortPolicy pPolicy) { 50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines WildcardPattern* result = g_WildcardPatternFactory->allocate(); 51f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines new (result) WildcardPattern(pPattern, pPolicy); 52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return result; 53f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid WildcardPattern::destroy(WildcardPattern*& pWildcardPattern) { 56f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines g_WildcardPatternFactory->destroy(pWildcardPattern); 57f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines g_WildcardPatternFactory->deallocate(pWildcardPattern); 58f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pWildcardPattern = NULL; 59f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 60f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid WildcardPattern::clear() { 62f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines g_WildcardPatternFactory->clear(); 63f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 66