Home | History | Annotate | Download | only in Script
      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 
     17 namespace mcld {
     18 
     19 typedef GCFactory<WildcardPattern, MCLD_SYMBOLS_PER_INPUT>
     20     WildcardPatternFactory;
     21 static llvm::ManagedStatic<WildcardPatternFactory> g_WildcardPatternFactory;
     22 
     23 //===----------------------------------------------------------------------===//
     24 // WildcardPattern
     25 //===----------------------------------------------------------------------===//
     26 WildcardPattern::WildcardPattern() : m_bIsPrefix(false) {
     27 }
     28 
     29 WildcardPattern::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 
     38 WildcardPattern::~WildcardPattern() {
     39 }
     40 
     41 llvm::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 
     48 WildcardPattern* 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 
     55 void WildcardPattern::destroy(WildcardPattern*& pWildcardPattern) {
     56   g_WildcardPatternFactory->destroy(pWildcardPattern);
     57   g_WildcardPatternFactory->deallocate(pWildcardPattern);
     58   pWildcardPattern = NULL;
     59 }
     60 
     61 void WildcardPattern::clear() {
     62   g_WildcardPatternFactory->clear();
     63 }
     64 
     65 }  // namespace mcld
     66