diff options
Diffstat (limited to 'boost/geometry/index/detail/translator.hpp')
-rw-r--r-- | boost/geometry/index/detail/translator.hpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/boost/geometry/index/detail/translator.hpp b/boost/geometry/index/detail/translator.hpp new file mode 100644 index 0000000000..f377c720aa --- /dev/null +++ b/boost/geometry/index/detail/translator.hpp @@ -0,0 +1,60 @@ +// Boost.Geometry Index +// +// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland. +// +// Use, modification and distribution is subject to 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) + +#ifndef BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP +#define BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP + +namespace boost { namespace geometry { namespace index { + +namespace detail { + +template <typename IndexableGetter, typename EqualTo> +struct translator + : public IndexableGetter + , public EqualTo +{ + typedef typename IndexableGetter::result_type result_type; + + translator(IndexableGetter const& i, EqualTo const& e) + : IndexableGetter(i), EqualTo(e) + {} + + template <typename Value> + result_type operator()(Value const& value) const + { + return IndexableGetter::operator()(value); + } + + template <typename Value> + bool equals(Value const& v1, Value const& v2) const + { + return EqualTo::operator()(v1, v2); + } +}; + +template <typename IndexableGetter> +struct result_type +{ + typedef typename IndexableGetter::result_type type; +}; + +template <typename IndexableGetter> +struct indexable_type +{ + typedef typename boost::remove_const< + typename boost::remove_reference< + typename result_type<IndexableGetter>::type + >::type + >::type type; +}; + +} // namespace detail + +}}} // namespace boost::geometry::index + +#endif // BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP |