| //===- SymbolTableFactory.h -----------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_SYMBOL_TABLE_FACTORY_H |
| #define MCLD_SYMBOL_TABLE_FACTORY_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| #include "mcld/LD/InputSymbolTable.h" |
| #include "mcld/LD/OutputSymbolTable.h" |
| |
| namespace mcld |
| { |
| |
| class StringTable; |
| class StrSymPool; |
| |
| /** \class SymbolTableFactory |
| * \brief SymbolTableFactory manages SymbolTableIFs. |
| * |
| * SymbolTableFactory is responsed for construction and destruction of |
| * SymbolTableIF. Since different MCLDFiles have different type of |
| * SymbolTableIF, SymbolTableFactory separates the construction of |
| * SymbolTableIF into createInputTable() and createOutputTable(). |
| * |
| * @see SymbolTableIF InputSymbolTable OutputSymbolTable |
| */ |
| class SymbolTableFactory |
| { |
| public: |
| /// SymbolTableFactory - constructor |
| // @param pNumOfSymbolTables is the most appropriate number of created |
| // symbol tables. |
| // @param pStorage the real storage of created symbols |
| explicit SymbolTableFactory(size_t pNumOfSymbolTables, |
| StrSymPool& pStrSymPool); |
| /// ~SymbolTableFactory - destructor |
| // destructor destroys all created symbol tables. |
| ~SymbolTableFactory(); |
| |
| /// createInputTable - create a symbol table for an input file |
| // @param pEntireStringTable the string table of created Symbols. |
| // @param pDynamicStringTable the string table of created Dynamic Symbols. |
| // @param pReserve Created symbol table must reserve pReserve number of |
| // storages of symbol for creating symbols. |
| SymbolTableIF *createInputTable(StringTable &pEntireStringTable, |
| StringTable &pDynamicStringTable, |
| size_t pReserve=256); |
| |
| /// createOutputTable - create a symbol table for an output file |
| // @param pEntireStringTable the string table of created Symbols. |
| // @param pDynamicStringTable the string table of created Dynamic Symbols. |
| // @param pReserve Created symbol table must reserve pReserve number of |
| // storages of symbol for creating symbols. |
| SymbolTableIF *createOutputTable(StringTable &pEntireStringTable, |
| StringTable &pDynamicStringTable, |
| size_t pReserve=256); |
| private: |
| StrSymPool &m_StrSymPool; |
| GCFactory<InputSymbolTable, 0> m_InputFactory; |
| GCFactory<OutputSymbolTable, 0> m_OutputFactory; |
| |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |