1 //===- StringList.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_STRINGLIST_H_
10 #define MCLD_SCRIPT_STRINGLIST_H_
11 
12 #include "mcld/Config/Config.h"
13 #include "mcld/Support/Allocators.h"
14 
15 #include <vector>
16 
17 namespace mcld {
18 
19 class StrToken;
20 
21 /** \class StringList
22  *  \brief This class defines the interfaces to StringList.
23  */
24 
25 class StringList {
26  public:
27   typedef std::vector<StrToken*> Tokens;
28   typedef Tokens::const_iterator const_iterator;
29   typedef Tokens::iterator iterator;
30   typedef Tokens::const_reference const_reference;
31   typedef Tokens::reference reference;
32 
33  private:
34   friend class Chunk<StringList, MCLD_SYMBOLS_PER_INPUT>;
35   StringList();
36 
37  public:
38   ~StringList();
39 
begin()40   const_iterator begin() const { return m_Tokens.begin(); }
begin()41   iterator begin() { return m_Tokens.begin(); }
end()42   const_iterator end() const { return m_Tokens.end(); }
end()43   iterator end() { return m_Tokens.end(); }
44 
front()45   const_reference front() const { return m_Tokens.front(); }
front()46   reference front() { return m_Tokens.front(); }
back()47   const_reference back() const { return m_Tokens.back(); }
back()48   reference back() { return m_Tokens.back(); }
49 
empty()50   bool empty() const { return m_Tokens.empty(); }
51 
52   void push_back(StrToken* pToken);
53 
54   void dump() const;
55 
56   /* factory methods */
57   static StringList* create();
58   static void destroy(StringList*& pStringList);
59   static void clear();
60 
61  private:
62   Tokens m_Tokens;
63 };
64 
65 }  // namespace mcld
66 
67 #endif  // MCLD_SCRIPT_STRINGLIST_H_
68