Chris@16: /*============================================================================= Chris@16: Boost.Wave: A Standard compliant C++ preprocessor library Chris@16: Chris@16: http://www.boost.org/ Chris@16: Chris@16: Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost Chris@16: Software License, Version 1.0. (See accompanying file Chris@16: LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: Chris@16: #if !defined(SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED) Chris@16: #define SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #if BOOST_WAVE_SERIALIZATION != 0 Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #else Chris@16: #include Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: // this must occur after all of the includes and before any code appears Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: #include BOOST_ABI_PREFIX Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: namespace boost { Chris@16: namespace wave { Chris@16: namespace util { Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // The symbol_table class is used for the storage of defined macros. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: struct symbol_table Chris@16: #if BOOST_WAVE_SERIALIZATION != 0 Chris@16: : public std::map > Chris@16: #else Chris@16: : public std::map > Chris@16: #endif Chris@16: { Chris@16: #if BOOST_WAVE_SERIALIZATION != 0 Chris@16: typedef std::map > base_type; Chris@16: #else Chris@16: typedef std::map > base_type; Chris@16: #endif Chris@16: typedef typename base_type::iterator iterator_type; Chris@16: typedef typename base_type::const_iterator const_iterator_type; Chris@16: Chris@16: symbol_table(long uid_ = 0) Chris@16: {} Chris@16: Chris@16: #if BOOST_WAVE_SERIALIZATION != 0 Chris@16: private: Chris@16: friend class boost::serialization::access; Chris@16: template Chris@16: void serialize(Archive &ar, const unsigned int version) Chris@16: { Chris@16: using namespace boost::serialization; Chris@16: ar & make_nvp("symbol_table", Chris@16: boost::serialization::base_object(*this)); Chris@16: } Chris@16: #endif Chris@16: Chris@16: private: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // This is a special iterator allowing to iterate the names of all defined Chris@16: // macros. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct get_first Chris@16: { Chris@16: typedef StringT1 const& result_type; Chris@16: Chris@16: template Chris@16: StringT1 const& operator() (std::pair const& p) const Chris@16: { Chris@16: return p.first; Chris@16: } Chris@16: }; Chris@16: typedef get_first unary_functor; Chris@16: Chris@16: public: Chris@16: typedef transform_iterator Chris@16: name_iterator; Chris@16: typedef transform_iterator Chris@16: const_name_iterator; Chris@16: Chris@16: template Chris@16: static Chris@16: transform_iterator make_iterator(Iterator it) Chris@16: { Chris@16: return boost::make_transform_iterator(it); Chris@16: } Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: } // namespace util Chris@16: } // namespace wave Chris@16: } // namespace boost Chris@16: Chris@16: // the suffix header occurs after all of the code Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: #include BOOST_ABI_SUFFIX Chris@16: #endif Chris@16: Chris@16: #endif // !defined(SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED)