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
18namespace mcld {
19
20/** \class WildcardPattern
21 *  \brief This class defines the interfaces to Input Section Wildcard Patterns
22 */
23
24class 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
43  SortPolicy sortPolicy() const { return m_SortPolicy; }
44
45  bool isPrefix() const { return m_bIsPrefix; }
46
47  llvm::StringRef prefix() const;
48
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