Add SCons configure checks
[senf.git] / boost_ext / boost / bimap / container_adaptor / detail / identity_converters.hpp
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 (file)
index 0000000..f6f5864
--- /dev/null
@@ -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 <boost/config.hpp>
+
+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,Iterator,BaseIterator,Iterator>
+{
+    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<BaseIterator,Iterator,BaseIterator,ConstIterator>
+{
+    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,Value>
+{
+    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
+
+