|
Boost Users : |
Subject: Re: [Boost-users] large variant performance compared (50 elements)
From: Paul (peebor_at_[hidden])
Date: 2011-01-17 15:18:54
la> [snip]
> Could you post a test driver showing the problem.
> I'd like to see how:
In rough (but working) code:
class CVisitBinary
: public static_visitor<bool>
{
public:
template<typename T, typename U>
bool operator()(const T&, const U&) const
{
return false;
}
template<typename T>
bool operator()(const T&, const T&) const
{
return true;
}
};
template<typename Typelist, typename ElementType1, typename ElementType2>
void TestVariantBinary()
{
typedef Layout::make_variant_over<Typelist>::type variant_t;
variant_t v1_1(boost::shared_ptr<ElementType1>(new ElementType1));
variant_t v1_2(boost::shared_ptr<ElementType1>(new ElementType1));
variant_t v2_1(boost::shared_ptr<ElementType2>(new ElementType2));
BOOST_CHECK(apply_visitor(CVisitBinary(), v1_1, v1_2)); //Same type
BOOST_CHECK(apply_visitor(CVisitBinary(), v1_1, v1_1)); //Same type,
same instance
BOOST_CHECK(!apply_visitor(CVisitBinary(), v1_1, v2_1)); //Different
types
}
//Generate 200 types (class C1, C2, ... C200)
#define BOOST_PP_LOCAL_MACRO(n) \
class BOOST_PP_CAT(I, n) \
{ \
public: \
}; \
\
class BOOST_PP_CAT(C, n) \
: public BOOST_PP_CAT(I, n) \
{ \
public: \
int i; \
};
#define BOOST_PP_LOCAL_LIMITS (0, 200)
#include BOOST_PP_LOCAL_ITERATE()
//Generate mpl sequences
#define SHARED_PTR_C(z, n, data) boost::shared_ptr<BOOST_PP_CAT(C, n)>
#define SHARED_PTR_I(z, n, data) boost::shared_ptr<BOOST_PP_CAT(I, n)>
typedef boost::mpl::vector10<BOOST_PP_ENUM(10, SHARED_PTR_C, 0)>
MplVectorC10_t;
void test()
{
TestVariantBinary<MplVectorC10_t, C3, C4>(); //2 phase visitation
giving 100 paths
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net