1 //===- WildcardPattern.h --------------------------------------------------===//
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 #ifndef MCLD_SCRIPT_WILDCARDPATTERN_H_
10 #define MCLD_SCRIPT_WILDCARDPATTERN_H_
11 
12 #include "mcld/Config/Config.h"
13 #include "mcld/Script/StrToken.h"
14 #include "mcld/Support/Allocators.h"
15 
16 #include <llvm/ADT/StringRef.h>
17 
18 namespace mcld {
19 
20 /** \class WildcardPattern
21  *  \brief This class defines the interfaces to Input Section Wildcard Patterns
22  */
23 
24 class WildcardPattern : public StrToken {
25  public:
26   enum SortPolicy {
27     SORT_NONE,
28     SORT_BY_NAME,
29     SORT_BY_ALIGNMENT,
30     SORT_BY_NAME_ALIGNMENT,
31     SORT_BY_ALIGNMENT_NAME,
32     SORT_BY_INIT_PRIORITY
33   };
34 
35  private:
36   friend class Chunk<WildcardPattern, MCLD_SYMBOLS_PER_INPUT>;
37   WildcardPattern();
38   WildcardPattern(const std::string& pPattern, SortPolicy pPolicy);
39 
40  public:
41   ~WildcardPattern();
42 
sortPolicy()43   SortPolicy sortPolicy() const { return m_SortPolicy; }
44 
isPrefix()45   bool isPrefix() const { return m_bIsPrefix; }
46 
47   llvm::StringRef prefix() const;
48 
classof(const StrToken * pToken)49   static bool classof(const StrToken* pToken) {
50     return pToken->kind() == StrToken::Wildcard;
51   }
52 
53   /* factory method */
54   static WildcardPattern* create(const std::string& pPattern,
55                                  SortPolicy pPolicy);
56   static void destroy(WildcardPattern*& pToken);
57   static void clear();
58 
59  private:
60   SortPolicy m_SortPolicy;
61   bool m_bIsPrefix;
62 };
63 
64 }  // namespace mcld
65 
66 #endif  // MCLD_SCRIPT_WILDCARDPATTERN_H_
67