1 //===- StrToken.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_STRTOKEN_H_
10 #define MCLD_SCRIPT_STRTOKEN_H_
11 
12 #include "mcld/Config/Config.h"
13 #include "mcld/Support/Allocators.h"
14 
15 #include <string>
16 
17 namespace mcld {
18 
19 /** \class StrToken
20  *  \brief This class defines the interfaces to a element in EXCLUDE_FILE list
21  *         or in Output Section Phdr, or be a base class of other str token.
22  */
23 
24 class StrToken {
25  public:
26   enum Kind { Unknown, String, Input, Wildcard };
27 
28  private:
29   friend class Chunk<StrToken, MCLD_SYMBOLS_PER_INPUT>;
30 
31  protected:
32   StrToken();
33   StrToken(Kind pKind, const std::string& pString);
34 
35  public:
36   virtual ~StrToken();
37 
kind()38   Kind kind() const { return m_Kind; }
39 
name()40   const std::string& name() const { return m_Name; }
41 
classof(const StrToken * pToken)42   static bool classof(const StrToken* pToken) {
43     return pToken->kind() == StrToken::String;
44   }
45 
46   /* factory method */
47   static StrToken* create(const std::string& pString);
48   static void destroy(StrToken*& pToken);
49   static void clear();
50 
51  private:
52   Kind m_Kind;
53   std::string m_Name;
54 };
55 
56 }  // namespace mcld
57 
58 #endif  // MCLD_SCRIPT_STRTOKEN_H_
59