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/Support/Allocators.h> 13#include <mcld/Config/Config.h> 14#include <string> 15 16namespace mcld 17{ 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 24class StrToken 25{ 26public: 27 enum Kind { 28 Unknown, 29 String, 30 Input, 31 Wildcard 32 }; 33 34private: 35 friend class Chunk<StrToken, MCLD_SYMBOLS_PER_INPUT>; 36protected: 37 StrToken(); 38 StrToken(Kind pKind, const std::string& pString); 39 40public: 41 virtual ~StrToken(); 42 43 Kind kind() const { return m_Kind; } 44 45 const std::string& name() const { return m_Name; } 46 47 static bool classof(const StrToken* pToken) 48 { 49 return pToken->kind() == StrToken::String; 50 } 51 52 /* factory method */ 53 static StrToken* create(const std::string& pString); 54 static void destroy(StrToken*& pToken); 55 static void clear(); 56 57private: 58 Kind m_Kind; 59 std::string m_Name; 60}; 61 62} // namepsace of mcld 63 64#endif 65