You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
120 lines
3.7 KiB
120 lines
3.7 KiB
/*============================================================================= |
|
Boost.Wave: A Standard compliant C++ preprocessor library |
|
|
|
http://www.boost.org/ |
|
|
|
Copyright (c) 2001-2011 Hartmut Kaiser. Distributed under the Boost |
|
Software License, Version 1.0. (See accompanying file |
|
LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
=============================================================================*/ |
|
|
|
#if !defined(SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED) |
|
#define SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED |
|
|
|
#include <map> |
|
|
|
#include <boost/wave/wave_config.hpp> |
|
#include <boost/intrusive_ptr.hpp> |
|
|
|
#if BOOST_WAVE_SERIALIZATION != 0 |
|
#include <boost/serialization/serialization.hpp> |
|
#include <boost/serialization/map.hpp> |
|
#include <boost/shared_ptr.hpp> |
|
#else |
|
#include <boost/intrusive_ptr.hpp> |
|
#endif |
|
|
|
#include <boost/iterator/transform_iterator.hpp> |
|
|
|
// this must occur after all of the includes and before any code appears |
|
#ifdef BOOST_HAS_ABI_HEADERS |
|
#include BOOST_ABI_PREFIX |
|
#endif |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
namespace boost { |
|
namespace wave { |
|
namespace util { |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
// |
|
// The symbol_table class is used for the storage of defined macros. |
|
// |
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
template <typename StringT, typename MacroDefT> |
|
struct symbol_table |
|
#if BOOST_WAVE_SERIALIZATION != 0 |
|
: public std::map<StringT, boost::shared_ptr<MacroDefT> > |
|
#else |
|
: public std::map<StringT, boost::intrusive_ptr<MacroDefT> > |
|
#endif |
|
{ |
|
#if BOOST_WAVE_SERIALIZATION != 0 |
|
typedef std::map<StringT, boost::shared_ptr<MacroDefT> > base_type; |
|
#else |
|
typedef std::map<StringT, boost::intrusive_ptr<MacroDefT> > base_type; |
|
#endif |
|
typedef typename base_type::iterator iterator_type; |
|
typedef typename base_type::const_iterator const_iterator_type; |
|
|
|
symbol_table(long uid_ = 0) |
|
{} |
|
|
|
#if BOOST_WAVE_SERIALIZATION != 0 |
|
private: |
|
friend class boost::serialization::access; |
|
template<typename Archive> |
|
void serialize(Archive &ar, const unsigned int version) |
|
{ |
|
using namespace boost::serialization; |
|
ar & make_nvp("symbol_table", |
|
boost::serialization::base_object<base_type>(*this)); |
|
} |
|
#endif |
|
|
|
private: |
|
/////////////////////////////////////////////////////////////////////////// |
|
// |
|
// This is a special iterator allowing to iterate the names of all defined |
|
// macros. |
|
// |
|
/////////////////////////////////////////////////////////////////////////// |
|
template <typename StringT1> |
|
struct get_first |
|
{ |
|
typedef StringT1 const& result_type; |
|
|
|
template <typename First, typename Second> |
|
StringT1 const& operator() (std::pair<First, Second> const& p) const |
|
{ |
|
return p.first; |
|
} |
|
}; |
|
typedef get_first<StringT> unary_functor; |
|
|
|
public: |
|
typedef transform_iterator<unary_functor, iterator_type> |
|
name_iterator; |
|
typedef transform_iterator<unary_functor, const_iterator_type> |
|
const_name_iterator; |
|
|
|
template <typename Iterator> |
|
static |
|
transform_iterator<unary_functor, Iterator> make_iterator(Iterator it) |
|
{ |
|
return boost::make_transform_iterator<unary_functor>(it); |
|
} |
|
}; |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
} // namespace util |
|
} // namespace wave |
|
} // namespace boost |
|
|
|
// the suffix header occurs after all of the code |
|
#ifdef BOOST_HAS_ABI_HEADERS |
|
#include BOOST_ABI_SUFFIX |
|
#endif |
|
|
|
#endif // !defined(SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED)
|
|
|