1 // Boost.Geometry Index 2 // 3 // Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland. 4 // 5 // Use, modification and distribution is subject to the Boost Software License, 6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 9 #ifndef BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP 10 #define BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP 11 12 namespace boost { namespace geometry { namespace index { 13 14 namespace detail { 15 16 template <typename IndexableGetter, typename EqualTo> 17 struct translator 18 : public IndexableGetter 19 , public EqualTo 20 { 21 typedef typename IndexableGetter::result_type result_type; 22 translatorboost::geometry::index::detail::translator23 translator(IndexableGetter const& i, EqualTo const& e) 24 : IndexableGetter(i), EqualTo(e) 25 {} 26 27 template <typename Value> operator ()boost::geometry::index::detail::translator28 result_type operator()(Value const& value) const 29 { 30 return IndexableGetter::operator()(value); 31 } 32 33 template <typename Value> equalsboost::geometry::index::detail::translator34 bool equals(Value const& v1, Value const& v2) const 35 { 36 return EqualTo::operator()(v1, v2); 37 } 38 }; 39 40 template <typename IndexableGetter> 41 struct result_type 42 { 43 typedef typename IndexableGetter::result_type type; 44 }; 45 46 template <typename IndexableGetter> 47 struct indexable_type 48 { 49 typedef typename boost::remove_const< 50 typename boost::remove_reference< 51 typename result_type<IndexableGetter>::type 52 >::type 53 >::type type; 54 }; 55 56 } // namespace detail 57 58 }}} // namespace boost::geometry::index 59 60 #endif // BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP 61