Update of /cvsroot/boost/boost/boost/fusion/sequence/adapted/struct
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv6579/struct
Added Files:
adapt_struct.hpp
Log Message:
added BOOST_SPIRIT_ADAPT_STRUCT macro
--- NEW FILE: adapt_struct.hpp ---
/*=============================================================================
Copyright (c) 2001-2007 Joel de Guzman
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(BOOST_FUSION_ADAPT_STRUCT_APRIL_2_2007_1158AM)
#define BOOST_FUSION_ADAPT_STRUCT_APRIL_2_2007_1158AM
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <boost/fusion/sequence/adapted/struct/extension.hpp>
#include <boost/fusion/sequence/adapted/struct/struct_iterator.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/is_sequence_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/category_of_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/begin_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/end_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/size_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/sequence/adapted/struct/detail/value_at_impl.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/mpl/int.hpp>
#include <utility>
#define BOOST_SPIRIT_ADAPT_STRUCT(name, bseq)
\
BOOST_SPIRIT_ADAPT_STRUCT_I(
\
name, BOOST_PP_CAT(BOOST_SPIRIT_ADAPT_STRUCT_X bseq, 0))
\
/***/
#define BOOST_SPIRIT_ADAPT_STRUCT_X(x, y) ((x, y)) BOOST_SPIRIT_ADAPT_STRUCT_Y
#define BOOST_SPIRIT_ADAPT_STRUCT_Y(x, y) ((x, y)) BOOST_SPIRIT_ADAPT_STRUCT_X
#define BOOST_SPIRIT_ADAPT_STRUCT_X0
#define BOOST_SPIRIT_ADAPT_STRUCT_Y0
// BOOST_SPIRIT_ADAPT_STRUCT_I generates the overarching structure and uses
// SEQ_FOR_EACH_I to generate the "linear" substructures.
// Thanks to Paul Mensonides for the PP macro help
#define BOOST_SPIRIT_ADAPT_STRUCT_I(name, seq)
\
namespace boost { namespace fusion { namespace traits
\
{
\
template <>
\
struct tag_of<name>
\
{
\
typedef struct_tag type;
\
};
\
}}}
\
namespace boost { namespace fusion { namespace extension
\
{
\
template <>
\
struct struct_size<name> : mpl::int_<BOOST_PP_SEQ_SIZE(seq)> {};
\
BOOST_PP_SEQ_FOR_EACH_I(BOOST_SPIRIT_ADAPT_STRUCT_C, name, seq)
\
}}}
\
/***/
#define BOOST_SPIRIT_ADAPT_STRUCT_C(r, name, i, xy)
\
template <>
\
struct struct_member<name, i>
\
{
\
typedef BOOST_PP_TUPLE_ELEM(2, 0, xy) type;
\
static type& call(name& struct_)
\
{
\
return struct_.BOOST_PP_TUPLE_ELEM(2, 1, xy);
\
};
\
};
\
/***/
#endif
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs