#ifndef PB_DS_BIN_SEARCH_TREE_NODE_AND_IT_TRAITS_HPP
#define PB_DS_BIN_SEARCH_TREE_NODE_AND_IT_TRAITS_HPP
#include <ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp>
#include <ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp>
namespace pb_ds
{
namespace detail
{
template<typename Key,
typename Mapped,
class Cmp_Fn,
template<typename Const_Node_Iterator,
class Node_Iterator,
class Cmp_Fn,
class Allocator>
class Node_Update,
class Node,
class Allocator>
struct bin_search_tree_traits
{
private:
typedef
types_traits<
Key,
Mapped,
Allocator,
false>
type_traits;
public:
typedef Node node;
typedef
bin_search_tree_const_it_<
typename Allocator::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
typename type_traits::const_pointer,
typename type_traits::reference,
typename type_traits::const_reference,
true,
Allocator>
const_point_iterator;
typedef
bin_search_tree_it_<
typename Allocator::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
typename type_traits::const_pointer,
typename type_traits::reference,
typename type_traits::const_reference,
true,
Allocator>
point_iterator;
typedef
bin_search_tree_const_it_<
typename Allocator::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
typename type_traits::const_pointer,
typename type_traits::reference,
typename type_traits::const_reference,
false,
Allocator>
const_reverse_iterator;
typedef
bin_search_tree_it_<
typename Allocator::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
typename type_traits::const_pointer,
typename type_traits::reference,
typename type_traits::const_reference,
false,
Allocator>
reverse_iterator;
typedef
bin_search_tree_const_node_it_<
Node,
const_point_iterator,
point_iterator,
Allocator>
const_node_iterator;
typedef
bin_search_tree_node_it_<
Node,
const_point_iterator,
point_iterator,
Allocator>
node_iterator;
typedef
Node_Update<
const_node_iterator,
node_iterator,
Cmp_Fn,
Allocator>
node_update;
typedef
pb_ds::null_tree_node_update<
const_node_iterator,
node_iterator,
Cmp_Fn,
Allocator>*
null_node_update_pointer;
};
template<typename Key,
class Cmp_Fn,
template<typename Const_Node_Iterator,
class Node_Iterator,
class Cmp_Fn,
class Allocator>
class Node_Update,
class Node,
class Allocator>
struct bin_search_tree_traits<
Key,
null_mapped_type,
Cmp_Fn,
Node_Update,
Node,
Allocator>
{
private:
typedef
types_traits<
Key,
null_mapped_type,
Allocator,
false>
type_traits;
public:
typedef Node node;
typedef
bin_search_tree_const_it_<
typename Allocator::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
typename type_traits::const_pointer,
typename type_traits::reference,
typename type_traits::const_reference,
true,
Allocator>
const_point_iterator;
typedef const_point_iterator point_iterator;
typedef
bin_search_tree_const_it_<
typename Allocator::template rebind<
node>::other::pointer,
typename type_traits::value_type,
typename type_traits::pointer,
typename type_traits::const_pointer,
typename type_traits::reference,
typename type_traits::const_reference,
false,
Allocator>
const_reverse_iterator;
typedef const_reverse_iterator reverse_iterator;
typedef
bin_search_tree_const_node_it_<
Node,
const_point_iterator,
point_iterator,
Allocator>
const_node_iterator;
typedef const_node_iterator node_iterator;
typedef
Node_Update<
const_node_iterator,
node_iterator,
Cmp_Fn,
Allocator>
node_update;
typedef
pb_ds::null_tree_node_update<
const_node_iterator,
node_iterator,
Cmp_Fn,
Allocator>*
null_node_update_pointer;
};
} }
#endif // #ifndef PB_DS_BIN_SEARCH_TREE_NODE_AND_IT_TRAITS_HPP