Commit d7f245b1 by Benjamin Kosnik Committed by Benjamin Kosnik

typelist_assoc_container.hpp: Remove, unused.

2006-09-20  Benjamin Kosnik  <bkoz@redhat.com>

	* include/ext/pb_ds/detail/
	typelist_assoc_container.hpp: Remove, unused.
	* include/ext/pb_ds/detail/typelist/
	typelist_assoc_container_find.hpp: Same.
	* include/ext/pb_ds/detail/typelist: Remove.	
	* include/ext/pb_ds/detail/typelist.hpp: Merge...
	* include/ext/pb_ds/detail/typelist/typelist_flatten.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_contains.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_typelist_append.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_apply.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_filter.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_append.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_at_index.hpp: Same.
	* include/ext/pb_ds/detail/typelist/typelist_transform.hpp: Same.
	* include/ext/typelist.h: ... into this.
	* include/Makefile.am: Subtractions.
	* include/Makefile.in: Regenerate.

	* include/ext/pb_ds/assoc_container.hpp: Fixups for new includes,
	namespaces, and names.	
	* include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	hash_prime_size_policy_imp.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	cc_hash_max_collision_check_resize_trigger_imp.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	sample_resize_policy.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	sample_resize_trigger.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	hash_exponential_size_policy_imp.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	hash_load_check_resize_trigger_size_base.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	hash_load_check_resize_trigger_imp.hpp: Same.
	* include/ext/pb_ds/detail/resize_policy/
	hash_standard_resize_policy_imp.hpp: Same.
	* include/ext/pb_ds/detail/container_base_dispatch.hpp: Same.
	* testsuite/performance/ext/pb_ds/text_find_timing.cc
	* testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc
	* testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc
	* testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc
	* testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc
	* testsuite/performance/ext/pb_ds/tree_split_join_timing.cc
	* testsuite/performance/ext/pb_ds/random_int_find_timing.cc
	* testsuite/performance/ext/pb_ds/
	multimap_text_insert_mem_usage.hpp: Same.
	* testsuite/performance/ext/pb_ds/
	priority_queue_random_int_push_timing.cc
	* testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp: Same.
	* testsuite/performance/ext/pb_ds/
	priority_queue_text_modify_timing.hpp: Same.
	* testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc
	* testsuite/performance/ext/pb_ds/
	priority_queue_text_push_pop_timing.cc
	* testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc
	* testsuite/performance/ext/pb_ds/
	priority_queue_random_int_push_pop_timing.cc
	* testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc
	* testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc
	* testsuite/performance/ext/pb_ds/
	multimap_text_insert_timing.hpp: Same.
	* testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc
	* testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc
	* testsuite/performance/23_containers/find/map.cc
	* testsuite/performance/23_containers/create/map.cc
	* testsuite/performance/23_containers/insert_erase/associative.cc
	* testsuite/performance/23_containers/insert/sequence.cc
	* testsuite/performance/23_containers/insert/associative.cc
	* testsuite/performance/23_containers/create_from_sorted/set.cc
	* testsuite/performance/23_containers/index/map.cc
	* testsuite/performance/23_containers/insert_from_sorted/set.cc
	* testsuite/performance/23_containers/create_sort/list.cc
	* testsuite/performance/23_containers/sort_search/list.cc
	* testsuite/performance/23_containers/producer_consumer/sequence.cc
	* testsuite/performance/23_containers/producer_consumer/associative.cc
	* testsuite/util/regression/trait/assoc/type_trait.hpp: Same.
	* testsuite/util/regression/rand/priority_queue/
	rand_regression_test.hpp: Same.
	* testsuite/util/regression/rand/assoc/rand_regression_test.hpp: Same.
	* testsuite/util/regression/assoc/common_type.hpp: Same.
	* testsuite/util/native_type/assoc/native_multimap.hpp: Same.
	* testsuite/util/native_type/assoc/native_tree_tag.hpp: Same.
	* testsuite/util/native_type/assoc/native_hash_multimap.hpp: Same.
	* testsuite/util/native_type/assoc/native_set.hpp: Same.
	* testsuite/util/native_type/assoc/native_map.hpp: Same.
	* testsuite/util/native_type/assoc/native_hash_set.hpp: Same.
	* testsuite/util/native_type/assoc/native_hash_map.hpp: Same.
	* testsuite/util/common_type/priority_queue/common_type.hpp: Same.
	* testsuite/util/common_type/assoc/common_type.hpp: Same.
	* testsuite/util/common_type/assoc/string_form.hpp: Same.
	* testsuite/util/common_type/assoc/template_policy.hpp: Same.
	* testsuite/util/performance/priority_queue/mem_usage/pop_test.hpp: 
	Same.
	* testsuite/util/performance/priority_queue/timing/push_pop_test.hpp: 
	Same.
	* testsuite/util/performance/priority_queue/timing/join_test.hpp: Same.
	* testsuite/util/performance/priority_queue/timing/push_test.hpp: Same.
	* testsuite/util/performance/priority_queue/timing/modify_test.hpp: 
	Same.
	* testsuite/util/performance/assoc/mem_usage/multimap_insert_test.hpp: 
	Same.
	* testsuite/util/performance/assoc/mem_usage/erase_test.hpp: Same.
	* testsuite/util/performance/assoc/timing/common_type.hpp: Same.
	* testsuite/util/performance/assoc/timing/multimap_insert_test.hpp: 
	Same.
	* testsuite/util/performance/assoc/timing/subscript_find_test.hpp: 
	Same.
	* testsuite/util/performance/assoc/timing/find_test.hpp: Same.
	* testsuite/util/performance/assoc/timing/subscript_insert_test.hpp: 
	Same.
	* testsuite/util/performance/assoc/timing/insert_test.hpp: Same.
	* testsuite/util/performance/assoc/timing/
	tree_order_statistics_test.hpp: Same.
	* testsuite/util/performance/assoc/timing/multimap_find_test.hpp: Same.
	* testsuite/util/performance/assoc/timing/tree_split_join_test.hpp: 
	Same.
	* testsuite/util/performance/assoc/multimap_common_type.hpp: Same.

	* testsuite/ext/pb_ds/example/hash_resize_neg.cc: Fixup line numbers.

