X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=boost_ext%2Fboost%2Fbimap%2Fcontainer_adaptor%2Fdetail%2Fidentity_converters.hpp;fp=boost_ext%2Fboost%2Fbimap%2Fcontainer_adaptor%2Fdetail%2Fidentity_converters.hpp;h=f6f5864122f242f737b29aaa2ed09f6de58a947b;hb=4123b4fe58a7fd4659fa01476581690b47c83600;hp=0000000000000000000000000000000000000000;hpb=79564b90f6c9f7cd0bc5b11a6146bb7067b11a75;p=senf.git diff --git a/boost_ext/boost/bimap/container_adaptor/detail/identity_converters.hpp b/boost_ext/boost/bimap/container_adaptor/detail/identity_converters.hpp new file mode 100644 index 0000000..f6f5864 --- /dev/null +++ b/boost_ext/boost/bimap/container_adaptor/detail/identity_converters.hpp @@ -0,0 +1,191 @@ +// Boost.Bimap +// +// Copyright (c) 2006-2007 Matias Capeletto +// +// 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) + +/// \file container_adaptor/detail/identity_converters.hpp +/// \brief Value and iterators identity converters. + +#ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_IDENTITY_CONVERTERS_HPP +#define BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_IDENTITY_CONVERTERS_HPP + +#if defined(_MSC_VER) && (_MSC_VER>=1200) +#pragma once +#endif + +#include + +namespace boost { +namespace bimaps { +namespace container_adaptor { + +/// \brief Details of the container adaptor toolbox + +namespace detail { + +/// \brief Iterator identity converter used by default in container adaptors. +/** +If Iterator and ConstIterator are of the same type one of the convert function is not +included. + **/ + +template +< + class BaseIterator , class Iterator, + class BaseConstIterator , class ConstIterator +> +struct iterator_to_base_identity +{ + BaseIterator operator()(Iterator iter) const + { + return BaseIterator(iter); + } + + BaseConstIterator operator()(ConstIterator iter) const + { + return BaseConstIterator(iter); + } +}; + +#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +template< class BaseIterator, class Iterator > +struct iterator_to_base_identity +{ + BaseIterator operator()(Iterator iter) const + { + return BaseIterator(iter); + } +}; + +#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +/// \brief Iterator from base identity converter used by default in container adaptors. +/** +If Iterator and ConstIterator are of the same type one of the convert function is not +included. + **/ + +template +< + class BaseIterator , class Iterator, + class BaseConstIterator , class ConstIterator +> +struct iterator_from_base_identity +{ + Iterator operator()(BaseIterator iter) const + { + return Iterator(iter); + } + ConstIterator operator()(BaseConstIterator iter) const + { + return ConstIterator(iter); + } +}; + +#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +template< class BaseIterator, class Iterator, class ConstIterator > +struct iterator_from_base_identity +{ + Iterator operator()(BaseIterator iter) const + { + return Iterator(iter); + } +}; + +#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +/// \brief Value to base identity converter used by default in container adaptors. + +template< class BaseValue, class Value > +struct value_to_base_identity +{ + BaseValue operator()(const Value & val) const + { + return BaseValue(val); + } +}; + +#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +template< class Value > +struct value_to_base_identity< Value, Value > +{ + const Value & operator()(const Value & val) const + { + return val; + } +}; + +#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +/// \brief Value from base identity converter used by default in container adaptors. + +template< class BaseValue, class Value > +struct value_from_base_identity +{ + Value operator()(const BaseValue & val) const + { + return Value(val); + } +}; + +#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +template< class Value > +struct value_from_base_identity +{ + Value & operator()(Value & val) const + { + return val; + } + + const Value & operator()(const Value & val) const + { + return val; + } +}; + +#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +/// \brief Key to base identity converter used by default in container adaptors. + +template< class BaseKey, class Key > +struct key_to_base_identity +{ + BaseKey operator()(const Key & k) const + { + return BaseKey(k); + } +}; + +#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +template< class Key > +struct key_to_base_identity< Key, Key > +{ + // As default accept any type as key in order to allow container + // adaptors to work with compatible key types + + template< class CompatibleKey > + const CompatibleKey & operator()(const CompatibleKey & k) const + { + return k; + } +}; + +#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES + +} // namespace detail +} // namespace container_adaptor +} // namespace bimaps +} // namespace boost + + +#endif // BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_IDENTITY_CONVERTERS_HPP + +