// //======================================================================= // Author: Jeremiah Willcock // // Copyright 2012, Trustees of Indiana University // // 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) //======================================================================= // #include #include #include #include #include template struct add1 {typedef T result_type; T operator()(const T& x) const {return x + 1;}}; template struct add1_val {typedef T result_type; T operator()(T x) const {return x + 1;}}; template struct return_fixed_ref { int* ptr; return_fixed_ref(int* ptr): ptr(ptr) {} typedef int& result_type; int& operator()(const T&) const {return *ptr;} }; int test_main(int, char**) { using namespace boost; BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept, int>, int>)); BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept, int, double>, int>)); BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept, int>, int>)); BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept, int, double>, int>)); BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept, int>, int>)); BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept, int>, int>)); BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept, int>, int>)); BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept, int>, int>)); BOOST_STATIC_ASSERT((boost::is_same, int> >::category, boost::readable_property_map_tag>::value)); BOOST_STATIC_ASSERT((boost::is_same, int> >::category, boost::readable_property_map_tag>::value)); BOOST_STATIC_ASSERT((boost::is_same, int> >::category, boost::lvalue_property_map_tag>::value)); BOOST_CHECK(get(function_property_map, int>(), 3) == 4); BOOST_CHECK(get(function_property_map, int>(add1()), 4) == 5); BOOST_CHECK(get(make_function_property_map(add1()), 5) == 6); BOOST_CHECK(get(function_property_map, int>(), 3) == 4); BOOST_CHECK(get(function_property_map, int>(add1_val()), 4) == 5); BOOST_CHECK(get(make_function_property_map(add1_val()), 5) == 6); int val; const function_property_map, int> pm = return_fixed_ref((&val)); put(pm, 1, 6); BOOST_CHECK(get(pm, 2) == 6); BOOST_CHECK((get(pm, 3) = 7) == 7); BOOST_CHECK(get(pm, 4) == 7); const function_property_map, int> pm2 = pm; // Check shallow copying BOOST_CHECK(get(pm2, 5) == 7); put(pm2, 3, 1); BOOST_CHECK(get(pm, 1) == 1); return 0; }