From-SVN: r117081
parent a186e616
2006-09-20 Benjamin Kosnik <bkoz@redhat.com>
* include/ext/pb_ds/detail/
typelist_assoc_container.hpp: Remove, unused.
* include/ext/pb_ds/detail/typelist/
typelist_assoc_container_find.hpp: Same.
* include/ext/pb_ds/detail/typelist: Remove.
* include/ext/pb_ds/detail/typelist.hpp: Merge...
* include/ext/pb_ds/detail/typelist/typelist_flatten.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_contains.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_typelist_append.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_apply.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_filter.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_append.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_at_index.hpp: Same.
* include/ext/pb_ds/detail/typelist/typelist_transform.hpp: Same.
* include/ext/typelist.h: ... into this.
* include/Makefile.am: Subtractions.
* include/Makefile.in: Regenerate.
* include/ext/pb_ds/assoc_container.hpp: Fixups for new includes,
namespaces, and names.
* include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
hash_prime_size_policy_imp.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
cc_hash_max_collision_check_resize_trigger_imp.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
sample_resize_policy.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
sample_resize_trigger.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
hash_exponential_size_policy_imp.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
hash_load_check_resize_trigger_size_base.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
hash_load_check_resize_trigger_imp.hpp: Same.
* include/ext/pb_ds/detail/resize_policy/
hash_standard_resize_policy_imp.hpp: Same.
* include/ext/pb_ds/detail/container_base_dispatch.hpp: Same.
* testsuite/performance/ext/pb_ds/text_find_timing.cc
* testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc
* testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc
* testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc
* testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc
* testsuite/performance/ext/pb_ds/tree_split_join_timing.cc
* testsuite/performance/ext/pb_ds/random_int_find_timing.cc
* testsuite/performance/ext/pb_ds/
multimap_text_insert_mem_usage.hpp: Same.
* testsuite/performance/ext/pb_ds/
priority_queue_random_int_push_timing.cc
* testsuite/performance/ext/pb_ds/multimap_text_find_timing.hpp: Same.
* testsuite/performance/ext/pb_ds/
priority_queue_text_modify_timing.hpp: Same.
* testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc
* testsuite/performance/ext/pb_ds/
priority_queue_text_push_pop_timing.cc
* testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc
* testsuite/performance/ext/pb_ds/
priority_queue_random_int_push_pop_timing.cc
* testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc
* testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc
* testsuite/performance/ext/pb_ds/
multimap_text_insert_timing.hpp: Same.
* testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc
* testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc
* testsuite/performance/23_containers/find/map.cc
* testsuite/performance/23_containers/create/map.cc
* testsuite/performance/23_containers/insert_erase/associative.cc
* testsuite/performance/23_containers/insert/sequence.cc
* testsuite/performance/23_containers/insert/associative.cc
* testsuite/performance/23_containers/create_from_sorted/set.cc
* testsuite/performance/23_containers/index/map.cc
* testsuite/performance/23_containers/insert_from_sorted/set.cc
* testsuite/performance/23_containers/create_sort/list.cc
* testsuite/performance/23_containers/sort_search/list.cc
* testsuite/performance/23_containers/producer_consumer/sequence.cc
* testsuite/performance/23_containers/producer_consumer/associative.cc
* testsuite/util/regression/trait/assoc/type_trait.hpp: Same.
* testsuite/util/regression/rand/priority_queue/
rand_regression_test.hpp: Same.
* testsuite/util/regression/rand/assoc/rand_regression_test.hpp: Same.
* testsuite/util/regression/assoc/common_type.hpp: Same.
* testsuite/util/native_type/assoc/native_multimap.hpp: Same.
* testsuite/util/native_type/assoc/native_tree_tag.hpp: Same.
* testsuite/util/native_type/assoc/native_hash_multimap.hpp: Same.
* testsuite/util/native_type/assoc/native_set.hpp: Same.
* testsuite/util/native_type/assoc/native_map.hpp: Same.
* testsuite/util/native_type/assoc/native_hash_set.hpp: Same.
* testsuite/util/native_type/assoc/native_hash_map.hpp: Same.
* testsuite/util/common_type/priority_queue/common_type.hpp: Same.
* testsuite/util/common_type/assoc/common_type.hpp: Same.
* testsuite/util/common_type/assoc/string_form.hpp: Same.
* testsuite/util/common_type/assoc/template_policy.hpp: Same.
* testsuite/util/performance/priority_queue/mem_usage/pop_test.hpp:
Same.
* testsuite/util/performance/priority_queue/timing/push_pop_test.hpp:
Same.
* testsuite/util/performance/priority_queue/timing/join_test.hpp: Same.
* testsuite/util/performance/priority_queue/timing/push_test.hpp: Same.
* testsuite/util/performance/priority_queue/timing/modify_test.hpp:
Same.
* testsuite/util/performance/assoc/mem_usage/multimap_insert_test.hpp:
Same.
* testsuite/util/performance/assoc/mem_usage/erase_test.hpp: Same.
* testsuite/util/performance/assoc/timing/common_type.hpp: Same.
* testsuite/util/performance/assoc/timing/multimap_insert_test.hpp:
Same.
* testsuite/util/performance/assoc/timing/subscript_find_test.hpp:
Same.
* testsuite/util/performance/assoc/timing/find_test.hpp: Same.
* testsuite/util/performance/assoc/timing/subscript_insert_test.hpp:
Same.
* testsuite/util/performance/assoc/timing/insert_test.hpp: Same.
* testsuite/util/performance/assoc/timing/
tree_order_statistics_test.hpp: Same.
* testsuite/util/performance/assoc/timing/multimap_find_test.hpp: Same.
* testsuite/util/performance/assoc/timing/tree_split_join_test.hpp:
Same.
* testsuite/util/performance/assoc/multimap_common_type.hpp: Same.
* testsuite/ext/pb_ds/example/hash_resize_neg.cc: Fixup line numbers.
2006-09-19 Paolo Carlini <pcarlini@suse.de>
* include/tr1/hashtable_policy.h: Uglify all the names.
......
......@@ -204,7 +204,6 @@ pb_subdirs = \
${pb_builddir}/detail/pairing_heap_ \
${pb_builddir}/detail/splay_tree_ \
${pb_builddir}/detail/list_update_map_ \
${pb_builddir}/detail/typelist \
${pb_builddir}/detail/basic_tree_policy \
${pb_builddir}/detail/trie_policy \
${pb_builddir}/detail/gp_hash_table_map_ \
......@@ -503,17 +502,6 @@ pb_headers7 = \
${pb_srcdir}/detail/trie_policy/sample_trie_node_update.hpp \
${pb_srcdir}/detail/trie_policy/string_trie_e_access_traits_imp.hpp \
${pb_srcdir}/detail/trie_policy/trie_policy_base.hpp \
${pb_srcdir}/detail/typelist_assoc_container.hpp \
${pb_srcdir}/detail/typelist.hpp \
${pb_srcdir}/detail/typelist/typelist_append.hpp \
${pb_srcdir}/detail/typelist/typelist_apply.hpp \
${pb_srcdir}/detail/typelist/typelist_assoc_container_find.hpp \
${pb_srcdir}/detail/typelist/typelist_at_index.hpp \
${pb_srcdir}/detail/typelist/typelist_contains.hpp \
${pb_srcdir}/detail/typelist/typelist_filter.hpp \
${pb_srcdir}/detail/typelist/typelist_flatten.hpp \
${pb_srcdir}/detail/typelist/typelist_transform.hpp \
${pb_srcdir}/detail/typelist/typelist_typelist_append.hpp \
${pb_srcdir}/detail/types_traits.hpp \
${pb_srcdir}/detail/type_utils.hpp \
${pb_srcdir}/detail/unordered_iterator/const_iterator.hpp \
......
......@@ -427,7 +427,6 @@ pb_subdirs = \
${pb_builddir}/detail/pairing_heap_ \
${pb_builddir}/detail/splay_tree_ \
${pb_builddir}/detail/list_update_map_ \
${pb_builddir}/detail/typelist \
${pb_builddir}/detail/basic_tree_policy \
${pb_builddir}/detail/trie_policy \
${pb_builddir}/detail/gp_hash_table_map_ \
......@@ -726,17 +725,6 @@ pb_headers7 = \
${pb_srcdir}/detail/trie_policy/sample_trie_node_update.hpp \
${pb_srcdir}/detail/trie_policy/string_trie_e_access_traits_imp.hpp \
${pb_srcdir}/detail/trie_policy/trie_policy_base.hpp \
${pb_srcdir}/detail/typelist_assoc_container.hpp \
${pb_srcdir}/detail/typelist.hpp \
${pb_srcdir}/detail/typelist/typelist_append.hpp \
${pb_srcdir}/detail/typelist/typelist_apply.hpp \
${pb_srcdir}/detail/typelist/typelist_assoc_container_find.hpp \
${pb_srcdir}/detail/typelist/typelist_at_index.hpp \
${pb_srcdir}/detail/typelist/typelist_contains.hpp \
${pb_srcdir}/detail/typelist/typelist_filter.hpp \
${pb_srcdir}/detail/typelist/typelist_flatten.hpp \
${pb_srcdir}/detail/typelist/typelist_transform.hpp \
${pb_srcdir}/detail/typelist/typelist_typelist_append.hpp \
${pb_srcdir}/detail/types_traits.hpp \
${pb_srcdir}/detail/type_utils.hpp \
${pb_srcdir}/detail/unordered_iterator/const_iterator.hpp \
......
......@@ -47,7 +47,7 @@
#ifndef PB_DS_ASSOC_CNTNR_HPP
#define PB_DS_ASSOC_CNTNR_HPP
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <ext/pb_ds/tag_and_trait.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/detail/container_base_dispatch.hpp>
......@@ -55,7 +55,7 @@
namespace pb_ds
{
#define PB_DS_BASE_C_DEC \
#define PB_DS_BASE_C_DEC \
detail::container_base_dispatch<Key, Mapped, Tag, Policy_Tl, Allocator>::type
// An abstract basic associative container.
......@@ -117,10 +117,9 @@ namespace pb_ds
#undef PB_DS_BASE_C_DEC
#define PB_DS_BASE_C_DEC \
container_base<Key, Mapped, Tag, typename detail::typelist_append< \
typename detail::typelist4<Hash_Fn, Eq_Fn, Resize_Policy, detail::integral_constant<int,Store_Hash> >::type, \
Policy_TL>::type, Allocator>
#define PB_DS_BASE_C_DEC \
container_base<Key, Mapped, Tag, typename __gnu_cxx::typelist::append< \
typename __gnu_cxx::typelist::create4<Hash_Fn, Eq_Fn, Resize_Policy, detail::integral_constant<int, Store_Hash> >::type, Policy_TL>::type, Allocator>
// An abstract basic hash-based associative container.
template<typename Key,
......@@ -154,10 +153,10 @@ namespace pb_ds
#undef PB_DS_BASE_C_DEC
#define PB_DS_BASE_C_DEC \
#define PB_DS_BASE_C_DEC \
basic_hash_table<Key, Mapped, Hash_Fn, Eq_Fn, Resize_Policy, Store_Hash, \
cc_hash_tag, \
typename detail::typelist1<Comb_Hash_Fn>::type, Allocator>
cc_hash_tag, \
typename __gnu_cxx::typelist::create1<Comb_Hash_Fn>::type, Allocator>
// A concrete collision-chaining hash-based associative container.
template<typename Key,
......@@ -291,10 +290,10 @@ namespace pb_ds
#undef PB_DS_BASE_C_DEC
#define PB_DS_BASE_C_DEC \
#define PB_DS_BASE_C_DEC \
basic_hash_table<Key, Mapped, Hash_Fn, Eq_Fn, Resize_Policy, Store_Hash, \
gp_hash_tag, \
typename detail::typelist2<Comb_Probe_Fn, Probe_Fn>::type, Allocator>
gp_hash_tag, \
typename __gnu_cxx::typelist::create2<Comb_Probe_Fn, Probe_Fn>::type, Allocator>
// A concrete general-probing hash-based associative container.
template<typename Key,
......@@ -490,7 +489,7 @@ namespace pb_ds
#define PB_DS_BASE_C_DEC \
basic_tree<Key,Mapped,Tag,typename PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC::node_update, \
typename detail::typelist2<Cmp_Fn, PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC >::type, Allocator>
typename __gnu_cxx::typelist::create2<Cmp_Fn, PB_DS_TREE_NODE_AND_IT_TRAITS_C_DEC >::type, Allocator>
// A concrete basic tree-based associative container.
template<typename Key, typename Mapped, typename Cmp_Fn = std::less<Key>,
......@@ -561,7 +560,7 @@ namespace pb_ds
#define PB_DS_BASE_C_DEC \
basic_tree<Key,Mapped,Tag, typename PB_DS_TRIE_NODE_AND_ITS_TRAITS::node_update, \
typename detail::typelist2<E_Access_Traits, PB_DS_TRIE_NODE_AND_ITS_TRAITS >::type, Allocator>
typename __gnu_cxx::typelist::create2<E_Access_Traits, PB_DS_TRIE_NODE_AND_ITS_TRAITS >::type, Allocator>
// A concrete basic trie-based associative container.
template<typename Key,
......@@ -632,9 +631,9 @@ namespace pb_ds
#undef PB_DS_TRIE_NODE_AND_ITS_TRAITS
#define PB_DS_BASE_C_DEC \
container_base<Key, Mapped, list_update_tag, \
typename detail::typelist2<Eq_Fn, Update_Policy>::type, Allocator>
#define PB_DS_BASE_C_DEC \
container_base<Key, Mapped, list_update_tag, \
typename __gnu_cxx::typelist::create2<Eq_Fn, Update_Policy>::type, Allocator>
// A list-update based associative container.
template<typename Key,
......
......@@ -44,9 +44,8 @@
* Contains a resize trigger implementation.
*/
#define PB_DS_STATIC_ASSERT(UNIQUE, E) \
typedef detail::static_assert_dumclass<sizeof(detail::static_assert<(bool)(E)>)> \
UNIQUE##static_assert_type
#define PB_DS_STATIC_ASSERT(UNIQUE, E) \
typedef detail::static_assert_dumclass<sizeof(detail::static_assert<(bool)(E)>)> UNIQUE##static_assert_type
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
......@@ -80,25 +79,19 @@ PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_start()
{
m_num_col = 0;
}
{ m_num_col = 0; }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_collision()
{
++m_num_col;
}
{ ++m_num_col; }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_end()
{
calc_resize_needed();
}
{ calc_resize_needed(); }
PB_DS_CLASS_T_DEC
inline void
......@@ -121,40 +114,32 @@ notify_erase_search_end()
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_inserted(size_type /*num_e*/)
notify_inserted(size_type)
{ }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erased(size_type /*num_e*/)
{
m_resize_needed = true;
}
notify_erased(size_type)
{ m_resize_needed = true; }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
notify_cleared()
{
m_resize_needed = false;
}
{ m_resize_needed = false; }
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
is_resize_needed() const
{
return (m_resize_needed);
}
{ return m_resize_needed; }
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
is_grow_needed(size_type /*size*/, size_type /*num_used_e*/) const
{
return (m_num_col >= m_max_col);
}
{ return m_num_col >= m_max_col; }
PB_DS_CLASS_T_DEC
void
......@@ -164,14 +149,12 @@ notify_resized(size_type new_size)
m_size = new_size;
#ifdef PB_DS_HT_MAP_RESIZE_TRACE_
std::cerr << "chmccrt::notify_resized " <<
static_cast<unsigned long>(new_size) << std::endl;
#endif // #ifdef PB_DS_HT_MAP_RESIZE_TRACE_
std::cerr << "chmccrt::notify_resized "
<< static_cast<unsigned long>(new_size) << std::endl;
#endif
calc_max_num_coll();
calc_resize_needed();
m_num_col = 0;
}
......@@ -181,25 +164,21 @@ PB_DS_CLASS_C_DEC::
calc_max_num_coll()
{
// max_col <-- \sqrt{2 load \ln( 2 m \ln( m ) ) }
const double ln_arg = 2* m_size* ::log( (double)m_size);
m_max_col =(size_type)::ceil( ::sqrt(2* m_load* ::log(ln_arg) ) );
const double ln_arg = 2 * m_size * ::log(double(m_size));
m_max_col = size_type(::ceil(::sqrt(2 * m_load * ::log(ln_arg))));
#ifdef PB_DS_HT_MAP_RESIZE_TRACE_
std::cerr << "chmccrt::calc_max_num_coll " <<
static_cast<unsigned long>(m_size) << " " <<
static_cast<unsigned long>(m_max_col) << std::endl;
#endif // #ifdef PB_DS_HT_MAP_RESIZE_TRACE_
std::cerr << "chmccrt::calc_max_num_coll "
<< static_cast<unsigned long>(m_size) << " "
<< static_cast<unsigned long>(m_max_col) << std::endl;
#endif
}
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
notify_externally_resized(size_type new_size)
{
notify_resized(new_size);
}
{ notify_resized(new_size); }
PB_DS_CLASS_T_DEC
void
......@@ -207,13 +186,9 @@ PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
std::swap(m_load, other.m_load);
std::swap(m_size, other.m_size);
std::swap(m_num_col, other.m_num_col);
std::swap(m_max_col, other.m_max_col);
std::swap(m_resize_needed, other.m_resize_needed);
}
......@@ -223,18 +198,14 @@ PB_DS_CLASS_C_DEC::
get_load() const
{
PB_DS_STATIC_ASSERT(access, external_load_access);
return (m_load);
return m_load;
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
calc_resize_needed()
{
m_resize_needed =
m_resize_needed || m_num_col >= m_max_col;
}
{ m_resize_needed = m_resize_needed || m_num_col >= m_max_col; }
PB_DS_CLASS_T_DEC
void
......@@ -242,11 +213,8 @@ PB_DS_CLASS_C_DEC::
set_load(float load)
{
PB_DS_STATIC_ASSERT(access, external_load_access);
m_load = load;
calc_max_num_coll();
calc_resize_needed();
}
......
......@@ -57,7 +57,6 @@ PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
std::swap(m_start_size, other.m_start_size);
std::swap(m_grow_factor, other.m_grow_factor);
}
......@@ -67,18 +66,14 @@ PB_DS_CLASS_C_DEC::
get_nearest_larger_size(size_type size) const
{
size_type ret = m_start_size;
while (ret <= size)
{
const size_type next_ret = ret* m_grow_factor;
if (next_ret < ret)
throw insert_error();
ret = next_ret;
}
return (ret);
return ret;
}
PB_DS_CLASS_T_DEC
......@@ -87,20 +82,15 @@ PB_DS_CLASS_C_DEC::
get_nearest_smaller_size(size_type size) const
{
size_type ret = m_start_size;
while (true)
{
const size_type next_ret = ret* m_grow_factor;
if (next_ret < ret)
throw resize_error();
if (next_ret >= size)
return (ret);
ret = next_ret;
}
return (ret);
return ret;
}
......@@ -44,8 +44,8 @@
* Contains a resize trigger implementation.
*/
#define PB_DS_STATIC_ASSERT(UNIQUE, E) \
typedef detail::static_assert_dumclass<sizeof(detail::static_assert<(bool)(E)>)> UNIQUE##static_assert_type
#define PB_DS_STATIC_ASSERT(UNIQUE, E) \
typedef detail::static_assert_dumclass<sizeof(detail::static_assert<bool(E)>)> UNIQUE##static_assert_type
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
......
......@@ -49,124 +49,52 @@
namespace pb_ds
{
namespace detail
{
// Primary template.
template<typename Size_Type, bool Hold_Size>
class hash_load_check_resize_trigger_size_base;
#define PB_DS_CLASS_T_DEC \
// Specializations.
template<typename Size_Type>
#define PB_DS_CLASS_C_DEC \
hash_load_check_resize_trigger_size_base< \
Size_Type, \
true>
template<typename Size_Type>
class hash_load_check_resize_trigger_size_base<
Size_Type,
true>
class hash_load_check_resize_trigger_size_base<Size_Type, true>
{
protected:
typedef Size_Type size_type;
protected:
inline
hash_load_check_resize_trigger_size_base();
hash_load_check_resize_trigger_size_base(): m_size(0)
{ }
inline void
swap(PB_DS_CLASS_C_DEC& other);
swap(hash_load_check_resize_trigger_size_base& other)
{ std::swap(m_size, other.m_size); }
inline void
set_size(size_type size);
set_size(size_type size)
{ m_size = size; }
inline size_type
get_size() const;
get_size() const
{ return m_size; }
private:
size_type m_size;
};
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
hash_load_check_resize_trigger_size_base() :
m_size(0)
{ }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
set_size(size_type size)
{
m_size = size;
}
PB_DS_CLASS_T_DEC
inline typename PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
get_size() const
{
return (m_size);
}
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
std::swap(m_size, other.m_size);
}
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
#define PB_DS_CLASS_T_DEC \
template<typename Size_Type>
#define PB_DS_CLASS_C_DEC \
hash_load_check_resize_trigger_size_base< \
Size_Type, \
false>
template<typename Size_Type>
class hash_load_check_resize_trigger_size_base<
Size_Type,
false>
class hash_load_check_resize_trigger_size_base<Size_Type, false>
{
protected:
typedef Size_Type size_type;
protected:
inline void
swap(PB_DS_CLASS_C_DEC& other);
swap(hash_load_check_resize_trigger_size_base& other) { }
inline void
set_size(size_type size);
set_size(size_type size) { }
};
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& /*other*/)
{ }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
set_size(size_type /*size*/)
{
// Do nothing
}
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
} // namespace detail
} // namespace pb_ds
#endif // #ifndef PB_DS_HASH_LOAD_CHECK_RESIZE_TRIGGER_SIZE_BASE_HPP
#endif
......@@ -46,7 +46,6 @@
namespace detail
{
enum
{
num_distinct_sizes_32_bit = 30,
......@@ -57,7 +56,6 @@ namespace detail
// Originally taken from the SGI implementation; acknowledged in the docs.
// Further modified (for 64 bits) from tr1's hashtable.
static const std::size_t g_a_sizes[num_distinct_sizes_64_bit] =
{
/* 0 */ 5ul,
......@@ -129,33 +127,26 @@ namespace detail
PB_DS_CLASS_T_DEC
inline
PB_DS_CLASS_C_DEC::
hash_prime_size_policy(size_type start_size) :
m_start_size(start_size)
{
m_start_size =
get_nearest_larger_size(start_size);
}
hash_prime_size_policy(size_type start_size) : m_start_size(start_size)
{ m_start_size = get_nearest_larger_size(start_size); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
std::swap(m_start_size, other.m_start_size);
}
{ std::swap(m_start_size, other.m_start_size); }
PB_DS_CLASS_T_DEC
inline PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
get_nearest_larger_size(size_type size) const
{
const std::size_t* const p_upper =
std::upper_bound( detail::g_a_sizes, detail::g_a_sizes + detail::num_distinct_sizes, size);
const std::size_t* const p_upper = std::upper_bound(detail::g_a_sizes,
detail::g_a_sizes + detail::num_distinct_sizes, size);
if (p_upper == detail::g_a_sizes + detail::num_distinct_sizes)
throw resize_error();
return (*p_upper);
return *p_upper;
}
PB_DS_CLASS_T_DEC
......@@ -163,13 +154,12 @@ inline PB_DS_CLASS_C_DEC::size_type
PB_DS_CLASS_C_DEC::
get_nearest_smaller_size(size_type size) const
{
const size_t* p_lower = std::lower_bound( detail::g_a_sizes, detail::g_a_sizes + detail::num_distinct_sizes, size);
const size_t* p_lower = std::lower_bound(detail::g_a_sizes,
detail::g_a_sizes + detail::num_distinct_sizes, size);
if (*p_lower >= size&& p_lower != detail::g_a_sizes)
--p_lower;
if (*p_lower < m_start_size)
return (m_start_size);
return (*p_lower);
return m_start_size;
return *p_lower;
}
......@@ -44,36 +44,30 @@
* Contains a resize policy implementation.
*/
#define PB_DS_STATIC_ASSERT(UNIQUE, E) \
typedef detail::static_assert_dumclass<sizeof(detail::static_assert<(bool)(E)>)> \
UNIQUE##static_assert_type
#define PB_DS_STATIC_ASSERT(UNIQUE, E) \
typedef detail::static_assert_dumclass<sizeof(detail::static_assert<(bool)(E)>)> UNIQUE##static_assert_type
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
hash_standard_resize_policy() :
m_size(Size_Policy::get_nearest_larger_size(1))
{
trigger_policy_base::notify_externally_resized(m_size);
}
{ trigger_policy_base::notify_externally_resized(m_size); }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
hash_standard_resize_policy(const Size_Policy& r_size_policy) :
Size_Policy(r_size_policy),
m_size(Size_Policy::get_nearest_larger_size(1))
{
trigger_policy_base::notify_externally_resized(m_size);
}
{ trigger_policy_base::notify_externally_resized(m_size); }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
hash_standard_resize_policy(const Size_Policy& r_size_policy, const Trigger_Policy& r_trigger_policy) :
hash_standard_resize_policy(const Size_Policy& r_size_policy,
const Trigger_Policy& r_trigger_policy) :
Size_Policy(r_size_policy),
Trigger_Policy(r_trigger_policy),
m_size(Size_Policy::get_nearest_larger_size(1))
{
trigger_policy_base::notify_externally_resized(m_size);
}
{ trigger_policy_base::notify_externally_resized(m_size); }
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
......@@ -86,9 +80,7 @@ PB_DS_CLASS_C_DEC::
swap(PB_DS_CLASS_C_DEC& other)
{
trigger_policy_base::swap(other);
size_policy_base::swap(other);
std::swap(m_size, other.m_size);
}
......@@ -96,105 +88,79 @@ PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_find_search_start()
{
trigger_policy_base::notify_find_search_start();
}
{ trigger_policy_base::notify_find_search_start(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_find_search_collision()
{
trigger_policy_base::notify_find_search_collision();
}
{ trigger_policy_base::notify_find_search_collision(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_find_search_end()
{
trigger_policy_base::notify_find_search_end();
}
{ trigger_policy_base::notify_find_search_end(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_start()
{
trigger_policy_base::notify_insert_search_start();
}
{ trigger_policy_base::notify_insert_search_start(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_collision()
{
trigger_policy_base::notify_insert_search_collision();
}
{ trigger_policy_base::notify_insert_search_collision(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_insert_search_end()
{
trigger_policy_base::notify_insert_search_end();
}
{ trigger_policy_base::notify_insert_search_end(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erase_search_start()
{
trigger_policy_base::notify_erase_search_start();
}
{ trigger_policy_base::notify_erase_search_start(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erase_search_collision()
{
trigger_policy_base::notify_erase_search_collision();
}
{ trigger_policy_base::notify_erase_search_collision(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erase_search_end()
{
trigger_policy_base::notify_erase_search_end();
}
{ trigger_policy_base::notify_erase_search_end(); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_inserted(size_type num_e)
{
trigger_policy_base::notify_inserted(num_e);
}
{ trigger_policy_base::notify_inserted(num_e); }
PB_DS_CLASS_T_DEC
inline void
PB_DS_CLASS_C_DEC::
notify_erased(size_type num_e)
{
trigger_policy_base::notify_erased(num_e);
}
{ trigger_policy_base::notify_erased(num_e); }
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
notify_cleared()
{
trigger_policy_base::notify_cleared();
}
{ trigger_policy_base::notify_cleared(); }
PB_DS_CLASS_T_DEC
inline bool
PB_DS_CLASS_C_DEC::
is_resize_needed() const
{
return (trigger_policy_base::is_resize_needed());
}
{ return trigger_policy_base::is_resize_needed(); }
PB_DS_CLASS_T_DEC
typename PB_DS_CLASS_C_DEC::size_type
......@@ -203,9 +169,8 @@ get_new_size(size_type size, size_type num_used_e) const
{
if (trigger_policy_base::
is_grow_needed(size, num_used_e))
return (size_policy_base::get_nearest_larger_size(size));
return (size_policy_base::get_nearest_smaller_size(size));
return size_policy_base::get_nearest_larger_size(size);
return size_policy_base::get_nearest_smaller_size(size);
}
PB_DS_CLASS_T_DEC
......@@ -214,7 +179,6 @@ PB_DS_CLASS_C_DEC::
notify_resized(size_type new_size)
{
trigger_policy_base::notify_resized(new_size);
m_size = new_size;
}
......@@ -224,8 +188,7 @@ PB_DS_CLASS_C_DEC::
get_actual_size() const
{
PB_DS_STATIC_ASSERT(access, external_size_access);
return (m_size);
return m_size;
}
PB_DS_CLASS_T_DEC
......@@ -234,7 +197,6 @@ PB_DS_CLASS_C_DEC::
resize(size_type new_size)
{
PB_DS_STATIC_ASSERT(access, external_size_access);
size_type actual_new_size = size_policy_base::get_nearest_larger_size(1);
while (actual_new_size < new_size)
{
......@@ -243,7 +205,6 @@ resize(size_type new_size)
if (pot == actual_new_size&& pot < new_size)
throw resize_error();
actual_new_size = pot;
}
......@@ -251,7 +212,6 @@ resize(size_type new_size)
--actual_new_size;
const size_type old_size = m_size;
try
{
do_resize(actual_new_size - 1);
......@@ -259,13 +219,11 @@ resize(size_type new_size)
catch(insert_error& )
{
m_size = old_size;
throw resize_error();
}
catch(...)
{
m_size = old_size;
throw;
}
}
......@@ -273,7 +231,7 @@ resize(size_type new_size)
PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
do_resize(size_type /*new_size*/)
do_resize(size_type)
{
// Do nothing
}
......@@ -282,33 +240,25 @@ PB_DS_CLASS_T_DEC
Trigger_Policy&
PB_DS_CLASS_C_DEC::
get_trigger_policy()
{
return (*this);
}
{ return *this; }
PB_DS_CLASS_T_DEC
const Trigger_Policy&
PB_DS_CLASS_C_DEC::
get_trigger_policy() const
{
return (*this);
}
{ return *this; }
PB_DS_CLASS_T_DEC
Size_Policy&
PB_DS_CLASS_C_DEC::
get_size_policy()
{
return (*this);
}
{ return *this; }
PB_DS_CLASS_T_DEC
const Size_Policy&
PB_DS_CLASS_C_DEC::
get_size_policy() const
{
return (*this);
}
{ return *this; }
#undef PB_DS_STATIC_ASSERT
......@@ -50,14 +50,11 @@
// A sample resize policy.
class sample_resize_policy
{
public:
// Size type.
typedef size_t size_type;
public:
// Default constructor.
sample_resize_policy();
......@@ -129,7 +126,6 @@ protected:
// Queries what the new size should be.
size_type
get_new_size(size_type size, size_type num_used_e) const;
};
#endif // #ifndef PB_DS_SAMPLE_RESIZE_POLICY_HPP
#endif
......@@ -50,14 +50,11 @@
// A sample resize trigger policy.
class sample_resize_trigger
{
public:
// Size type.
typedef size_t size_type;
public:
// Default constructor.
sample_resize_trigger();
......@@ -106,7 +103,8 @@ protected:
inline void
notify_erase_search_end();
// Notifies an element was inserted. the total number of entries in the table is num_entries.
// Notifies an element was inserted. the total number of entries in
// the table is num_entries.
inline void
notify_inserted(size_type num_entries);
......@@ -118,7 +116,8 @@ protected:
void
notify_cleared();
// Notifies the table was resized as a result of this object's signifying that a resize is needed.
// Notifies the table was resized as a result of this object's
// signifying that a resize is needed.
void
notify_resized(size_type new_size);
......@@ -139,9 +138,8 @@ private:
// Resizes to new_size.
virtual void
do_resize(size_type new_size);
};
} // namespace pb_ds
#endif // #ifndef PB_DS_SAMPLE_RESIZE_TRIGGER_HPP
#endif
......@@ -50,14 +50,11 @@
// A sample size policy.
class sample_size_policy
{
public:
// Size type.
typedef size_t size_type;
public:
// Default constructor.
sample_size_policy();
......@@ -77,7 +74,6 @@ protected:
// Given a __size size, returns a __size that is smaller.
inline size_type
get_nearest_smaller_size(size_type size) const;
};
#endif // #ifndef PB_DS_SAMPLE_SIZE_POLICY_HPP
#endif
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist.hpp
* Contains typelist_chain definitions.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_HPP
#define PB_DS_TYPELIST_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace pb_ds
{
namespace detail
{
struct null_type
{ };
template<typename Hd, typename Tl>
struct typelist_chain
{
typedef Hd head;
typedef Tl tail;
};
template<typename Root>
struct typelist
{
typedef Root root;
};
#define PB_DS_TYPELIST_CHAIN1(X0) typelist_chain<X0, null_type>
#define PB_DS_TYPELIST_CHAIN2(X0, X1) typelist_chain<X0, PB_DS_TYPELIST_CHAIN1(X1) >
#define PB_DS_TYPELIST_CHAIN3(X0, X1, X2) typelist_chain<X0, PB_DS_TYPELIST_CHAIN2(X1, X2) >
#define PB_DS_TYPELIST_CHAIN4(X0, X1, X2, X3) typelist_chain<X0, PB_DS_TYPELIST_CHAIN3(X1, X2, X3) >
#define PB_DS_TYPELIST_CHAIN5(X0, X1, X2, X3, X4) typelist_chain<X0, PB_DS_TYPELIST_CHAIN4(X1, X2, X3, X4) >
#define PB_DS_TYPELIST_CHAIN6(X0, X1, X2, X3, X4, X5) typelist_chain<X0, PB_DS_TYPELIST_CHAIN5(X1, X2, X3, X4, X5) >
#define PB_DS_TYPELIST_CHAIN7(X0, X1, X2, X3, X4, X5, X6) typelist_chain<X0, PB_DS_TYPELIST_CHAIN6(X1, X2, X3, X4, X5, X6) >
#define PB_DS_TYPELIST_CHAIN8(X0, X1, X2, X3, X4, X5, X6, X7) typelist_chain<X0, PB_DS_TYPELIST_CHAIN7(X1, X2, X3, X4, X5, X6, X7) >
#define PB_DS_TYPELIST_CHAIN9(X0, X1, X2, X3, X4, X5, X6, X7, X8) typelist_chain<X0, PB_DS_TYPELIST_CHAIN8(X1, X2, X3, X4, X5, X6, X7, X8) >
#define PB_DS_TYPELIST_CHAIN10(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9) typelist_chain<X0, PB_DS_TYPELIST_CHAIN9(X1, X2, X3, X4, X5, X6, X7, X8, X9) >
#define PB_DS_TYPELIST_CHAIN11(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) typelist_chain<X0, PB_DS_TYPELIST_CHAIN10(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) >
#define PB_DS_TYPELIST_CHAIN12(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) typelist_chain<X0, PB_DS_TYPELIST_CHAIN11(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) >
#define PB_DS_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) typelist_chain<X0, PB_DS_TYPELIST_CHAIN12(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) >
#define PB_DS_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) typelist_chain<X0, PB_DS_TYPELIST_CHAIN13(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) >
#define PB_DS_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) typelist_chain<X0, PB_DS_TYPELIST_CHAIN14(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) >
#include <ext/pb_ds/detail/typelist/typelist_apply.hpp>
template<typename Fn, class Typelist>
void
typelist_apply(Fn& r_fn, Typelist)
{
detail::apply_<Fn, typename Typelist::root> a;
a(r_fn);
}
#include <ext/pb_ds/detail/typelist/typelist_append.hpp>
template<typename Typelist0, class Typelist1>
struct typelist_append
{
private:
typedef
typename detail::typelist_append_<
typename Typelist0::root,
typename Typelist1::root>::type
res_hd;
public:
typedef typelist< res_hd> type;
};
#include <ext/pb_ds/detail/typelist/typelist_typelist_append.hpp>
template<typename Typelist_Typelist>
struct typelist_typelist_append
{
private:
typedef
typename detail::typelist_typelist_append_<
typename Typelist_Typelist::root>::type
res_hd;
public:
typedef typelist< res_hd> type;
};
#include <ext/pb_ds/detail/typelist/typelist_contains.hpp>
template<typename Typelist, typename T>
struct typelist_contains
{
enum
{
value =
detail::typelist_contains_<
typename Typelist::root,
T>::value
};
};
#include <ext/pb_ds/detail/typelist/typelist_filter.hpp>
template<typename Typelist, template<typename T>
class Pred>
struct typelist_filter
{
private:
typedef
typename detail::typelist_chain_filter_<
typename Typelist::root,
Pred>::type
root_type;
public:
typedef typelist< root_type> type;
};
#include <ext/pb_ds/detail/typelist/typelist_at_index.hpp>
template<typename Typelist, int i>
struct typelist_at_index
{
typedef
typename detail::typelist_chain_at_index_<
typename Typelist::root,
i>::type
type;
};
#include <ext/pb_ds/detail/typelist/typelist_transform.hpp>
template<typename Typelist, template<typename T>
class Transform>
struct typelist_transform
{
private:
typedef
typename detail::typelist_chain_transform_<
typename Typelist::root,
Transform>::type
root_type;
public:
typedef typelist< root_type> type;
};
#include <ext/pb_ds/detail/typelist/typelist_flatten.hpp>
template<typename Typelist_Typelist>
struct typelist_flatten
{
private:
typedef
typename detail::typelist_chain_flatten_<
typename Typelist_Typelist::root>::type
root_type;
public:
typedef typelist< root_type> type;
};
template<typename Typelist>
struct typelist_from_first
{
private:
typedef typename typelist_at_index< Typelist, 0>::type first_type;
public:
typedef typelist< typelist_chain< first_type, null_type> > type;
};
template<typename T0>
struct typelist1
{
typedef typelist< PB_DS_TYPELIST_CHAIN1( T0)> type;
};
template<typename T0, typename T1>
struct typelist2
{
typedef
typelist<
PB_DS_TYPELIST_CHAIN2( T0, T1)>
type;
};
template<typename T0, typename T1, typename T2>
struct typelist3
{
typedef
typelist<
PB_DS_TYPELIST_CHAIN3( T0, T1, T2)>
type;
};
template<typename T0, typename T1, typename T2, typename T3>
struct typelist4
{
typedef
typelist<
PB_DS_TYPELIST_CHAIN4( T0, T1, T2, T3)>
type;
};
template<typename T0,
typename T1,
typename T2,
typename T3,
typename T4>
struct typelist5
{
typedef
typelist<
PB_DS_TYPELIST_CHAIN5( T0, T1, T2, T3, T4)>
type;
};
template<typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
struct typelist6
{
typedef
typelist<
PB_DS_TYPELIST_CHAIN6( T0, T1, T2, T3, T4, T5)>
type;
};
#undef PB_DS_TYPELIST_CHAIN1
#undef PB_DS_TYPELIST_CHAIN2
#undef PB_DS_TYPELIST_CHAIN3
#undef PB_DS_TYPELIST_CHAIN4
#undef PB_DS_TYPELIST_CHAIN5
#undef PB_DS_TYPELIST_CHAIN6
#undef PB_DS_TYPELIST_CHAIN7
#undef PB_DS_TYPELIST_CHAIN8
#undef PB_DS_TYPELIST_CHAIN9
#undef PB_DS_TYPELIST_CHAIN10
#undef PB_DS_TYPELIST_CHAIN11
#undef PB_DS_TYPELIST_CHAIN12
#undef PB_DS_TYPELIST_CHAIN13
#undef PB_DS_TYPELIST_CHAIN14
#undef PB_DS_TYPELIST_CHAIN15
} // namespace detail
} // namespace pb_ds
#endif // #ifndef PB_DS_TYPELIST_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_append.hpp
* Contains typelist_chain utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_APPEND_HPP
#define PB_DS_TYPELIST_APPEND_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Chain0, class Typelist_Chain1>
struct typelist_append_;
template<typename Hd, typename Tl, class Typelist_Chain1>
struct typelist_append_<typelist_chain<Hd, Tl>, Typelist_Chain1>
{
typedef typelist_chain<Hd, typename typelist_append_<Tl, Typelist_Chain1>::type> type;
};
template<typename Typelist_Chain1>
struct typelist_append_< null_type, Typelist_Chain1>
{
typedef Typelist_Chain1 type;
};
template<typename Typelist_Chain0>
struct typelist_append_<Typelist_Chain0, null_type>
{
typedef Typelist_Chain0 type;
};
template<>
struct typelist_append_<null_type, null_type>
{
typedef null_type type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_APPEND_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_apply.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_APPLY_HPP
#define PB_DS_TYPELIST_APPLY_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Fn, class Typelist_Chain>
struct apply_;
template<typename Fn, class Hd, class Tl>
struct apply_<Fn, typelist_chain<Hd, Tl> >
{
void
operator()(Fn& r_fn)
{
r_fn(type_to_type<Hd>());
apply_<Fn, Tl> next;
next(r_fn);
}
};
template<typename Fn>
struct apply_<Fn, null_type>
{
void
operator()(Fn&) { }
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_APPLY_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_assoc_container_find.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_ASSOC_CNTNR_FIND_HPP
#define PB_DS_TYPELIST_ASSOC_CNTNR_FIND_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Tl, typename Key>
struct typelist_assoc_container_find_;
template<typename Now_Key, typename Now_Data, typename Rest_Tl, typename Key>
struct typelist_assoc_container_find_<
typelist_chain<std::pair<Now_Key, Now_Data>, Rest_Tl>, Key>
{
typedef typename typelist_assoc_container_find_< Rest_Tl, Key>::type type;
};
template<typename Now_Key, typename Now_Data, typename Rest_Tl>
struct typelist_assoc_container_find_<
typelist_chain<std::pair<Now_Key, Now_Data>, Rest_Tl>, Now_Key>
{
typedef Now_Data type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_ASSOC_CNTNR_FIND_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_at_index.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_AT_INDEX_HPP
#define PB_DS_TYPELIST_AT_INDEX_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Chain, int i>
struct typelist_chain_at_index_;
template<typename Hd, class Tl>
struct typelist_chain_at_index_<typelist_chain<Hd, Tl>, 0>
{
typedef Hd type;
};
template<typename Hd, class Tl, int i>
struct typelist_chain_at_index_<typelist_chain<Hd, Tl>, i>
{
typedef typename typelist_chain_at_index_< Tl, i - 1>::type type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_AT_INDEX_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_contains.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_CONTAINS_HPP
#define PB_DS_TYPELIST_CONTAINS_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Chain, class T>
struct typelist_contains_;
template<typename T>
struct typelist_contains_<null_type, T>
{
enum
{
value = false
};
};
template<typename Hd, class Tl, class T>
struct typelist_contains_<typelist_chain<Hd, Tl>, T>
{
enum
{
value = typelist_contains_<Tl, T>::value
};
};
template<typename Tl, class T>
struct typelist_contains_<typelist_chain<T, Tl>, T>
{
enum
{
value = true
};
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_CONTAINS_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_filter.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_FILTER_HPP
#define PB_DS_TYPELIST_FILTER_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Chain, template<typename T> class Pred>
struct typelist_chain_filter_;
template<template<typename T>
class Pred>
struct typelist_chain_filter_<null_type, Pred>
{
typedef null_type type;
};
template<typename Hd, class Tl, template<typename T> class Pred>
struct typelist_chain_filter_< typelist_chain<Hd, Tl>, Pred>
{
typedef typename typelist_chain_filter_< Tl, Pred>::type rest;
enum
{
include_hd = Pred<Hd>::value
};
typedef typename __conditional_type<include_hd, typelist_chain<Hd, rest>, rest>::__type type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_FILTER_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_flatten.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_FLATTEN_HPP
#define PB_DS_TYPELIST_FLATTEN_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Typelist_Chain>
struct typelist_chain_flatten_;
template<typename Hd_Tl>
struct typelist_chain_flatten_<typelist_chain<Hd_Tl, null_type> >
{
typedef typename Hd_Tl::root type;
};
template<typename Hd_Typelist, class Tl_Typelist>
struct typelist_chain_flatten_<typelist_chain<Hd_Typelist, Tl_Typelist> >
{
typedef typename typelist_chain_flatten_< Tl_Typelist>::type rest;
typedef typename typelist_append<Hd_Typelist, typelist<rest> >::type::root type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_FLATTEN_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_transform.hpp
* Contains typelist utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_TRANSFORM_HPP
#define PB_DS_TYPELIST_TRANSFORM_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Chain, template<typename T> class Transform>
struct typelist_chain_transform_;
template<template<typename T> class Transform>
struct typelist_chain_transform_<null_type, Transform>
{
typedef null_type type;
};
template<typename Hd, class Tl, template<typename T> class Transform>
struct typelist_chain_transform_<typelist_chain<Hd, Tl>, Transform>
{
typedef typename typelist_chain_transform_< Tl, Transform>::type rest;
typedef typename Transform<Hd>::type transform_type;
typedef typelist_chain<transform_type, rest> type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_TRANSFORM_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_typelist_append.hpp
* Contains typelist_chain utilities.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_TYPELIST_APPEND_HPP
#define PB_DS_TYPELIST_TYPELIST_APPEND_HPP
#include <ext/pb_ds/detail/type_utils.hpp>
namespace detail
{
template<typename Typelist_Typelist_Chain>
struct typelist_typelist_append_;
template<typename Hd>
struct typelist_typelist_append_<
typelist_chain<Hd, null_type> >
{
typedef typelist_chain< Hd, null_type> type;
};
template<typename Hd, class Tl>
struct typelist_typelist_append_<
typelist_chain<
Hd,
Tl> >
{
private:
typedef typename typelist_typelist_append_< Tl>::type rest;
public:
typedef
typename typelist_append<
Hd,
typelist<
rest> >::type::root
type;
};
} // namespace detail
#endif // #ifndef PB_DS_TYPELIST_TYPELIST_APPEND_HPP
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software
// Foundation; either version 2, or (at your option) any later
// version.
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
// MA 02111-1307, USA.
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice
// and this permission notice appear in supporting documentation. None
// of the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied
// warranty.
/**
* @file typelist_assoc_container.hpp
* Contains an associative container based on typelists.
* Typelists are an idea by Andrei Alexandrescu.
*/
#ifndef PB_DS_TYPELIST_CHAIN_HPP
#define PB_DS_TYPELIST_CHAIN_HPP
#include <utility>
#include <ext/pb_ds/detail/typelist.hpp>
namespace pb_ds
{
namespace detail
{
template<typename Typelist = typelist<null_type> >
struct typelist_assoc_container
{
typedef Typelist tl;
};
template<typename Typelist_Assoc_Cntnr, typename Key, typename Data>
struct typelist_assoc_container_insert
{
private:
typedef typename Typelist_Assoc_Cntnr::tl already_tl;
typedef typelist<typelist_chain<std::pair<Key, Data>, null_type> > new_tl;
typedef typename typelist_append< new_tl, already_tl>::type so_happy_together;
public:
typedef typelist_assoc_container< so_happy_together> type;
};
#include <ext/pb_ds/detail/typelist/typelist_assoc_container_find.hpp>
template<typename Typelist_Assoc_Cntnr, typename Key>
struct typelist_assoc_container_find
{
private:
typedef typename Typelist_Assoc_Cntnr::tl already;
typedef typename already::root already_root;
};
} // namespace detail
} // namespace pb_ds
#endif // #ifndef PB_DS_TYPELIST_CHAIN_HPP
......@@ -51,6 +51,7 @@
#include <vector>
#include <cmath>
#include <ext/pb_ds/exception.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp>
#include <ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp>
#include <ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp>
......
......@@ -70,5 +70,5 @@ int main()
h.resize(20); // { dg-error "instantiated from" }
}
// { dg-error "invalid" "" { target *-*-* } 236 }
// { dg-error "invalid" "" { target *-*-* } 199 }
// { dg-excess-errors "member function" }
......@@ -51,11 +51,9 @@ main()
#endif
typedef __gnu_test::maps<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("create");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -61,11 +61,9 @@ main()
#endif
typedef __gnu_test::sets<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("create_from_sorted");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -54,11 +54,9 @@ main()
#endif
typedef __gnu_test::lists<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("create_sort");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -57,11 +57,9 @@ main()
#endif
typedef __gnu_test::maps<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("find");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -58,13 +58,10 @@ main()
#define thread_type true
#endif
using __gnu_test::associative_containers;
typedef __gnu_test::maps<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("index_associative");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -65,8 +65,7 @@ main()
typedef test_sequence<thread_type> test_type;
test_type test("insert_associative");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -61,8 +61,7 @@ main()
typedef test_sequence<thread_type> test_type;
test_type test("insert_sequence");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -68,8 +68,7 @@ main()
typedef test_sequence<thread_type> test_type;
test_type test("insert_erase_associative");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -76,13 +76,10 @@ main()
#define thread_type true
#endif
using __gnu_test::associative_containers;
typedef __gnu_test::sets<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("insert_from_sorted");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -250,8 +250,7 @@ main()
typedef test_sequence<thread_type> test_type;
test_type test("producer_consumer_associative");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -249,8 +249,7 @@ main()
typedef test_sequence<thread_type> test_type;
test_type test("producer_consumer_sequence");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -71,13 +71,10 @@ main()
#define thread_type true
#endif
using __gnu_test::sequence_containers;
typedef __gnu_test::lists<int, thread_type>::type container_types;
typedef test_sequence<thread_type> test_type;
test_type test("sort_search");
__gnu_cxx::typelist::apply<test_type, container_types> applier;
applier(test);
__gnu_cxx::typelist::apply(test, container_types());
return 0;
}
......
......@@ -44,13 +44,12 @@
* Contains test for erasing random integers.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/mem_usage/erase_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <performance/mem/mem_track_allocator.hpp>
#include <iostream>
#include <vector>
......@@ -94,7 +93,7 @@ main(int argc, char* a_p_argv[])
tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
......@@ -104,7 +103,7 @@ main(int argc, char* a_p_argv[])
std::less<int>, alloc_t>
native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
}
catch (...)
......
......@@ -44,14 +44,13 @@
* Contains test for finding random integers.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_set.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/find_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <iostream>
#include <vector>
......@@ -87,13 +86,13 @@ main(int argc, char* a_p_argv[])
test_t tst(b, b, vn, vs, vm, vn, vs, vm);
{
typedef native_hash_map< int, char> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef hash_common_types<int, char>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
}
catch (...)
......
......@@ -44,7 +44,7 @@
* Contains test for inserting text words.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <io/text_populate.hpp>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_multimap.hpp>
......@@ -55,7 +55,6 @@
#include <performance/assoc/timing/multimap_find_test.hpp>
#include <performance/assoc/multimap_common_type.hpp>
#include <hash_fn/string_hash_fn.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <iostream>
#include <vector>
......@@ -101,21 +100,21 @@ main(int argc, char* a_p_argv[])
typedef multimap_find_test<vec_t::const_iterator, false> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_hash_multimap<std::string, int, 8, string_hash_fn> native_t;
typedef multimap_find_test<vec_t::const_iterator, true> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef native_multimap<std::string, int> native_t;
typedef multimap_find_test<vec_t::const_iterator, true> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
}
catch (...)
......
......@@ -44,7 +44,7 @@
* Contains test for inserting text words.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <io/text_populate.hpp>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_multimap.hpp>
......@@ -54,7 +54,6 @@
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/mem_usage/multimap_insert_test.hpp>
#include <performance/assoc/multimap_common_type.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <performance/mem/mem_track_allocator.hpp>
#include <hash_fn/string_hash_fn.hpp>
#include <iostream>
......@@ -102,7 +101,7 @@ main(int argc, char* a_p_argv[])
tl_t tl;
typedef multimap_insert_test<vec_t::const_iterator, false> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
......@@ -110,14 +109,14 @@ main(int argc, char* a_p_argv[])
tl_t tl;
typedef multimap_insert_test<vec_t::const_iterator, false> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
typedef multimap_insert_test<vec_t::const_iterator, true> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
{
typedef native_multimap<string_t, int, std::less<string_t>, alloc_t> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
......@@ -131,7 +130,7 @@ main(int argc, char* a_p_argv[])
alloc_t>
native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
}
catch (...)
......
......@@ -44,7 +44,7 @@
* Contains test for inserting text words.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <io/text_populate.hpp>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_multimap.hpp>
......@@ -54,7 +54,6 @@
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/multimap_insert_test.hpp>
#include <performance/assoc/multimap_common_type.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <hash_fn/string_hash_fn.hpp>
#include <iostream>
#include <vector>
......@@ -99,21 +98,21 @@ main(int argc, char* a_p_argv[])
mmap_tl_tl tl;
typedef multimap_insert_test<vec_t::const_iterator, false> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_hash_multimap<std::string, int, 8, string_hash_fn> native_t;
typedef multimap_insert_test<vec_t::const_iterator, true> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef native_multimap<std::string, int> native_t;
typedef multimap_insert_test<vec_t::const_iterator, true> test_type;
test_type tst(b, prm* ratio_n, prm* ratio_s, prm* ratio_m);
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
}
catch (...)
......
......@@ -44,12 +44,11 @@
* Contains test for finding random_int.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
#include <performance/priority_queue/timing/push_pop_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/priority_queue/native_priority_queue.hpp>
#include <rng/twister_rand_gen.hpp>
#include <iostream>
......@@ -84,17 +83,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<int>::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<int, true> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<int, false> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch(...)
......
......@@ -44,12 +44,11 @@
* Contains test for finding random_int.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
#include <performance/priority_queue/timing/push_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/priority_queue/native_priority_queue.hpp>
#include <rng/twister_rand_gen.hpp>
#include <iostream>
......@@ -82,17 +81,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<int>::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<int, true> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<int, false> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch (...)
......
......@@ -44,7 +44,7 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
......@@ -101,17 +101,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<std::string>::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<std::string, true> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<std::string, false> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch(...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
#include <performance/priority_queue/timing/modify_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/priority_queue/native_priority_queue.hpp>
#include <iostream>
#include <vector>
......@@ -88,17 +87,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<std::string>::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<std::string, true> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<std::string, false> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch (...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
#include <performance/priority_queue/mem_usage/pop_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/priority_queue/native_priority_queue.hpp>
#include <performance/mem/mem_track_allocator.hpp>
#include <iostream>
......@@ -84,17 +83,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<string_t, std::less<string_t>, mem_track_allocator<char> >::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<string_t, true, std::less<string_t>, mem_track_allocator<string_t> > native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<string_t, false, std::less<string_t>, mem_track_allocator<string_t> > native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch (...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
#include <performance/priority_queue/timing/push_pop_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/priority_queue/native_priority_queue.hpp>
#include <iostream>
#include <vector>
......@@ -81,17 +80,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<std::string>::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<std::string, true> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<std::string, false> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch(...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/priority_queue/common_type.hpp>
#include <performance/priority_queue/timing/push_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/priority_queue/native_priority_queue.hpp>
#include <iostream>
#include <vector>
......@@ -81,17 +80,17 @@ main(int argc, char* a_p_argv[])
{
typedef pq_common_types<std::string>::performance_tl pq_tl_t;
pq_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_priority_queue<std::string, true> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
{
typedef native_priority_queue<std::string, false> native_pq_t;
tst(pb_ds::detail::type_to_type<native_pq_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_pq_t>());
}
}
catch(...)
......
......@@ -44,7 +44,7 @@
* Contains test for finding random integers.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_map.hpp>
#include <native_type/assoc/native_map.hpp>
......@@ -52,7 +52,6 @@
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/find_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <iostream>
#include <vector>
......@@ -83,24 +82,24 @@ main(int argc, char* a_p_argv[])
test_t tst(b, b, vn, vs, vm, vn, vs, vm);
{
typedef native_hash_map< int, char> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef native_map< int, char> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef hash_common_types<int, char>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef tree_common_types<int, char>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
}
catch (...)
......
......@@ -44,7 +44,7 @@
* Contains test for subscripting random integers.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_map.hpp>
#include <native_type/assoc/native_map.hpp>
......@@ -52,7 +52,6 @@
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/subscript_find_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <iostream>
#include <vector>
......@@ -84,23 +83,23 @@ main(int argc, char* a_p_argv[])
{
typedef hash_common_types<int, size_t>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef tree_common_types<int, size_t>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_hash_map<int, size_t> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef native_map< int, size_t> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
}
catch (...)
......
......@@ -44,7 +44,7 @@
* Contains test for subscripting random integers.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <native_type/assoc/native_hash_map.hpp>
#include <native_type/assoc/native_map.hpp>
......@@ -52,7 +52,6 @@
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/subscript_insert_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <iostream>
#include <vector>
......@@ -84,23 +83,23 @@ main(int argc, char* a_p_argv[])
{
typedef hash_common_types<int, size_t>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef tree_common_types<int, size_t>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_hash_map< int, size_t> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
{
typedef native_map< int, size_t> native_t;
tst(pb_ds::detail::type_to_type<native_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_t>());
}
}
catch(...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/find_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <hash_fn/string_hash_fn.hpp>
#include <native_type/assoc/native_hash_map.hpp>
#include <native_type/assoc/native_map.hpp>
......@@ -86,22 +85,20 @@ main(int argc, char* a_p_argv[])
typedef hash_common_types<std::string, char, string_hash_fn>::performance_tl hash_tl_t;
typedef pb_ds::detail::typelist_append<pat_trie_tl_t, pb_ds::detail::typelist_append<hash_tl_t, tree_tl_t>::type>::type tl_t;
typedef __gnu_cxx::typelist::append<pat_trie_tl_t, __gnu_cxx::typelist::append<hash_tl_t, tree_tl_t>::type>::type tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_map<std::string, char> native_map_t;
tst(pb_ds::detail::type_to_type<native_map_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_map_t>());
#ifdef PB_DS_USE_TR1
typedef native_hash_map<std::string, char, 8, string_hash_fn> native_hash_map_t;
tst(pb_ds::detail::type_to_type<native_hash_map_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_hash_map_t>());
// XXX Unfortunately, this crashes
#if 0
#ifdef PB_DS_USE_TR1
typedef
native_hash_map<
std::string,
......@@ -117,9 +114,8 @@ main(int argc, char* a_p_argv[])
true>
sth_native_hash_map_t;
tst(pb_ds::detail::type_to_type<sth_native_hash_map_t>());
#endif // #ifdef PB_DS_USE_TR1
#endif // #if 0
tst(__gnu_cxx::typelist::detail::type_to_type<sth_native_hash_map_t>());
#endif
}
}
catch(...)
......
......@@ -46,12 +46,11 @@
#include <iostream>
#include <vector>
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <performance/assoc/timing/tree_order_statistics_test.hpp>
void
......@@ -74,14 +73,14 @@ main(int argc, char* a_p_argv[])
test_t tst(vn, vs, vm);
typedef tree_common_types<int, pb_ds::null_mapped_type, std::less<int>, pb_ds::tree_order_statistics_node_update>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef tree_order_statistics_test<false> test_t;
test_t tst(vn, vs, vm);
typedef native_set<int> native_set_t;
tst(pb_ds::detail::type_to_type<native_set_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_set_t>());
}
}
catch(...)
......
......@@ -44,13 +44,12 @@
* Contains test for joining trees.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <rng/twister_rand_gen.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/tree_split_join_test.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <iostream>
#include <vector>
......@@ -75,14 +74,14 @@ main(int argc, char* a_p_argv[])
typedef tree_common_types<int, pb_ds::null_mapped_type>::performance_tl tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef tree_split_join_test<false> test_t;
test_t tst(vn, vs, vm);
typedef native_set<int> native_set_t;
tst(pb_ds::detail::type_to_type<native_set_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_set_t>());
}
}
catch(...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/insert_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <hash_fn/string_hash_fn.hpp>
#include <native_type/assoc/native_hash_map.hpp>
#include <native_type/assoc/native_map.hpp>
......@@ -83,14 +82,14 @@ main(int argc, char* a_p_argv[])
{
typedef trie_common_types<std::string, char>::performance_tl pat_trie_tl_t;
typedef tree_common_types<std::string, char>::performance_tl tree_tl_t;
typedef pb_ds::detail::typelist_append<pat_trie_tl_t, tree_tl_t>::type tl_t;
typedef __gnu_cxx::typelist::append<pat_trie_tl_t, tree_tl_t>::type tl_t;
tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
{
typedef native_map<std::string, char> native_map_t;
tst(pb_ds::detail::type_to_type<native_map_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_map_t>());
}
}
catch (...)
......
......@@ -44,13 +44,12 @@
* Contains test for finding text with locality of reference.
*/
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <performance/io/xml_formatter.hpp>
#include <io/verified_cmd_line_input.hpp>
#include <common_type/assoc/common_type.hpp>
#include <performance/assoc/timing/find_test.hpp>
#include <io/text_populate.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <native_type/assoc/native_map.hpp>
#include <iostream>
#include <vector>
......@@ -81,13 +80,13 @@ main(int argc, char* a_p_argv[])
test_t tst(b, b, vn, vs, vm, vn, vs, vm);
{
typedef native_map<std::string, char> native_set_t;
tst(pb_ds::detail::type_to_type<native_set_t>());
tst(__gnu_cxx::typelist::detail::type_to_type<native_set_t>());
}
{
typedef tree_common_types<std::string, char>::performance_tl tree_tl_t;
tree_tl_t tl;
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
}
catch(...)
......
......@@ -81,74 +81,74 @@ namespace pb_ds
private:
template<typename D_Cntnr>
static std::string
name(pb_ds::detail::type_to_type<D_Cntnr>)
name(__gnu_cxx::typelist::detail::type_to_type<D_Cntnr>)
{
return ("mmap_" + pb_ds_string_form<D_Cntnr>::name());
}
template<typename D_Cntnr>
static std::string
desc(pb_ds::detail::type_to_type<D_Cntnr>)
desc(__gnu_cxx::typelist::detail::type_to_type<D_Cntnr>)
{
return (pb_ds_string_form<D_Cntnr>::desc());
}
static std::string
name(pb_ds::detail::type_to_type<size_t>)
name(__gnu_cxx::typelist::detail::type_to_type<size_t>)
{
return ("map");
}
static std::string
desc(pb_ds::detail::type_to_type<size_t>)
desc(__gnu_cxx::typelist::detail::type_to_type<size_t>)
{
return ("");
}
static std::string
name(pb_ds::detail::type_to_type<basic_type>)
name(__gnu_cxx::typelist::detail::type_to_type<basic_type>)
{
return ("map");
}
static std::string
desc(pb_ds::detail::type_to_type<basic_type>)
desc(__gnu_cxx::typelist::detail::type_to_type<basic_type>)
{
return ("");
}
static std::string
name(pb_ds::detail::type_to_type<int>)
name(__gnu_cxx::typelist::detail::type_to_type<int>)
{
return ("map");
}
static std::string
desc(pb_ds::detail::type_to_type<int>)
desc(__gnu_cxx::typelist::detail::type_to_type<int>)
{
return ("");
}
static std::string
name(pb_ds::detail::type_to_type<char>)
name(__gnu_cxx::typelist::detail::type_to_type<char>)
{
return ("map");
}
static std::string
desc(pb_ds::detail::type_to_type<char>)
desc(__gnu_cxx::typelist::detail::type_to_type<char>)
{
return ("");
}
static std::string
name(pb_ds::detail::type_to_type<pb_ds::null_mapped_type>)
name(__gnu_cxx::typelist::detail::type_to_type<pb_ds::null_mapped_type>)
{
return ("set");
}
static std::string
desc(pb_ds::detail::type_to_type<pb_ds::null_mapped_type>)
desc(__gnu_cxx::typelist::detail::type_to_type<pb_ds::null_mapped_type>)
{
return ("");
}
......@@ -157,13 +157,13 @@ namespace pb_ds
static std::string
name()
{
return (name(pb_ds::detail::type_to_type<mapped_type>()));
return (name(__gnu_cxx::typelist::detail::type_to_type<mapped_type>()));
}
static std::string
desc()
{
return (desc(pb_ds::detail::type_to_type<mapped_type>()));
return (desc(__gnu_cxx::typelist::detail::type_to_type<mapped_type>()));
}
};
......
......@@ -47,8 +47,7 @@
#ifndef PB_DS_TEMPLATE_POLICY_HPP
#define PB_DS_TEMPLATE_POLICY_HPP
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
#include <ext/pb_ds/hash_policy.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/list_update_policy.hpp>
......
......@@ -49,7 +49,7 @@
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/priority_queue.hpp>
#include <ext/pb_ds/detail/typelist.hpp>
#include <ext/typelist.h>
namespace pb_ds
{
......@@ -72,7 +72,7 @@ namespace pb_ds
typedef pb_ds::priority_queue<Value_Type, Cmp_Fn, pb_ds::thin_heap_tag, Allocator> thin_heap_t;
typedef typename pb_ds::detail::typelist5<thin_heap_t, pairing_heap_t, binomial_heap_t, rc_binomial_heap_t, binary_heap_t>::type all_tl;
typedef typename __gnu_cxx::typelist::create5<thin_heap_t, pairing_heap_t, binomial_heap_t, rc_binomial_heap_t, binary_heap_t>::type all_tl;
public:
typedef all_tl performance_tl;
......
......@@ -47,10 +47,11 @@
#ifndef PB_DS_NATIVE_HASH_MAP_HPP
#define PB_DS_NATIVE_HASH_MAP_HPP
#include <string>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <native_type/assoc/native_hash_tag.hpp>
#include <io/xml.hpp>
#include <string>
// Default to using tr1.
#define PB_DS_USE_TR1 1
......
......@@ -47,57 +47,27 @@
#ifndef PB_DS_NATIVE_HASH_MULTIMAP_HPP
#define PB_DS_NATIVE_HASH_MULTIMAP_HPP
#include <string>
#include <ext/hash_map>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <native_type/assoc/native_hash_tag.hpp>
#include <io/xml.hpp>
#include <string>
#include <ext/hash_map>
namespace pb_ds
{
namespace test
{
#define PB_DS_CLASS_T_DEC \
template< \
typename Key, \
typename Data, \
size_t Init_Size, \
class Hash_Fn, \
class Eq_Fn, \
class Less_Fn, \
class Allocator>
#define PB_DS_CLASS_C_DEC \
native_hash_multimap< \
Key, \
Data, \
Init_Size, \
Hash_Fn, \
Eq_Fn, \
Less_Fn, \
Allocator>
#define PB_DS_BASE_C_DEC \
__gnu_cxx::hash_multimap< \
Key, \
Data, \
Hash_Fn, \
Eq_Fn, \
Allocator>
#define PB_DS_BASE_C_DEC \
__gnu_cxx::hash_multimap<Key, Data, Hash_Fn, Eq_Fn, Allocator>
template<typename Key,
typename Data,
size_t Init_Size = 8,
class Hash_Fn =
typename pb_ds::detail::default_hash_fn<Key>::type,
class Eq_Fn =
std::equal_to<Key>,
class Less_Fn =
std::less<Key>,
class Allocator =
std::allocator<char> >
class Hash_Fn = typename pb_ds::detail::default_hash_fn<Key>::type,
class Eq_Fn = std::equal_to<Key>,
class Less_Fn = std::less<Key>,
class Allocator = std::allocator<char> >
class native_hash_multimap : public PB_DS_BASE_C_DEC
{
private:
......@@ -114,119 +84,78 @@ namespace pb_ds
typedef
typename Allocator::template rebind<
std::pair<
Key,
Data> >::other::const_reference
std::pair<Key, Data> >::other::const_reference
const_reference;
public:
native_hash_multimap();
native_hash_multimap() : base_type(Init_Size)
{ }
template<typename It>
native_hash_multimap(It f, It l) : base_type(f, l)
{ }
inline void
insert(typename base_type::const_reference r_val)
{
typedef
std::pair<
typename base_type::iterator,
typename base_type::iterator>
eq_range_t;
typedef std::pair<iterator, iterator> eq_range_t;
eq_range_t f = base_type::equal_range(r_val.first);
typename base_type::iterator it = f.first;
iterator it = f.first;
while (it != f.second)
{
if (it->second == r_val.second)
return;
++it;
}
base_type::insert(r_val);
}
inline iterator
find(const_reference r_val)
{
typedef
std::pair<
typename base_type::iterator,
typename base_type::iterator>
eq_range_t;
typedef std::pair<iterator, iterator> eq_range_t;
eq_range_t f = base_type::equal_range(r_val.first);
typename base_type::iterator it = f.first;
iterator it = f.first;
while (it != f.second)
{
if (it->second == r_val.second)
return it;
++it;
}
return base_type::end();
}
inline const_iterator
find(const_reference r_val) const
{
typedef
std::pair<
typename base_type::const_iterator,
typename base_type::const_iterator>
eq_range_t;
typedef std::pair<const_iterator, const_iterator> eq_range_t;
eq_range_t f = base_type::equal_range(r_val.first);
typename base_type::const_iterator it = f.first;
const_iterator it = f.first;
while (it != f.second)
{
if (it->second == r_val.second)
return it;
++it;
}
return base_type::end();
}
template<typename It>
native_hash_multimap(It f, It l);
static std::string
name()
{
return ("n_hash_mmap");
}
{ return std::string("n_hash_mmap"); }
static std::string
desc()
{
return (make_xml_tag("type", "value", "__gnucxx_hash_multimap"));
return make_xml_tag("type", "value", "__gnucxx_hash_multimap");
}
};
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
native_hash_multimap() : base_type(Init_Size)
{ }
PB_DS_CLASS_T_DEC
template<typename It>
PB_DS_CLASS_C_DEC::
native_hash_multimap(It f, It l) : base_type(f, l)
{ }
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_BASE_C_DEC
} // namespace test
} // namespace pb_ds
#endif // #ifndef PB_DS_NATIVE_HASH_MULTIMAP_HPP
#endif
......@@ -47,10 +47,11 @@
#ifndef PB_DS_NATIVE_HASH_SET_HPP
#define PB_DS_NATIVE_HASH_SET_HPP
#include <string>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <native_type/assoc/native_hash_tag.hpp>
#include <io/xml.hpp>
#include <string>
// Default to using tr1.
#define PB_DS_USE_TR1 1
......@@ -77,7 +78,7 @@ namespace pb_ds
template<typename Key,
size_t Init_Size = 8,
typename Hash_Fn = typename pb_ds::detail::default_hash_fn<Key>::type,
typename Hash_Fn = typename pb_ds::detail::default_hash_fn<Key>::type,
typename Eq_Fn = std::equal_to<Key>,
typename Less_Fn = std::less<Key>,
typename Allocator = std::allocator<char>
......
......@@ -48,30 +48,22 @@
#define PB_DS_NATIVE_MAP_HPP
#include <map>
#include <string>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <native_type/assoc/native_tree_tag.hpp>
#include <io/xml.hpp>
#include <string>
namespace pb_ds
{
namespace test
{
#define PB_DS_BASE_C_DEC \
std::map< \
Key, \
Data, \
Cmp_Fn, \
typename Allocator::template rebind< \
std::pair< \
const Key, \
Data > >::other >
#define PB_DS_BASE_C_DEC \
std::map<Key, Data, Cmp_Fn, \
typename Allocator::template rebind<std::pair<const Key, Data > >::other >
template<typename Key, typename Data, class Cmp_Fn = std::less<Key>,
class Allocator =
std::allocator<char> >
class Allocator = std::allocator<char> >
class native_map : public PB_DS_BASE_C_DEC
{
private:
......@@ -80,7 +72,6 @@ namespace pb_ds
public:
typedef native_tree_tag container_category;
public:
native_map() : base_type()
{ }
......@@ -90,15 +81,11 @@ namespace pb_ds
static std::string
name()
{
return ("n_map");
}
{ return std::string("n_map"); }
static std::string
desc()
{
return (make_xml_tag( "type", "value", "std_map"));
}
{ return make_xml_tag("type", "value", "std_map"); }
};
#undef PB_DS_BASE_C_DEC
......
......@@ -48,38 +48,20 @@
#define PB_DS_NATIVE_MULTIMAP_HPP
#include <map>
#include <native_type/assoc/native_tree_tag.hpp>
#include <string>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <native_type/assoc/native_tree_tag.hpp>
namespace pb_ds
{
namespace test
{
#define PB_DS_CLASS_T_DEC \
template<typename Key, typename Data, class Less_Fn, class Allocator>
#define PB_DS_CLASS_C_DEC \
native_multimap< \
Key, \
Data, \
Less_Fn, \
Allocator>
#define PB_DS_BASE_C_DEC \
std::multimap< \
Key, \
Data, \
Less_Fn, \
typename Allocator::template rebind< \
std::pair< \
const Key, \
Data> >::other >
#define PB_DS_BASE_C_DEC \
std::multimap<Key, Data, Less_Fn, \
typename Allocator::template rebind<std::pair<const Key, Data> >::other>
template<typename Key, typename Data, class Less_Fn = std::less<Key>,
class Allocator =
std::allocator<char> >
class Allocator = std::allocator<char> >
class native_multimap : public PB_DS_BASE_C_DEC
{
private:
......@@ -92,55 +74,41 @@ namespace pb_ds
typedef
typename Allocator::template rebind<
std::pair<
Key,
Data> >::other::const_reference
std::pair<Key, Data> >::other::const_reference
const_reference;
typedef typename base_type::iterator iterator;
typedef typename base_type::const_iterator const_iterator;
public:
native_multimap();
native_multimap() { }
template<typename It>
native_multimap(It f, It l) : base_type(f, l)
{ }
inline void
insert(const_reference r_val)
{
typedef
std::pair<
typename base_type::iterator,
typename base_type::iterator>
eq_range_t;
typedef std::pair<iterator, iterator> eq_range_t;
eq_range_t f = base_type::equal_range(r_val.first);
typename base_type::iterator it = f.first;
iterator it = f.first;
while (it != f.second)
{
if (it->second == r_val.second)
return;
++it;
}
base_type::insert(r_val);
}
inline iterator
find(const_reference r_val)
{
typedef
std::pair<
typename base_type::iterator,
typename base_type::iterator>
eq_range_t;
typedef std::pair<iterator, iterator> eq_range_t;
eq_range_t f = base_type::equal_range(r_val.first);
typename base_type::iterator it = f.first;
iterator it = f.first;
while (it != f.second)
{
if (it->second == r_val.second)
......@@ -154,55 +122,28 @@ namespace pb_ds
inline const_iterator
find(const_reference r_val) const
{
typedef
std::pair<
typename base_type::const_iterator,
typename base_type::const_iterator>
eq_range_t;
typedef std::pair<const_iterator, const_iterator> eq_range_t;
eq_range_t f = base_type::equal_range(r_val.first);
typename base_type::const_iterator it = f.first;
const_iterator it = f.first;
while (it != f.second)
{
if (it->second == r_val.second)
return it;
++it;
}
return base_type::end();
}
template<typename It>
native_multimap(It f, It l);
static std::string
name()
{
return ("n_mmap");
}
{ return std::string("n_mmap"); }
static std::string
desc()
{
return (make_xml_tag("type", "value", "std_multimap"));
}
{ return make_xml_tag("type", "value", "std_multimap"); }
};
PB_DS_CLASS_T_DEC
PB_DS_CLASS_C_DEC::
native_multimap()
{ }
PB_DS_CLASS_T_DEC
template<typename It>
PB_DS_CLASS_C_DEC::
native_multimap(It f, It l) : base_type(f, l)
{ }
#undef PB_DS_CLASS_T_DEC
#undef PB_DS_CLASS_C_DEC
#undef PB_DS_BASE_C_DEC
} // namespace test
......
......@@ -47,38 +47,30 @@
#ifndef PB_DS_NATIVE_SET_HPP
#define PB_DS_NATIVE_SET_HPP
#include <string>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <native_type/assoc/native_tree_tag.hpp>
#include <io/xml.hpp>
#include <string>
namespace pb_ds
{
namespace test
{
#define PB_DS_BASE_C_DEC \
std::set< \
Key, \
Cmp_Fn, \
typename Allocator::template rebind< \
Key>::other>
#define PB_DS_BASE_C_DEC \
std::set<Key, Cmp_Fn, typename Allocator::template rebind<Key>::other>
template<typename Key, class Cmp_Fn = std::less<Key>,
class Allocator =
std::allocator<char> >
class Allocator = std::allocator<char> >
class native_set : public PB_DS_BASE_C_DEC
{
private:
typedef PB_DS_BASE_C_DEC base_type;
typedef PB_DS_BASE_C_DEC base_type;
public:
typedef native_tree_tag container_category;
typedef native_tree_tag container_category;
typedef typename base_type::const_iterator const_iterator;
typedef typename PB_DS_BASE_C_DEC::const_iterator const_iterator;
public:
native_set() : base_type()
{ }
......@@ -91,21 +83,15 @@ namespace pb_ds
static std::string
name()
{
return ("n_set");
}
{ return std::string("n_set"); }
static std::string
desc()
{
return (make_xml_tag( "type", "value", "std_set"));
}
{ return make_xml_tag("type", "value", "std_set"); }
};
#undef PB_DS_BASE_C_DEC
} // namespace test
} // namespace pb_ds
#endif // #ifndef PB_DS_NATIVE_SET_HPP
......@@ -49,15 +49,11 @@
namespace pb_ds
{
namespace test
{
struct native_tree_tag
{ };
} // namespace test
} // namespace pb_ds
#endif // #ifndef PB_DS_NATIVE_TREE_DS_TAG_HPP
......@@ -74,7 +74,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
erase_test(const erase_test& );
......@@ -100,7 +100,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -75,18 +75,18 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
multimap_insert_test(const multimap_insert_test& );
template<typename Cntnr>
size_t
insert(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::true_type);
insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::true_type);
template<typename Cntnr>
size_t
insert(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::false_type);
insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::false_type);
private:
const It m_ins_b;
......@@ -109,7 +109,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......@@ -123,7 +123,7 @@ namespace pb_ds
It ins_it_e = m_ins_b;
std::advance(ins_it_e, ins_size);
const size_t delta_mem = insert(pb_ds::detail::type_to_type<Cntnr>(),
const size_t delta_mem = insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>(),
ins_it_b,
ins_it_e,
pb_ds::detail::integral_constant<int,Native>());
......@@ -136,7 +136,7 @@ namespace pb_ds
template<typename Cntnr>
size_t
PB_DS_CLASS_C_DEC::
insert(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::true_type)
insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::true_type)
{
mem_track_allocator<char> alloc;
......@@ -158,7 +158,7 @@ namespace pb_ds
template<typename Cntnr>
size_t
PB_DS_CLASS_C_DEC::
insert(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::false_type)
insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e, pb_ds::detail::false_type)
{
mem_track_allocator<char> alloc;
......
......@@ -129,8 +129,8 @@ namespace pb_ds
public:
typedef
typename pb_ds::detail::typelist_flatten<
typename pb_ds::detail::typelist_transform<
typename __gnu_cxx::typelist::flatten<
typename __gnu_cxx::typelist::transform<
Sec_Tl,
hash_mmap_transform>::type>::type
type;
......@@ -159,8 +159,8 @@ namespace pb_ds
public:
typedef
typename pb_ds::detail::typelist_flatten<
typename pb_ds::detail::typelist_transform<
typename __gnu_cxx::typelist::flatten<
typename __gnu_cxx::typelist::transform<
Sec_Tl,
tree_mmap_transform>::type>::type
type;
......@@ -242,11 +242,11 @@ namespace pb_ds
public:
typedef
typename pb_ds::detail::typelist_append<
typename __gnu_cxx::typelist::append<
hl_mmap_tl_t,
typename pb_ds::detail::typelist_append<
typename __gnu_cxx::typelist::append<
hh_mmap_tl_t,
typename pb_ds::detail::typelist_append<
typename __gnu_cxx::typelist::append<
th_mmap_tl_t,
tl_mmap_tl_t>::type>::type>::type
type;
......
......@@ -73,8 +73,8 @@ namespace pb_ds
};
typedef
pb_ds::detail::typelist_flatten<
pb_ds::detail::typelist_transform<
__gnu_cxx::typelist::flatten<
__gnu_cxx::typelist::transform<
hash_set_tl_t,
hash_mmap_transform>::type>::type
hash_mmap_tl_t;
......@@ -97,8 +97,8 @@ namespace pb_ds
};
typedef
pb_ds::detail::typelist_flatten<
pb_ds::detail::typelist_transform<
__gnu_cxx::typelist::flatten<
__gnu_cxx::typelist::transform<
tree_set_tl_t,
tree_mmap_transform>::type>::type
tree_mmap_tl_t;
......
......@@ -140,7 +140,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
find_test(const find_test& );
......@@ -176,7 +176,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -104,14 +104,14 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
insert_test(const insert_test& );
template<typename Cntnr>
void
insert(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
private:
const It m_ins_b;
......@@ -134,7 +134,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......@@ -162,7 +162,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
insert(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
insert(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
{
Cntnr cntnr;
......
......@@ -155,18 +155,18 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
multimap_find_test(const multimap_find_test& );
template<typename Cntnr>
Cntnr
init(It ins_b, It ins_e, pb_ds::detail::type_to_type<Cntnr>, pb_ds::detail::true_type);
init(It ins_b, It ins_e, __gnu_cxx::typelist::detail::type_to_type<Cntnr>, pb_ds::detail::true_type);
template<typename Cntnr>
Cntnr
init(It ins_b, It ins_e, pb_ds::detail::type_to_type<Cntnr>, pb_ds::detail::false_type);
init(It ins_b, It ins_e, __gnu_cxx::typelist::detail::type_to_type<Cntnr>, pb_ds::detail::false_type);
private:
const It m_ins_b;
......@@ -189,7 +189,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......@@ -205,7 +205,7 @@ namespace pb_ds
Cntnr c = init(ins_it_b,
ins_it_e,
pb_ds::detail::type_to_type<Cntnr>(),
__gnu_cxx::typelist::detail::type_to_type<Cntnr>(),
pb_ds::detail::integral_constant<int,Native>());
pb_ds::test::detail::multimap_find_functor<It, Cntnr, Native>
......@@ -222,7 +222,7 @@ namespace pb_ds
template<typename Cntnr>
Cntnr
PB_DS_CLASS_C_DEC::
init(It ins_b, It ins_e, pb_ds::detail::type_to_type<Cntnr>, pb_ds::detail::true_type)
init(It ins_b, It ins_e, __gnu_cxx::typelist::detail::type_to_type<Cntnr>, pb_ds::detail::true_type)
{
return Cntnr(ins_b, ins_e);
}
......@@ -231,7 +231,7 @@ namespace pb_ds
template<typename Cntnr>
Cntnr
PB_DS_CLASS_C_DEC::
init(It ins_b, It ins_e, pb_ds::detail::type_to_type<Cntnr>, pb_ds::detail::false_type)
init(It ins_b, It ins_e, __gnu_cxx::typelist::detail::type_to_type<Cntnr>, pb_ds::detail::false_type)
{
Cntnr ret;
......
......@@ -132,7 +132,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
multimap_insert_test(const multimap_insert_test& );
......@@ -158,7 +158,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -106,7 +106,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
subscript_find_test(const subscript_find_test& );
......@@ -142,7 +142,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -104,7 +104,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
subscript_insert_test(const subscript_insert_test& );
......@@ -140,7 +140,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -157,7 +157,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
tree_order_statistics_test(const tree_order_statistics_test& );
......@@ -188,7 +188,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -134,7 +134,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
tree_split_join_test(const tree_split_join_test& );
......@@ -157,7 +157,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -74,7 +74,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
pop_test(const pop_test& );
......@@ -100,7 +100,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......
......@@ -128,7 +128,7 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
using pb_ds::test::detail::double_push_functor;
using pb_ds::test::detail::double_push_join_functor;
......@@ -159,7 +159,7 @@ namespace pb_ds
template<typename Cntnr>
void
join(pb_ds::detail::type_to_type<Cntnr>, It b, It e)
join(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It b, It e)
{
Cntnr cntnr;
typedef typename Cntnr::const_reference const_reference;
......
......@@ -283,14 +283,14 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
modify_test(const modify_test& );
template<typename Cntnr>
void
modify(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
modify(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
private:
const It m_ins_b;
......@@ -316,7 +316,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......@@ -367,7 +367,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
modify(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
modify(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
{
Cntnr cntnr;
......
......@@ -107,14 +107,14 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
push_pop_test(const push_pop_test& );
template<typename Cntnr>
void
push(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
push(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
private:
const It m_ins_b;
......@@ -137,7 +137,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......@@ -165,7 +165,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
push(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
push(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
{
Cntnr cntnr;
......
......@@ -104,14 +104,14 @@ namespace pb_ds
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>);
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>);
private:
push_test(const push_test& );
template<typename Cntnr>
void
push(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
push(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e);
private:
const It m_ins_b;
......@@ -134,7 +134,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
xml_result_set_performance_formatter res_set_fmt(
string_form<Cntnr>::name(),
......@@ -162,7 +162,7 @@ namespace pb_ds
template<typename Cntnr>
void
PB_DS_CLASS_C_DEC::
push(pb_ds::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
push(__gnu_cxx::typelist::detail::type_to_type<Cntnr>, It ins_it_b, It ins_it_e)
{
Cntnr cntnr;
......
......@@ -82,7 +82,7 @@ namespace test
typedef typename tree_common_types<basic_type, Data_Type, std::less<basic_type>, pb_ds::tree_order_statistics_node_update, alloc_type>::regression_tl order_statistics_tl_t;
public:
typedef typename pb_ds::detail::typelist_append<no_order_statistics_tl_t, order_statistics_tl_t>::type tl_t;
typedef typename __gnu_cxx::typelist::append<no_order_statistics_tl_t, order_statistics_tl_t>::type tl_t;
typedef no_order_statistics_tl_t min_tl_t;
};
......@@ -98,7 +98,7 @@ namespace test
typedef typename trie_common_types<basic_type, Data_Type, e_access_traits_t, pb_ds::pat_trie_tag, pb_ds::trie_prefix_search_node_update, alloc_type>::regression_tl prefix_search_tl_t;
public:
typedef typename pb_ds::detail::typelist_append<no_updates_tl_t, typename pb_ds::detail::typelist_append<prefix_search_tl_t, order_statistics_tl_t>::type>::type tl_t;
typedef typename __gnu_cxx::typelist::append<no_updates_tl_t, typename __gnu_cxx::typelist::append<prefix_search_tl_t, order_statistics_tl_t>::type>::type tl_t;
typedef no_updates_tl_t min_tl_t;
};
......
......@@ -76,7 +76,7 @@ namespace detail
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
unsigned long ul = static_cast<unsigned long>(m_sd);
container_rand_regression_test<Cntnr> t(ul, m_n, m_n, m_tp, m_ip,
......@@ -143,7 +143,7 @@ namespace detail
try
{
detail::rand_reg_test tst(sd, n, m, tp, ip, ep, cp, mp, disp);
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
catch(...)
{
......
......@@ -76,7 +76,7 @@ namespace detail
template<typename Cntnr>
void
operator()(pb_ds::detail::type_to_type<Cntnr>)
operator()(__gnu_cxx::typelist::detail::type_to_type<Cntnr>)
{
unsigned long ul = static_cast<unsigned long>(m_sd);
container_rand_regression_test<Cntnr> t(ul, m_n, m_n, m_tp, m_ip, m_dp,
......@@ -145,7 +145,7 @@ namespace detail
try
{
detail::rand_reg_test tst(sd, n, m, tp, ip, dp, ep, cp, mp, disp);
pb_ds::detail::typelist_apply(tst, tl);
__gnu_cxx::typelist::apply(tst, tl);
}
catch(...)
{
......
......@@ -93,7 +93,7 @@ namespace pb_ds
generate_value(Gen& r_gen, size_t max)
{
return (generate_value(r_gen, max,
pb_ds::detail::type_to_type<value_type>()));
__gnu_cxx::typelist::detail::type_to_type<value_type>()));
}
static const_key_reference
......@@ -118,21 +118,21 @@ namespace pb_ds
private:
template<typename Gen>
static value_type
generate_value(Gen& r_gen, size_t max, pb_ds::detail::type_to_type<pb_ds::null_mapped_type>)
generate_value(Gen& r_gen, size_t max, __gnu_cxx::typelist::detail::type_to_type<pb_ds::null_mapped_type>)
{
return (basic_type(r_gen, max));
}
template<typename Gen>
static value_type
generate_value(Gen& r_gen, size_t max, pb_ds::detail::type_to_type<basic_type>)
generate_value(Gen& r_gen, size_t max, __gnu_cxx::typelist::detail::type_to_type<basic_type>)
{
return (basic_type(r_gen, max));
}
template<typename Gen>
static value_type
generate_value(Gen& r_gen, size_t max, pb_ds::detail::type_to_type<std::pair<const basic_type, basic_type> >)
generate_value(Gen& r_gen, size_t max, __gnu_cxx::typelist::detail::type_to_type<std::pair<const basic_type, basic_type> >)
{
return (std::make_pair(basic_type(r_gen, max), basic_type(r_gen, max)));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment