193 lines
4.7 KiB
C++
193 lines
4.7 KiB
C++
// Boost.Bimap
|
|
//
|
|
// Copyright (c) 2006-2007 Matias Capeletto
|
|
// Copyright (c) 2024 Joaquin M Lopez Munoz
|
|
//
|
|
// 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)
|
|
#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, const 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
|
|
|
|
|