Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r84654 - in sandbox/container_gen: . boost boost/container_gen boost/container_gen/detail boost/container_gen/detail/metafunction boost/detail boost/detail/function boost/detail/metafunction boost/graph boost/graph/detail boost/graph/detail/metafunction boost/pending boost/typeof boost/typeof/boost boost/typeof/boost/accumulators boost/typeof/boost/accumulators/framework boost/typeof/boost/accumulators/framework/accumulators boost/typeof/boost/accumulators/statistics boost/typeof/boost/container boost/typeof/boost/container_gen boost/typeof/boost/functional boost/typeof/boost/heap boost/typeof/boost/heap/detail boost/typeof/boost/iterator boost/typeof/boost/mpl boost/typeof/boost/parameter boost/typeof/boost/parameter/aux_ boost/typeof/boost/ptr_container boost/typeof/boost/ptr_container/detail boost/typeof/boost/unordered boost/typeof/boost/utility boost/typeof/std boost/typeof/std/tr1 boost/utility libs libs/container_gen libs/container_gen/doc libs/conta iner_gen/doc/html libs/container_gen/doc/html/container_gen libs/container_gen/doc/html/container_gen/reference libs/container_gen/example libs/container_gen/test libs/graph libs/graph/example libs/utility libs/utility/doc libs/utility/doc/html libs/utility/doc/src libs/utility/doc/src/get_iterator_second libs/utility/doc/src/get_iterator_value_second libs/utility/doc/src/get_reference libs/utility/doc/src/is_mpl_boolean_constant libs/utility/doc/src/is_mpl_integral_constant
From: sponage_at_[hidden]
Date: 2013-06-06 11:02:40


Author: expaler
Date: 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013)
New Revision: 84654
URL: http://svn.boost.org/trac/boost/changeset/84654

Log:
Updated Boost.ContainerGen to 0.8.

Added:
   sandbox/container_gen/
   sandbox/container_gen/LICENSE_1_0.txt (contents, props changed)
   sandbox/container_gen/boost/
   sandbox/container_gen/boost.png (contents, props changed)
   sandbox/container_gen/boost/container_gen/
   sandbox/container_gen/boost/container_gen/c_str_cmp_selectors.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/c_str_cmp_selectors_fwd.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/container_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/container_gen_fwd.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/detail/
   sandbox/container_gen/boost/container_gen/detail/metafunction/
   sandbox/container_gen/boost/container_gen/detail/metafunction/is_clone_allocator.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/detail/selector_signatures.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/emplace_assoc_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/emplace_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/has_emplace_mfunc_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/has_stable_iters_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/insert_range_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/insert_range_result_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_allocator_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_associative_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_compare_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_container_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_flat_assoc_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_hashed_assoc_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_hasher_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_heap_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_iteratable_heap_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_multiple_assoc_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_mutable_heap_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_order_iter_heap_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_ptr_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_queue_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_random_access_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_recursive_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_reversible_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_stack_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_std_heap_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_tr1_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_unique_assoc_selector.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/push_range_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/selector_keywords.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/selectors.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/selectors_fwd.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/splice_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/
   sandbox/container_gen/boost/detail/function/
   sandbox/container_gen/boost/detail/function/range_equal.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/function/range_greater.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/function/range_less.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/
   sandbox/container_gen/boost/detail/metafunction/has_allocator_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_apply_template.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_argument_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_auto_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_pointer.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_reference.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_reverse_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_container_typedefs.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_difference_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_first_argument_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_handle_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_hasher.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_input_const_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_iterator_category.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_key_compare.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_key_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_back.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_begin_end.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_clear.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_count.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_decrease.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_emplace.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_empty.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_equal_range.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_erase.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_find.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_front.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_get_allocator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_increase.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_insert.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_merge.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_ordered_begin_end.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_pop.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_push.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_rbegin_rend.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_resize.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_size.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_top.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_mfunc_update.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_ordered_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_pointer.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_reference.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_reverse_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_rvrs_container_typedefs.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_second_argument_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_size_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_stable_iterators.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_value_compare.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_value_type.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_adaptable_binary_func.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_adaptable_unary_function.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_allocator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_associative_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_back_insertion_sequence.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_bidirectional_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_container_with_emplace.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_flat_assoc_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_front_insertion_sequence.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_function_wrt.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_hashed_assoc_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_input_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_iteratable_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_multi_assoc_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_mutable_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_n_ary_function.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_order_iteratable_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_ptr_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_queue.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_random_access_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_random_access_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_reversible_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_sequence.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_sorted_assoc_container.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_stack_or_std_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_unique_assoc_container.hpp (contents, props changed)
   sandbox/container_gen/boost/graph/
   sandbox/container_gen/boost/graph/adjacency_list.hpp (contents, props changed)
   sandbox/container_gen/boost/graph/detail/
   sandbox/container_gen/boost/graph/detail/adjacency_list.hpp (contents, props changed)
   sandbox/container_gen/boost/graph/detail/metafunction/
   sandbox/container_gen/boost/graph/detail/metafunction/is_front_insertion_sequence.hpp (contents, props changed)
   sandbox/container_gen/boost/pending/
   sandbox/container_gen/boost/pending/container_traits.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/
   sandbox/container_gen/boost/typeof/boost/
   sandbox/container_gen/boost/typeof/boost/accumulators/
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_base.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_concept.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/droppable_accumulator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/external_accumulator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/reference_accumulator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/value_accumulator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/depends_on.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/extractor.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/framework/features.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/count.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/covariance.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/density.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/error_of.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/error_of_mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/extended_p_square.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/extended_p_square_quantile.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/kurtosis.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/max.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/median.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/min.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/moment.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/p_square_cumul_dist.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/p_square_quantile.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/peaks_over_threshold.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/pot_quantile.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/pot_tail_mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_count.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_sum.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_window.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/skewness.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/stats.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/sum.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/sum_kahan.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/tail.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/tail_mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/tail_quantile.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/tail_variate.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/tail_variate_means.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/times2_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/variance.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_covariance.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_density.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_extended_p_square.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_kurtosis.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_median.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_moment.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_p_square_quantile.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_skewness.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_sum.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_sum_kahan.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_tail_mean.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_tail_quantile.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_tail_variate_means.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/accumulators/statistics/weighted_variance.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/array.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/
   sandbox/container_gen/boost/typeof/boost/container/allocator_traits.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/deque.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/flat_map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/flat_set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/list.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/slist.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/stable_vector.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/string.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/vector.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container_gen/
   sandbox/container_gen/boost/typeof/boost/container_gen/c_str_cmp_selectors.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container_gen/selectors.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/function.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/function_output_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/functional/
   sandbox/container_gen/boost/typeof/boost/functional/hash.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/
   sandbox/container_gen/boost/typeof/boost/heap/binomial_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/d_ary_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/
   sandbox/container_gen/boost/typeof/boost/heap/detail/heap_comparison.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/heap_node.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/ilog2.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/mutable_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/ordered_adaptor_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/stable_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/detail/tree_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/fibonacci_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/pairing_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/policies.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/priority_queue.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/heap/skew_heap.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/
   sandbox/container_gen/boost/typeof/boost/iterator/counting_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/filter_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/indirect_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/iterator_adaptor.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/iterator_facade.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/permutation_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/reverse_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/transform_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/zip_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/
   sandbox/container_gen/boost/typeof/boost/mpl/bool.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/char.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/int.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/long.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/size_t.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/void.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/noncopyable.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/optional.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/
   sandbox/container_gen/boost/typeof/boost/parameter.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/arg_list.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/cast.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/default.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/is_maybe.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/maybe.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/parameter_requirements.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/parenthesized_type.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/result_of0.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/tag.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/tagged_argument.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/template_keyword.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/unwrap_cv_reference.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/void.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/aux_/yesno.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/binding.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/config.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/keyword.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/macros.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/match.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/name.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/preprocessor.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/parameter/value_type.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/
   sandbox/container_gen/boost/typeof/boost/ptr_container/clone_allocator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/detail/
   sandbox/container_gen/boost/typeof/boost/ptr_container/detail/ptr_map_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_array.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_deque.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_list.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_vector.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/rational.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ref.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/shared_container_iterator.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/unordered/
   sandbox/container_gen/boost/typeof/boost/unordered/unordered_map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/unordered/unordered_set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/utility/
   sandbox/container_gen/boost/typeof/boost/utility/result_of.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/
   sandbox/container_gen/boost/typeof/std/hash_map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/hash_set.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/slist.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/
   sandbox/container_gen/boost/typeof/std/tr1/array.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/functional.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/unordered_map.hpp (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/unordered_set.hpp (contents, props changed)
   sandbox/container_gen/boost/utility/
   sandbox/container_gen/boost/utility/get_iterator_second.hpp (contents, props changed)
   sandbox/container_gen/boost/utility/get_iterator_value_second.hpp (contents, props changed)
   sandbox/container_gen/boost/utility/get_reference.hpp (contents, props changed)
   sandbox/container_gen/boost/utility/is_mpl_boolean_constant.hpp (contents, props changed)
   sandbox/container_gen/boost/utility/is_mpl_integral_constant.hpp (contents, props changed)
   sandbox/container_gen/libs/
   sandbox/container_gen/libs/container_gen/
   sandbox/container_gen/libs/container_gen/doc/
   sandbox/container_gen/libs/container_gen/doc/Jamroot (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/changelog.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/container_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_result_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_allocator_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_compare_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_container_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hasher_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_heap_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_iter_heap_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_muta_heap_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ord_iter_heap_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_queue_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_reversible_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_stack_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_std_heap_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/push_range_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/splice_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/index.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_ins_range_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_insert_range_result_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_allocator_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_compare_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_container_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_hasher_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_heap_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_iter_heap_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_muta_heap_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_o_iter_heap_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_queue_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_reversible_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_stack_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_std_heap_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_push_range_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_splice_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/reference.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/example/
   sandbox/container_gen/libs/container_gen/example/output_char_tallies.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/example/output_rearrangements.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/example/output_shape_stats.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/
   sandbox/container_gen/libs/container_gen/test/emplace_assoc_function_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/emplace_function_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/insert_range_function_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/push_range_function_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/result_range.hpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/selectors.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/splice_function_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/type_definitions.hpp (contents, props changed)
   sandbox/container_gen/libs/graph/
   sandbox/container_gen/libs/graph/example/
   sandbox/container_gen/libs/graph/example/container_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/graph/example/container_gen.expected (contents, props changed)
   sandbox/container_gen/libs/utility/
   sandbox/container_gen/libs/utility/doc/
   sandbox/container_gen/libs/utility/doc/html/
   sandbox/container_gen/libs/utility/doc/html/get_iterator_second.html (contents, props changed)
   sandbox/container_gen/libs/utility/doc/html/get_iterator_value_second.html (contents, props changed)
   sandbox/container_gen/libs/utility/doc/html/get_reference.html (contents, props changed)
   sandbox/container_gen/libs/utility/doc/html/is_mpl_boolean_constant.html (contents, props changed)
   sandbox/container_gen/libs/utility/doc/html/is_mpl_integral_constant.html (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/
   sandbox/container_gen/libs/utility/doc/src/get_iterator_second/
   sandbox/container_gen/libs/utility/doc/src/get_iterator_second/Jamroot (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_iterator_second/doc.qbk (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/
   sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/Jamroot (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/doc.qbk (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_reference/
   sandbox/container_gen/libs/utility/doc/src/get_reference/Jamroot (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_reference/doc.qbk (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/is_mpl_boolean_constant/
   sandbox/container_gen/libs/utility/doc/src/is_mpl_boolean_constant/Jamroot (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/is_mpl_boolean_constant/doc.qbk (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/is_mpl_integral_constant/
   sandbox/container_gen/libs/utility/doc/src/is_mpl_integral_constant/Jamroot (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/is_mpl_integral_constant/doc.qbk (contents, props changed)

Added: sandbox/container_gen/LICENSE_1_0.txt
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/LICENSE_1_0.txt 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.

Added: sandbox/container_gen/boost.png
==============================================================================
Binary file. No diff available.

Added: sandbox/container_gen/boost/container_gen/c_str_cmp_selectors.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/c_str_cmp_selectors.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,197 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/container_gen/c_str_cmp_selectors_fwd.hpp>
+
+#if !defined BOOST_NO_CWCHAR
+#include <cwchar>
+#endif
+
+//[reference__c_str_compare_selectors
+namespace boost {
+
+ struct c_str_equal_to_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ class type
+ {
+ inline static bool
+ _evaluate(
+ T const& lhs
+ , T const& rhs
+ , ::std::tr1::true_type
+ )
+ {
+ return !strcmp(lhs, rhs);
+ }
+
+//<-
+#if !defined BOOST_NO_CWCHAR
+//->
+ inline static bool
+ _evaluate(
+ T const& lhs
+ , T const& rhs
+ , ::std::tr1::false_type
+ )
+ {
+ return !wcscmp(lhs, rhs);
+ }
+//<-
+#endif
+//->
+
+ public:
+ typedef bool result_type;
+ typedef T const& first_argument_type;
+ typedef T const& second_argument_type;
+
+ inline bool operator()(T const& lhs, T const& rhs) const
+ {
+ return type::_evaluate(
+ lhs
+ , rhs
+ , ::std::tr1::is_same<
+ typename ::std::tr1::remove_cv<
+ typename ::std::tr1::remove_pointer<
+ typename ::std::tr1::remove_extent<T>::type
+ >::type
+ >::type
+ , char
+ >()
+ );
+ }
+ };
+ };
+ };
+
+ struct c_str_less_than_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ class type
+ {
+ inline static bool
+ _evaluate(
+ T const& lhs
+ , T const& rhs
+ , ::std::tr1::true_type
+ )
+ {
+ return strcmp(lhs, rhs) < 0;
+ }
+
+//<-
+#if !defined BOOST_NO_CWCHAR
+//->
+ inline static bool
+ _evaluate(
+ T const& lhs
+ , T const& rhs
+ , ::std::tr1::false_type
+ )
+ {
+ return wcscmp(lhs, rhs) < 0;
+ }
+//<-
+#endif
+//->
+
+ public:
+ typedef bool result_type;
+ typedef T const& first_argument_type;
+ typedef T const& second_argument_type;
+
+ inline bool operator()(T const& lhs, T const& rhs) const
+ {
+ return type::_evaluate(
+ lhs
+ , rhs
+ , ::std::tr1::is_same<
+ typename ::std::tr1::remove_cv<
+ typename ::std::tr1::remove_pointer<
+ typename ::std::tr1::remove_extent<T>::type
+ >::type
+ >::type
+ , char
+ >()
+ );
+ }
+ };
+ };
+ };
+
+ struct c_str_greater_than_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ class type
+ {
+ inline static bool
+ _evaluate(
+ T const& lhs
+ , T const& rhs
+ , ::std::tr1::true_type
+ )
+ {
+ return 0 < strcmp(lhs, rhs);
+ }
+
+//<-
+#if !defined BOOST_NO_CWCHAR
+//->
+ inline static bool
+ _evaluate(
+ T const& lhs
+ , T const& rhs
+ , ::std::tr1::false_type
+ )
+ {
+ return 0 < wcscmp(lhs, rhs);
+ }
+//<-
+#endif
+//->
+
+ public:
+ typedef bool result_type;
+ typedef T const& first_argument_type;
+ typedef T const& second_argument_type;
+
+ inline bool operator()(T const& lhs, T const& rhs) const
+ {
+ return type::_evaluate(
+ lhs
+ , rhs
+ , ::std::tr1::is_same<
+ typename ::std::tr1::remove_cv<
+ typename ::std::tr1::remove_pointer<
+ typename ::std::tr1::remove_extent<T>::type
+ >::type
+ >::type
+ , char
+ >()
+ );
+ }
+ };
+ };
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/c_str_cmp_selectors_fwd.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/c_str_cmp_selectors_fwd.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,20 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_FWD_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_FWD_HPP_INCLUDED
+
+namespace boost {
+
+ struct c_str_equal_to_selector;
+ struct c_str_less_than_selector;
+ struct c_str_greater_than_selector;
+} // namespace boost
+
+#endif // BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_FWD_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/container_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/container_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,2180 @@
+//=============================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Copyright 2011-2013 Cromwell D. Enage
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole,
+// Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_CONTAINER_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_CONTAINER_GEN_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//=============================================================================
+// The main container_gen metafunction uses partial specialization,
+// so we also include a workaround.
+//=============================================================================
+
+namespace boost {
+
+ template <typename Selector, typename T1, typename T2>
+ struct container_gen
+ //<-
+ : ::boost::mpl::apply_wrap2<Selector,T1,T2>
+ //->
+ {
+ // typedef .... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, container_gen, (Selector, T1, T2))
+ //->
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <vector>
+#include <deque>
+#include <list>
+#include <set>
+#include <map>
+
+#if !defined BOOST_MSVC
+#include <boost/array.hpp>
+#include <boost/tr1/array.hpp>
+#include <boost/ptr_container/ptr_array.hpp>
+#endif
+
+#include <boost/unordered/unordered_set.hpp>
+#include <boost/unordered/unordered_map.hpp>
+
+#include <boost/tr1/unordered_set.hpp>
+#include <boost/tr1/unordered_map.hpp>
+
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_deque.hpp>
+#include <boost/ptr_container/ptr_list.hpp>
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
+#include <boost/ptr_container/ptr_unordered_set.hpp>
+#include <boost/ptr_container/ptr_unordered_map.hpp>
+
+#include <boost/container/vector.hpp>
+#include <boost/container/stable_vector.hpp>
+#include <boost/container/deque.hpp>
+#include <boost/container/list.hpp>
+#include <boost/container/slist.hpp>
+#include <boost/container/set.hpp>
+#include <boost/container/map.hpp>
+#include <boost/container/flat_set.hpp>
+#include <boost/container/flat_map.hpp>
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+#include <boost/parameter.hpp>
+
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/selector_keywords.hpp>
+#include <boost/container_gen/detail/selector_signatures.hpp>
+
+//[reference__container_gen__stable_vector_specialization
+namespace boost {
+
+ //<-
+ template <typename Selector, typename T1, typename T2>
+ struct container_gen
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, container_gen, (Selector, T1, T2))
+ };
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<array_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::array_selector_signature::bind<T0,T1>::type
+ _arg_pack;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , constant_size_tag
+ >::type
+ _constant_size;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::std::tr1::array<ValueType,_constant_size::value>
+ , ::boost::array<ValueType,_constant_size::value>
+ >::type
+ type;
+ };
+#endif // BOOST_MSVC
+
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<vector_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::sequence_selector_signature::bind<T0,T1>::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::container::vector<ValueType,_allocator>
+ , ::std::vector<ValueType,_allocator>
+ >::type
+ type;
+ };
+ //->
+
+ template <typename AllocatorSelector, typename ValueType>
+ struct container_gen<
+ stable_vector_selector<AllocatorSelector>
+ , ValueType
+ , void
+ >
+ {
+ typedef ::boost::container::stable_vector<
+ ValueType
+ , typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , ValueType
+ >::type
+ >
+ type;
+ };
+
+ //<-
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<deque_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::sequence_selector_signature::bind<T0,T1>::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::container::deque<ValueType,_allocator>
+ , ::std::deque<ValueType,_allocator>
+ >::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<list_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::sequence_selector_signature::bind<T0,T1>::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::container::list<ValueType,_allocator>
+ , ::std::list<ValueType,_allocator>
+ >::type
+ type;
+ };
+
+ template <typename AllocatorSelector, typename ValueType>
+ struct container_gen<slist_selector<AllocatorSelector>,ValueType,void>
+ {
+ typedef ::boost::container::slist<
+ ValueType
+ , typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , ValueType
+ >::type
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<set_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::set<Key,_comparator,_allocator>
+ , ::boost::container::map<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::set<Key,_comparator,_allocator>
+ , ::std::map<Key,Mapped,_comparator,_allocator>
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<map_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::set<Key,_comparator,_allocator>
+ , ::boost::container::map<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::set<Key,_comparator,_allocator>
+ , ::std::map<Key,Mapped,_comparator,_allocator>
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<multiset_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::multiset<
+ Key
+ , _comparator
+ , _allocator
+ >
+ , ::boost::container::multimap<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::multiset<Key,_comparator,_allocator>
+ , ::std::multimap<Key,Mapped,_comparator,_allocator>
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<multimap_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::multiset<
+ Key
+ , _comparator
+ , _allocator
+ >
+ , ::boost::container::multimap<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::multiset<Key,_comparator,_allocator>
+ , ::std::multimap<Key,Mapped,_comparator,_allocator>
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<hash_set_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ _is_tr1;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , typename ::boost::mpl::if_<
+ _is_tr1
+ , tr1_hash_selector
+ , boost_hash_selector
+ >::type
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ _is_tr1
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::tr1::unordered_set<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::std::tr1::unordered_map<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::unordered_set<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::boost::unordered_map<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<hash_map_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ _is_tr1;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , typename ::boost::mpl::if_<
+ _is_tr1
+ , tr1_hash_selector
+ , boost_hash_selector
+ >::type
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ _is_tr1
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::tr1::unordered_set<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::std::tr1::unordered_map<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::unordered_set<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::boost::unordered_map<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<hash_multiset_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ _is_tr1;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , typename ::boost::mpl::if_<
+ _is_tr1
+ , tr1_hash_selector
+ , boost_hash_selector
+ >::type
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ _is_tr1
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::tr1::unordered_multiset<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::std::tr1::unordered_multimap<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::unordered_multiset<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::boost::unordered_multimap<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<hash_multimap_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ _is_tr1;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , typename ::boost::mpl::if_<
+ _is_tr1
+ , tr1_hash_selector
+ , boost_hash_selector
+ >::type
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , Key
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ _is_tr1
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::tr1::unordered_multiset<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::std::tr1::unordered_multimap<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ , ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::unordered_multiset<
+ Key
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ , ::boost::unordered_multimap<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _allocator
+ >
+ >
+ >::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename Key, typename Mapped>
+ struct container_gen<flat_set_selector<T0,T1>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_flat_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::flat_set<Key,_comparator,_allocator>
+ , ::boost::container::flat_map<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename Key, typename Mapped>
+ struct container_gen<flat_map_selector<T0,T1>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_flat_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::flat_set<Key,_comparator,_allocator>
+ , ::boost::container::flat_map<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename Key, typename Mapped>
+ struct container_gen<flat_multiset_selector<T0,T1>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_flat_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::flat_multiset<
+ Key
+ , _comparator
+ , _allocator
+ >
+ , ::boost::container::flat_multimap<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename Key, typename Mapped>
+ struct container_gen<flat_multimap_selector<T0,T1>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_flat_allocator_selector
+ >::type
+ , Key
+ , Mapped
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::container::flat_multiset<
+ Key
+ , _comparator
+ , _allocator
+ >
+ , ::boost::container::flat_multimap<
+ Key
+ , Mapped
+ , _comparator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<ptr_array_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::ptr_array_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , constant_size_tag
+ >::type
+ _constant_size;
+
+ public:
+ typedef ::boost::ptr_array<
+ ValueType
+ , _constant_size::value
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ >
+ type;
+ };
+#endif // BOOST_MSVC
+
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<ptr_vector_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::ptr_sequence_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::ptr_vector<
+ ValueType
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ >
+ type;
+ };
+
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<ptr_deque_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::ptr_sequence_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::ptr_deque<
+ ValueType
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ >
+ type;
+ };
+
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<ptr_list_selector<T0,T1>,ValueType,void>
+ {
+ private:
+ typedef typename detail::ptr_sequence_selector_signature::bind<
+ T0
+ , T1
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::ptr_list<
+ ValueType
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ , typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_set_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_set<
+ Key
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_map<
+ Key
+ , Mapped
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_map_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_set<
+ Key
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_map<
+ Key
+ , Mapped
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_multiset_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_multiset<
+ Key
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_multimap<
+ Key
+ , Mapped
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_multimap_selector<T0,T1,T2>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_multiset<
+ Key
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_multimap<
+ Key
+ , Mapped
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_hash_set_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_hashed_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , boost_hash_selector
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_unordered_set<
+ Key
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_unordered_map<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_hash_map_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_hashed_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , boost_hash_selector
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_unordered_set<
+ Key
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_unordered_map<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_hash_multiset_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_hashed_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , boost_hash_selector
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_unordered_multiset<
+ Key
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_unordered_multimap<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename Key
+ , typename Mapped
+ >
+ struct container_gen<ptr_hash_multimap_selector<T0,T1,T2,T3>,Key,Mapped>
+ {
+ private:
+ typedef typename detail::ptr_hashed_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , hasher_selector_tag
+ , boost_hash_selector
+ >::type
+ , Key
+ >::type
+ _hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , equal_to_selector
+ >::type
+ , Key
+ >::type
+ _comparator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_clone_allocator_tag
+ , ::boost::heap_clone_allocator
+ >::type
+ _clone_allocator;
+ typedef typename ::boost::parameter::value_type<
+ _arg_pack
+ , ptr_allocator_tag
+ , ::std::allocator<void*>
+ >::type
+ _allocator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_unordered_multiset<
+ Key
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ , ::boost::ptr_unordered_multimap<
+ Key
+ , Mapped
+ , _hasher
+ , _comparator
+ , _clone_allocator
+ , _allocator
+ >
+ >::type
+ type;
+ };
+ //->
+} // namespace boost
+//]
+
+#include <stack>
+#include <queue>
+
+#include <boost/heap/priority_queue.hpp>
+#include <boost/heap/d_ary_heap.hpp>
+#include <boost/heap/binomial_heap.hpp>
+#include <boost/heap/fibonacci_heap.hpp>
+#include <boost/heap/pairing_heap.hpp>
+#include <boost/heap/skew_heap.hpp>
+
+#include <boost/cstdint.hpp>
+
+namespace boost {
+
+ template <typename SequenceSelector, typename ValueType>
+ struct container_gen<
+ stack_selector<SequenceSelector>
+ , ValueType
+ , void
+ >
+ {
+ typedef ::std::stack<
+ ValueType
+ , typename container_gen<SequenceSelector,ValueType>::type
+ >
+ type;
+ };
+
+ template <typename SequenceSelector, typename ValueType>
+ struct container_gen<
+ queue_selector<SequenceSelector>
+ , ValueType
+ , void
+ >
+ {
+ typedef ::std::queue<
+ ValueType
+ , typename container_gen<SequenceSelector,ValueType>::type
+ >
+ type;
+ };
+
+ template <typename T0, typename T1, typename ValueType>
+ struct container_gen<
+ std_heap_selector<T0,T1>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::std_heap_selector_signature::bind<T0,T1>::type
+ _arg_pack;
+
+ public:
+ typedef ::std::priority_queue<
+ ValueType
+ , typename container_gen<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , sequence_selector_tag
+ , dequeS
+ >::type
+ , ValueType
+ >::type
+ , typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename ValueType
+ >
+ struct container_gen<
+ priority_queue_selector<T0,T1,T2,T3>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::priority_queue_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::heap::priority_queue<
+ ValueType
+ , ::boost::heap::compare<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::allocator<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::stable<
+ ::boost::heap::detail::extract_stable<_arg_pack>::value
+ >
+ , ::boost::heap::stability_counter_type<
+ typename ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::stability_counter_type
+ , ::boost::uintmax_t
+ >::type
+ >
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename ValueType
+ >
+ struct container_gen<
+ d_ary_heap_selector<T0,T1,T2,T3,T4,T5>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::d_ary_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ , T4
+ , T5
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::heap::d_ary_heap<
+ ValueType
+ , ::boost::heap::arity<
+ ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::arity
+ >::type::value
+ >
+ , ::boost::heap::compare<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::allocator<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::stable<
+ ::boost::heap::detail::extract_stable<_arg_pack>::value
+ >
+ , ::boost::heap::stability_counter_type<
+ typename ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::stability_counter_type
+ , ::boost::uintmax_t
+ >::type
+ >
+ , ::boost::heap::mutable_<
+ ::boost::heap::detail::extract_mutable<_arg_pack>::value
+ >
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename ValueType
+ >
+ struct container_gen<
+ binomial_heap_selector<T0,T1,T2,T3>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::binomial_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::heap::binomial_heap<
+ ValueType
+ , ::boost::heap::compare<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::allocator<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::stable<
+ ::boost::heap::detail::extract_stable<_arg_pack>::value
+ >
+ , ::boost::heap::stability_counter_type<
+ typename ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::stability_counter_type
+ , ::boost::uintmax_t
+ >::type
+ >
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename ValueType
+ >
+ struct container_gen<
+ fibonacci_heap_selector<T0,T1,T2,T3,T4>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::fibonacci_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ , T4
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::heap::fibonacci_heap<
+ ValueType
+ , ::boost::heap::compare<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::allocator<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::stable<
+ ::boost::heap::detail::extract_stable<_arg_pack>::value
+ >
+ , ::boost::heap::stability_counter_type<
+ typename ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::stability_counter_type
+ , ::boost::uintmax_t
+ >::type
+ >
+ , ::boost::heap::constant_time_size<
+ ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::constant_time_size
+ , ::boost::mpl::true_
+ >::type::value
+ >
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename ValueType
+ >
+ struct container_gen<
+ pairing_heap_selector<T0,T1,T2,T3,T4>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::pairing_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ , T4
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::heap::pairing_heap<
+ ValueType
+ , ::boost::heap::compare<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::allocator<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::stable<
+ ::boost::heap::detail::extract_stable<_arg_pack>::value
+ >
+ , ::boost::heap::stability_counter_type<
+ typename ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::stability_counter_type
+ , ::boost::uintmax_t
+ >::type
+ >
+ , ::boost::heap::constant_time_size<
+ ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::constant_time_size
+ , ::boost::mpl::true_
+ >::type::value
+ >
+ >
+ type;
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ , typename ValueType
+ >
+ struct container_gen<
+ skew_heap_selector<T0,T1,T2,T3,T4,T5,T6>
+ , ValueType
+ , void
+ >
+ {
+ private:
+ typedef typename detail::skew_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ , T4
+ , T5
+ , T6
+ >::type
+ _arg_pack;
+
+ public:
+ typedef ::boost::heap::skew_heap<
+ ValueType
+ , ::boost::heap::compare<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , compare_selector_tag
+ , less_than_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::allocator<
+ typename ::boost::mpl::apply_wrap1<
+ typename ::boost::parameter::value_type<
+ _arg_pack
+ , allocator_selector_tag
+ , std_allocator_selector
+ >::type
+ , ValueType
+ >::type
+ >
+ , ::boost::heap::stable<
+ ::boost::heap::detail::extract_stable<_arg_pack>::value
+ >
+ , ::boost::heap::store_parent_pointer<
+ ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::store_parent_pointer
+ , ::boost::mpl::false_
+ >::type::value
+ >
+ , ::boost::heap::stability_counter_type<
+ typename ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::stability_counter_type
+ , ::boost::uintmax_t
+ >::type
+ >
+ , ::boost::heap::constant_time_size<
+ ::boost::parameter::binding<
+ _arg_pack
+ , ::boost::heap::tag::constant_time_size
+ , ::boost::mpl::true_
+ >::type::value
+ >
+ , ::boost::heap::mutable_<
+ ::boost::heap::detail::extract_mutable<_arg_pack>::value
+ >
+ >
+ type;
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_CONTAINER_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/container_gen_fwd.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/container_gen_fwd.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,21 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_CONTAINER_GEN_FWD_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_CONTAINER_GEN_FWD_HPP_INCLUDED
+
+//[reference__container_gen
+namespace boost {
+
+ template <typename Selector, typename T1, typename T2 = void>
+ struct container_gen;
+} // namespace boost
+//]
+
+#endif // BOOST_CONTAINER_GEN_CONTAINER_GEN_FWD_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/detail/metafunction/is_clone_allocator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/detail/metafunction/is_clone_allocator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,46 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_DETAIL_METAFUNCTION_IS_CLONE_ALLOCATOR_HPP
+#define BOOST_CONTAINER_GEN_DETAIL_METAFUNCTION_IS_CLONE_ALLOCATOR_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/is_compare_selector.hpp>
+#include <boost/container_gen/is_hasher_selector.hpp>
+#include <boost/detail/metafunction/is_allocator.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // Without the ability to detect the presence of static member function
+ // templates, this hack relies on process of elimination to facilitate
+ // template argument deduction.
+ template <typename T>
+ struct is_clone_allocator
+ : ::boost::mpl::eval_if<
+ is_allocator<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::eval_if<
+ is_compare_selector<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::if_<
+ is_hasher_selector<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::true_
+ >
+ >
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_clone_allocator,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_CONTAINER_GEN_DETAIL_METAFUNCTION_IS_CLONE_ALLOCATOR_HPP
+

Added: sandbox/container_gen/boost/container_gen/detail/selector_signatures.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/detail/selector_signatures.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,394 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_DETAIL_SELECTOR_SIGNATURES_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_DETAIL_SELECTOR_SIGNATURES_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/parameter/parameters.hpp>
+#include <boost/heap/policies.hpp>
+#include <boost/container_gen/selector_keywords.hpp>
+#include <boost/container_gen/is_container_selector.hpp>
+#include <boost/container_gen/is_compare_selector.hpp>
+#include <boost/container_gen/is_hasher_selector.hpp>
+#include <boost/container_gen/is_allocator_selector.hpp>
+
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+#include <boost/utility/is_mpl_integral_constant.hpp>
+#include <boost/utility/is_mpl_boolean_constant.hpp>
+#include <boost/container_gen/detail/metafunction/is_clone_allocator.hpp>
+#include <boost/detail/metafunction/is_allocator.hpp>
+#endif
+
+namespace boost { namespace detail {
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::required<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::constant_size_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_integral_constant< ::boost::mpl::_>
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::is_tr1_not_boost_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_boolean_constant< ::boost::mpl::_>
+#endif
+ >
+ >
+ array_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::is_boost_not_std_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_boolean_constant< ::boost::mpl::_>
+#endif
+ >
+ >
+ sequence_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ >
+ associative_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::is_boost_not_std_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_boolean_constant< ::boost::mpl::_>
+#endif
+ >
+ >
+ boost_or_std_assoc_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::hasher_selector_tag>
+ , ::boost::is_hasher_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::is_tr1_not_boost_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_boolean_constant< ::boost::mpl::_>
+#endif
+ >
+ >
+ hashed_associative_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::required<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::constant_size_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_integral_constant< ::boost::mpl::_>
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_clone_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_clone_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ >
+ ptr_array_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_clone_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_clone_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ >
+ ptr_sequence_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_clone_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_clone_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ >
+ ptr_associative_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::hasher_selector_tag>
+ , ::boost::is_hasher_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_clone_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_clone_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::ptr_allocator_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::detail::metafunction::is_allocator<
+ ::boost::mpl::_
+ >
+#endif
+ >
+ >
+ ptr_hashed_assoc_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::sequence_selector_tag
+ >
+ , ::boost::is_container_selector< ::boost::mpl::_>
+ >
+ >
+ std_heap_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional< ::boost::heap::tag::stable>
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::stability_counter_type
+ >
+ >
+ priority_queue_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::required<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::heap::tag::arity
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_mpl_integral_constant< ::boost::mpl::_>
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::compare_selector_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+#endif
+ >
+ , ::boost::parameter::optional<
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ ::boost::parameter::deduced<
+#endif
+ ::boost::allocator_selector_tag
+#if !defined BOOST_MPL_CFG_NO_HAS_XXX
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+#endif
+ >
+ , ::boost::parameter::optional< ::boost::heap::tag::stable>
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::stability_counter_type
+ >
+ , ::boost::parameter::optional< ::boost::heap::tag::mutable_>
+ >
+ d_ary_heap_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional< ::boost::heap::tag::stable>
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::stability_counter_type
+ >
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::constant_time_size
+ >
+ >
+ fibonacci_heap_selector_signature;
+
+ typedef fibonacci_heap_selector_signature
+ pairing_heap_selector_signature;
+
+ typedef fibonacci_heap_selector_signature
+ binomial_heap_selector_signature;
+
+ typedef ::boost::parameter::parameters<
+ ::boost::parameter::optional<
+ ::boost::parameter::deduced< ::boost::compare_selector_tag>
+ , ::boost::is_compare_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional<
+ ::boost::parameter::deduced<
+ ::boost::allocator_selector_tag
+ >
+ , ::boost::is_allocator_selector< ::boost::mpl::_>
+ >
+ , ::boost::parameter::optional< ::boost::heap::tag::stable>
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::store_parent_pointer
+ >
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::stability_counter_type
+ >
+ , ::boost::parameter::optional<
+ ::boost::heap::tag::constant_time_size
+ >
+ , ::boost::parameter::optional< ::boost::heap::tag::mutable_>
+ >
+ skew_heap_selector_signature;
+}} // namespace boost::detail
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_DETAIL_SELECTOR_SIGNATURES_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/emplace_assoc_function_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/emplace_assoc_function_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,828 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_HPP_INCLUDED
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/container/detail/preprocessor.hpp>
+#endif
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class emplace_assoc_function_proxy
+ {
+ F const _function;
+ C& _container;
+
+ public:
+ explicit emplace_assoc_function_proxy(C& c);
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename ...Args>
+ inline emplace_assoc_function_proxy&
+ operator()(typename C::key_type const& key, Args&& ...args)
+ {
+ this->_function(
+ this->_container
+ , key
+ , ::boost::forward<Args>(args)...
+ );
+ return *this;
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ BOOST_PP_EXPR_IF(n, template <) \
+ BOOST_PP_ENUM_PARAMS_Z(z, n, typename P) \
+ BOOST_PP_EXPR_IF(n, >) \
+ inline emplace_assoc_function_proxy& \
+ operator()( \
+ typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) \
+ { \
+ this->_function( \
+ this->_container \
+ , key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ); \
+ return *this; \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename F, typename C>
+ emplace_assoc_function_proxy<F,C>::emplace_assoc_function_proxy(C& c)
+ : _function(), _container(c)
+ {
+ }
+
+ struct uac_emplace_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<uac_emplace_associative_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(
+ C& _container
+ , typename C::key_type const& key
+ , Args&& ...args
+ ) const
+ {
+ return _container.emplace(
+ key
+ , ::boost::move(
+ typename C::mapped_type(::boost::forward<Args>(args)...)
+ )
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.emplace( \
+ key \
+ , ::boost::move( \
+ typename C::mapped_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_PP_DEC(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<uac_emplace_associative_function,C>
+ uac_emplace_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ uac_emplace_associative_function
+ , C
+ >(_container);
+ }
+
+ struct uac_emplace_emu_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<uac_emplace_emu_associative_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(
+ C& _container
+ , typename C::key_type const& key
+ , Args&& ...args
+ ) const
+ {
+ return _container.insert(
+ typename C::value_type(
+ key
+ , typename C::mapped_type(::boost::forward<Args>(args)...)
+ )
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.insert( \
+ typename C::value_type( \
+ key \
+ , typename C::mapped_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<uac_emplace_emu_associative_function,C>
+ uac_emplace_emu_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ uac_emplace_emu_associative_function
+ , C
+ >(_container);
+ }
+
+ struct mac_emplace_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<mac_emplace_associative_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(
+ C& _container
+ , typename C::key_type const& key
+ , Args&& ...args
+ ) const
+ {
+ return ::std::make_pair(
+ _container.emplace(
+ key
+ , ::boost::move(
+ typename C::mapped_type(
+ ::boost::forward<Args>(args)...
+ )
+ )
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.emplace( \
+ key \
+ , ::boost::move( \
+ typename C::mapped_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_PP_DEC(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<mac_emplace_associative_function,C>
+ mac_emplace_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ mac_emplace_associative_function
+ , C
+ >(_container);
+ }
+
+ struct mac_emplace_emu_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<mac_emplace_emu_associative_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(
+ C& _container
+ , typename C::key_type const& key
+ , Args&& ...args
+ ) const
+ {
+ return ::std::make_pair(
+ _container.insert(
+ typename C::value_type(
+ key
+ , typename C::mapped_type(
+ ::boost::forward<Args>(args)...
+ )
+ )
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.insert( \
+ typename C::value_type( \
+ key \
+ , typename C::mapped_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<mac_emplace_emu_associative_function,C>
+ mac_emplace_emu_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ mac_emplace_emu_associative_function
+ , C
+ >(_container);
+ }
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+
+ struct huac_emplace_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<huac_emplace_associative_function,C>
+ operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.emplace( \
+ ::boost::unordered::piecewise_construct \
+ , ::boost::make_tuple(key) \
+ , ::boost::make_tuple( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<huac_emplace_associative_function,C>
+ huac_emplace_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ huac_emplace_associative_function
+ , C
+ >(_container);
+ }
+
+ struct hmac_emplace_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<hmac_emplace_associative_function,C>
+ operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.emplace( \
+ ::boost::unordered::piecewise_construct \
+ , ::boost::make_tuple(key) \
+ , ::boost::make_tuple( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<hmac_emplace_associative_function,C>
+ hmac_emplace_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ hmac_emplace_associative_function
+ , C
+ >(_container);
+ }
+
+#if defined BOOST_HAS_TR1_UNORDERED_MAP
+
+// Handle different native TR1 emplacement implementations.
+#if defined BOOST_MSVC
+
+ struct tr1_huac_emplace_associative_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<tr1_huac_emplace_associative_function,C>
+ operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.emplace( \
+ ::boost::move( \
+ typename C::value_type( \
+ key \
+ , typename C::mapped_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<tr1_huac_emplace_associative_function,C>
+ tr1_huac_emplace_associative_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<
+ tr1_huac_emplace_associative_function
+ , C
+ >(_container);
+ }
+
+ typedef tr1_huac_emplace_associative_function
+ tr1_hmac_emplace_associative_function;
+#else // TR1 == Boost wrt unordered_[multi]map::emplace
+#define BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif
+
+#else // !defined BOOST_HAS_TR1_UNORDERED_MAP
+#define BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif // BOOST_HAS_TR1_UNORDERED_MAP
+
+#if defined BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+ typedef huac_emplace_associative_function
+ tr1_huac_emplace_associative_function;
+ typedef hmac_emplace_associative_function
+ tr1_hmac_emplace_associative_function;
+#undef BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif // BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+
+ struct ua_ptr_emplace_assoc_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<ua_ptr_emplace_assoc_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(
+ C& _container
+ , typename C::key_type const& key
+ , Args&& ...args
+ ) const
+ {
+ typedef typename ::std::tr1::remove_pointer<
+ typename C::mapped_type
+ >::type
+ _data_type;
+
+ typename C::key_type k(key);
+ return _container.insert(
+ k
+ , new _data_type(::boost::forward<Args>(args)...)
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ typedef typename ::std::tr1::remove_pointer< \
+ typename C::mapped_type \
+ >::type \
+ _data_type; \
+ typename C::key_type k(key); \
+ return _container.insert( \
+ k \
+ , new _data_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<ua_ptr_emplace_assoc_function,C>
+ ua_ptr_emplace_assoc_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<ua_ptr_emplace_assoc_function,C>(
+ _container
+ );
+ }
+
+ struct ma_ptr_emplace_assoc_function
+ {
+ template <typename C>
+ emplace_assoc_function_proxy<ma_ptr_emplace_assoc_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(
+ C& _container
+ , typename C::key_type const& key
+ , Args&& ...args
+ ) const
+ {
+ typedef typename ::std::tr1::remove_pointer<
+ typename C::mapped_type
+ >::type
+ _data_type;
+
+ typename C::key_type k(key);
+ return ::std::make_pair(
+ _container.insert(
+ k
+ , new _data_type(::boost::forward<Args>(args)...)
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ , typename C::key_type const& key \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ typedef typename ::std::tr1::remove_pointer< \
+ typename C::mapped_type \
+ >::type \
+ _data_type; \
+ typename C::key_type k(key); \
+ return ::std::make_pair( \
+ _container.insert( \
+ k \
+ , new _data_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_assoc_function_proxy<ma_ptr_emplace_assoc_function,C>
+ ma_ptr_emplace_assoc_function::operator[](C& _container) const
+ {
+ return emplace_assoc_function_proxy<ma_ptr_emplace_assoc_function,C>(
+ _container
+ );
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/has_emplace_mfunc_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/is_tr1_selector.hpp>
+#endif
+
+//[reference__emplace_associative_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct emplace_associative_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::ma_ptr_emplace_assoc_function
+ , detail::ua_ptr_emplace_assoc_function
+ >
+ , ::boost::mpl::eval_if<
+ has_emplace_member_function_selector<Selector>
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ , ::boost::mpl::eval_if<
+ is_hashed_associative_selector<Selector>
+ , ::boost::mpl::eval_if<
+ is_tr1_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::tr1_huac_emplace_associative_function
+ , detail::tr1_hmac_emplace_associative_function
+ >
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::huac_emplace_associative_function
+ , detail::hmac_emplace_associative_function
+ >
+ >
+#endif
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_emplace_associative_function
+ , detail::uac_emplace_associative_function
+ >
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ >
+#endif
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_emplace_emu_associative_function
+ , detail::uac_emplace_emu_associative_function
+ >
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , emplace_associative_function_gen
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/emplace_function_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/emplace_function_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,1048 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/container/detail/preprocessor.hpp>
+
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO(z, n, itr) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , _ \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.emplace( \
+ itr \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , _ \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO(z, n, itr) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , _ \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.insert( \
+ itr \
+ , typename C::value_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , _ \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class emplace_function_proxy
+ {
+ F const _function;
+ C& _container;
+
+ public:
+ explicit emplace_function_proxy(C& c);
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename ...Args>
+ inline emplace_function_proxy& operator()(Args&& ...args)
+ {
+ this->_function(this->_container, ::boost::forward<Args>(args)...);
+ return *this;
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ BOOST_PP_EXPR_IF(n, template <) \
+ BOOST_PP_ENUM_PARAMS_Z(z, n, typename P) \
+ BOOST_PP_EXPR_IF(n, >) \
+ inline emplace_function_proxy& \
+ operator()( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) \
+ { \
+ this->_function( \
+ this->_container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ); \
+ return *this; \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename F, typename C>
+ emplace_function_proxy<F,C>::emplace_function_proxy(C& c)
+ : _function(), _container(c)
+ {
+ }
+
+ struct fis_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<fis_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return ::std::make_pair(
+ _container.emplace(
+ _container.begin()
+ , ::boost::forward<Args>(args)...
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO
+ , _container.begin()
+ )
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<fis_emplace_function,C>
+ fis_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<fis_emplace_function,C>(_container);
+ }
+
+ struct bis_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<bis_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return ::std::make_pair(
+ _container.emplace(
+ _container.end()
+ , ::boost::forward<Args>(args)...
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO
+ , _container.end()
+ )
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<bis_emplace_function,C>
+ bis_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<bis_emplace_function,C>(_container);
+ }
+
+ struct fis_emplace_emu_function
+ {
+ template <typename C>
+ emplace_function_proxy<fis_emplace_emu_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return ::std::make_pair(
+ _container.insert(
+ _container.begin()
+ , typename C::value_type(
+ ::boost::forward<Args>(args)...
+ )
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO
+ , _container.begin()
+ )
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<fis_emplace_emu_function,C>
+ fis_emplace_emu_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<fis_emplace_emu_function,C>(_container);
+ }
+
+ struct bis_emplace_emu_function
+ {
+ template <typename C>
+ emplace_function_proxy<bis_emplace_emu_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return ::std::make_pair(
+ _container.insert(
+ _container.end()
+ , typename C::value_type(
+ ::boost::forward<Args>(args)...
+ )
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO
+ , _container.end()
+ )
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<bis_emplace_emu_function,C>
+ bis_emplace_emu_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<bis_emplace_emu_function,C>(_container);
+ }
+
+ struct uac_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<uac_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return _container.emplace(::boost::forward<Args>(args)...);
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.emplace( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<uac_emplace_function,C>
+ uac_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<uac_emplace_function,C>(_container);
+ }
+
+ struct uac_emplace_emu_function
+ {
+ template <typename C>
+ emplace_function_proxy<uac_emplace_emu_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return _container.insert(
+ typename C::value_type(::boost::forward<Args>(args)...)
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.insert( \
+ typename C::value_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<uac_emplace_emu_function,C>
+ uac_emplace_emu_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<uac_emplace_emu_function,C>(_container);
+ }
+
+ struct mac_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<mac_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return ::std::make_pair(
+ _container.emplace(::boost::forward<Args>(args)...)
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.emplace( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<mac_emplace_function,C>
+ mac_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<mac_emplace_function,C>(_container);
+ }
+
+ struct mac_emplace_emu_function
+ {
+ template <typename C>
+ emplace_function_proxy<mac_emplace_emu_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ return ::std::make_pair(
+ _container.insert(
+ typename C::value_type(::boost::forward<Args>(args)...)
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return ::std::make_pair( \
+ _container.insert( \
+ typename C::value_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<mac_emplace_emu_function,C>
+ mac_emplace_emu_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<mac_emplace_emu_function,C>(_container);
+ }
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#if defined BOOST_HAS_TR1_UNORDERED_SET
+
+// Handle different native TR1 emplacement implementations.
+#if defined BOOST_MSVC
+
+ struct tr1_huac_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<tr1_huac_emplace_function,C>
+ operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.emplace( \
+ ::boost::move( \
+ typename C::value_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ };
+
+ template <typename C>
+ emplace_function_proxy<tr1_huac_emplace_function,C>
+ tr1_huac_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<tr1_huac_emplace_function,C>(_container);
+ }
+
+ typedef tr1_huac_emplace_function tr1_hmac_emplace_function;
+#else // TR1 == Boost wrt unordered_[multi]set::emplace
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif
+
+#else // !defined BOOST_HAS_TR1_UNORDERED_SET
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif // BOOST_HAS_TR1_UNORDERED_SET
+
+#if defined BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+ typedef uac_emplace_function tr1_huac_emplace_function;
+ typedef mac_emplace_function tr1_hmac_emplace_function;
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif // BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+
+ struct ptr_sequence_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<ptr_sequence_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ typedef typename ::std::tr1::remove_pointer<
+ typename C::value_type
+ >::type
+ _data_type;
+
+ return ::std::make_pair(
+ _container.insert(
+ _container.end()
+ , new _data_type(::boost::forward<Args>(args)...)
+ )
+ , true
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ typedef typename ::std::tr1::remove_pointer< \
+ typename C::value_type \
+ >::type \
+ _data_type; \
+ return ::std::make_pair( \
+ _container.insert( \
+ _container.end() \
+ , new _data_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ) \
+ , true \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<ptr_sequence_emplace_function,C>
+ ptr_sequence_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<ptr_sequence_emplace_function,C>(
+ _container
+ );
+ }
+
+ struct ua_ptr_container_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<ua_ptr_container_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline ::std::pair<typename C::iterator,bool>
+ operator()(C& _container, Args&& ...args) const
+ {
+ typedef typename ::std::tr1::remove_pointer<
+ typename C::value_type
+ >::type
+ _data_type;
+
+ return _container.insert(
+ new _data_type(::boost::forward<Args>(args)...)
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline ::std::pair<typename C::iterator,bool> \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ typedef typename ::std::tr1::remove_pointer< \
+ typename C::value_type \
+ >::type \
+ _data_type; \
+ return _container.insert( \
+ new _data_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<ua_ptr_container_emplace_function,C>
+ ua_ptr_container_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<ua_ptr_container_emplace_function,C>(
+ _container
+ );
+ }
+
+#if !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ struct heap_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<heap_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline void operator()(C& _container, Args&& ...args) const
+ {
+ _container.emplace(::boost::forward<Args>(args)...);
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline void \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ _container.emplace( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<heap_emplace_function,C>
+ heap_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<heap_emplace_function,C>(_container);
+ }
+
+ struct mutable_heap_emplace_function
+ {
+ template <typename C>
+ emplace_function_proxy<mutable_heap_emplace_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline typename C::handle_type
+ operator()(C& _container, Args&& ...args) const
+ {
+ return _container.emplace(::boost::forward<Args>(args)...);
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline typename C::handle_type \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ return _container.emplace( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<mutable_heap_emplace_function,C>
+ mutable_heap_emplace_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<mutable_heap_emplace_function,C>(
+ _container
+ );
+ }
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+
+ struct adaptor_emplace_emu_function
+ {
+ template <typename C>
+ emplace_function_proxy<adaptor_emplace_emu_function,C>
+ operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+ template <typename C, typename ...Args>
+ inline void operator()(C& _container, Args&& ...args) const
+ {
+ _container.push(
+ typename C::value_type(::boost::forward<Args>(args)...)
+ );
+ }
+#else // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop) \
+ template < \
+ typename C \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P) \
+ > \
+ inline void \
+ operator()( \
+ C& _container \
+ BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_LIST \
+ , poop \
+ ) \
+ ) const \
+ { \
+ _container.push( \
+ typename C::value_type( \
+ BOOST_PP_CAT(BOOST_PP_ENUM_, z)( \
+ n \
+ , BOOST_CONTAINER_PP_PARAM_FORWARD \
+ , poop \
+ ) \
+ ) \
+ ); \
+ } \
+//!
+ BOOST_PP_REPEAT(
+ BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+ , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+ , _
+ )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif // BOOST_CONTAINER_PERFECT_FORWARDING
+ };
+
+ template <typename C>
+ emplace_function_proxy<adaptor_emplace_emu_function,C>
+ adaptor_emplace_emu_function::operator[](C& _container) const
+ {
+ return emplace_function_proxy<adaptor_emplace_emu_function,C>(
+ _container
+ );
+ }
+}} // namespace boost::detail
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO
+#endif
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/has_emplace_mfunc_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_queue_selector.hpp>
+#include <boost/container_gen/is_stack_selector.hpp>
+#include <boost/container_gen/is_std_heap_selector.hpp>
+
+#if !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#include <boost/container_gen/is_heap_selector.hpp>
+#include <boost/container_gen/is_mutable_heap_selector.hpp>
+#endif
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/container_gen/is_tr1_selector.hpp>
+#endif
+
+//[reference__emplace_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct emplace_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::ua_ptr_container_emplace_function
+ , detail::ptr_sequence_emplace_function
+ >
+ , ::boost::mpl::eval_if<
+ has_emplace_member_function_selector<Selector>
+ , ::boost::mpl::eval_if<
+#if !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ is_heap_selector<Selector>
+ , ::boost::mpl::if_<
+ is_mutable_heap_selector<Selector>
+ , detail::mutable_heap_emplace_function
+ , detail::heap_emplace_function
+ >
+ , ::boost::mpl::eval_if<
+#endif
+ is_associative_selector<Selector>
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ , ::boost::mpl::eval_if<
+ is_tr1_selector<Selector>
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::tr1_hmac_emplace_function
+ , detail::tr1_huac_emplace_function
+ >
+#endif
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_emplace_function
+ , detail::uac_emplace_function
+ >
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+ >
+#endif
+ , ::boost::mpl::identity<detail::bis_emplace_function>
+#if !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ >
+#endif
+ >
+ , ::boost::mpl::eval_if<
+ is_associative_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::uac_emplace_emu_function
+ , detail::mac_emplace_emu_function
+ >
+ , ::boost::mpl::if_<
+ ::boost::mpl::or_<
+ ::boost::mpl::or_<
+ is_queue_selector<Selector>
+ , is_stack_selector<Selector>
+ >
+ , is_std_heap_selector<Selector>
+ >
+ , detail::adaptor_emplace_emu_function
+ , detail::bis_emplace_emu_function
+ >
+ >
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, emplace_function_gen, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#include <boost/container_gen/selectors.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct emplace_function_gen<slist_selector<AllocatorSelector> >
+ {
+ typedef detail::fis_emplace_function type;
+ };
+} // namespace boost
+
+#elif !defined BOOST_NO_SLIST
+
+namespace boost {
+
+ template <>
+ struct emplace_function_gen<slist_selector_base>
+ {
+ typedef detail::fis_emplace_emu_function type;
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION, BOOST_NO_SLIST
+
+#endif // BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/has_emplace_mfunc_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/has_emplace_mfunc_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,240 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_HAS_EMPLACE_MFUNC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_HAS_EMPLACE_MFUNC_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__has_emplace_member_function_selector
+namespace boost {
+
+ template <typename Selector>
+ struct has_emplace_member_function_selector
+ //<-
+ : ::boost::mpl::false_
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , has_emplace_member_function_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if !defined BOOST_NO_CXX11_RVALUE_REFERENCES
+#include <boost/mpl/eval_if.hpp>
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/is_flat_assoc_selector.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/is_heap_selector.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+ template <typename Selector>
+ struct has_emplace_member_function_selector
+#if defined BOOST_NO_CXX11_RVALUE_REFERENCES
+ : ::boost::mpl::if_<
+ is_flat_associative_selector<Selector>
+ , ::boost::mpl::true_
+ , is_hashed_associative_selector<Selector>
+ >::type
+#else
+ : ::boost::mpl::eval_if<
+ is_flat_associative_selector<Selector>
+ , ::boost::mpl::true_
+ , ::boost::mpl::if_<
+ is_hashed_associative_selector<Selector>
+ , ::boost::mpl::true_
+ , is_heap_selector<Selector>
+ >
+ >::type
+#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , has_emplace_member_function_selector
+ , (Selector)
+ )
+ };
+
+ template <typename T0, typename T1>
+ struct has_emplace_member_function_selector<vector_selector<T0,T1> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::sequence_selector_signature::bind<T0,T1>::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_emplace_member_function_selector<deque_selector<T0,T1> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::sequence_selector_signature::bind<T0,T1>::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_emplace_member_function_selector<list_selector<T0,T1> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::sequence_selector_signature::bind<T0,T1>::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct has_emplace_member_function_selector<
+ stable_vector_selector<AllocatorSelector>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct has_emplace_member_function_selector<
+ slist_selector<AllocatorSelector>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct has_emplace_member_function_selector<set_selector<T0,T1,T2> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct has_emplace_member_function_selector<map_selector<T0,T1,T2> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct has_emplace_member_function_selector<multiset_selector<T0,T1,T2> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct has_emplace_member_function_selector<multimap_selector<T0,T1,T2> >
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ : ::boost::mpl::true_
+#else
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#endif // BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_HAS_EMPLACE_MFUNC_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/has_stable_iters_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/has_stable_iters_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,181 @@
+//=============================================================================
+// Copyright (C) 2011-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_HAS_STABLE_ITERS_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_HAS_STABLE_ITERS_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/is_queue_selector.hpp>
+#include <boost/container_gen/is_stack_selector.hpp>
+#include <boost/container_gen/is_std_heap_selector.hpp>
+#include <boost/container_gen/is_heap_selector.hpp>
+
+namespace boost {
+
+ template <typename Selector>
+ struct has_stable_iterators_selector
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::not_<is_random_access_selector<Selector> >
+ , ::boost::mpl::not_<is_hashed_associative_selector<Selector> >
+ >
+ , ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::not_<is_queue_selector<Selector> >
+ , ::boost::mpl::not_<is_stack_selector<Selector> >
+ >
+ , ::boost::mpl::and_<
+ ::boost::mpl::not_<is_std_heap_selector<Selector> >
+ , ::boost::mpl::not_<is_heap_selector<Selector> >
+ >
+ >
+ >
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , has_stable_iterators_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct has_stable_iterators_selector<
+ stable_vector_selector<AllocatorSelector>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_stable_iterators_selector<flat_set_selector<T0,T1> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_stable_iterators_selector<flat_map_selector<T0,T1> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_stable_iterators_selector<flat_multiset_selector<T0,T1> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_stable_iterators_selector<flat_multimap_selector<T0,T1> >
+ : ::boost::mpl::false_
+ {
+ };
+} // namespace boost
+
+#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/has_stable_iterators.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct has_stable_iterators_selector_impl
+ : ::boost::detail::metafunction::has_stable_iterators<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__has_stable_iterators_selector
+namespace boost {
+
+ template <typename Selector>
+ struct has_stable_iterators_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::has_stable_iterators_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , has_stable_iterators_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#if !defined BOOST_MSVC
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <>
+ struct has_stable_iterators_selector<array_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct has_stable_iterators_selector<ptr_array_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename T0, typename T1>
+ struct has_stable_iterators_selector<array_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct has_stable_iterators_selector<ptr_array_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif // BOOST_MSVC
+#endif // BOOST_CONTAINER_GEN_HAS_STABLE_ITERS_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/insert_range_function_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/insert_range_function_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,879 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+#ifndef BOOST_CONTAINER_GEN_INSERT_RANGE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_INSERT_RANGE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <deque>
+#include <utility>
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/range.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class insert_range_function_proxy
+ {
+ C& _container;
+
+ public:
+ explicit insert_range_function_proxy(C& c);
+
+ template <typename Itr>
+ insert_range_function_proxy&
+ operator()(typename C::iterator pos, Itr itr, Itr itr_end);
+
+ template <typename InputRange>
+ insert_range_function_proxy&
+ operator()(typename C::iterator pos, InputRange const& r);
+ };
+
+ template <typename F, typename C>
+ insert_range_function_proxy<F,C>::insert_range_function_proxy(C& c)
+ : _container(c)
+ {
+ }
+
+ template <typename F, typename C>
+ template <typename Itr>
+ inline insert_range_function_proxy<F,C>&
+ insert_range_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ F::evaluate(this->_container, pos, itr, itr_end);
+ return *this;
+ }
+
+ template <typename F, typename C>
+ template <typename InputRange>
+ inline insert_range_function_proxy<F,C>&
+ insert_range_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , InputRange const& r
+ )
+ {
+ F::evaluate(this->_container, pos, ::boost::begin(r), ::boost::end(r));
+ return *this;
+ }
+
+ struct fis_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<fis_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<fis_insert_range_function,C>
+ fis_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<fis_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::iterator result_begin = _container.previous(pos);
+ fis_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++result_begin
+ , pos
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ fis_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(pos, itr, itr_end);
+ }
+
+ struct ras_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<ras_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<ras_insert_range_function,C>
+ ras_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<ras_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::size_type const begin_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ ras_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + begin_index
+ , _container.begin() + begin_index + ::std::distance(itr, itr_end)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ras_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(pos, itr, itr_end);
+ }
+
+ struct bis_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<bis_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<bis_insert_range_function,C>
+ bis_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<bis_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ bis_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ bis_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++start
+ , pos
+ );
+ }
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ bis_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(pos, itr, itr_end);
+ }
+
+ struct uac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<uac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<uac_insert_range_function,C>
+ uac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<uac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(*itr);
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct mac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<mac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<mac_insert_range_function,C>
+ mac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<mac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(_container.insert(*itr));
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ mac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_uac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<ptr_uac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<ptr_uac_insert_range_function,C>
+ ptr_uac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<ptr_uac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(new typename C::key_type(*itr));
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_uac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_mac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<ptr_mac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<ptr_mac_insert_range_function,C>
+ ptr_mac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<ptr_mac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(
+ _container.insert(new typename C::key_type(*itr))
+ );
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_mac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct uns_ac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<uns_ac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ void
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ void
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<uns_ac_insert_range_function,C>
+ uns_ac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<uns_ac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline void
+ uns_ac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ this->operator()(_container, pos, ::boost::begin(r), ::boost::end(r));
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ uns_ac_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+
+//[reference__insert_range_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct insert_range_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_associative_selector<Selector>
+ , ::boost::mpl::eval_if<
+ has_stable_iterators_selector<Selector>
+ , ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::ptr_uac_insert_range_function
+ , detail::ptr_mac_insert_range_function
+ >
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_insert_range_function
+ , detail::uac_insert_range_function
+ >
+ >
+ , ::boost::mpl::identity<detail::uns_ac_insert_range_function>
+ >
+ , ::boost::mpl::if_<
+ is_random_access_selector<Selector>
+ , detail::ras_insert_range_function
+ , detail::bis_insert_range_function
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, insert_range_function_gen, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct insert_range_function_gen<slist_selector<AllocatorSelector> >
+ {
+ typedef detail::fis_insert_range_function type;
+ };
+} // namespace boost
+
+#elif !defined BOOST_NO_SLIST
+
+namespace boost {
+
+ template <>
+ struct insert_range_function_gen<slist_selector_base>
+ {
+ typedef detail::fis_insert_range_function type;
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION, BOOST_NO_SLIST
+
+#endif // BOOST_CONTAINER_GEN_INSERT_RANGE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/insert_range_result_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/insert_range_result_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,53 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+#ifndef BOOST_CONTAINER_GEN_INSERT_RANGE_RESULT_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_INSERT_RANGE_RESULT_GEN_HPP_INCLUDED
+
+#include <deque>
+#include <utility>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+//[reference__insert_range_result_gen
+namespace boost {
+
+ template <typename Selector, typename T>
+ struct insert_range_result_gen
+ {
+ //<-
+ private:
+ typedef typename container_gen<Selector,T>::type C;
+ typedef typename C::iterator I;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::boost::detail::metafunction::is_associative_container<C>
+ , ::std::deque<I>
+ , ::std::pair<I,I>
+ >::type
+ type;
+#if 0
+ //->
+ typedef ... type;
+ //<-
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , insert_range_result_gen
+ , (Selector, T)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_CONTAINER_GEN_INSERT_RANGE_RESULT_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_allocator_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_allocator_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,106 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_ALLOCATOR_SELECTOR_HPP
+#define BOOST_CONTAINER_GEN_IS_ALLOCATOR_SELECTOR_HPP
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX || \
+ defined BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#include <boost/container_gen/selectors_fwd.hpp>
+
+namespace boost {
+
+ template <typename T>
+ struct is_allocator_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_allocator_selector, (T))
+ };
+
+ template <>
+ struct is_allocator_selector<std_allocator_selector> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_allocator_selector<std_flat_allocator_selector>
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_MPL_CFG_NO_HAS_XXX && \
+// !defined BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/mpl/unpack_args.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/detail/metafunction/has_apply_template.hpp>
+#include <boost/detail/metafunction/is_allocator.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct does_allocator_selector_return_allocator
+ : ::boost::detail::metafunction::is_allocator<
+ typename ::boost::mpl::apply_wrap1<
+ ::boost::mpl::unpack_args<T>
+ , ::boost::mpl::vector1<T>
+ >::type
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_allocator_selector_metafunction_class
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ ::boost::mpl::apply_wrap1<
+ ::boost::mpl::unpack_args<T>
+ , ::boost::mpl::vector1<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ , does_allocator_selector_return_allocator<T>
+ , ::boost::mpl::false_
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_allocator_selector
+namespace boost {
+
+ template <typename T>
+ struct is_allocator_selector
+ : ::boost::mpl::eval_if<
+ typename ::boost::detail::metafunction::has_apply_template<T>::type
+ , ::boost::detail::metafunction
+ ::is_allocator_selector_metafunction_class<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_allocator_selector, (T))
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_MPL_CFG_NO_HAS_XXX, BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#endif // BOOST_CONTAINER_GEN_IS_ALLOCATOR_SELECTOR_HPP
+

Added: sandbox/container_gen/boost/container_gen/is_associative_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_associative_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,88 @@
+//=============================================================================
+// Copyright (C) 2011-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_ASSOCIATIVE_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_ASSOCIATIVE_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/or.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_associative_selector
+ : ::boost::mpl::or_<
+ is_unique_associative_selector<Selector>
+ , is_multiple_associative_selector<Selector>
+ >
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_associative_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_associative_selector_impl
+ : ::boost::detail::metafunction::is_associative_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_associative_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_associative_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_associative_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_associative_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_ASSOCIATIVE_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_compare_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_compare_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,155 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_COMPARE_SELECTOR_HPP
+#define BOOST_CONTAINER_GEN_IS_COMPARE_SELECTOR_HPP
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX || \
+ defined BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#include <boost/container_gen/selectors_fwd.hpp>
+#include <boost/container_gen/c_str_cmp_selectors_fwd.hpp>
+
+namespace boost {
+
+ template <typename T>
+ struct is_compare_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_compare_selector, (T))
+ };
+
+ template <>
+ struct is_compare_selector<equal_to_selector> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_compare_selector<less_than_selector> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_compare_selector<greater_than_selector> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_compare_selector<c_str_less_than_selector> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_compare_selector<c_str_greater_than_selector>
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_MPL_CFG_NO_HAS_XXX && \
+// !defined BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/mpl/unpack_args.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/detail/metafunction/has_apply_template.hpp>
+#include <boost/detail/metafunction/is_function_wrt.hpp>
+
+#if defined BOOST_DETAIL_METAFUNCTION_ATTEMPT_ARITY_DETECTION
+#include <boost/mpl/if.hpp>
+#include <boost/detail/metafunction/is_n_ary_function.hpp>
+#include <boost/detail/metafunction/is_adaptable_binary_func.hpp>
+#endif
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Metafunction>
+ struct is_compare_selector_result_predicate
+#if !defined BOOST_DETAIL_METAFUNCTION_ATTEMPT_ARITY_DETECTION
+ : ::boost::detail::metafunction::is_function_with_result_type<
+ typename Metafunction::type
+ , bool
+ >
+#endif
+ {
+#if defined BOOST_DETAIL_METAFUNCTION_ATTEMPT_ARITY_DETECTION
+ private:
+ typedef typename Metafunction::type _function;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ ::boost::detail::metafunction
+ ::is_function_with_result_type<_function,bool>
+ , ::boost::mpl::if_<
+ ::boost::detail::metafunction::is_n_ary_function<
+ _function
+ , ::boost::mpl::integral_c<unsigned int,2>
+ >
+ , ::boost::mpl::true_
+ , ::boost::detail::metafunction
+ ::is_adaptable_binary_function<_function>
+ >
+ , ::boost::mpl::false_
+ >::type
+ type;
+#endif
+ };
+
+ template <typename T>
+ struct is_compare_selector_metafunction_class
+ {
+ private:
+ typedef ::boost::mpl::apply_wrap1<
+ ::boost::mpl::unpack_args<T>
+ , ::boost::mpl::vector1<T>
+ >
+ _metafunction;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::aux::has_type<
+ _metafunction
+ , ::boost::mpl::false_
+ >::type
+ , is_compare_selector_result_predicate<_metafunction>
+ , ::boost::mpl::false_
+ >::type
+ type;
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_compare_selector
+namespace boost {
+
+ template <typename T>
+ struct is_compare_selector
+ : ::boost::mpl::eval_if<
+ typename ::boost::detail::metafunction::has_apply_template<T>::type
+ , ::boost::detail::metafunction
+ ::is_compare_selector_metafunction_class<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_compare_selector, (T))
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_MPL_CFG_NO_HAS_XXX, BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#endif // BOOST_CONTAINER_GEN_IS_COMPARE_SELECTOR_HPP
+

Added: sandbox/container_gen/boost/container_gen/is_container_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_container_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,444 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_CONTAINER_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_CONTAINER_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_container_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_container_selector,(Selector))
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors_fwd.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <>
+ struct is_container_selector<array_selector_base> : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <>
+ struct is_container_selector<vector_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<deque_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<list_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+#if !defined BOOST_NO_SLIST
+ template <>
+ struct is_container_selector<slist_selector_base> : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <>
+ struct is_container_selector<set_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<map_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<multiset_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<multimap_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+#if defined BOOST_HAS_HASH
+ template <>
+ struct is_container_selector<hash_set_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<hash_map_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<hash_multiset_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<hash_multimap_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+#endif // BOOST_HAS_HASH
+
+#if !defined BOOST_MSVC
+ template <>
+ struct is_container_selector<ptr_array_selector_base> : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <>
+ struct is_container_selector<ptr_vector_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<ptr_deque_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<ptr_list_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<ptr_set_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<ptr_map_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<ptr_multiset_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<ptr_multimap_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<stack_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<queue_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_container_selector<std_heap_selector_base> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1>
+ struct is_container_selector<array_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <typename T0, typename T1>
+ struct is_container_selector<vector_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct is_container_selector<stable_vector_selector<AllocatorSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<deque_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<list_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<set_selector<T0,T1,T2> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<map_selector<T0,T1,T2> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<multiset_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<multimap_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<flat_set_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<flat_map_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<flat_multiset_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<flat_multimap_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1>
+ struct is_container_selector<ptr_array_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <typename T0, typename T1>
+ struct is_container_selector<ptr_vector_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<ptr_deque_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<ptr_list_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<ptr_set_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<ptr_map_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<ptr_multiset_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_container_selector<ptr_multimap_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<ptr_hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<ptr_hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<ptr_hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<ptr_hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename SequenceSelector>
+ struct is_container_selector<stack_selector<SequenceSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename SequenceSelector>
+ struct is_container_selector<queue_selector<SequenceSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_container_selector<std_heap_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<priority_queue_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct is_container_selector<d_ary_heap_selector<T0,T1,T2,T3,T4,T5> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_container_selector<binomial_heap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_container_selector<fibonacci_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_container_selector<pairing_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct is_container_selector<skew_heap_selector<T0,T1,T2,T3,T4,T5,T6> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/container_gen/container_gen_fwd.hpp>
+
+//[reference__is_container_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_container_selector
+ //<-
+ : ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_container_selector,(Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_CONTAINER_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_flat_assoc_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_flat_assoc_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,113 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_FLAT_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_FLAT_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_flat_associative_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_flat_associative_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+ template <typename T0, typename T1>
+ struct is_flat_associative_selector<flat_set_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_flat_associative_selector<flat_map_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_flat_associative_selector<flat_multiset_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_flat_associative_selector<flat_multimap_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_flat_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_flat_associative_selector_impl
+ : ::boost::detail::metafunction::is_flat_associative_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_flat_associative_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_flat_associative_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_flat_associative_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_flat_associative_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_FLAT_ASSOC_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_hashed_assoc_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_hashed_assoc_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,171 @@
+//=============================================================================
+// Copyright (C) 2011-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_HASHED_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_HASHED_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_hashed_associative_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_hashed_associative_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_HAS_HASH
+
+namespace boost {
+
+ template <>
+ struct is_hashed_associative_selector<hash_set_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_hashed_associative_selector<hash_map_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_hashed_associative_selector<hash_multiset_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_hashed_associative_selector<hash_multimap_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_HAS_HASH
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<ptr_hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<ptr_hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<
+ ptr_hash_multiset_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_hashed_associative_selector<
+ ptr_hash_multimap_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_hashed_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_hashed_associative_selector_impl
+ : ::boost::detail::metafunction::is_hashed_associative_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_hashed_associative_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_hashed_associative_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_hashed_associative_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_hashed_associative_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_HASHED_ASSOC_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_hasher_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_hasher_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,142 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_HASHER_SELECTOR_HPP
+#define BOOST_CONTAINER_GEN_IS_HASHER_SELECTOR_HPP
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX || \
+ defined BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#include <boost/container_gen/selectors_fwd.hpp>
+
+namespace boost {
+
+ template <typename T>
+ struct is_hasher_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_hasher_selector, (T))
+ };
+
+ template <>
+ struct is_hasher_selector<boost_hash_selector> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_hasher_selector<tr1_hash_selector> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_MPL_CFG_NO_HAS_XXX && \
+// !defined BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/mpl/unpack_args.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/detail/metafunction/has_apply_template.hpp>
+#include <boost/detail/metafunction/is_function_wrt.hpp>
+
+#if defined BOOST_DETAIL_METAFUNCTION_ATTEMPT_ARITY_DETECTION
+#include <boost/mpl/if.hpp>
+#include <boost/detail/metafunction/is_n_ary_function.hpp>
+#include <boost/detail/metafunction/is_adaptable_binary_func.hpp>
+#endif
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Metafunction>
+ struct is_hasher_selector_result_function
+#if !defined BOOST_DETAIL_METAFUNCTION_ATTEMPT_ARITY_DETECTION
+ : ::boost::detail::metafunction::is_function_with_result_type<
+ typename Metafunction::type
+ , ::std::size_t
+ >
+#endif
+ {
+#if defined BOOST_DETAIL_METAFUNCTION_ATTEMPT_ARITY_DETECTION
+ private:
+ typedef typename Metafunction::type _function;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ ::boost::detail::metafunction
+ ::is_function_with_result_type<_function,::std::size_t>
+ , ::boost::mpl::false_
+ , ::boost::mpl::if_<
+ ::boost::detail::metafunction::is_n_ary_function<
+ _function
+ , ::boost::mpl::integral_c<unsigned int,1>
+ >
+ , ::boost::mpl::true_
+ , ::boost::detail::metafunction
+ ::is_adaptable_unary_function<_function>
+ >
+ >::type
+ type;
+#endif
+ };
+
+ template <typename T>
+ struct is_hasher_selector_metafunction_class
+ {
+ private:
+ typedef ::boost::mpl::apply_wrap1<
+ ::boost::mpl::unpack_args<T>
+ , ::boost::mpl::vector1<T>
+ >
+ _metafunction;
+
+ public:
+ typedef typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::aux::has_type<
+ _metafunction
+ , ::boost::mpl::false_
+ >::type
+ , is_hasher_selector_result_function<_metafunction>
+ , ::boost::mpl::false_
+ >::type
+ type;
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_hasher_selector
+namespace boost {
+
+ template <typename T>
+ struct is_hasher_selector
+ //<-
+ : ::boost::mpl::eval_if<
+ typename ::boost::detail::metafunction::has_apply_template<T>::type
+ , ::boost::detail::metafunction
+ ::is_hasher_selector_metafunction_class<T>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_hasher_selector, (T))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_MPL_CFG_NO_HAS_XXX, BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#endif // BOOST_CONTAINER_GEN_IS_HASHER_SELECTOR_HPP
+

Added: sandbox/container_gen/boost/container_gen/is_heap_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_heap_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,132 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_HEAP_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_HEAP_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_heap_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_heap_selector, (Selector))
+ };
+} // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_heap_selector<priority_queue_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct is_heap_selector<d_ary_heap_selector<T0,T1,T2,T3,T4,T5> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_heap_selector<binomial_heap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_heap_selector<fibonacci_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_heap_selector<pairing_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct is_heap_selector<skew_heap_selector<T0,T1,T2,T3,T4,T5,T6> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_heap_selector_impl
+ : ::boost::detail::metafunction::is_heap<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_heap_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_heap_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_heap_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_heap_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_HEAP_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_iteratable_heap_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_iteratable_heap_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,142 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_ITERATABLE_HEAP_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_ITERATABLE_HEAP_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_iteratable_heap_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_iteratable_heap_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_iteratable_heap_selector<priority_queue_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct is_iteratable_heap_selector<d_ary_heap_selector<T0,T1,T2,T3,T4,T5> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_iteratable_heap_selector<binomial_heap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_iteratable_heap_selector<
+ fibonacci_heap_selector<T0,T1,T2,T3,T4>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_iteratable_heap_selector<pairing_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct is_iteratable_heap_selector<
+ skew_heap_selector<T0,T1,T2,T3,T4,T5,T6>
+ > : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_iteratable_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_iteratable_heap_selector_impl
+ : ::boost::detail::metafunction::is_iteratable_heap<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_iteratable_heap_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_iteratable_heap_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_iteratable_heap_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_iteratable_heap_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_ITERATABLE_HEAP_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_multiple_assoc_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_multiple_assoc_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,200 @@
+//=============================================================================
+// Copyright (C) 2011-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_MULTIPLE_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_MULTIPLE_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX || \
+ defined BOOST_TYPEOF_EMULATION
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_multiple_associative_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_multiple_associative_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <>
+ struct is_multiple_associative_selector<multiset_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_multiple_associative_selector<multimap_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_multiple_associative_selector<ptr_multiset_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_multiple_associative_selector<ptr_multimap_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+#if defined BOOST_HAS_HASH
+ template <>
+ struct is_multiple_associative_selector<hash_multiset_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_multiple_associative_selector<hash_multimap_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+#endif // BOOST_HAS_HASH
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename T0, typename T1, typename T2>
+ struct is_multiple_associative_selector<multiset_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_multiple_associative_selector<multimap_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_multiple_associative_selector<flat_multiset_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_multiple_associative_selector<flat_multimap_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_multiple_associative_selector<
+ hash_multiset_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_multiple_associative_selector<
+ hash_multimap_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_multiple_associative_selector<ptr_multiset_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_multiple_associative_selector<ptr_multimap_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_multiple_associative_selector<
+ ptr_hash_multiset_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_multiple_associative_selector<
+ ptr_hash_multimap_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX && \
+// !defined BOOST_TYPEOF_EMULATION
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_multi_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_multiple_associative_selector_impl
+ : ::boost::detail::metafunction::is_multiple_associative_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_multiple_associative_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_multiple_associative_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_multiple_associative_selector_impl<
+ Selector
+ >
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_multiple_associative_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX, BOOST_TYPEOF_EMULATION
+
+#endif // BOOST_CONTAINER_GEN_IS_MULTIPLE_ASSOC_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_mutable_heap_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_mutable_heap_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,151 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_MUTABLE_HEAP_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_MUTABLE_HEAP_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_mutable_heap_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_mutable_heap_selector, (Selector))
+ };
+} // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/heap/policies.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/detail/selector_signatures.hpp>
+
+namespace boost {
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct is_mutable_heap_selector<d_ary_heap_selector<T0,T1,T2,T3,T4,T5> >
+ : ::boost::mpl::bool_<
+ ::boost::heap::detail::extract_mutable<
+ typename detail::d_ary_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ , T4
+ , T5
+ >::type
+ >::value
+ >
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_mutable_heap_selector<binomial_heap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_mutable_heap_selector<fibonacci_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_mutable_heap_selector<pairing_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct is_mutable_heap_selector<skew_heap_selector<T0,T1,T2,T3,T4,T5,T6> >
+ : ::boost::mpl::bool_<
+ ::boost::heap::detail::extract_mutable<
+ typename detail::skew_heap_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ , T4
+ , T5
+ , T6
+ >::type
+ >::value
+ >
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_mutable_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_mutable_heap_selector_impl
+ : ::boost::detail::metafunction::is_mutable_heap<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_mutable_heap_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_mutable_heap_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_mutable_heap_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_mutable_heap_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_MUTABLE_HEAP_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_order_iter_heap_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_order_iter_heap_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,141 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_ORDER_ITER_HEAP_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_ORDER_ITER_HEAP_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_order_iteratable_heap_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_order_iteratable_heap_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct is_order_iteratable_heap_selector<
+ d_ary_heap_selector<T0,T1,T2,T3,T4,T5>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_order_iteratable_heap_selector<
+ binomial_heap_selector<T0,T1,T2,T3>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_order_iteratable_heap_selector<
+ fibonacci_heap_selector<T0,T1,T2,T3,T4>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_order_iteratable_heap_selector<
+ pairing_heap_selector<T0,T1,T2,T3,T4>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct is_order_iteratable_heap_selector<
+ skew_heap_selector<T0,T1,T2,T3,T4,T5,T6>
+ > : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_order_iteratable_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_order_iteratable_heap_selector_impl
+ : ::boost::detail::metafunction::is_order_iteratable_heap<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_order_iteratable_heap_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_order_iteratable_heap_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_order_iteratable_heap_selector_impl<
+ Selector
+ >
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_order_iteratable_heap_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_ORDER_ITER_HEAP_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_ptr_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_ptr_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,196 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_PTR_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_PTR_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_ptr_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_ptr_selector, (Selector))
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <>
+ struct is_ptr_selector<ptr_array_selector_base> : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <>
+ struct is_ptr_selector<ptr_vector_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_ptr_selector<ptr_deque_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_ptr_selector<ptr_list_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_ptr_selector<ptr_set_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_ptr_selector<ptr_map_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_ptr_selector<ptr_multiset_selector_base> : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_ptr_selector<ptr_multimap_selector_base> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1>
+ struct is_ptr_selector<ptr_array_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <typename T0, typename T1>
+ struct is_ptr_selector<ptr_vector_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_ptr_selector<ptr_deque_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_ptr_selector<ptr_list_selector<T0,T1> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_ptr_selector<ptr_set_selector<T0,T1,T2> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_ptr_selector<ptr_map_selector<T0,T1,T2> > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_ptr_selector<ptr_multiset_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_ptr_selector<ptr_multimap_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_ptr_selector<ptr_hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_ptr_selector<ptr_hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_ptr_selector<ptr_hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_ptr_selector<ptr_hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_ptr_selector_impl
+ : ::boost::detail::metafunction::is_ptr_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_ptr_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_ptr_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_ptr_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_ptr_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_PTR_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_queue_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_queue_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,97 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_QUEUE_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_QUEUE_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_queue_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_queue_selector, (Selector))
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <>
+ struct is_queue_selector<queue_selector_base> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename SequenceSelector>
+ struct is_queue_selector<queue_selector<SequenceSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_queue.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_queue_selector_impl
+ : ::boost::detail::metafunction::is_queue<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_queue_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_queue_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_queue_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_queue_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_QUEUE_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_random_access_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_random_access_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,173 @@
+//=============================================================================
+// Copyright (C) 2011-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_RANDOM_ACCESS_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_RANDOM_ACCESS_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_random_access_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_selector,(Selector))
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <>
+ struct is_random_access_selector<array_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <>
+ struct is_random_access_selector<vector_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_random_access_selector<deque_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+#if !defined BOOST_MSVC
+ template <>
+ struct is_random_access_selector<ptr_array_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <>
+ struct is_random_access_selector<ptr_vector_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_random_access_selector<ptr_deque_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1>
+ struct is_random_access_selector<array_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <typename T0, typename T1>
+ struct is_random_access_selector<vector_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct is_random_access_selector<
+ stable_vector_selector<AllocatorSelector>
+ > : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_random_access_selector<deque_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1>
+ struct is_random_access_selector<ptr_array_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+#endif
+
+ template <typename T0, typename T1>
+ struct is_random_access_selector<ptr_vector_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_random_access_selector<ptr_deque_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_random_access_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_random_access_selector_impl
+ : ::boost::detail::metafunction::is_random_access_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_random_access_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_random_access_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_random_access_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_selector,(Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_RANDOM_ACCESS_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_recursive_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_recursive_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,212 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_RECURSIVE_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_RECURSIVE_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__is_recursive_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_recursive_selector
+ //<-
+ : is_ptr_selector<Selector>
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_recursive_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/parameter.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/selector_keywords.hpp>
+#include <boost/container_gen/detail/selector_signatures.hpp>
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_recursive_selector
+ : ::boost::mpl::if_<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::true_
+ , is_hashed_associative_selector<Selector>
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_recursive_selector, (Selector))
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<vector_selector<T0,T1> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::sequence_selector_signature::bind<T0,T1>::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<deque_selector<T0,T1> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::sequence_selector_signature::bind<T0,T1>::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<list_selector<T0,T1> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::sequence_selector_signature::bind<T0,T1>::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct is_recursive_selector<stable_vector_selector<AllocatorSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct is_recursive_selector<slist_selector<AllocatorSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_recursive_selector<set_selector<T0,T1,T2> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_recursive_selector<map_selector<T0,T1,T2> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_recursive_selector<multiset_selector<T0,T1,T2> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_recursive_selector<multimap_selector<T0,T1,T2> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::boost_or_std_assoc_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ >::type
+ , ::boost::is_boost_not_std_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<flat_set_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<flat_map_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<flat_multiset_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_recursive_selector<flat_multimap_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_IS_RECURSIVE_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_reversible_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_reversible_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,261 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_REVERSIBLE_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_REVERSIBLE_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_reversible_selector : ::boost::mpl::true_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reversible_selector,(Selector))
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_NO_SLIST
+ template <>
+ struct is_reversible_selector<slist_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+#endif
+
+#if defined BOOST_HAS_HASH
+ template <>
+ struct is_reversible_selector<hash_set_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <>
+ struct is_reversible_selector<hash_map_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <>
+ struct is_reversible_selector<hash_multiset_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <>
+ struct is_reversible_selector<hash_multimap_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+#endif // BOOST_HAS_HASH
+
+ template <>
+ struct is_reversible_selector<stack_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <>
+ struct is_reversible_selector<queue_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <>
+ struct is_reversible_selector<std_heap_selector_base>
+ : ::boost::mpl::false_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct is_reversible_selector<slist_selector<AllocatorSelector> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<ptr_hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<ptr_hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<ptr_hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<ptr_hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename ContainerSelector>
+ struct is_reversible_selector<stack_selector<ContainerSelector> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename ContainerSelector>
+ struct is_reversible_selector<queue_selector<ContainerSelector> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_reversible_selector<std_heap_selector<T0,T1> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<priority_queue_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct is_reversible_selector<d_ary_heap_selector<T0,T1,T2,T3,T4,T5> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_reversible_selector<binomial_heap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_reversible_selector<fibonacci_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct is_reversible_selector<pairing_heap_selector<T0,T1,T2,T3,T4> >
+ : ::boost::mpl::false_
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct is_reversible_selector<skew_heap_selector<T0,T1,T2,T3,T4,T5,T6> >
+ : ::boost::mpl::false_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_reversible_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_reversible_selector_impl
+ : ::boost::detail::metafunction::is_reversible_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_reversible_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_reversible_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_reversible_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reversible_selector,(Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_CONTAINER_GEN_IS_REVERSIBLE_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_stack_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_stack_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,58 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_STACK_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_STACK_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+//[reference__is_stack_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_stack_selector
+ //<-
+ : ::boost::mpl::false_
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_stack_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <>
+ struct is_stack_selector<stack_selector_base> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename SequenceSelector>
+ struct is_stack_selector<stack_selector<SequenceSelector> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_IS_STACK_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_std_heap_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_std_heap_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,59 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_STD_HEAP_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_STD_HEAP_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+//[reference__is_std_heap_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_std_heap_selector
+ //<-
+ : ::boost::mpl::false_
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_std_heap_selector, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <>
+ struct is_std_heap_selector<std_heap_selector_base> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename CompareSelector, typename SequenceSelector>
+ struct is_std_heap_selector<
+ std_heap_selector<CompareSelector,SequenceSelector>
+ > : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_IS_STD_HEAP_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_tr1_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_tr1_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,145 @@
+//=============================================================================
+// Copyright (C) 2012-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_TR1_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_TR1_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+//[reference__is_tr1_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_tr1_selector
+ //<-
+ : ::boost::mpl::false_
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_tr1_selector, (Selector))
+ //->
+ };
+
+ template <>
+ struct is_tr1_selector<tr1_hash_selector> : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+//]
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/mpl/if.hpp>
+#include <boost/parameter.hpp>
+#include <boost/container_gen/selector_keywords.hpp>
+#include <boost/container_gen/detail/selector_signatures.hpp>
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1>
+ struct is_tr1_selector<array_selector<T0,T1> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::array_selector_signature::bind<T0,T1>::type
+ , ::boost::is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+#endif
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_tr1_selector<hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ , ::boost::is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_tr1_selector<hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ , ::boost::is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_tr1_selector<hash_multiset_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ , ::boost::is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_tr1_selector<hash_multimap_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::if_<
+ typename ::boost::parameter::value_type<
+ typename detail::hashed_associative_selector_signature::bind<
+ T0
+ , T1
+ , T2
+ , T3
+ >::type
+ , ::boost::is_tr1_not_boost_tag
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+} // namespace boost
+
+#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_IS_TR1_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/is_unique_assoc_selector.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/is_unique_assoc_selector.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,194 @@
+//=============================================================================
+// Copyright (C) 2011-2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_IS_UNIQUE_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_UNIQUE_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#if defined BOOST_NO_SFINAE || defined BOOST_MPL_CFG_NO_HAS_XXX || \
+ defined BOOST_TYPEOF_EMULATION
+
+namespace boost {
+
+ template <typename Selector>
+ struct is_unique_associative_selector : ::boost::mpl::false_
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_unique_associative_selector
+ , (Selector)
+ )
+ };
+} // namespace boost
+
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <>
+ struct is_unique_associative_selector<set_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_unique_associative_selector<map_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_unique_associative_selector<ptr_set_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_unique_associative_selector<ptr_map_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+#if defined BOOST_HAS_HASH
+ template <>
+ struct is_unique_associative_selector<hash_set_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <>
+ struct is_unique_associative_selector<hash_map_selector_base>
+ : ::boost::mpl::true_
+ {
+ };
+#endif // BOOST_HAS_HASH
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename T0, typename T1, typename T2>
+ struct is_unique_associative_selector<set_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_unique_associative_selector<map_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_unique_associative_selector<flat_set_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct is_unique_associative_selector<flat_map_selector<T0,T1> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_unique_associative_selector<hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_unique_associative_selector<hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_unique_associative_selector<ptr_set_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct is_unique_associative_selector<ptr_map_selector<T0,T1,T2> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_unique_associative_selector<ptr_hash_set_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct is_unique_associative_selector<ptr_hash_map_selector<T0,T1,T2,T3> >
+ : ::boost::mpl::true_
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else // !defined BOOST_NO_SFINAE && !defined BOOST_MPL_CFG_NO_HAS_XXX && \
+// !defined BOOST_TYPEOF_EMULATION
+
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_unique_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename Selector>
+ struct is_unique_associative_selector_impl
+ : ::boost::detail::metafunction::is_unique_associative_container<
+ typename container_gen<Selector,int>::type
+ >
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+//[reference__is_unique_associative_selector
+namespace boost {
+
+ template <typename Selector>
+ struct is_unique_associative_selector
+ //<-
+ : ::boost::mpl::if_<
+ typename ::boost::mpl::aux::has_type<
+ container_gen<Selector,int>
+ >::type
+ , detail::metafunction::is_unique_associative_selector_impl<Selector>
+ , ::boost::mpl::false_
+ >::type
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , is_unique_associative_selector
+ , (Selector)
+ )
+ //->
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_SFINAE, BOOST_MPL_CFG_NO_HAS_XXX, BOOST_TYPEOF_EMULATION
+
+#endif // BOOST_CONTAINER_GEN_IS_UNIQUE_ASSOC_SELECTOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/push_range_function_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/push_range_function_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,705 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+#ifndef BOOST_CONTAINER_GEN_PUSH_RANGE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_PUSH_RANGE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <deque>
+#include <utility>
+#include <boost/range.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class push_range_function_proxy
+ {
+ C& _container;
+
+ public:
+ explicit push_range_function_proxy(C& c);
+
+ template <typename Itr>
+ push_range_function_proxy& operator()(Itr itr, Itr itr_end);
+
+ template <typename InputRange>
+ push_range_function_proxy& operator()(InputRange const& r);
+ };
+
+ template <typename F, typename C>
+ push_range_function_proxy<F,C>::push_range_function_proxy(C& c)
+ : _container(c)
+ {
+ }
+
+ template <typename F, typename C>
+ template <typename Itr>
+ inline push_range_function_proxy<F,C>&
+ push_range_function_proxy<F,C>::operator()(Itr itr, Itr itr_end)
+ {
+ F::evaluate(this->_container, itr, itr_end);
+ return *this;
+ }
+
+ template <typename F, typename C>
+ template <typename InputRange>
+ inline push_range_function_proxy<F,C>&
+ push_range_function_proxy<F,C>::operator()(InputRange const& r)
+ {
+ F::evaluate(this->_container, ::boost::begin(r), ::boost::end(r));
+ return *this;
+ }
+
+ struct fis_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<fis_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<fis_push_range_function,C>
+ fis_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<fis_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::iterator const range_end = _container.begin();
+ fis_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , range_end
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ fis_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(_container.begin(), itr, itr_end);
+ }
+
+ struct ras_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<ras_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<ras_push_range_function,C>
+ ras_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<ras_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ ras_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::size_type const old_size = _container.size();
+ ras_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + old_size
+ , _container.end()
+ );
+ }
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ras_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(_container.end(), itr, itr_end);
+ }
+
+ struct bis_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<bis_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<bis_push_range_function,C>
+ bis_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<bis_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ bis_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator pos = _container.end();
+ --pos;
+ bis_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++pos
+ , _container.end()
+ );
+ }
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ bis_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(_container.end(), itr, itr_end);
+ }
+
+ struct uac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<uac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<uac_push_range_function,C>
+ uac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<uac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ uac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ uac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(*itr);
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uac_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct mac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<mac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<mac_push_range_function,C>
+ mac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<mac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ mac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ mac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(_container.insert(*itr));
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ mac_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_uac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<ptr_uac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<ptr_uac_push_range_function,C>
+ ptr_uac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<ptr_uac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_uac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_uac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(new typename C::key_type(*itr));
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_uac_push_range_function::evaluate(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_mac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<ptr_mac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<ptr_mac_push_range_function,C>
+ ptr_mac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<ptr_mac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_mac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_mac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(
+ _container.insert(new typename C::key_type(*itr))
+ );
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_mac_push_range_function::evaluate(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct uns_ac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<uns_ac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ void operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ void operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<uns_ac_push_range_function,C>
+ uns_ac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<uns_ac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline void
+ uns_ac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ this->operator()(_container, ::boost::begin(r), ::boost::end(r));
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ uns_ac_push_range_function::evaluate(_container, itr, itr_end);
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_push_range_function::evaluate(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+
+//[reference__push_range_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct push_range_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_associative_selector<Selector>
+ , ::boost::mpl::eval_if<
+ has_stable_iterators_selector<Selector>
+ , ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::ptr_uac_push_range_function
+ , detail::ptr_mac_push_range_function
+ >
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_push_range_function
+ , detail::uac_push_range_function
+ >
+ >
+ , ::boost::mpl::identity<detail::uns_ac_push_range_function>
+ >
+ , ::boost::mpl::if_<
+ is_random_access_selector<Selector>
+ , detail::ras_push_range_function
+ , detail::bis_push_range_function
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, push_range_function_gen, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct push_range_function_gen<slist_selector<AllocatorSelector> >
+ {
+ typedef detail::fis_push_range_function type;
+ };
+} // namespace boost
+
+#elif !defined BOOST_NO_SLIST
+
+namespace boost {
+
+ template <>
+ struct push_range_function_gen<slist_selector_base>
+ {
+ typedef detail::fis_push_range_function type;
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION, BOOST_NO_SLIST
+
+#endif // BOOST_CONTAINER_GEN_PUSH_RANGE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/selector_keywords.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/selector_keywords.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,82 @@
+//=============================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_SELECTOR_KEYWORDS_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SELECTOR_KEYWORDS_HPP_INCLUDED
+
+#include <boost/parameter/aux_/template_keyword.hpp>
+
+namespace boost {
+
+ struct constant_size_tag;
+ struct is_tr1_not_boost_tag;
+ struct is_boost_not_std_tag;
+ struct hasher_selector_tag;
+ struct compare_selector_tag;
+ struct allocator_selector_tag;
+ struct ptr_clone_allocator_tag;
+ struct ptr_allocator_tag;
+ struct sequence_selector_tag;
+
+ template <typename T>
+ struct constant_size_arg
+ : ::boost::parameter::template_keyword<constant_size_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct is_tr1_not_boost_arg
+ : ::boost::parameter::template_keyword<is_tr1_not_boost_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct is_boost_not_std_arg
+ : ::boost::parameter::template_keyword<is_boost_not_std_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct hasher_selector_arg
+ : ::boost::parameter::template_keyword<hasher_selector_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct compare_selector_arg
+ : ::boost::parameter::template_keyword<compare_selector_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct allocator_selector_arg
+ : ::boost::parameter::template_keyword<allocator_selector_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct ptr_clone_allocator_arg
+ : ::boost::parameter::template_keyword<ptr_clone_allocator_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct ptr_allocator_arg
+ : ::boost::parameter::template_keyword<ptr_allocator_tag,T>
+ {
+ };
+
+ template <typename T>
+ struct sequence_selector_arg
+ : ::boost::parameter::template_keyword<sequence_selector_tag,T>
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_CONTAINER_GEN_SELECTOR_KEYWORDS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/selectors.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/selectors.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,1197 @@
+//=============================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Copyright 2011-2013 Cromwell D. Enage
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole,
+// Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+
+#include <functional>
+#include <memory>
+#include <utility>
+#include <boost/mpl/if.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/tr1/functional.hpp>
+#include <boost/functional/hash.hpp>
+#include <boost/container_gen/selectors_fwd.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/function/range_equal.hpp>
+#include <boost/detail/function/range_less.hpp>
+#include <boost/detail/function/range_greater.hpp>
+
+//[reference__template_argument_selectors
+namespace boost {
+
+ struct equal_to_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ typedef // implementation_defined
+ //<-
+ typename ::boost::mpl::if_<
+ ::boost::detail::metafunction::is_container<T>
+ , ::boost::detail::range_equal
+ , ::std::equal_to<T>
+ >::type
+ //->
+ type;
+ };
+ };
+
+ struct less_than_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ typedef // implementation_defined
+ //<-
+ typename ::boost::mpl::if_<
+ ::boost::detail::metafunction::is_container<T>
+ , ::boost::detail::range_less
+ , ::std::less<T>
+ >::type
+ //->
+ type;
+ };
+ };
+
+ struct greater_than_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ typedef typename ::boost::mpl::if_<
+ ::boost::detail::metafunction::is_container<T>
+ , ::boost::detail::range_greater
+ , ::std::greater<T>
+ >::type
+ type;
+ };
+ };
+
+ struct boost_hash_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ typedef ::boost::hash<T> type;
+ };
+ };
+
+ struct tr1_hash_selector
+ {
+ template <typename T>
+ struct apply
+ {
+ typedef ::std::tr1::hash<T> type;
+ };
+ };
+
+ struct std_allocator_selector
+ {
+ template <typename T1, typename T2 = void>
+ struct apply
+ {
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<T2>
+ , ::std::allocator<T1>
+ , ::std::allocator< ::std::pair<T1 const,T2> >
+ >::type
+ type;
+ };
+ };
+
+ struct std_flat_allocator_selector
+ {
+ template <typename T1, typename T2 = void>
+ struct apply
+ {
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<T2>
+ , ::std::allocator<T1>
+ , ::std::allocator< ::std::pair<T1,T2> >
+ >::type
+ type;
+ };
+ };
+} // namespace boost
+//]
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/ptr_container/clone_allocator.hpp>
+
+//=============================================================================
+// Selectors for the VertexList and EdgeList template parameters of
+// adjacency_list, and the container_gen metafunction which is used
+// to map the selectors to the container type used to implement the
+// graph.
+//=============================================================================
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <vector>
+#include <deque>
+#include <list>
+
+#if !defined BOOST_NO_SLIST
+# if defined BOOST_SLIST_HEADER
+# include BOOST_SLIST_HEADER
+# else
+# include <slist>
+# endif
+#endif
+
+#if defined BOOST_HAS_HASH
+# if defined BOOST_HASH_SET_HEADER
+# include BOOST_HASH_SET_HEADER
+# else
+# include <hash_set>
+# endif
+# if defined BOOST_HASH_MAP_HEADER
+# include BOOST_HASH_MAP_HEADER
+# else
+# include <hash_map>
+# endif
+#endif
+
+#if !defined BOOST_MSVC
+#include <boost/array.hpp>
+#include <boost/tr1/array.hpp>
+#include <boost/ptr_container/ptr_array.hpp>
+#endif
+
+#include <set>
+#include <map>
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_deque.hpp>
+#include <boost/ptr_container/ptr_list.hpp>
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
+#include <boost/ptr_container/ptr_unordered_set.hpp>
+#include <boost/ptr_container/ptr_unordered_map.hpp>
+
+#include <boost/mpl/apply_wrap.hpp>
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+ struct array_selector_base
+ {
+ };
+
+ template <typename ConstantSize, typename IsTR1 = ::boost::mpl::false_>
+ struct array_selector : array_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef typename ::boost::mpl::if_<
+ IsTR1
+ , ::std::tr1::array<T,ConstantSize::value>
+ , ::boost::array<T,ConstantSize::value>
+ >::type
+ type;
+ };
+ };
+#endif
+
+ struct vector_selector_base
+ {
+ };
+
+ template <typename AllocatorSelector, typename Ignored>
+ struct vector_selector : vector_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::std::vector<
+ T
+ , typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , T
+ >::type
+ >
+ type;
+ };
+ };
+
+ struct deque_selector_base
+ {
+ };
+
+ template <typename AllocatorSelector, typename Ignored>
+ struct deque_selector : deque_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::std::deque<
+ T
+ , typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , T
+ >::type
+ >
+ type;
+ };
+ };
+
+ struct list_selector_base
+ {
+ };
+
+ template <typename AllocatorSelector, typename Ignored>
+ struct list_selector : list_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::std::list<
+ T
+ , typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , T
+ >::type
+ >
+ type;
+ };
+ };
+
+#if !defined BOOST_NO_SLIST
+ struct slist_selector_base
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct slist_selector : slist_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::BOOST_STD_EXTENSION_NAMESPACE::slist<
+ T
+ , typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , T
+ >::type
+ >
+ type;
+ };
+ };
+#endif
+
+ struct set_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct set_selector : set_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ AllocatorSelector
+ , Key
+ , Mapped
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::set<Key,comparator,allocator_type>
+ , ::std::map<Key,Mapped,comparator,allocator_type>
+ >::type
+ type;
+ };
+ };
+
+ struct map_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct map_selector : map_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ AllocatorSelector
+ , Key
+ , Mapped
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::set<Key,comparator,allocator_type>
+ , ::std::map<Key,Mapped,comparator,allocator_type>
+ >::type
+ type;
+ };
+ };
+
+ struct multiset_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct multiset_selector : multiset_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ AllocatorSelector
+ , Key
+ , Mapped
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::multiset<Key,comparator,allocator_type>
+ , ::std::multimap<Key,Mapped,comparator,allocator_type>
+ >::type
+ type;
+ };
+ };
+
+ struct multimap_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct multimap_selector : multimap_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap2<
+ AllocatorSelector
+ , Key
+ , Mapped
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::std::multiset<Key,comparator,allocator_type>
+ , ::std::multimap<Key,Mapped,comparator,allocator_type>
+ >::type
+ type;
+ };
+ };
+
+#if defined BOOST_HAS_HASH
+ struct hash_set_selector_base
+ {
+ };
+
+ template <
+ typename HashSelector
+ , typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct hash_set_selector : hash_set_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ HashSelector
+ , Key
+ >::type
+ hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , Key
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key
+ , Mapped
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ >::type
+ type;
+ };
+ };
+
+ struct hash_map_selector_base
+ {
+ };
+
+ template <
+ typename HashSelector
+ , typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct hash_map_selector : hash_map_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ HashSelector
+ , Key
+ >::type
+ hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , Key
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key
+ , Mapped
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ >::type
+ type;
+ };
+ };
+
+ struct hash_multiset_selector_base
+ {
+ };
+
+ template <
+ typename HashSelector
+ , typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct hash_multiset_selector : hash_multiset_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ HashSelector
+ , Key
+ >::type
+ hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , Key
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key
+ , Mapped
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ >::type
+ type;
+ };
+ };
+
+ struct hash_multimap_selector_base
+ {
+ };
+
+ template <
+ typename HashSelector
+ , typename CompareSelector
+ , typename AllocatorSelector
+ , typename Ignored
+ >
+ struct hash_multimap_selector : hash_multimap_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ HashSelector
+ , Key
+ >::type
+ hasher;
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+ typedef typename ::boost::mpl::apply_wrap1<
+ AllocatorSelector
+ , Key
+ >::type
+ allocator_type;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key
+ , Mapped
+ , hasher
+ , comparator
+ , allocator_type
+ >
+ >::type
+ type;
+ };
+ };
+#endif // BOOST_HAS_HASH
+
+#if !defined BOOST_MSVC
+ struct ptr_array_selector_base
+ {
+ };
+
+ template <typename ConstantSize, typename CloneAllocator>
+ struct ptr_array_selector : ptr_array_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::boost::ptr_array<
+ T
+ , ConstantSize::value
+ , CloneAllocator
+ >
+ type;
+ };
+ };
+#endif
+
+ struct ptr_vector_selector_base
+ {
+ };
+
+ template <typename CloneAllocator, typename Allocator>
+ struct ptr_vector_selector : ptr_vector_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::boost::ptr_vector<T,CloneAllocator,Allocator> type;
+ };
+ };
+
+ struct ptr_deque_selector_base
+ {
+ };
+
+ template <typename CloneAllocator, typename Allocator>
+ struct ptr_deque_selector : ptr_deque_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::boost::ptr_deque<T,CloneAllocator,Allocator> type;
+ };
+ };
+
+ struct ptr_list_selector_base
+ {
+ };
+
+ template <typename CloneAllocator, typename Allocator>
+ struct ptr_list_selector : ptr_list_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::boost::ptr_list<T,CloneAllocator,Allocator> type;
+ };
+ };
+
+ struct ptr_set_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename CloneAllocator
+ , typename Allocator
+ >
+ struct ptr_set_selector : ptr_set_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_set<
+ Key
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ , ::boost::ptr_map<
+ Key
+ , Mapped
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ >::type
+ type;
+ };
+ };
+
+ struct ptr_map_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename CloneAllocator
+ , typename Allocator
+ >
+ struct ptr_map_selector : ptr_map_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_set<
+ Key
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ , ::boost::ptr_map<
+ Key
+ , Mapped
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ >::type
+ type;
+ };
+ };
+
+ struct ptr_multiset_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename CloneAllocator
+ , typename Allocator
+ >
+ struct ptr_multiset_selector : ptr_multiset_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_multiset<
+ Key
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ , ::boost::ptr_multimap<
+ Key
+ , Mapped
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ >::type
+ type;
+ };
+ };
+
+ struct ptr_multimap_selector_base
+ {
+ };
+
+ template <
+ typename CompareSelector
+ , typename CloneAllocator
+ , typename Allocator
+ >
+ struct ptr_multimap_selector : ptr_multimap_selector_base
+ {
+ template <typename Key, typename Mapped>
+ struct apply
+ {
+ private:
+ typedef typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , Key
+ >::type
+ comparator;
+
+ public:
+ typedef typename ::boost::mpl::if_<
+ ::std::tr1::is_void<Mapped>
+ , ::boost::ptr_multiset<
+ Key
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ , ::boost::ptr_multimap<
+ Key
+ , Mapped
+ , comparator
+ , CloneAllocator
+ , Allocator
+ >
+ >::type
+ type;
+ };
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename T0, typename T1>
+ struct array_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct vector_selector
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct stable_vector_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct deque_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct list_selector
+ {
+ };
+
+ template <typename AllocatorSelector>
+ struct slist_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct set_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct map_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct multiset_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct multimap_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct hash_set_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct hash_map_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct hash_multiset_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct hash_multimap_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct flat_set_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct flat_map_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct flat_multiset_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct flat_multimap_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct ptr_array_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct ptr_vector_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct ptr_deque_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct ptr_list_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct ptr_set_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct ptr_map_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct ptr_multiset_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct ptr_multimap_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct ptr_hash_set_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct ptr_hash_map_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct ptr_hash_multiset_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct ptr_hash_multimap_selector
+ {
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//=============================================================================
+// Container adaptor / heap selectors, also usable by the container_gen
+// metafunction.
+//=============================================================================
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <stack>
+#include <queue>
+
+namespace boost {
+
+ struct stack_selector_base
+ {
+ };
+
+ template <typename SequenceSelector>
+ struct stack_selector : stack_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::std::stack<
+ T
+ , typename ::boost::mpl::apply_wrap2<
+ SequenceSelector
+ , T
+ , void
+ >::type
+ >
+ type;
+ };
+ };
+
+ struct queue_selector_base
+ {
+ };
+
+ template <typename SequenceSelector>
+ struct queue_selector : queue_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::std::queue<
+ T
+ , typename ::boost::mpl::apply_wrap2<
+ SequenceSelector
+ , T
+ , void
+ >::type
+ >
+ type;
+ };
+ };
+
+ struct std_heap_selector_base
+ {
+ };
+
+ template <typename CompareSelector, typename SequenceSelector>
+ struct std_heap_selector : std_heap_selector_base
+ {
+ template <typename T, typename Unused>
+ struct apply
+ {
+ typedef ::std::priority_queue<
+ T
+ , typename ::boost::mpl::apply_wrap2<
+ SequenceSelector
+ , T
+ , void
+ >::type
+ , typename ::boost::mpl::apply_wrap1<
+ CompareSelector
+ , T
+ >::type
+ >
+ type;
+ };
+ };
+} // namespace boost
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__adaptor_and_heap_selector_templates
+namespace boost {
+
+ template <typename SequenceSelector>
+ struct stack_selector
+ {
+ };
+
+ template <typename SequenceSelector>
+ struct queue_selector
+ {
+ };
+
+ template <typename T0, typename T1>
+ struct std_heap_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct priority_queue_selector
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ >
+ struct d_ary_heap_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3>
+ struct binomial_heap_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct fibonacci_heap_selector
+ {
+ };
+
+ template <typename T0, typename T1, typename T2, typename T3, typename T4>
+ struct pairing_heap_selector
+ {
+ };
+
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , typename T3
+ , typename T4
+ , typename T5
+ , typename T6
+ >
+ struct skew_heap_selector
+ {
+ };
+} // namespace boost
+//]
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/selectors_fwd.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/selectors_fwd.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,731 @@
+//=============================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Copyright 2011-2013 Cromwell D. Enage
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole,
+// Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=============================================================================
+
+#ifndef BOOST_CONTAINER_GEN_SELECTORS_FWD_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SELECTORS_FWD_HPP_INCLUDED
+
+#include <memory>
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/ptr_container/clone_allocator.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/parameter/aux_/void.hpp>
+#endif
+
+namespace boost {
+
+ struct equal_to_selector;
+ struct less_than_selector;
+ struct greater_than_selector;
+
+ struct boost_hash_selector;
+ struct tr1_hash_selector;
+
+ struct std_allocator_selector;
+ struct std_flat_allocator_selector;
+} // namespace boost
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost {
+
+#if !defined BOOST_MSVC
+ struct array_selector_base;
+ struct ptr_array_selector_base;
+#endif
+ struct vector_selector_base;
+ struct deque_selector_base;
+ struct list_selector_base;
+#if !defined BOOST_NO_SLIST
+ struct slist_selector_base;
+#endif
+ struct set_selector_base;
+ struct map_selector_base;
+ struct multiset_selector_base;
+ struct multimap_selector_base;
+#if defined BOOST_HAS_HASH
+ struct hash_set_selector_base;
+ struct hash_map_selector_base;
+ struct hash_multiset_selector_base;
+ struct hash_multimap_selector_base;
+#endif // BOOST_HAS_HASH
+ struct ptr_vector_selector_base;
+ struct ptr_deque_selector_base;
+ struct ptr_list_selector_base;
+ struct ptr_set_selector_base;
+ struct ptr_map_selector_base;
+ struct ptr_multiset_selector_base;
+ struct ptr_multimap_selector_base;
+ struct stack_selector_base;
+ struct queue_selector_base;
+ struct std_heap_selector_base;
+} // namespace boost
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__container_selector_templates
+namespace boost {
+
+//<-
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if !defined BOOST_MSVC
+//->
+ template <typename ConstantSize, typename IsTR1 = ::boost::mpl::false_>
+ struct array_selector;
+//<-
+#endif
+//->
+
+ template <
+ typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct vector_selector;
+
+ template <
+ typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct deque_selector;
+
+ template <
+ typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct list_selector;
+//<-
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1 = ::boost::parameter::void_>
+ struct array_selector;
+#endif
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct vector_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct deque_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct list_selector;
+//->
+
+ template <typename AllocatorSelector = std_allocator_selector>
+ struct stable_vector_selector;
+//<-
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || \
+ !defined BOOST_NO_SLIST
+//->
+ template <typename AllocatorSelector = std_allocator_selector>
+ struct slist_selector;
+//<-
+#endif
+//->
+
+//<-
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct set_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct map_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct multiset_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsBoostNotStd = ::boost::mpl::false_
+ >
+ struct multimap_selector;
+
+//<-
+#if 0 // for documentation purposes
+//->
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_flat_allocator_selector
+ >
+ struct flat_set_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_flat_allocator_selector
+ >
+ struct flat_map_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_flat_allocator_selector
+ >
+ struct flat_multiset_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_flat_allocator_selector
+ >
+ struct flat_multimap_selector;
+//<-
+#endif // for documentation purposes
+//->
+
+//<-
+#if defined BOOST_HAS_HASH
+//->
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsTR1NotBoost = ::boost::mpl::false_
+ >
+ struct hash_set_selector;
+
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsTR1NotBoost = ::boost::mpl::false_
+ >
+ struct hash_map_selector;
+
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsTR1NotBoost = ::boost::mpl::false_
+ >
+ struct hash_multiset_selector;
+
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsTR1NotBoost = ::boost::mpl::false_
+ >
+ struct hash_multimap_selector;
+//<-
+#endif // BOOST_HAS_HASH
+//->
+
+//<-
+#if !defined BOOST_MSVC
+//->
+ template <
+ typename ConstantSize
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ >
+ struct ptr_array_selector;
+//<-
+#endif
+//->
+
+ template <
+ typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_vector_selector;
+
+ template <
+ typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_deque_selector;
+
+ template <
+ typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_list_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_set_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_map_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_multiset_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_multimap_selector;
+
+//<-
+#if 0 // for documentation purposes
+//->
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_hash_set_selector;
+
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_hash_map_selector;
+
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_hash_multiset_selector;
+
+ template <
+ typename HashSelector = boost_hash_selector
+ , typename CompareSelector = equal_to_selector
+ , typename CloneAllocator = ::boost::heap_clone_allocator
+ , typename Allocator = ::std::allocator<void*>
+ >
+ struct ptr_hash_multimap_selector;
+//<-
+#endif // for documentation purposes
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct set_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct map_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct multiset_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct multimap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct flat_set_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct flat_map_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct flat_multiset_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct flat_multimap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct hash_set_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct hash_map_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct hash_multiset_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct hash_multimap_selector;
+
+#if !defined BOOST_MSVC
+ template <typename T0, typename T1 = ::boost::parameter::void_>
+ struct ptr_array_selector;
+#endif
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct ptr_vector_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct ptr_deque_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct ptr_list_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct ptr_set_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct ptr_map_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct ptr_multiset_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ >
+ struct ptr_multimap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct ptr_hash_set_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct ptr_hash_map_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct ptr_hash_multiset_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct ptr_hash_multimap_selector;
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+
+ template <typename SequenceSelector = deque_selector<> >
+ struct stack_selector;
+
+ template <typename SequenceSelector = deque_selector<> >
+ struct queue_selector;
+
+//<-
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+ template <
+ typename CompareSelector = less_than_selector
+ , typename SequenceSelector = deque_selector<>
+ >
+ struct std_heap_selector;
+
+//<-
+#if 0 // for documentation purposes
+//->
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsStable = ::boost::heap::stable<false>
+ , typename StabilityCounterType = ::boost::heap::stability_counter_type<
+ ::boost::uintmax_t
+ >
+ >
+ struct priority_queue_selector;
+
+ template <
+ typename Arity
+ , typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsStable = ::boost::heap::stable<false>
+ , typename StabilityCounterType = ::boost::heap::stability_counter_type<
+ ::boost::uintmax_t
+ >
+ , typename IsMutable = ::boost::heap::mutable_<false>
+ >
+ struct d_ary_heap_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsStable = ::boost::heap::stable<false>
+ , typename StabilityCounterType = ::boost::heap::stability_counter_type<
+ ::boost::uintmax_t
+ >
+ >
+ struct binomial_heap_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsStable = ::boost::heap::stable<false>
+ , typename StabilityCounterType = ::boost::heap::stability_counter_type<
+ ::boost::uintmax_t
+ >
+ , typename ConstantTimeSize = ::boost::heap::constant_time_size<true>
+ >
+ struct fibonacci_heap_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsStable = ::boost::heap::stable<false>
+ , typename StabilityCounterType = ::boost::heap::stability_counter_type<
+ ::boost::uintmax_t
+ >
+ , typename ConstantTimeSize = ::boost::heap::constant_time_size<true>
+ >
+ struct pairing_heap_selector;
+
+ template <
+ typename CompareSelector = less_than_selector
+ , typename AllocatorSelector = std_allocator_selector
+ , typename IsStable = ::boost::heap::stable<false>
+ , typename StoresParentPointer = ::boost::heap::store_parent_pointer<
+ false
+ >
+ , typename StabilityCounterType = ::boost::heap::stability_counter_type<
+ ::boost::uintmax_t
+ >
+ , typename ConstantTimeSize = ::boost::heap::constant_time_size<true>
+ , typename IsMutable = ::boost::heap::mutable_<false>
+ >
+ struct skew_heap_selector;
+//<-
+#endif // for documentation purposes
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ >
+ struct std_heap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct priority_queue_selector;
+
+ template <
+ typename T0
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ , typename T4 = ::boost::parameter::void_
+ , typename T5 = ::boost::parameter::void_
+ >
+ struct d_ary_heap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ >
+ struct binomial_heap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ , typename T4 = ::boost::parameter::void_
+ >
+ struct fibonacci_heap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ , typename T4 = ::boost::parameter::void_
+ >
+ struct pairing_heap_selector;
+
+ template <
+ typename T0 = ::boost::parameter::void_
+ , typename T1 = ::boost::parameter::void_
+ , typename T2 = ::boost::parameter::void_
+ , typename T3 = ::boost::parameter::void_
+ , typename T4 = ::boost::parameter::void_
+ , typename T5 = ::boost::parameter::void_
+ , typename T6 = ::boost::parameter::void_
+ >
+ struct skew_heap_selector;
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+} // namespace boost
+//]
+
+//[reference__container_selector_typedefs
+namespace boost {
+
+ typedef vector_selector<> vecS;
+ typedef deque_selector<> dequeS;
+ typedef list_selector<> listS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || \
+ !defined BOOST_NO_SLIST
+//->
+ typedef slist_selector<> slistS;
+//<-
+#endif
+//->
+ typedef set_selector<> setS;
+ typedef map_selector<> mapS;
+ typedef multiset_selector<> multisetS;
+ typedef multimap_selector<> multimapS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+//->
+ typedef hash_set_selector<> hash_setS;
+ typedef hash_map_selector<> hash_mapS;
+ typedef hash_multiset_selector<> hash_multisetS;
+ typedef hash_multimap_selector<> hash_multimapS;
+//<-
+#endif
+//->
+ typedef ptr_vector_selector<> ptr_vecS;
+ typedef ptr_deque_selector<> ptr_dequeS;
+ typedef ptr_list_selector<> ptr_listS;
+ typedef ptr_set_selector<> ptr_setS;
+ typedef ptr_map_selector<> ptr_mapS;
+ typedef ptr_multiset_selector<> ptr_multisetS;
+ typedef ptr_multimap_selector<> ptr_multimapS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+ typedef ptr_hash_set_selector<> ptr_hash_setS;
+ typedef ptr_hash_map_selector<> ptr_hash_mapS;
+ typedef ptr_hash_multiset_selector<> ptr_hash_multisetS;
+ typedef ptr_hash_multimap_selector<> ptr_hash_multimapS;
+ typedef stable_vector_selector<> stable_vecS;
+ typedef flat_set_selector<> flat_setS;
+ typedef flat_map_selector<> flat_mapS;
+ typedef flat_multiset_selector<> flat_multisetS;
+ typedef flat_multimap_selector<> flat_multimapS;
+//<-
+#endif
+//->
+ typedef stack_selector<> stackS;
+ typedef queue_selector<> queueS;
+ typedef std_heap_selector<> std_heapS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+ typedef priority_queue_selector<> priority_queueS;
+ typedef binomial_heap_selector<> binomial_heapS;
+ typedef fibonacci_heap_selector<> fibonacci_heapS;
+ typedef pairing_heap_selector<> pairing_heapS;
+ typedef skew_heap_selector<> skew_heapS;
+//<-
+#endif
+//->
+} // namespace boost
+//]
+
+#endif // BOOST_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/splice_function_gen.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/container_gen/splice_function_gen.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,1147 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+#ifndef BOOST_CONTAINER_GEN_SPLICE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SPLICE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <deque>
+#include <utility>
+#include <boost/config.hpp>
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/range.hpp>
+#include <boost/assert.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+namespace boost { namespace detail {
+
+ template <typename C>
+ inline typename C::iterator
+ random_access_splice(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ if (pos == itr)
+ {
+ BOOST_ASSERT(&_container == &c);
+ return pos;
+ }
+ else
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ --insert_index;
+ }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typename C::value_type datum(*itr);
+
+ c.erase(itr);
+ return _container.insert(_container.begin() + insert_index, datum);
+#else
+ typename C::value_type datum(::boost::move(*itr));
+
+ c.erase(itr);
+ return _container.insert(
+ _container.begin() + insert_index
+ , ::boost::move(datum)
+ );
+#endif
+ }
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ stable_splice(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ if (pos == itr)
+ {
+ BOOST_ASSERT(&_container == &c);
+ return pos;
+ }
+ else
+ {
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typename C::value_type datum(*itr);
+
+ c.erase(itr);
+ return _container.insert(pos, datum);
+#else
+ typename C::value_type datum(::boost::move(*itr));
+
+ c.erase(itr);
+ return _container.insert(pos, ::boost::move(datum));
+#endif
+ }
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ stable_splice(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ _container.insert(
+ _container.begin()
+ , itr
+ , itr_end
+ );
+#else
+ _container.insert(
+ _container.begin()
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+#endif
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else if ((pos == itr) || (pos == itr_end))
+ {
+ BOOST_ASSERT(&_container == &c);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ itr
+ , itr_end
+ );
+ }
+ else
+ {
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ C splice_buf(itr, itr_end);
+
+ c.erase(itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.insert(
+ pos
+ , splice_buf.begin()
+ , splice_buf.end()
+ )
+ , pos
+ );
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typedef ::boost::move_iterator<typename C::iterator> MoveItr;
+
+ MoveItr _itr(itr);
+ MoveItr _itr_end(itr_end);
+ C splice_buf(_itr, _itr_end);
+
+ c.erase(itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.insert(
+ pos
+ , MoveItr(splice_buf.begin())
+ , MoveItr(splice_buf.end())
+ )
+ , pos
+ );
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ }
+ }
+
+ template <typename C>
+ inline void
+ stable_splice_void_return(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ _container.insert(
+ _container.begin()
+ , itr
+ , itr_end
+ );
+#else
+ _container.insert(
+ _container.begin()
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+#endif
+ }
+ else if ((pos == itr) || (pos == itr_end))
+ {
+ BOOST_ASSERT(&_container == &c);
+ }
+ else
+ {
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ C splice_buf(itr, itr_end);
+
+ c.erase(itr, itr_end);
+ _container.insert(
+ pos
+ , splice_buf.begin()
+ , splice_buf.end()
+ );
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typedef ::boost::move_iterator<typename C::iterator> MoveItr;
+
+ MoveItr _itr(itr);
+ MoveItr _itr_end(itr_end);
+ C splice_buf(_itr, _itr_end);
+
+ c.erase(itr, itr_end);
+ _container.insert(
+ pos
+ , MoveItr(splice_buf.begin())
+ , MoveItr(splice_buf.end())
+ );
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ }
+ }
+
+ template <typename F, typename C>
+ class splice_function_proxy
+ {
+ C& _container;
+
+ public:
+ explicit splice_function_proxy(C& c);
+
+ splice_function_proxy&
+ operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ splice_function_proxy&
+ operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename F, typename C>
+ splice_function_proxy<F,C>::splice_function_proxy(C& c)
+ : _container(c)
+ {
+ }
+
+ template <typename F, typename C>
+ inline splice_function_proxy<F,C>&
+ splice_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ F::evaluate(this->_container, pos, c, itr);
+ return *this;
+ }
+
+ template <typename F, typename C>
+ inline splice_function_proxy<F,C>&
+ splice_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ F::evaluate(this->_container, pos, c, itr, itr_end);
+ return *this;
+ }
+
+ struct fis_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<fis_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<fis_splice_function,C>
+ fis_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<fis_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ fis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ typename C::iterator result_begin = _container.previous(pos);
+ fis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return ++result_begin;
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ typename C::iterator result_begin = _container.previous(pos);
+ fis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++result_begin
+ , pos
+ );
+ }
+
+ template <typename C>
+ inline void
+ fis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ stable_splice(_container, pos, c, itr);
+ }
+
+ template <typename C>
+ inline void
+ fis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ stable_splice_void_return(_container, pos, c, itr, itr_end);
+ }
+
+ struct ras_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<ras_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<ras_splice_function,C>
+ ras_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<ras_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ return random_access_splice(_container, pos, c, itr);
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ _container.insert(
+ _container.begin()
+ , itr
+ , itr_end
+ );
+#else
+ _container.insert(
+ _container.begin()
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+#endif
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else if ((pos == itr) || (pos == itr_end))
+ {
+ BOOST_ASSERT(&_container == &c);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ itr
+ , itr_end
+ );
+ }
+ else
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ C splice_buf(itr, itr_end);
+ typename C::size_type const range_size = splice_buf.size();
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ BOOST_ASSERT_MSG(
+ !(pos < itr_end)
+ , "Insertion point lies inside subrange to splice."
+ );
+ insert_index -= range_size;
+ }
+
+ c.erase(itr, itr_end);
+
+ typename C::iterator result_itr = _container.insert(
+ _container.begin() + insert_index
+ , splice_buf.begin()
+ , splice_buf.end()
+ );
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typedef ::boost::move_iterator<typename C::iterator> MoveItr;
+
+ MoveItr _itr(itr);
+ MoveItr _itr_end(itr_end);
+ C splice_buf(_itr, _itr_end);
+ typename C::size_type const range_size = splice_buf.size();
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ BOOST_ASSERT_MSG(
+ !(pos < itr_end)
+ , "Insertion point lies inside subrange to splice."
+ );
+ insert_index -= range_size;
+ }
+
+ c.erase(itr, itr_end);
+
+ typename C::iterator result_itr = _container.insert(
+ _container.begin() + insert_index
+ , MoveItr(splice_buf.begin())
+ , MoveItr(splice_buf.end())
+ );
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ result_itr
+ , result_itr + range_size
+ );
+ }
+ }
+
+ template <typename C>
+ inline void
+ ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ random_access_splice(_container, pos, c, itr);
+ }
+
+ template <typename C>
+ inline void
+ ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ _container.insert(
+ _container.begin()
+ , itr
+ , itr_end
+ );
+#else
+ _container.insert(
+ _container.begin()
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+#endif
+ }
+ else if ((pos == itr) || (pos == itr_end))
+ {
+ BOOST_ASSERT(&_container == &c);
+ }
+ else
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ C splice_buf(itr, itr_end);
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ BOOST_ASSERT_MSG(
+ !(pos < itr_end)
+ , "Insertion point lies inside subrange to splice."
+ );
+ insert_index -= splice_buf.size();
+ }
+
+ c.erase(itr, itr_end);
+ _container.insert(
+ _container.begin() + insert_index
+ , splice_buf.begin()
+ , splice_buf.end()
+ );
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typedef ::boost::move_iterator<typename C::iterator> MoveItr;
+
+ MoveItr _itr(itr);
+ MoveItr _itr_end(itr_end);
+ C splice_buf(_itr, _itr_end);
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ BOOST_ASSERT_MSG(
+ !(pos < itr_end)
+ , "Insertion point lies inside subrange to splice."
+ );
+ insert_index -= splice_buf.size();
+ }
+
+ c.erase(itr, itr_end);
+ _container.insert(
+ _container.begin() + insert_index
+ , MoveItr(splice_buf.begin())
+ , MoveItr(splice_buf.end())
+ );
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ }
+ }
+
+ struct ptr_ras_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<ptr_ras_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<ptr_ras_splice_function,C>
+ ptr_ras_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<ptr_ras_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ ptr_ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ if (pos != itr)
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ C splice_buf;
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ --insert_index;
+ }
+
+ splice_buf.transfer(splice_buf.begin(), itr, c);
+ pos = _container.begin() + insert_index;
+ _container.transfer(pos, splice_buf);
+ }
+
+ return pos;
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ptr_ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ typename C::size_type const r_size = ::std::distance(itr, itr_end);
+
+ if ((pos == itr) || (pos == itr_end))
+ {
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ pos
+ , pos + r_size
+ );
+ }
+ else
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ C splice_buf;
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ BOOST_ASSERT_MSG(
+ !(pos < itr_end)
+ , "Insertion point lies inside subrange to splice."
+ );
+ insert_index -= r_size;
+ }
+
+ splice_buf.transfer(splice_buf.begin(), itr, itr_end, c);
+ _container.transfer(_container.begin() + insert_index, splice_buf);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + insert_index
+ , _container.begin() + insert_index + r_size
+ );
+ }
+ }
+
+ template <typename C>
+ inline void
+ ptr_ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ if (pos != itr)
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ C splice_buf;
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ --insert_index;
+ }
+
+ splice_buf.transfer(splice_buf.begin(), itr, c);
+ _container.transfer(_container.begin() + insert_index, splice_buf);
+ }
+ }
+
+ template <typename C>
+ inline void
+ ptr_ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ if ((pos != itr) && (pos != itr_end))
+ {
+ typename C::size_type insert_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ C splice_buf;
+
+ if ((&_container == &c) && (itr < pos))
+ {
+ BOOST_ASSERT_MSG(
+ !(pos < itr_end)
+ , "Insertion point lies inside subrange to splice."
+ );
+ insert_index -= ::std::distance(itr, itr_end);
+ }
+
+ splice_buf.transfer(splice_buf.begin(), itr, itr_end, c);
+ _container.transfer(_container.begin() + insert_index, splice_buf);
+ }
+ }
+
+ struct bis_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<bis_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<bis_splice_function,C>
+ bis_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<bis_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ return stable_splice(_container, pos, c, itr);
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ return stable_splice(_container, pos, c, itr, itr_end);
+ }
+
+ template <typename C>
+ inline void
+ bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ stable_splice(_container, pos, c, itr);
+ }
+
+ template <typename C>
+ inline void
+ bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ stable_splice_void_return(_container, pos, c, itr, itr_end);
+ }
+
+ struct ptr_bis_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<ptr_bis_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<ptr_bis_splice_function,C>
+ ptr_bis_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<ptr_bis_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ ptr_bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return _container.begin();
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return ++start;
+ }
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ptr_bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++start
+ , pos
+ );
+ }
+ }
+
+ template <typename C>
+ inline void
+ ptr_bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ C splice_buf;
+
+ splice_buf.transfer(splice_buf.begin(), itr, c);
+ _container.transfer(pos, splice_buf);
+ }
+
+ template <typename C>
+ inline void
+ ptr_bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ C splice_buf;
+
+ splice_buf.transfer(splice_buf.begin(), itr, itr_end, c);
+ _container.transfer(pos, splice_buf);
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_reversible_selector.hpp>
+
+//[reference__splice_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct splice_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_random_access_selector<Selector>
+ , detail::ptr_ras_splice_function
+ , detail::ptr_bis_splice_function
+ >
+ , ::boost::mpl::eval_if<
+ is_random_access_selector<Selector>
+ , ::boost::mpl::identity<detail::ras_splice_function>
+ , ::boost::mpl::if_<
+ is_reversible_selector<Selector>
+ , detail::bis_splice_function
+ , detail::fis_splice_function
+ >
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, splice_function_gen, (Selector))
+ //->
+ };
+
+} // namespace boost
+//]
+
+#endif // BOOST_CONTAINER_GEN_SPLICE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/function/range_equal.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/function/range_equal.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,26 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_FUNCTION_RANGE_EQUAL_HPP_INCLUDED
+#define BOOST_DETAIL_FUNCTION_RANGE_EQUAL_HPP_INCLUDED
+
+#include <boost/range/algorithm/equal.hpp>
+
+namespace boost { namespace detail {
+
+ struct range_equal
+ {
+ typedef bool result_type;
+
+ template <typename R1, typename R2>
+ inline result_type operator()(R1 const& r1, R2 const& r2) const
+ {
+ return ::boost::range::equal(r1, r2);
+ }
+ };
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_FUNCTION_RANGE_EQUAL_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/function/range_greater.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/function/range_greater.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,26 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_FUNCTION_RANGE_GREATER_HPP_INCLUDED
+#define BOOST_DETAIL_FUNCTION_RANGE_GREATER_HPP_INCLUDED
+
+#include <boost/range/algorithm/lexicographical_compare.hpp>
+
+namespace boost { namespace detail {
+
+ struct range_greater
+ {
+ typedef bool result_type;
+
+ template <typename R1, typename R2>
+ inline result_type operator()(R1 const& r1, R2 const& r2) const
+ {
+ return ::boost::range::lexicographical_compare(r2, r1);
+ }
+ };
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_FUNCTION_RANGE_GREATER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/function/range_less.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/function/range_less.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,26 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_FUNCTION_RANGE_LESS_HPP_INCLUDED
+#define BOOST_DETAIL_FUNCTION_RANGE_LESS_HPP_INCLUDED
+
+#include <boost/range/algorithm/lexicographical_compare.hpp>
+
+namespace boost { namespace detail {
+
+ struct range_less
+ {
+ typedef bool result_type;
+
+ template <typename R1, typename R2>
+ inline result_type operator()(R1 const& r1, R2 const& r2) const
+ {
+ return ::boost::range::lexicographical_compare(r1, r2);
+ }
+ };
+}} // namespace boost::detail
+
+#endif // BOOST_DETAIL_FUNCTION_RANGE_LESS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_allocator_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_allocator_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,23 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_ALLOCATOR_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ALLOCATOR_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_allocator_type metafunction will determine whether or not
+ // the specified type has a nested 'allocator_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(allocator_type)
+
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(propagate_on_container_copy_assignment)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(propagate_on_container_move_assignment)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(propagate_on_container_swap)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_ALLOCATOR_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_apply_template.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_apply_template.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_APPLY_TEMPLATE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_APPLY_TEMPLATE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_apply_template metafunction will determine whether or not
+ // the specified type has a nested 'apply' template definition.
+ BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(has_apply_template, apply, false)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_APPLY_TEMPLATE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_argument_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_argument_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_ARGUMENT_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ARGUMENT_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_argument_type metafunction will determine whether or not
+ // the specified type has a nested 'argument_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(argument_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_ARGUMENT_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_auto_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_auto_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_AUTO_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_AUTO_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_auto_type metafunction will determine whether or not the
+ // specified type has a nested 'auto_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(auto_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_AUTO_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_const_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_CONST_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_const_iterator metafunction will determine whether or not the
+ // specified type has a nested 'const_iterator' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_CONST_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_const_pointer.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_pointer.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_CONST_POINTER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_POINTER_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_const_pointer metafunction will determine whether or not the
+ // specified type has a nested 'const_pointer' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(const_pointer)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_CONST_POINTER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_const_reference.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_reference.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_CONST_REFERENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_REFERENCE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_const_reference metafunction will determine whether or not the
+ // specified type has a nested 'const_reference' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(const_reference)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_CONST_REFERENCE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_const_reverse_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_reverse_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,20 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_CONST_REVERSE_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_REVERSE_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_const_reverse_iterator metafunction will determine whether
+ // or not the specified type has a nested 'const_reverse_iterator'
+ // type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(const_reverse_iterator)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_CONST_REVERSE_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_container_typedefs.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_container_typedefs.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,63 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_CONTAINER_TYPEDEFS_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONTAINER_TYPEDEFS_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_value_type.hpp>
+#include <boost/detail/metafunction/has_difference_type.hpp>
+#include <boost/detail/metafunction/has_size_type.hpp>
+#include <boost/detail/metafunction/has_iterator.hpp>
+#include <boost/detail/metafunction/has_const_iterator.hpp>
+//#include <boost/detail/metafunction/has_pointer.hpp>
+//#include <boost/detail/metafunction/has_const_pointer.hpp>
+#include <boost/detail/metafunction/has_reference.hpp>
+#include <boost/detail/metafunction/has_const_reference.hpp>
+#include <boost/detail/metafunction/has_input_const_iterator.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct has_container_typedefs
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+// ::boost::mpl::and_<
+ typename has_value_type<T>::type
+// , ::boost::mpl::and_<
+// typename has_pointer<T>::type
+// , typename has_const_pointer<T>::type
+// >
+// >
+ , ::boost::mpl::and_<
+ typename has_iterator<T>::type
+ , typename has_const_iterator<T>::type
+ >
+ >
+ , ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_size_type<T>::type
+ , typename has_difference_type<T>::type
+ >
+ , ::boost::mpl::and_<
+ typename has_reference<T>::type
+ , typename has_const_reference<T>::type
+ >
+ >
+ >
+ , has_input_const_iterator<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_container_typedefs,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_CONTAINER_TYPEDEFS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_difference_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_difference_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_DIFFERENCE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_DIFFERENCE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_difference_type metafunction will determine whether or not the
+ // specified type has a nested 'difference_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_DIFFERENCE_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_first_argument_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_first_argument_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_FIRST_ARGUMENT_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_FIRST_ARGUMENT_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_first_argument_type metafunction will determine whether or not
+ // the specified type has a nested 'first_argument_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(first_argument_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_FIRST_ARGUMENT_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_handle_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_handle_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_HANDLE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_HANDLE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_handle_type metafunction will determine whether or not
+ // the specified type has a nested 'handle_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(handle_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_HANDLE_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_hasher.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_hasher.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_HASHER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_HASHER_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_hasher metafunction will determine whether or not the
+ // specified type has a nested 'hasher' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(hasher)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_HASHER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_input_const_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_input_const_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,21 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_INPUT_CONST_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_INPUT_CONST_ITERATOR_HPP_INCLUDED
+
+#include <boost/detail/metafunction/is_input_iterator.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct has_input_const_iterator
+ : is_input_iterator<typename T::const_iterator>::type
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_INPUT_CONST_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_iterator metafunction will determine whether or not the
+ // specified type has a nested 'iterator' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_iterator_category.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_iterator_category.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_CATEGORY_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_CATEGORY_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_iterator_category metafunction will determine whether or not the
+ // specified type has a nested 'iterator_category' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_CATEGORY_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_key_compare.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_key_compare.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_KEY_COMPARE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_KEY_COMPARE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_key_compare metafunction will determine whether or not the
+ // specified type has a nested 'key_compare' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(key_compare)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_KEY_COMPARE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_key_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_key_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2007-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_KEY_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_KEY_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_key_type metafunction will determine whether or not the
+ // specified type has a nested 'key_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(key_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_KEY_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_back.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_back.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,74 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_BACK_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_BACK_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_back metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'back'
+ // member function declaration.
+ // R -- the return type of the 'back' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'back' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(back)
+
+ // The has_member_function_push_back metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'push_back'
+ // member function declaration.
+ // R -- the return type of the 'push_back' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'push_back' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(push_back)
+
+ // The has_member_function_pop_front metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'pop_back'
+ // member function declaration.
+ // R -- the return type of the 'pop_back' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'pop_back' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(pop_back)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_BACK_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_begin_end.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_begin_end.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,53 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_BEGIN_END_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_BEGIN_END_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_begin metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'begin'
+ // member function declaration.
+ // R -- the return type of the 'begin' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'begin' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(begin)
+
+ // The has_member_function_end metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'end'
+ // member function declaration.
+ // R -- the return type of the 'end' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'end' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(end)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_BEGIN_END_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_clear.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_clear.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_CLEAR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_CLEAR_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_clear metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'clear'
+ // member function declaration.
+ // R -- the return type of the 'clear' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'clear' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(clear)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_CLEAR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_count.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_count.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_COUNT_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_COUNT_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_count metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'count'
+ // member function declaration.
+ // R -- the return type of the 'count' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'count' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(count)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_COUNT_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_decrease.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_decrease.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_DECREASE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_DECREASE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_decrease metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'decrease'
+ // member function declaration.
+ // R -- the return type of the 'decrease' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'decrease' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(decrease)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_DECREASE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_emplace.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_emplace.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,77 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EMPLACE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EMPLACE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_emplace metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'emplace'
+ // member function declaration.
+ // R -- the return type of the 'emplace' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'emplace' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(emplace)
+
+ // The has_member_function_emplace_front metafunction takes in four
+ // argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'emplace_front'
+ // member function declaration.
+ // R -- the return type of the 'emplace_front' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'emplace_front' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(emplace_front)
+
+ // The has_member_function_emplace_back metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'emplace_back'
+ // member function declaration.
+ // R -- the return type of the 'emplace_back' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'emplace_back' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(emplace_back)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EMPLACE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_empty.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_empty.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EMPTY_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EMPTY_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_empty metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'empty'
+ // member function declaration.
+ // R -- the return type of the 'empty' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'empty' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(empty)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EMPTY_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_equal_range.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_equal_range.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,36 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EQUAL_RANGE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EQUAL_RANGE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_equal_range metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'equal_range'
+ // member function declaration.
+ // R -- the return type of the 'equal_range' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'equal_range' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(equal_range)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_EQUAL_RANGE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_erase.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_erase.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_ERASE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_ERASE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_erase metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'erase'
+ // member function declaration.
+ // R -- the return type of the 'erase' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'erase' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(erase)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_ERASE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_find.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_find.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_FIND_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_FIND_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_find metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'find'
+ // member function declaration.
+ // R -- the return type of the 'find' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'find' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(find)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_FIND_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_front.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_front.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,75 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_FRONT_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_FRONT_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_front metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'front'
+ // member function declaration.
+ // R -- the return type of the 'front' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'front' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(front)
+
+ // The has_member_function_push_front metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'push_front'
+ // member function declaration.
+ // R -- the return type of the 'push_front' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'push_front' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(push_front)
+
+ // The has_member_function_pop_front metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'pop_front'
+ // member function declaration.
+ // R -- the return type of the 'pop_front' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'pop_front' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(pop_front)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_FRONT_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_get_allocator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_get_allocator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,36 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_GET_ALLOCATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_GET_ALLOCATOR_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_get_allocator metafunction takes in four
+ // argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'get_allocator'
+ // member function declaration.
+ // R -- the return type of the 'get_allocator' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'get_allocator' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(get_allocator)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_GET_ALLOCATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_increase.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_increase.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_INCREASE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_INCREASE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_increase metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'increase'
+ // member function declaration.
+ // R -- the return type of the 'increase' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'increase' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(increase)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_INCREASE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_insert.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_insert.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_INSERT_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_INSERT_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_insert metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'insert'
+ // member function declaration.
+ // R -- the return type of the 'insert' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'insert' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(insert)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_INSERT_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_merge.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_merge.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_MERGE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_MERGE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_merge metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'merge'
+ // member function declaration.
+ // R -- the return type of the 'merge' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'merge' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(merge)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_MERGE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_ordered_begin_end.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_ordered_begin_end.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,57 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_ORDERED_BEGIN_END_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_ORDERED_BEGIN_END_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_ordered_begin metafunction takes in four
+ // argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'ordered_begin'
+ // member function declaration.
+ // R -- the return type of the 'ordered_begin' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'ordered_begin' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(ordered_begin)
+
+ // The has_member_function_ordered_end metafunction takes in four
+ // argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'ordered_end'
+ // member function declaration.
+ // R -- the return type of the 'ordered_end' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'ordered_end' member function declaration.
+ // (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(ordered_end)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_ORDERED_BEGIN_END_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_pop.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_pop.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_POP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_POP_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_pop metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'pop'
+ // member function declaration.
+ // R -- the return type of the 'pop' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'pop' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(pop)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_POP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_push.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_push.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_PUSH_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_PUSH_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_push metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'push'
+ // member function declaration.
+ // R -- the return type of the 'push' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'push' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(push)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_PUSH_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_rbegin_rend.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_rbegin_rend.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,54 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_RBEGIN_REND_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_RBEGIN_REND_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_rbegin metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'rbegin'
+ // member function declaration.
+ // R -- the return type of the 'rbegin' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'rbegin' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(rbegin)
+
+ // The has_member_function_rend metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'rend'
+ // member function declaration.
+ // R -- the return type of the 'rend' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'rend' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(rend)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_RBEGIN_REND_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_resize.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_resize.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_RESIZE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_RESIZE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_resize metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'resize'
+ // member function declaration.
+ // R -- the return type of the 'resize' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'resize' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(resize)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_RESIZE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_size.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_size.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,54 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_SIZE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_SIZE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_size metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'size'
+ // member function declaration.
+ // R -- the return type of the 'size' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'size' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(size)
+
+ // The has_member_function_max_size metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'max_size'
+ // member function declaration.
+ // R -- the return type of the 'max_size' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'max_size' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(max_size)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_SIZE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_top.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_top.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_TOP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_TOP_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_top metafunction takes in four argument types:
+ //
+ // T -- the type to be checked for the presence of a nested 'top'
+ // member function declaration.
+ // R -- the return type of the 'top' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'top' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(top)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_TOP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_mfunc_update.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_mfunc_update.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,35 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_UPDATE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_UPDATE_HPP_INCLUDED
+
+#include <boost/tti/has_member_function.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_member_function_update metafunction takes in four argument
+ // types:
+ //
+ // T -- the type to be checked for the presence of a nested 'update'
+ // member function declaration.
+ // R -- the return type of the 'update' member function declaration.
+ // (Default: void)
+ // A -- an MPL forward sequence encapsulating the argument types of the
+ // 'update' member function declaration. (Default: mpl::vector0<>)
+ // Q -- a Boost.FunctionTypes tag specifying cv-qualification.
+ //
+ // The metafunction can also be invoked by passing in a single argument
+ // with the following form:
+ //
+ // R T::*(P) K
+ //
+ // where P is a comma-separated list of the argument types and K is a
+ // whitespace-separated list of cv-qualification keywords.
+ BOOST_TTI_HAS_MEMBER_FUNCTION(update)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_MFUNC_UPDATE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_ordered_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_ordered_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_ORDERED_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ORDERED_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_ordered_iterator metafunction will determine whether or not
+ // the specified type has a nested 'ordered_iterator' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(ordered_iterator)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_ORDERED_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_pointer.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_pointer.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_POINTER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_POINTER_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_pointer metafunction will determine whether or not the
+ // specified type has a nested 'pointer' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(pointer)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_POINTER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_reference.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_reference.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_REFERENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_REFERENCE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_reference metafunction will determine whether or not the
+ // specified type has a nested 'reference' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_REFERENCE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_reverse_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_reverse_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_REVERSE_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_REVERSE_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_reverse_iterator metafunction will determine whether or not
+ // the specified type has a nested 'reverse_iterator' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(reverse_iterator)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_REVERSE_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_rvrs_container_typedefs.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_rvrs_container_typedefs.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,70 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_RVRS_CONTAINER_TYPEDEFS_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_RVRS_CONTAINER_TYPEDEFS_HPP_INCLUDED
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/is_bidirectional_iterator.hpp>
+#include <boost/detail/metafunction/has_iterator.hpp>
+#include <boost/detail/metafunction/has_const_iterator.hpp>
+#include <boost/detail/metafunction/has_reverse_iterator.hpp>
+#include <boost/detail/metafunction/has_const_reverse_iterator.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct has_reversible_container_typedefs_impl
+ : ::boost::mpl::if_<
+ ::boost::mpl::or_<
+ ::std::tr1::is_void<typename T::reverse_iterator>
+ , ::std::tr1::is_void<typename T::const_reverse_iterator>
+ >
+ , ::boost::mpl::false_
+ , ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ is_bidirectional_iterator<typename T::iterator>
+ , is_bidirectional_iterator<typename T::const_iterator>
+ >
+ , ::boost::mpl::and_<
+ is_bidirectional_iterator<typename T::reverse_iterator>
+ , is_bidirectional_iterator<
+ typename T::const_reverse_iterator
+ >
+ >
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct has_reversible_container_typedefs
+ : ::boost::mpl::eval_if<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_iterator<T>::type
+ , typename has_const_iterator<T>::type
+ >
+ , ::boost::mpl::and_<
+ typename has_reverse_iterator<T>::type
+ , typename has_const_reverse_iterator<T>::type
+ >
+ >
+ , has_reversible_container_typedefs_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_reversible_container_typedefs,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_RVRS_CONTAINER_TYPEDEFS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_second_argument_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_second_argument_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_SECOND_ARGUMENT_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_SECOND_ARGUMENT_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_second_argument_type metafunction will determine whether or not
+ // the specified type has a nested 'second_argument_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(second_argument_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_SECOND_ARGUMENT_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_size_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_size_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_SIZE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_SIZE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_size_type metafunction will determine whether or not the
+ // specified type has a nested 'size_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(size_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_SIZE_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_stable_iterators.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_stable_iterators.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,84 @@
+// Copyright (C) 2012-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_STABLE_ITERATORS_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_STABLE_ITERATORS_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/is_random_access_iterator.hpp>
+#include <boost/detail/metafunction/is_hashed_assoc_container.hpp>
+#include <boost/detail/metafunction/is_queue.hpp>
+#include <boost/detail/metafunction/is_stack_or_std_heap.hpp>
+#include <boost/detail/metafunction/is_heap.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct has_stable_iterators_impl
+ : ::boost::mpl::eval_if<
+ is_random_access_iterator<typename T::iterator>
+ , ::boost::mpl::false_
+ , ::boost::mpl::eval_if<
+ is_hashed_associative_container<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::true_
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct has_stable_iterators
+ : ::boost::mpl::eval_if<
+ is_queue<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::eval_if<
+ is_stack_or_std_heap<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::eval_if<
+ is_heap<T>
+ , ::boost::mpl::false_
+ , ::boost::mpl::eval_if<
+ is_container<T>
+ , has_stable_iterators_impl<T>
+ , ::boost::mpl::eval_if<
+ is_ptr_container<T>
+ , has_stable_iterators_impl<T>
+ , ::boost::mpl::false_
+ >
+ >
+ >
+ >
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_stable_iterators,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container/stable_vector.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename ValueType, typename Allocator>
+ struct has_stable_iterators<
+ ::boost::container::stable_vector<ValueType,Allocator>
+ > : ::boost::mpl::true_
+ {
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_STABLE_ITERATORS_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_value_compare.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_value_compare.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_VALUE_COMPARE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_VALUE_COMPARE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_value_compare metafunction will determine whether or not the
+ // specified type has a nested 'value_compare' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(value_compare)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_VALUE_COMPARE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/has_value_type.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/has_value_type.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2007-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_HAS_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_VALUE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // The has_value_type metafunction will determine whether or not the
+ // specified type has a nested 'value_type' type definition.
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_HAS_VALUE_TYPE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_adaptable_binary_func.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_adaptable_binary_func.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,30 @@
+// Copyright (C) 2011, 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_ADAPTABLE_BINARY_FUNC_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ADAPTABLE_BINARY_FUNC_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_first_argument_type.hpp>
+#include <boost/detail/metafunction/has_second_argument_type.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_adaptable_binary_function
+ : boost::mpl::eval_if<
+ typename has_first_argument_type<T>::type
+ , has_second_argument_type<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_adaptable_binary_function,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_ADAPTABLE_BINARY_FUNC_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_adaptable_unary_function.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_adaptable_unary_function.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,25 @@
+// Copyright (C) 2011 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_ADAPTABLE_UNARY_FUNCTION_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ADAPTABLE_UNARY_FUNCTION_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_argument_type.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_adaptable_unary_function
+ : has_argument_type<T>::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_adaptable_unary_function,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_ADAPTABLE_UNARY_FUNCTION_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_allocator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_allocator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,151 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_ALLOCATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ALLOCATOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/container/allocator_traits.hpp>
+#include <boost/detail/metafunction/has_allocator_type.hpp>
+#endif
+
+#include <boost/detail/metafunction/has_value_type.hpp>
+#include <boost/detail/metafunction/has_pointer.hpp>
+#include <boost/detail/metafunction/has_reference.hpp>
+#include <boost/detail/metafunction/has_const_pointer.hpp>
+#include <boost/detail/metafunction/has_const_reference.hpp>
+#include <boost/detail/metafunction/has_size_type.hpp>
+#include <boost/detail/metafunction/has_difference_type.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_allocator_impl
+ : ::boost::mpl::eval_if<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+#endif
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::detail::metafunction
+ ::has_value_type<T>::type
+ , ::boost::detail::metafunction::has_size_type<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ ::boost::container::allocator_traits<
+#endif
+ T
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+#endif
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction::has_difference_type<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ ::boost::container::allocator_traits<
+#endif
+ T
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+#endif
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction::has_pointer<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ ::boost::container::allocator_traits<
+#endif
+ T
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+#endif
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction::has_const_pointer<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ ::boost::container::allocator_traits<
+#endif
+ T
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+#endif
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction::has_reference<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ ::boost::container::allocator_traits<
+#endif
+ T
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+#endif
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction::has_const_reference<
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ ::boost::container::allocator_traits<
+#endif
+ T
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+#endif
+ >
+ , ::boost::mpl::false_
+ >::type
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ , ::boost::detail::metafunction::has_allocator_type<
+ ::boost::container::allocator_traits<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction::has_propagate_on_container_swap<
+ ::boost::container::allocator_traits<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction
+ ::has_propagate_on_container_copy_assignment<
+ ::boost::container::allocator_traits<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::detail::metafunction
+ ::has_propagate_on_container_move_assignment<
+ ::boost::container::allocator_traits<T>
+ >
+ , ::boost::mpl::false_
+#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_allocator
+ : ::boost::mpl::eval_if<
+ is_container<T>
+ , ::boost::mpl::false_
+ , is_allocator_impl<T>
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_ALLOCATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_associative_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_associative_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,116 @@
+// Copyright (C) 2012-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_ASSOCIATIVE_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ASSOCIATIVE_CONTAINER_HPP_INCLUDED
+
+#include <utility>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_key_type.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+#if 0
+#include <boost/detail/metafunction/has_mfunc_erase.hpp>
+#include <boost/detail/metafunction/has_mfunc_clear.hpp>
+#include <boost/detail/metafunction/has_mfunc_find.hpp>
+#include <boost/detail/metafunction/has_mfunc_count.hpp>
+#include <boost/detail/metafunction/has_mfunc_equal_range.hpp>
+#endif
+
+namespace boost { namespace detail { namespace metafunction {
+
+#if 0
+ template <typename T>
+ struct is_associative_container_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_erase<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector1<typename T::iterator>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_clear<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_find<
+ T
+ , typename T::const_iterator
+ , ::boost::mpl::vector1<typename T::key_type const&>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_find<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector1<typename T::key_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_count<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector1<typename T::key_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ , ::boost::mpl::and_<
+ typename has_member_function_equal_range<
+ T
+ , ::std::pair<
+ typename T::const_iterator
+ , typename T::const_iterator
+ >
+ , ::boost::mpl::vector1<typename T::key_type const&>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_equal_range<
+ T
+ , ::std::pair<
+ typename T::iterator
+ , typename T::iterator
+ >
+ , ::boost::mpl::vector1<typename T::key_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ >
+ {
+ };
+#endif
+
+ template <typename T>
+ struct is_associative_container
+ : ::boost::mpl::eval_if<
+ typename has_key_type<T>::type
+ , ::boost::mpl::if_<
+ is_container<T>
+// , is_associative_container_impl<T>
+ , ::boost::mpl::true_
+ , is_ptr_container<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_associative_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_ASSOCIATIVE_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_back_insertion_sequence.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_back_insertion_sequence.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,68 @@
+// Copyright (C) 2012-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_BACK_INSERTION_SEQUENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_BACK_INSERTION_SEQUENCE_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_back.hpp>
+#include <boost/detail/metafunction/is_sequence.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_back_insertion_sequence_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_back<
+ T
+ , typename T::const_reference
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_back<
+ T
+ , typename T::reference
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_push_back<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::value_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_pop_back<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_back_insertion_sequence
+ : ::boost::mpl::eval_if<
+ is_sequence<T>
+ , is_back_insertion_sequence_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_back_insertion_sequence,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_BACK_INSERTION_SEQUENCE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_bidirectional_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_bidirectional_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,46 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_BIDIRECTIONAL_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_BIDIRECTIONAL_ITERATOR_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_bidirectional_iterator_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_convertible<
+ typename ::boost::BOOST_ITERATOR_CATEGORY<T>::type
+ , ::std::bidirectional_iterator_tag
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_bidirectional_iterator
+ : ::boost::mpl::eval_if<
+ typename has_iterator_category< ::std::iterator_traits<T> >::type
+ , is_bidirectional_iterator_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_bidirectional_iterator,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_BIDIRECTIONAL_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,78 @@
+// Copyright (C) 2011-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_begin_end.hpp>
+#include <boost/detail/metafunction/has_mfunc_size.hpp>
+#include <boost/detail/metafunction/has_mfunc_empty.hpp>
+#include <boost/detail/metafunction/has_container_typedefs.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_container_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_begin<
+ T
+ , typename T::const_iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_end<
+ T
+ , typename T::const_iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_size<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_max_size<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ >
+ , typename has_member_function_empty<
+ T
+ , bool
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_container
+ : ::boost::mpl::if_<
+ has_container_typedefs<T>
+ , is_container_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_container_with_emplace.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_container_with_emplace.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,64 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_WITH_EMPLACE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_WITH_EMPLACE_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/deatil/metafunction/has_mfunc_emplace.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_sequence_with_emplace
+ : ::boost::mpl::or_<
+ typename has_member_function_emplace_front<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_emplace_back<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_associative_container_with_emplace
+ : has_member_function_emplace<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector1<typename T::key_type>
+ , ::boost::function_types::non_const
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_container_with_emplace
+ : ::boost::mpl::if_<
+ typename is_reversible_container<T>::type
+ , is_container_with_emplace_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_container_with_emplace,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_WITH_EMPLACE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_flat_assoc_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_flat_assoc_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,37 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_FLAT_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_FLAT_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/detail/metafunction/is_random_access_iterator.hpp>
+#include <boost/detail/metafunction/is_sorted_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_flat_associative_container_impl
+ : is_random_access_iterator<typename T::iterator>
+ {
+ };
+
+ template <typename T>
+ struct is_flat_associative_container
+ : ::boost::mpl::if_<
+ is_sorted_associative_container<T>
+ , is_flat_associative_container_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_flat_associative_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_FLAT_ASSOC_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_front_insertion_sequence.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_front_insertion_sequence.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,68 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_front.hpp>
+#include <boost/detail/metafunction/is_sequence.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_front_insertion_sequence_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_front<
+ T
+ , typename T::const_reference
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_front<
+ T
+ , typename T::reference
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_push_front<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::value_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_pop_front<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_front_insertion_sequence
+ : ::boost::mpl::eval_if<
+ is_sequence<T>
+ , is_front_insertion_sequence_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_front_insertion_sequence,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_function_wrt.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_function_wrt.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,77 @@
+// Copyright (C) 2007-2011, 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_FUNCTION_WRT_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_FUNCTION_WRT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/if.hpp>
+
+#if !defined BOOST_NO_SFINAE && \
+ !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/mpl/eval_if.hpp>
+#include <boost/utility/result_of.hpp>
+#endif
+
+namespace boost { namespace detail { namespace metafunction {
+
+#if defined BOOST_NO_SFINAE || \
+ defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <typename T, typename R>
+ struct is_function_with_result_type
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<typename T::result_type,R>
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+#else // !defined BOOST_NO_SFINAE && \
+// !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <typename T, typename R>
+ struct is_std_function_with_result_type
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<typename ::boost::result_of<T>::type,R>
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T, typename R>
+ struct is_functor_with_result_type
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<typename T::result_type,R>
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T, typename R>
+ struct is_functor_with_result_typedef
+ : ::boost::mpl::eval_if<
+ typename ::boost::detail::has_result_type<T>::type
+ , is_functor_with_result_type<T,R>
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T, typename R>
+ struct is_function_with_result_type
+ : ::boost::mpl::eval_if<
+ ::std::tr1::is_function<T>
+ , is_std_function_with_result_type<T,R>
+ , is_functor_with_result_typedef<T,R>
+ >::type
+#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_function_with_result_type,(T,R))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_FUNCTION_WRT_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_hashed_assoc_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_hashed_assoc_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,42 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_HASHED_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_HASHED_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/detail/metafunction/has_hasher.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_hashed_associative_container_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_void<typename T::hasher>
+ , ::boost::mpl::false_
+ , is_associative_container<T>
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_hashed_associative_container
+ : ::boost::mpl::eval_if<
+ typename has_hasher<T>::type
+ , is_hashed_associative_container_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_hashed_associative_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_HASHED_ASSOC_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_heap.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_heap.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,129 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_HEAP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_HEAP_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_empty.hpp>
+#include <boost/detail/metafunction/has_mfunc_size.hpp>
+#include <boost/detail/metafunction/has_mfunc_top.hpp>
+#include <boost/detail/metafunction/has_mfunc_pop.hpp>
+#include <boost/detail/metafunction/has_mfunc_clear.hpp>
+#include <boost/detail/metafunction/has_mfunc_get_allocator.hpp>
+#include <boost/detail/metafunction/has_value_type.hpp>
+#include <boost/detail/metafunction/has_value_compare.hpp>
+#include <boost/detail/metafunction/has_size_type.hpp>
+#include <boost/detail/metafunction/has_difference_type.hpp>
+#include <boost/detail/metafunction/has_allocator_type.hpp>
+#include <boost/detail/metafunction/has_pointer.hpp>
+#include <boost/detail/metafunction/has_const_pointer.hpp>
+#include <boost/detail/metafunction/has_reference.hpp>
+#include <boost/detail/metafunction/has_const_reference.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_heap_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_empty<
+ T
+ , bool
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_get_allocator<
+ T
+ , typename T::allocator_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_top<
+ T
+ , typename T::const_reference
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_pop<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ , ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_size<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_max_size<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ , typename has_member_function_clear<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_heap
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_value_type<T>::type
+ , typename has_value_compare<T>::type
+ >
+ , ::boost::mpl::and_<
+ typename has_allocator_type<T>::type
+ , ::boost::mpl::and_<
+ typename has_size_type<T>::type
+ , typename has_difference_type<T>::type
+ >
+ >
+ >
+ , ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_reference<T>::type
+ , typename has_const_reference<T>::type
+ >
+ , ::boost::mpl::and_<
+ typename has_pointer<T>::type
+ , typename has_const_pointer<T>::type
+ >
+ >
+ >
+ , is_heap_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_heap,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_HEAP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_input_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_input_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,46 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_INPUT_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_INPUT_ITERATOR_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_input_iterator_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_convertible<
+ typename ::boost::BOOST_ITERATOR_CATEGORY<T>::type
+ , ::std::input_iterator_tag
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_input_iterator
+ : ::boost::mpl::eval_if<
+ typename has_iterator_category< ::std::iterator_traits<T> >::type
+ , is_input_iterator_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_input_iterator,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_INPUT_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_iteratable_heap.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_iteratable_heap.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,64 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_ITERATABLE_HEAP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ITERATABLE_HEAP_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_begin_end.hpp>
+#include <boost/detail/metafunction/has_iterator.hpp>
+#include <boost/detail/metafunction/has_const_iterator.hpp>
+#include <boost/detail/metafunction/has_input_const_iterator.hpp>
+#include <boost/detail/metafunction/is_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_iteratable_heap_impl
+ : ::boost::mpl::and_<
+ typename has_member_function_begin<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_end<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_iteratable_heap
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ is_heap<T>
+ , ::boost::mpl::and_<
+ typename has_iterator<T>::type
+ , typename has_const_iterator<T>::type
+ >
+ >
+ , ::boost::mpl::and_<
+ has_input_const_iterator<T>
+ , is_iteratable_heap_impl<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_iteratable_heap,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_ITERATABLE_HEAP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_multi_assoc_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_multi_assoc_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,69 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_MULTI_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_MULTI_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/utility/get_reference.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_multiple_associative_container_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<
+ BOOST_TYPEOF_TPL(
+ T().insert(::boost::get_reference<typename T::key_type>())
+ )
+ , typename T::iterator
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T>
+ struct is_multiple_associative_ptr_container_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<
+ BOOST_TYPEOF_TPL(
+ T().insert(&::boost::get_reference<typename T::key_type>())
+ )
+ , typename T::iterator
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T>
+ struct is_multiple_associative_container
+ : ::boost::mpl::eval_if<
+ is_associative_container<T>
+ , ::boost::mpl::if_<
+ is_ptr_container<T>
+ , is_multiple_associative_ptr_container_impl<T>
+ , is_multiple_associative_container_impl<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_multiple_associative_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_MULTI_ASSOC_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_mutable_heap.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_mutable_heap.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,153 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_MUTABLE_HEAP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_MUTABLE_HEAP_HPP_INCLUDED
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_update.hpp>
+#include <boost/detail/metafunction/has_mfunc_increase.hpp>
+#include <boost/detail/metafunction/has_mfunc_decrease.hpp>
+#include <boost/detail/metafunction/has_mfunc_merge.hpp>
+#include <boost/detail/metafunction/has_mfunc_push.hpp>
+#include <boost/detail/metafunction/has_handle_type.hpp>
+#include <boost/detail/metafunction/is_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_mutable_heap_with_increase
+ : ::boost::mpl::eval_if<
+ typename has_member_function_increase<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::handle_type>
+ , ::boost::function_types::non_const
+ >::type
+ , has_member_function_increase<
+ T
+ , void
+ , ::boost::mpl::vector2<
+ typename T::handle_type
+ , typename T::const_reference
+ >
+ , ::boost::function_types::non_const
+ >
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_mutable_heap_with_decrease
+ : ::boost::mpl::eval_if<
+ typename has_member_function_decrease<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::handle_type>
+ , ::boost::function_types::non_const
+ >::type
+ , has_member_function_decrease<
+ T
+ , void
+ , ::boost::mpl::vector2<
+ typename T::handle_type
+ , typename T::const_reference
+ >
+ , ::boost::function_types::non_const
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T>
+ struct is_mutable_heap_with_push_and_merge
+#if 1
+ : has_member_function_push<
+ T
+ , typename T::handle_type
+ , ::boost::mpl::vector1<typename T::const_reference>
+ , ::boost::function_types::non_const
+ >
+#else
+ : ::boost::mpl::eval_if<
+ typename has_member_function_push<
+ T
+ , typename T::handle_type
+ , ::boost::mpl::vector1<typename T::const_reference>
+ , ::boost::function_types::non_const
+ >::type
+ , has_member_function_merge<
+ T
+ , void
+ , ::boost::mpl::vector1<T const&>
+ , ::boost::function_types::non_const
+ >
+ , ::boost::mpl::false_
+ >
+#endif
+ {
+ };
+
+ template <typename T>
+ struct is_mutable_heap_impl
+ : ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ typename has_member_function_update<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::handle_type>
+ , ::boost::function_types::non_const
+ >::type
+ , has_member_function_update<
+ T
+ , void
+ , ::boost::mpl::vector2<
+ typename T::handle_type
+ , typename T::const_reference
+ >
+ , ::boost::function_types::non_const
+ >
+ , ::boost::mpl::false_
+ >::type
+ , is_mutable_heap_with_increase<T>
+ , ::boost::mpl::false_
+ >::type
+ , ::boost::mpl::eval_if<
+ is_mutable_heap_with_decrease<T>
+ , is_mutable_heap_with_push_and_merge<T>
+ , ::boost::mpl::false_
+ >
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_mutable_heap
+ : ::boost::mpl::eval_if<
+ typename ::boost::mpl::eval_if<
+ is_heap<T>
+ , has_handle_type<T>
+ , ::boost::mpl::false_
+ >::type
+ , is_mutable_heap_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_mutable_heap,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_MUTABLE_HEAP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_n_ary_function.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_n_ary_function.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,39 @@
+// Copyright (C) 2011, 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_N_ARY_FUNCTION_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_N_ARY_FUNCTION_HPP_INCLUDED
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/function_types/function_arity.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T, typename N>
+ struct is_n_ary_function
+ : ::boost::mpl::eval_if<
+ ::std::tr1::is_function<T>
+ , ::boost::mpl::if_<
+ ::boost::mpl::equal_to<
+ ::boost::function_types::function_arity<T>
+ , N
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_n_ary_function,(T, N))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_N_ARY_FUNCTION_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_order_iteratable_heap.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_order_iteratable_heap.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,60 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_ORDER_ITERATABLE_HEAP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ORDER_ITERATABLE_HEAP_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_ordered_begin_end.hpp>
+#include <boost/detail/metafunction/has_ordered_iterator.hpp>
+#include <boost/detail/metafunction/is_input_iterator.hpp>
+#include <boost/detail/metafunction/is_iteratable_heap.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_order_iteratable_heap_impl
+ : ::boost::mpl::and_<
+ typename is_input_iterator<typename T::ordered_iterator>::type
+ , ::boost::mpl::and_<
+ typename has_member_function_ordered_begin<
+ T
+ , typename T::ordered_iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_ordered_end<
+ T
+ , typename T::ordered_iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_order_iteratable_heap
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ is_iteratable_heap<T>
+ , typename has_ordered_iterator<T>::type
+ >
+ , is_order_iteratable_heap_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_order_iteratable_heap,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_ORDER_ITERATABLE_HEAP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_ptr_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_ptr_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,30 @@
+// Copyright (C) 2011-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_PTR_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_PTR_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_auto_type.hpp>
+#include <boost/detail/metafunction/has_container_typedefs.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_ptr_container
+ : ::boost::mpl::if_<
+ typename has_auto_type<T>::type
+ , has_container_typedefs<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_ptr_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_PTR_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_queue.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_queue.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,92 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_QUEUE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_QUEUE_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_empty.hpp>
+#include <boost/detail/metafunction/has_mfunc_size.hpp>
+#include <boost/detail/metafunction/has_mfunc_front.hpp>
+#include <boost/detail/metafunction/has_mfunc_push.hpp>
+#include <boost/detail/metafunction/has_mfunc_pop.hpp>
+#include <boost/detail/metafunction/has_value_type.hpp>
+#include <boost/detail/metafunction/has_size_type.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_queue_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_empty<
+ T
+ , bool
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_size<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_front<
+ T
+ , typename T::value_type const&
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_front<
+ T
+ , typename T::value_type&
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_push<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::value_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_pop<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_queue
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ typename has_value_type<T>::type
+ , typename has_size_type<T>::type
+ >
+ , is_queue_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_queue,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_QUEUE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_random_access_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_random_access_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,48 @@
+// Copyright (C) 2012-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/is_random_access_iterator.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/has_rvrs_container_typedefs.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ // Major assumption:
+ // All Random Access Containers sport Random Access Iterators and
+ // are not Associative Containers.
+ template <typename T>
+ struct is_random_access_container_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ is_random_access_iterator<typename T::iterator>
+ , is_random_access_iterator<typename T::reverse_iterator>
+ >
+ , ::boost::mpl::not_< is_associative_container<T> >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_random_access_container
+ : ::boost::mpl::if_<
+ has_reversible_container_typedefs<T>
+ , is_random_access_container_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_random_access_iterator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_random_access_iterator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,46 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_ITERATOR_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_random_access_iterator_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_convertible<
+ typename ::boost::BOOST_ITERATOR_CATEGORY<T>::type
+ , ::std::random_access_iterator_tag
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_random_access_iterator
+ : ::boost::mpl::eval_if<
+ typename has_iterator_category< ::std::iterator_traits<T> >::type
+ , is_random_access_iterator_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_iterator,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_ITERATOR_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_reversible_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_reversible_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,59 @@
+// Copyright (C) 2012-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_REVERSIBLE_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_REVERSIBLE_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_rbegin_rend.hpp>
+#include <boost/detail/metafunction/has_rvrs_container_typedefs.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_reversible_container_impl
+ : ::boost::mpl::and_<
+ typename has_member_function_rbegin<
+ T
+ , typename T::const_reverse_iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_rend<
+ T
+ , typename T::const_reverse_iterator
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_reversible_container
+ : ::boost::mpl::eval_if<
+ has_reversible_container_typedefs<T>
+ , ::boost::mpl::if_<
+ is_reversible_container_impl<T>
+ , is_container<T>
+ , is_ptr_container<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reversible_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_REVERSIBLE_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_sequence.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_sequence.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,101 @@
+// Copyright (C) 2012-2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_SEQUENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_SEQUENCE_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+#include <boost/detail/metafunction/has_mfunc_insert.hpp>
+#include <boost/detail/metafunction/has_mfunc_erase.hpp>
+#include <boost/detail/metafunction/has_mfunc_clear.hpp>
+#include <boost/detail/metafunction/has_mfunc_resize.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_sequence_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_iterator_category< typename T::iterator >::type
+ , ::boost::mpl::or_<
+ typename has_member_function_insert<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector2<
+ typename T::const_iterator
+ , typename T::value_type const&
+ >
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_insert<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector2<
+ typename T::iterator
+ , typename T::value_type const&
+ >
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ , ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_erase<
+ T
+ , typename T::iterator
+ , ::boost::mpl::vector1<typename T::iterator>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_clear<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_resize<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::size_type>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_resize<
+ T
+ , void
+ , ::boost::mpl::vector2<
+ typename T::size_type
+ , typename T::value_type const&
+ >
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_sequence
+ : ::boost::mpl::if_<
+ is_container<T>
+ , is_sequence_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_sequence,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_SEQUENCE_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_sorted_assoc_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_sorted_assoc_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,35 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_SORTED_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_SORTED_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_key_compare.hpp>
+#include <boost/detail/metafunction/has_value_compare.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_sorted_associative_container
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ typename has_key_compare<T>::type
+ , typename has_value_compare<T>::type
+ >
+ , is_associative_container<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_sorted_associative_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_SORTED_ASSOC_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_stack_or_std_heap.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_stack_or_std_heap.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,84 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_STACK_OR_STD_HEAP_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_STACK_OR_STD_HEAP_HPP_INCLUDED
+
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/detail/metafunction/has_mfunc_empty.hpp>
+#include <boost/detail/metafunction/has_mfunc_size.hpp>
+#include <boost/detail/metafunction/has_mfunc_top.hpp>
+#include <boost/detail/metafunction/has_mfunc_push.hpp>
+#include <boost/detail/metafunction/has_mfunc_pop.hpp>
+#include <boost/detail/metafunction/has_value_type.hpp>
+#include <boost/detail/metafunction/has_size_type.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_stack_or_std_heap_impl
+ : ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ ::boost::mpl::and_<
+ typename has_member_function_empty<
+ T
+ , bool
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ , typename has_member_function_size<
+ T
+ , typename T::size_type
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ , typename has_member_function_top<
+ T
+ , typename T::value_type const&
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::const_qualified
+ >::type
+ >
+ , ::boost::mpl::and_<
+ typename has_member_function_push<
+ T
+ , void
+ , ::boost::mpl::vector1<typename T::value_type const&>
+ , ::boost::function_types::non_const
+ >::type
+ , typename has_member_function_pop<
+ T
+ , void
+ , ::boost::mpl::vector0<>
+ , ::boost::function_types::non_const
+ >::type
+ >
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_stack_or_std_heap
+ : ::boost::mpl::if_<
+ ::boost::mpl::and_<
+ typename has_value_type<T>::type
+ , typename has_size_type<T>::type
+ >
+ , is_stack_or_std_heap_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_stack_or_std_heap,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_STACK_OR_STD_HEAP_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/detail/metafunction/is_unique_assoc_container.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/detail/metafunction/is_unique_assoc_container.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,69 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_METAFUNCTION_IS_UNIQUE_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_UNIQUE_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <utility>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/utility/get_reference.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+ template <typename T>
+ struct is_unique_associative_container_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<
+ BOOST_TYPEOF_TPL(
+ T().insert(::boost::get_reference<typename T::key_type>())
+ )
+ , ::std::pair<typename T::iterator,bool>
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T>
+ struct is_unique_associative_ptr_container_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_same<
+ BOOST_TYPEOF_TPL(
+ T().insert(&::boost::get_reference<typename T::key_type>())
+ )
+ , ::std::pair<typename T::iterator,bool>
+ >
+ , ::boost::mpl::true_
+ , ::boost::mpl::false_
+ >::type
+ {
+ };
+
+ template <typename T>
+ struct is_unique_associative_container
+ : ::boost::mpl::eval_if<
+ is_associative_container<T>
+ , ::boost::mpl::if_<
+ is_ptr_container<T>
+ , is_unique_associative_ptr_container_impl<T>
+ , is_unique_associative_container_impl<T>
+ >
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_unique_associative_container,(T))
+ };
+}}} // namespace boost::detail::metafunction
+
+#endif // BOOST_DETAIL_METAFUNCTION_IS_UNIQUE_ASSOC_CONTAINER_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/graph/adjacency_list.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/graph/adjacency_list.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,312 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+#ifndef BOOST_GRAPH_ADJACENCY_LIST_HPP
+#define BOOST_GRAPH_ADJACENCY_LIST_HPP
+
+
+#include <boost/config.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_mutability_traits.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/graph/detail/edge.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/named_graph.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+
+namespace boost {
+
+ template <typename StorageSelector>
+ struct parallel_edge_traits
+ {
+ typedef typename mpl::if_<is_unique_associative_selector<StorageSelector>,
+ disallow_parallel_edge_tag,allow_parallel_edge_tag
+ >::type type;
+ };
+
+ //===========================================================================
+ // The adjacency_list_traits class, which provides a way to access
+ // some of the associated types of an adjacency_list type without
+ // having to first create the adjacency_list type. This is useful
+ // when trying to create interior vertex or edge properties who's
+ // value type is a vertex or edge descriptor.
+
+ template <class OutEdgeListS = vecS,
+ class VertexListS = vecS,
+ class DirectedS = directedS,
+ class EdgeListS = listS>
+ struct adjacency_list_traits
+ {
+ typedef typename mpl::and_<
+ is_random_access_selector<VertexListS>
+ , mpl::not_<is_associative_selector<VertexListS> >
+ >::type is_rand_access;
+ typedef typename DirectedS::is_bidir_t is_bidir;
+ typedef typename DirectedS::is_directed_t is_directed;
+
+ typedef typename mpl::if_<is_bidir,
+ bidirectional_tag,
+ typename mpl::if_<is_directed,
+ directed_tag, undirected_tag
+ >::type
+ >::type directed_category;
+
+ typedef typename parallel_edge_traits<OutEdgeListS>::type
+ edge_parallel_category;
+
+ typedef std::size_t vertices_size_type;
+ typedef void* vertex_ptr;
+ typedef typename mpl::if_<is_rand_access,
+ vertices_size_type, vertex_ptr>::type vertex_descriptor;
+ typedef detail::edge_desc_impl<directed_category, vertex_descriptor>
+ edge_descriptor;
+
+ private:
+ // Logic to figure out the edges_size_type
+ struct dummy {};
+ typedef typename container_gen<EdgeListS, dummy>::type EdgeContainer;
+ typedef typename DirectedS::is_bidir_t BidirectionalT;
+ typedef typename DirectedS::is_directed_t DirectedT;
+ typedef typename mpl::and_<DirectedT,
+ typename mpl::not_<BidirectionalT>::type >::type on_edge_storage;
+ public:
+ typedef typename mpl::if_<on_edge_storage,
+ std::size_t, typename EdgeContainer::size_type
+ >::type edges_size_type;
+
+ };
+
+} // namespace boost
+
+#include <boost/graph/detail/adjacency_list.hpp>
+
+namespace boost {
+
+ //===========================================================================
+ // The adjacency_list class.
+ //
+
+ template <class OutEdgeListS = vecS, // a Sequence or an AssociativeContainer
+ class VertexListS = vecS, // a Sequence or a RandomAccessContainer
+ class DirectedS = directedS,
+ class VertexProperty = no_property,
+ class EdgeProperty = no_property,
+ class GraphProperty = no_property,
+ class EdgeListS = listS>
+ class adjacency_list
+ : public detail::adj_list_gen<
+ adjacency_list<OutEdgeListS,VertexListS,DirectedS,
+ VertexProperty,EdgeProperty,GraphProperty,EdgeListS>,
+ VertexListS, OutEdgeListS, DirectedS,
+ VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS>::type,
+ // Support for named vertices
+ public graph::maybe_named_graph<
+ adjacency_list<OutEdgeListS,VertexListS,DirectedS,
+ VertexProperty,EdgeProperty,GraphProperty,EdgeListS>,
+ typename adjacency_list_traits<OutEdgeListS, VertexListS, DirectedS,
+ EdgeListS>::vertex_descriptor,
+ VertexProperty>
+ {
+ public:
+ typedef GraphProperty graph_property_type;
+ typedef typename lookup_one_property<GraphProperty, graph_bundle_t>::type graph_bundled;
+
+ typedef VertexProperty vertex_property_type;
+ typedef typename lookup_one_property<VertexProperty, vertex_bundle_t>::type vertex_bundled;
+
+ typedef EdgeProperty edge_property_type;
+ typedef typename lookup_one_property<EdgeProperty, edge_bundle_t>::type edge_bundled;
+
+ private:
+ typedef adjacency_list self;
+ typedef typename detail::adj_list_gen<
+ self, VertexListS, OutEdgeListS, DirectedS,
+ vertex_property_type, edge_property_type, GraphProperty, EdgeListS
+ >::type Base;
+
+ public:
+ typedef typename Base::stored_vertex stored_vertex;
+ typedef typename Base::vertices_size_type vertices_size_type;
+ typedef typename Base::edges_size_type edges_size_type;
+ typedef typename Base::degree_size_type degree_size_type;
+ typedef typename Base::vertex_descriptor vertex_descriptor;
+ typedef typename Base::edge_descriptor edge_descriptor;
+ typedef OutEdgeListS out_edge_list_selector;
+ typedef VertexListS vertex_list_selector;
+ typedef DirectedS directed_selector;
+ typedef EdgeListS edge_list_selector;
+
+
+ adjacency_list(const GraphProperty& p = GraphProperty())
+ : m_property(new graph_property_type(p))
+ { }
+
+ adjacency_list(const adjacency_list& x)
+ : Base(x), m_property(new graph_property_type(*x.m_property))
+ { }
+
+ adjacency_list& operator=(const adjacency_list& x) {
+ // TBD: probably should give the strong guarantee
+ if (&x != this) {
+ Base::operator=(x);
+
+ // Copy/swap the ptr since we can't just assign it...
+ property_ptr p(new graph_property_type(*x.m_property));
+ m_property.swap(p);
+ }
+ return *this;
+ }
+
+ // Required by Mutable Graph
+ adjacency_list(vertices_size_type num_vertices,
+ const GraphProperty& p = GraphProperty())
+ : Base(num_vertices), m_property(new graph_property_type(p))
+ { }
+
+#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+ // Required by Iterator Constructible Graph
+ template <class EdgeIterator>
+ adjacency_list(EdgeIterator first, EdgeIterator last,
+ vertices_size_type n,
+ edges_size_type = 0,
+ const GraphProperty& p = GraphProperty())
+ : Base(n, first, last), m_property(new graph_property_type(p))
+ { }
+
+ template <class EdgeIterator, class EdgePropertyIterator>
+ adjacency_list(EdgeIterator first, EdgeIterator last,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type n,
+ edges_size_type = 0,
+ const GraphProperty& p = GraphProperty())
+ : Base(n, first, last, ep_iter), m_property(new graph_property_type(p))
+ { }
+#endif
+
+ void swap(adjacency_list& x) {
+ // Is there a more efficient way to do this?
+ adjacency_list tmp(x);
+ x = *this;
+ *this = tmp;
+ }
+
+ void clear()
+ {
+ this->clearing_graph();
+ Base::clear();
+ }
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ // Directly access a vertex or edge bundle
+ vertex_bundled& operator[](vertex_descriptor v)
+ { return get(vertex_bundle, *this)[v]; }
+
+ const vertex_bundled& operator[](vertex_descriptor v) const
+ { return get(vertex_bundle, *this)[v]; }
+
+ edge_bundled& operator[](edge_descriptor e)
+ { return get(edge_bundle, *this)[e]; }
+
+ const edge_bundled& operator[](edge_descriptor e) const
+ { return get(edge_bundle, *this)[e]; }
+
+ graph_bundled& operator[](graph_bundle_t)
+ { return get_property(*this); }
+
+ graph_bundled const& operator[](graph_bundle_t) const
+ { return get_property(*this); }
+#endif
+
+ // protected: (would be protected if friends were more portable)
+ typedef scoped_ptr<graph_property_type> property_ptr;
+ property_ptr m_property;
+ };
+
+#define ADJLIST_PARAMS \
+ typename OEL, typename VL, typename D, typename VP, typename EP, \
+ typename GP, typename EL
+#define ADJLIST adjacency_list<OEL,VL,D,VP,EP,GP,EL>
+
+ template<ADJLIST_PARAMS, typename Tag, typename Value>
+ inline void set_property(ADJLIST& g, Tag tag, Value const& value) {
+ get_property_value(*g.m_property, tag) = value;
+ }
+
+ template<ADJLIST_PARAMS, typename Tag>
+ inline typename graph_property<ADJLIST, Tag>::type&
+ get_property(ADJLIST& g, Tag tag) {
+ return get_property_value(*g.m_property, tag);
+ }
+
+ template<ADJLIST_PARAMS, typename Tag>
+ inline typename graph_property<ADJLIST, Tag>::type const&
+ get_property(ADJLIST const& g, Tag tag) {
+ return get_property_value(*g.m_property, tag);
+ }
+
+ // dwa 09/25/00 - needed to be more explicit so reverse_graph would work.
+ template <class Directed, class Vertex,
+ class OutEdgeListS,
+ class VertexListS,
+ class DirectedS,
+ class VertexProperty,
+ class EdgeProperty,
+ class GraphProperty, class EdgeListS>
+ inline Vertex
+ source(const detail::edge_base<Directed,Vertex>& e,
+ const adjacency_list<OutEdgeListS, VertexListS, DirectedS,
+ VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&)
+ {
+ return e.m_source;
+ }
+
+ template <class Directed, class Vertex, class OutEdgeListS,
+ class VertexListS, class DirectedS, class VertexProperty,
+ class EdgeProperty, class GraphProperty, class EdgeListS>
+ inline Vertex
+ target(const detail::edge_base<Directed,Vertex>& e,
+ const adjacency_list<OutEdgeListS, VertexListS, DirectedS,
+ VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&)
+ {
+ return e.m_target;
+ }
+
+// Mutability Traits
+template <ADJLIST_PARAMS>
+struct graph_mutability_traits<ADJLIST> {
+ typedef mutable_property_graph_tag category;
+};
+
+// Can't remove vertices from adjacency lists with VL==vecS
+template <typename OEL, typename D, typename VP, typename EP, typename GP, typename EL>
+struct graph_mutability_traits< adjacency_list<OEL,vecS,D,VP,EP,GP,EL> > {
+ typedef add_only_property_graph_tag category;
+};
+#undef ADJLIST_PARAMS
+#undef ADJLIST
+
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_ADJACENCY_LIST_HPP

Added: sandbox/container_gen/boost/graph/detail/adjacency_list.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/graph/detail/adjacency_list.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,2794 @@
+// -*- c++ -*-
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+#ifndef BOOST_GRAPH_DETAIL_ADJACENCY_LIST_HPP
+#define BOOST_GRAPH_DETAIL_ADJACENCY_LIST_HPP
+
+#include <map> // for vertex_map in copy_impl
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/operators.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/range/irange.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <memory>
+#include <algorithm>
+#include <boost/limits.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/pending/container_traits.hpp>
+#include <boost/graph/detail/adj_list_edge_iterator.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/property.hpp>
+#include <boost/graph/adjacency_iterator.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/assert.hpp>
+
+/*
+ Outline for this file:
+
+ out_edge_iterator and in_edge_iterator implementation
+ edge_iterator for undirected graph
+ stored edge types (these object live in the out-edge/in-edge lists)
+ directed edges helper class
+ directed graph helper class
+ undirected graph helper class
+ bidirectional graph helper class
+ bidirectional graph helper class (without edge properties)
+ bidirectional graph helper class (with edge properties)
+ adjacency_list helper class
+ adj_list_impl class
+ vec_adj_list_impl class
+ adj_list_gen class
+ vertex property map
+ edge property map
+
+
+ Note: it would be nice to merge some of the undirected and
+ bidirectional code... it is awful similar.
+ */
+
+
+namespace boost {
+
+ namespace detail {
+
+ template <typename DirectedS>
+ struct directed_category_traits {
+ typedef directed_tag directed_category;
+ };
+
+ template <>
+ struct directed_category_traits<directedS> {
+ typedef directed_tag directed_category;
+ };
+ template <>
+ struct directed_category_traits<undirectedS> {
+ typedef undirected_tag directed_category;
+ };
+ template <>
+ struct directed_category_traits<bidirectionalS> {
+ typedef bidirectional_tag directed_category;
+ };
+
+ template <class Vertex>
+ struct target_is {
+ target_is(const Vertex& v) : m_target(v) { }
+ template <class StoredEdge>
+ bool operator()(const StoredEdge& e) const {
+ return e.get_target() == m_target;
+ }
+ Vertex m_target;
+ };
+
+ // O(E/V)
+ template <class EdgeList, class vertex_descriptor>
+ void erase_from_incidence_list(EdgeList& el, vertex_descriptor v,
+ allow_parallel_edge_tag)
+ {
+ boost::graph_detail::erase_if(el, detail::target_is<vertex_descriptor>(v));
+ }
+ // O(log(E/V))
+ template <class EdgeList, class vertex_descriptor>
+ void erase_from_incidence_list(EdgeList& el, vertex_descriptor v,
+ disallow_parallel_edge_tag)
+ {
+ typedef typename EdgeList::value_type StoredEdge;
+ el.erase(StoredEdge(v));
+ }
+
+ //=========================================================================
+ // Out-Edge and In-Edge Iterator Implementation
+
+ template <class BaseIter, class VertexDescriptor, class EdgeDescriptor, class Difference>
+ struct out_edge_iter
+ : iterator_adaptor<
+ out_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ out_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ > super_t;
+
+ inline out_edge_iter() { }
+ inline out_edge_iter(const BaseIter& i, const VertexDescriptor& src)
+ : super_t(i), m_src(src) { }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(m_src, (*this->base()).get_target(),
+ &(*this->base()).get_property());
+ }
+ VertexDescriptor m_src;
+ };
+
+ template <class BaseIter, class VertexDescriptor, class EdgeDescriptor, class Difference>
+ struct in_edge_iter
+ : iterator_adaptor<
+ in_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ in_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ > super_t;
+
+ inline in_edge_iter() { }
+ inline in_edge_iter(const BaseIter& i, const VertexDescriptor& src)
+ : super_t(i), m_src(src) { }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor((*this->base()).get_target(), m_src,
+ &this->base()->get_property());
+ }
+ VertexDescriptor m_src;
+ };
+
+ //=========================================================================
+ // Undirected Edge Iterator Implementation
+
+ template <class EdgeIter, class EdgeDescriptor, class Difference>
+ struct undirected_edge_iter
+ : iterator_adaptor<
+ undirected_edge_iter<EdgeIter, EdgeDescriptor, Difference>
+ , EdgeIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ undirected_edge_iter<EdgeIter, EdgeDescriptor, Difference>
+ , EdgeIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ > super_t;
+
+ undirected_edge_iter() {}
+
+ explicit undirected_edge_iter(EdgeIter i)
+ : super_t(i) {}
+
+ inline EdgeDescriptor
+ dereference() const {
+ return EdgeDescriptor(
+ (*this->base()).m_source
+ , (*this->base()).m_target
+ , &this->base()->get_property());
+ }
+ };
+
+ //=========================================================================
+ // Edge Storage Types (stored in the out-edge/in-edge lists)
+
+ template <class Vertex>
+ class stored_edge
+ : public boost::equality_comparable1< stored_edge<Vertex>,
+ boost::less_than_comparable1< stored_edge<Vertex> > >
+ {
+ public:
+ typedef no_property property_type;
+ inline stored_edge() { }
+ inline stored_edge(Vertex target, const no_property& = no_property())
+ : m_target(target) { }
+ // Need to write this explicitly so stored_edge_property can
+ // invoke Base::operator= (at least, for SGI MIPSPro compiler)
+ inline stored_edge& operator=(const stored_edge& x) {
+ m_target = x.m_target;
+ return *this;
+ }
+ inline Vertex& get_target() const { return m_target; }
+ inline const no_property& get_property() const { return s_prop; }
+ inline bool operator==(const stored_edge& x) const
+ { return m_target == x.get_target(); }
+ inline bool operator<(const stored_edge& x) const
+ { return m_target < x.get_target(); }
+ //protected: need to add hash<> as a friend
+ static no_property s_prop;
+ // Sometimes target not used as key in the set, and in that case
+ // it is ok to change the target.
+ mutable Vertex m_target;
+ };
+ template <class Vertex>
+ no_property stored_edge<Vertex>::s_prop;
+
+ template <class Vertex, class Property>
+ class stored_edge_property : public stored_edge<Vertex> {
+ typedef stored_edge_property self;
+ typedef stored_edge<Vertex> Base;
+ public:
+ typedef Property property_type;
+ inline stored_edge_property() { }
+ inline stored_edge_property(Vertex target,
+ const Property& p = Property())
+ : stored_edge<Vertex>(target), m_property(new Property(p)) { }
+ stored_edge_property(const self& x)
+ : Base(x), m_property(const_cast<self&>(x).m_property) { }
+ self& operator=(const self& x) {
+ Base::operator=(x);
+ m_property = const_cast<self&>(x).m_property;
+ return *this;
+ }
+ inline Property& get_property() { return *m_property; }
+ inline const Property& get_property() const { return *m_property; }
+ protected:
+ // Holding the property by-value causes edge-descriptor
+ // invalidation for add_edge() with EdgeList=vecS. Instead we
+ // hold a pointer to the property. std::auto_ptr is not
+ // a perfect fit for the job, but it is darn close.
+ std::auto_ptr<Property> m_property;
+ };
+
+
+ template <class Vertex, class Iter, class Property>
+ class stored_edge_iter
+ : public stored_edge<Vertex>
+ {
+ public:
+ typedef Property property_type;
+ inline stored_edge_iter() { }
+ inline stored_edge_iter(Vertex v)
+ : stored_edge<Vertex>(v) { }
+ inline stored_edge_iter(Vertex v, Iter i, void* = 0)
+ : stored_edge<Vertex>(v), m_iter(i) { }
+ inline Property& get_property() { return m_iter->get_property(); }
+ inline const Property& get_property() const {
+ return m_iter->get_property();
+ }
+ inline Iter get_iter() const { return m_iter; }
+ protected:
+ Iter m_iter;
+ };
+
+ // For when the EdgeList is a std::vector.
+ // Want to make the iterator stable, so use an offset
+ // instead of an iterator into a std::vector
+ template <class Vertex, class EdgeVec, class Property>
+ class stored_ra_edge_iter
+ : public stored_edge<Vertex>
+ {
+ typedef typename EdgeVec::iterator Iter;
+ public:
+ typedef Property property_type;
+ inline stored_ra_edge_iter() { }
+ inline stored_ra_edge_iter(Vertex v, Iter i = Iter(),
+ EdgeVec* edge_vec = 0)
+ : stored_edge<Vertex>(v), m_i(i - edge_vec->begin()), m_vec(edge_vec){ }
+ inline Property& get_property() { return (*m_vec)[m_i].get_property(); }
+ inline const Property& get_property() const {
+ return (*m_vec)[m_i].get_property();
+ }
+ inline Iter get_iter() const { return m_vec->begin() + m_i; }
+ protected:
+ std::size_t m_i;
+ EdgeVec* m_vec;
+ };
+
+ } // namespace detail
+
+ template <class Tag, class Vertex, class Property>
+ const typename property_value<Property,Tag>::type&
+ get(Tag property_tag,
+ const detail::stored_edge_property<Vertex, Property>& e)
+ {
+ return get_property_value(e.get_property(), property_tag);
+ }
+
+ template <class Tag, class Vertex, class Iter, class Property>
+ const typename property_value<Property,Tag>::type&
+ get(Tag property_tag,
+ const detail::stored_edge_iter<Vertex, Iter, Property>& e)
+ {
+ return get_property_value(e.get_property(), property_tag);
+ }
+
+ template <class Tag, class Vertex, class EdgeVec, class Property>
+ const typename property_value<Property,Tag>::type&
+ get(Tag property_tag,
+ const detail::stored_ra_edge_iter<Vertex, EdgeVec, Property>& e)
+ {
+ return get_property_value(e.get_property(), property_tag);
+ }
+
+ //=========================================================================
+ // Directed Edges Helper Class
+
+ namespace detail {
+
+ // O(E/V)
+ template <class edge_descriptor, class EdgeList, class StoredProperty>
+ inline void
+ remove_directed_edge_dispatch(edge_descriptor, EdgeList& el,
+ StoredProperty& p)
+ {
+ for (typename EdgeList::iterator i = el.begin();
+ i != el.end(); ++i)
+ if (&(*i).get_property() == &p) {
+ el.erase(i);
+ return;
+ }
+ }
+
+ template <class incidence_iterator, class EdgeList, class Predicate>
+ inline void
+ remove_directed_edge_if_dispatch(incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el, Predicate pred,
+ boost::allow_parallel_edge_tag)
+ {
+ // remove_if
+ while (first != last && !pred(*first))
+ ++first;
+ incidence_iterator i = first;
+ if (first != last)
+ for (++i; i != last; ++i)
+ if (!pred(*i)) {
+ *first.base() = *i.base();
+ ++first;
+ }
+ el.erase(first.base(), el.end());
+ }
+ template <class incidence_iterator, class EdgeList, class Predicate>
+ inline void
+ remove_directed_edge_if_dispatch(incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el,
+ Predicate pred,
+ boost::disallow_parallel_edge_tag)
+ {
+ for (incidence_iterator next = first;
+ first != last; first = next) {
+ ++next;
+ if (pred(*first))
+ el.erase( first.base() );
+ }
+ }
+
+ template <class PropT, class Graph, class incidence_iterator,
+ class EdgeList, class Predicate>
+ inline void
+ undirected_remove_out_edge_if_dispatch(Graph& g,
+ incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el, Predicate pred,
+ boost::allow_parallel_edge_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ // remove_if
+ while (first != last && !pred(*first))
+ ++first;
+ incidence_iterator i = first;
+ bool self_loop_removed = false;
+ if (first != last)
+ for (; i != last; ++i) {
+ if (self_loop_removed) {
+ /* With self loops, the descriptor will show up
+ * twice. The first time it will be removed, and now it
+ * will be skipped.
+ */
+ self_loop_removed = false;
+ }
+ else if (!pred(*i)) {
+ *first.base() = *i.base();
+ ++first;
+ } else {
+ if (source(*i, g) == target(*i, g)) self_loop_removed = true;
+ else {
+ // Remove the edge from the target
+ detail::remove_directed_edge_dispatch
+ (*i,
+ g.out_edge_list(target(*i, g)),
+ *(PropT*)(*i).get_property());
+ }
+
+ // Erase the edge property
+ g.m_edges.erase( (*i.base()).get_iter() );
+ }
+ }
+ el.erase(first.base(), el.end());
+ }
+ template <class PropT, class Graph, class incidence_iterator,
+ class EdgeList, class Predicate>
+ inline void
+ undirected_remove_out_edge_if_dispatch(Graph& g,
+ incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el,
+ Predicate pred,
+ boost::disallow_parallel_edge_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ for (incidence_iterator next = first;
+ first != last; first = next) {
+ ++next;
+ if (pred(*first)) {
+ if (source(*first, g) != target(*first, g)) {
+ // Remove the edge from the target
+ detail::remove_directed_edge_dispatch
+ (*first,
+ g.out_edge_list(target(*first, g)),
+ *(PropT*)(*first).get_property());
+ }
+
+ // Erase the edge property
+ g.m_edges.erase( (*first.base()).get_iter() );
+
+ // Erase the edge in the source
+ el.erase( first.base() );
+ }
+ }
+ }
+
+ // O(E/V)
+ template <class edge_descriptor, class EdgeList, class StoredProperty>
+ inline void
+ remove_directed_edge_dispatch(edge_descriptor e, EdgeList& el,
+ no_property&)
+ {
+ for (typename EdgeList::iterator i = el.begin();
+ i != el.end(); ++i)
+ if ((*i).get_target() == e.m_target) {
+ el.erase(i);
+ return;
+ }
+ }
+
+ } // namespace detail
+
+ template <class Config>
+ struct directed_edges_helper {
+
+ // Placement of these overloaded remove_edge() functions
+ // inside the class avoids a VC++ bug.
+
+ // O(E/V)
+ inline void
+ remove_edge(typename Config::edge_descriptor e)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(*this);
+ typename Config::OutEdgeList& el = g.out_edge_list(source(e, g));
+ typedef typename Config::OutEdgeList::value_type::property_type PType;
+ detail::remove_directed_edge_dispatch(e, el,
+ *(PType*)e.get_property());
+ }
+
+ // O(1)
+ inline void
+ remove_edge(typename Config::out_edge_iterator iter)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(*this);
+ typename Config::edge_descriptor e = *iter;
+ typename Config::OutEdgeList& el = g.out_edge_list(source(e, g));
+ el.erase(iter.base());
+ }
+
+ };
+
+ // O(1)
+ template <class Config>
+ inline std::pair<typename Config::edge_iterator,
+ typename Config::edge_iterator>
+ edges(const directed_edges_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_iterator edge_iterator;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ return std::make_pair( edge_iterator(g.vertex_set().begin(),
+ g.vertex_set().begin(),
+ g.vertex_set().end(), g),
+ edge_iterator(g.vertex_set().begin(),
+ g.vertex_set().end(),
+ g.vertex_set().end(), g) );
+ }
+
+ //=========================================================================
+ // Directed Graph Helper Class
+
+ struct adj_list_dir_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag { };
+
+ template <class Config>
+ struct directed_graph_helper
+ : public directed_edges_helper<Config> {
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef adj_list_dir_traversal_tag traversal_category;
+ };
+
+ // O(E/V)
+ template <class Config>
+ inline void
+ remove_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ detail::erase_from_incidence_list(g.out_edge_list(u), v, Cat());
+ }
+
+ template <class Config, class Predicate>
+ inline void
+ remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::out_edge_iterator first, last;
+ boost::tie(first, last) = out_edges(u, g);
+ typedef typename Config::edge_parallel_category edge_parallel_category;
+ detail::remove_directed_edge_if_dispatch
+ (first, last, g.out_edge_list(u), pred, edge_parallel_category());
+ }
+
+ template <class Config, class Predicate>
+ inline void
+ remove_edge_if(Predicate pred, directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typename Config::vertex_iterator vi, vi_end;
+ for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ remove_out_edge_if(*vi, pred, g);
+ }
+
+ template <class EdgeOrIter, class Config>
+ inline void
+ remove_edge(EdgeOrIter e_or_iter, directed_graph_helper<Config>& g_)
+ {
+ g_.remove_edge(e_or_iter);
+ }
+
+ // O(V + E) for allow_parallel_edges
+ // O(V * log(E/V)) for disallow_parallel_edges
+ template <class Config>
+ inline void
+ clear_vertex(typename Config::vertex_descriptor u,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::vertex_iterator vi, viend;
+ for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
+ detail::erase_from_incidence_list(g.out_edge_list(*vi), u, Cat());
+ g.out_edge_list(u).clear();
+ // clear() should be a req of Sequence and AssociativeContainer,
+ // or maybe just Container
+ }
+
+ template <class Config>
+ inline void
+ clear_out_edges(typename Config::vertex_descriptor u,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ g.out_edge_list(u).clear();
+ // clear() should be a req of Sequence and AssociativeContainer,
+ // or maybe just Container
+ }
+
+ // O(V), could do better...
+ template <class Config>
+ inline typename Config::edges_size_type
+ num_edges(const directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ typename Config::edges_size_type num_e = 0;
+ typename Config::vertex_iterator vi, vi_end;
+ for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ num_e += out_degree(*vi, g);
+ return num_e;
+ }
+ // O(1) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline std::pair<typename directed_graph_helper<Config>::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::StoredEdge StoredEdge;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList::iterator i;
+ bool inserted;
+ boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+ StoredEdge(v, p));
+ return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
+ inserted);
+ }
+ // Did not use default argument here because that
+ // causes Visual C++ to get confused.
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ directed_graph_helper<Config>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+ //=========================================================================
+ // Undirected Graph Helper Class
+
+ template <class Config>
+ struct undirected_graph_helper;
+
+ struct undir_adj_list_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag,
+ public virtual bidirectional_graph_tag { };
+
+ namespace detail {
+
+ // using class with specialization for dispatch is a VC++ workaround.
+ template <class StoredProperty>
+ struct remove_undirected_edge_dispatch {
+
+ // O(E/V)
+ template <class edge_descriptor, class Config>
+ static void
+ apply(edge_descriptor e,
+ undirected_graph_helper<Config>& g_,
+ StoredProperty& p)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g));
+ typename Config::OutEdgeList::iterator out_i = out_el.begin();
+ typename Config::EdgeIter edge_iter_to_erase;
+ for (; out_i != out_el.end(); ++out_i)
+ if (&(*out_i).get_property() == &p) {
+ edge_iter_to_erase = (*out_i).get_iter();
+ out_el.erase(out_i);
+ break;
+ }
+ typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g));
+ typename Config::OutEdgeList::iterator in_i = in_el.begin();
+ for (; in_i != in_el.end(); ++in_i)
+ if (&(*in_i).get_property() == &p) {
+ in_el.erase(in_i);
+ break;
+ }
+ g.m_edges.erase(edge_iter_to_erase);
+ }
+ };
+
+ template <>
+ struct remove_undirected_edge_dispatch<no_property> {
+ // O(E/V)
+ template <class edge_descriptor, class Config>
+ static void
+ apply(edge_descriptor e,
+ undirected_graph_helper<Config>& g_,
+ no_property&)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ no_property* p = (no_property*)e.get_property();
+ typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g));
+ typename Config::OutEdgeList::iterator out_i = out_el.begin();
+ typename Config::EdgeIter edge_iter_to_erase;
+ for (; out_i != out_el.end(); ++out_i)
+ if (&(*out_i).get_property() == p) {
+ edge_iter_to_erase = (*out_i).get_iter();
+ out_el.erase(out_i);
+ break;
+ }
+ typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g));
+ typename Config::OutEdgeList::iterator in_i = in_el.begin();
+ for (; in_i != in_el.end(); ++in_i)
+ if (&(*in_i).get_property() == p) {
+ in_el.erase(in_i);
+ break;
+ }
+ g.m_edges.erase(edge_iter_to_erase);
+ }
+ };
+
+ // O(E/V)
+ template <class Graph, class EdgeList, class Vertex>
+ inline void
+ remove_edge_and_property(Graph& g, EdgeList& el, Vertex v,
+ boost::allow_parallel_edge_tag cat)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename EdgeList::value_type StoredEdge;
+ typename EdgeList::iterator i = el.begin(), end = el.end();
+ for (; i != end; ++i) {
+ if ((*i).get_target() == v) {
+ // NOTE: Wihtout this skip, this loop will double-delete properties
+ // of loop edges. This solution is based on the observation that
+ // the incidence edges of a vertex with a loop are adjacent in the
+ // out edge list. This *may* actually hold for multisets also.
+ bool skip = (boost::next(i) != end && i->get_iter() == boost::next(i)->get_iter());
+ g.m_edges.erase((*i).get_iter());
+ if (skip) ++i;
+ }
+ }
+ detail::erase_from_incidence_list(el, v, cat);
+ }
+ // O(log(E/V))
+ template <class Graph, class EdgeList, class Vertex>
+ inline void
+ remove_edge_and_property(Graph& g, EdgeList& el, Vertex v,
+ boost::disallow_parallel_edge_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename EdgeList::value_type StoredEdge;
+ typename EdgeList::iterator i = el.find(StoredEdge(v)), end = el.end();
+ BOOST_ASSERT ((i != end));
+ if (i != end) {
+ g.m_edges.erase((*i).get_iter());
+ el.erase(i);
+ }
+ }
+
+ } // namespace detail
+
+ template <class Vertex, class EdgeProperty>
+ struct list_edge // short name due to VC++ truncation and linker problems
+ : public boost::detail::edge_base<boost::undirected_tag, Vertex>
+ {
+ typedef EdgeProperty property_type;
+ typedef boost::detail::edge_base<boost::undirected_tag, Vertex> Base;
+ list_edge(Vertex u, Vertex v, const EdgeProperty& p = EdgeProperty())
+ : Base(u, v), m_property(p) { }
+ EdgeProperty& get_property() { return m_property; }
+ const EdgeProperty& get_property() const { return m_property; }
+ // the following methods should never be used, but are needed
+ // to make SGI MIPSpro C++ happy
+ list_edge() { }
+ bool operator==(const list_edge&) const { return false; }
+ bool operator<(const list_edge&) const { return false; }
+ EdgeProperty m_property;
+ };
+
+ template <class Config>
+ struct undirected_graph_helper {
+
+ typedef undir_adj_list_traversal_tag traversal_category;
+
+ // Placement of these overloaded remove_edge() functions
+ // inside the class avoids a VC++ bug.
+
+ // O(E/V)
+ inline void
+ remove_edge(typename Config::edge_descriptor e)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::OutEdgeList::value_type::property_type PType;
+ detail::remove_undirected_edge_dispatch<PType>::apply
+ (e, *this, *(PType*)e.get_property());
+ }
+ // O(E/V)
+ inline void
+ remove_edge(typename Config::out_edge_iterator iter)
+ {
+ this->remove_edge(*iter);
+ }
+ };
+
+ // Had to make these non-members to avoid accidental instantiation
+ // on SGI MIPSpro C++
+ template <class C>
+ inline typename C::InEdgeList&
+ in_edge_list(undirected_graph_helper<C>&,
+ typename C::vertex_descriptor v)
+ {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+ template <class C>
+ inline const typename C::InEdgeList&
+ in_edge_list(const undirected_graph_helper<C>&,
+ typename C::vertex_descriptor v) {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+
+ // O(E/V)
+ template <class EdgeOrIter, class Config>
+ inline void
+ remove_edge(EdgeOrIter e, undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ g_.remove_edge(e);
+ }
+
+ // O(E/V) or O(log(E/V))
+ template <class Config>
+ void
+ remove_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat());
+ detail::erase_from_incidence_list(g.out_edge_list(v), u, Cat());
+ }
+
+ template <class Config, class Predicate>
+ void
+ remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::OutEdgeList::value_type::property_type PropT;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::out_edge_iterator first, last;
+ boost::tie(first, last) = out_edges(u, g);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::undirected_remove_out_edge_if_dispatch<PropT>
+ (g, first, last, g.out_edge_list(u), pred, Cat());
+ }
+ template <class Config, class Predicate>
+ void
+ remove_in_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ remove_out_edge_if(u, pred, g_);
+ }
+
+ // O(E/V * E) or O(log(E/V) * E)
+ template <class Predicate, class Config>
+ void
+ remove_edge_if(Predicate pred, undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::edge_iterator ei, ei_end, next;
+ boost::tie(ei, ei_end) = edges(g);
+ for (next = ei; ei != ei_end; ei = next) {
+ ++next;
+ if (pred(*ei))
+ remove_edge(*ei, g);
+ }
+ }
+
+ // O(1)
+ template <class Config>
+ inline std::pair<typename Config::edge_iterator,
+ typename Config::edge_iterator>
+ edges(const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_iterator edge_iterator;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ return std::make_pair( edge_iterator(g.m_edges.begin()),
+ edge_iterator(g.m_edges.end()) );
+ }
+ // O(1)
+ template <class Config>
+ inline typename Config::edges_size_type
+ num_edges(const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ return g.m_edges.size();
+ }
+ // O(E/V * E/V)
+ template <class Config>
+ inline void
+ clear_vertex(typename Config::vertex_descriptor u,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ while (true) {
+ typename Config::out_edge_iterator ei, ei_end;
+ boost::tie(ei, ei_end) = out_edges(u, g);
+ if (ei == ei_end) break;
+ remove_edge(*ei, g);
+ }
+ }
+ // O(1) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::StoredEdge StoredEdge;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ bool inserted;
+ typename Config::EdgeContainer::value_type e(u, v, p);
+ typename Config::EdgeContainer::iterator p_iter
+ = graph_detail::push(g.m_edges, e).first;
+
+ typename Config::OutEdgeList::iterator i;
+ boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+ StoredEdge(v, p_iter, &g.m_edges));
+ if (inserted) {
+ boost::graph_detail::push(g.out_edge_list(v), StoredEdge(u, p_iter, &g.m_edges));
+ return std::make_pair(edge_descriptor(u, v, &p_iter->get_property()),
+ true);
+ } else {
+ g.m_edges.erase(p_iter);
+ return std::make_pair
+ (edge_descriptor(u, v, &i->get_iter()->get_property()), false);
+ }
+ }
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ undirected_graph_helper<Config>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+
+ // O(1)
+ template <class Config>
+ inline typename Config::degree_size_type
+ degree(typename Config::vertex_descriptor u,
+ const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ const Graph& g = static_cast<const Graph&>(g_);
+ return out_degree(u, g);
+ }
+
+ template <class Config>
+ inline std::pair<typename Config::in_edge_iterator,
+ typename Config::in_edge_iterator>
+ in_edges(typename Config::vertex_descriptor u,
+ const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ typedef typename Config::in_edge_iterator in_edge_iterator;
+ return
+ std::make_pair(in_edge_iterator(g.out_edge_list(u).begin(), u),
+ in_edge_iterator(g.out_edge_list(u).end(), u));
+ }
+
+ template <class Config>
+ inline typename Config::degree_size_type
+ in_degree(typename Config::vertex_descriptor u,
+ const undirected_graph_helper<Config>& g_)
+ { return degree(u, g_); }
+
+ //=========================================================================
+ // Bidirectional Graph Helper Class
+
+ struct bidir_adj_list_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag,
+ public virtual bidirectional_graph_tag { };
+
+ template <class Config>
+ struct bidirectional_graph_helper
+ : public directed_edges_helper<Config> {
+ typedef bidir_adj_list_traversal_tag traversal_category;
+ };
+
+ // Had to make these non-members to avoid accidental instantiation
+ // on SGI MIPSpro C++
+ template <class C>
+ inline typename C::InEdgeList&
+ in_edge_list(bidirectional_graph_helper<C>&,
+ typename C::vertex_descriptor v)
+ {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_in_edges;
+ }
+ template <class C>
+ inline const typename C::InEdgeList&
+ in_edge_list(const bidirectional_graph_helper<C>&,
+ typename C::vertex_descriptor v) {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_in_edges;
+ }
+
+ template <class Predicate, class Config>
+ inline void
+ remove_edge_if(Predicate pred, bidirectional_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::edge_iterator ei, ei_end, next;
+ boost::tie(ei, ei_end) = edges(g);
+ for (next = ei; ei != ei_end; ei = next) {
+ ++next;
+ if (pred(*ei))
+ remove_edge(*ei, g);
+ }
+ }
+
+ template <class Config>
+ inline std::pair<typename Config::in_edge_iterator,
+ typename Config::in_edge_iterator>
+ in_edges(typename Config::vertex_descriptor u,
+ const bidirectional_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ typedef typename Config::in_edge_iterator in_edge_iterator;
+ return
+ std::make_pair(in_edge_iterator(in_edge_list(g, u).begin(), u),
+ in_edge_iterator(in_edge_list(g, u).end(), u));
+ }
+
+ // O(1)
+ template <class Config>
+ inline std::pair<typename Config::edge_iterator,
+ typename Config::edge_iterator>
+ edges(const bidirectional_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_iterator edge_iterator;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ return std::make_pair( edge_iterator(g.m_edges.begin()),
+ edge_iterator(g.m_edges.end()) );
+ }
+
+ //=========================================================================
+ // Bidirectional Graph Helper Class (with edge properties)
+
+
+ template <class Config>
+ struct bidirectional_graph_helper_with_property
+ : public bidirectional_graph_helper<Config>
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ void*)
+ { return out_edges(source(e, g), g); }
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ setS*)
+ { return edge_range(source(e, g), target(e, g), g); }
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ multisetS*)
+ { return edge_range(source(e, g), target(e, g), g); }
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ hash_setS*)
+ { return edge_range(source(e, g), target(e, g), g); }
+
+ // Placement of these overloaded remove_edge() functions
+ // inside the class avoids a VC++ bug.
+
+ // O(E/V) or O(log(E/V))
+ void
+ remove_edge(typename Config::edge_descriptor e)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ graph_type& g = static_cast<graph_type&>(*this);
+
+ typedef typename Config::edgelist_selector OutEdgeListS;
+
+ std::pair<out_edge_iterator, out_edge_iterator> rng =
+ get_parallel_edge_sublist(e, g, (OutEdgeListS*)(0));
+ rng.first = std::find(rng.first, rng.second, e);
+ BOOST_ASSERT(rng.first != rng.second);
+ remove_edge(rng.first);
+ }
+
+ inline void
+ remove_edge(typename Config::out_edge_iterator iter)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(*this);
+ typename Config::edge_descriptor e = *iter;
+ typename Config::OutEdgeList& oel = g.out_edge_list(source(e, g));
+ typename Config::InEdgeList& iel = in_edge_list(g, target(e, g));
+ typedef typename Config::OutEdgeList::value_type::property_type PType;
+ PType& p = *(PType*)e.get_property();
+ detail::remove_directed_edge_dispatch(*iter, iel, p);
+ g.m_edges.erase(iter.base()->get_iter());
+ oel.erase(iter.base());
+ }
+ };
+
+ // O(E/V) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline void
+ remove_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat());
+ detail::erase_from_incidence_list(in_edge_list(g, v), u, Cat());
+ }
+
+ // O(E/V) or O(log(E/V))
+ template <class EdgeOrIter, class Config>
+ inline void
+ remove_edge(EdgeOrIter e,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ g_.remove_edge(e);
+ }
+
+ template <class Config, class Predicate>
+ inline void
+ remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::OutEdgeList::value_type::property_type PropT;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typedef typename Config::EdgeIter EdgeIter;
+ typedef std::vector<EdgeIter> Garbage;
+ Garbage garbage;
+
+ // First remove the edges from the targets' in-edge lists and
+ // from the graph's edge set list.
+ typename Config::out_edge_iterator out_i, out_end;
+ for (boost::tie(out_i, out_end) = out_edges(u, g); out_i != out_end; ++out_i)
+ if (pred(*out_i)) {
+ detail::remove_directed_edge_dispatch
+ (*out_i, in_edge_list(g, target(*out_i, g)),
+ *(PropT*)(*out_i).get_property());
+ // Put in garbage to delete later. Will need the properties
+ // for the remove_if of the out-edges.
+ garbage.push_back((*out_i.base()).get_iter());
+ }
+
+ // Now remove the edges from this out-edge list.
+ typename Config::out_edge_iterator first, last;
+ boost::tie(first, last) = out_edges(u, g);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_directed_edge_if_dispatch
+ (first, last, g.out_edge_list(u), pred, Cat());
+
+ // Now delete the edge properties from the g.m_edges list
+ for (typename Garbage::iterator i = garbage.begin();
+ i != garbage.end(); ++i)
+ g.m_edges.erase(*i);
+ }
+ template <class Config, class Predicate>
+ inline void
+ remove_in_edge_if(typename Config::vertex_descriptor v, Predicate pred,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::OutEdgeList::value_type::property_type PropT;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typedef typename Config::EdgeIter EdgeIter;
+ typedef std::vector<EdgeIter> Garbage;
+ Garbage garbage;
+
+ // First remove the edges from the sources' out-edge lists and
+ // from the graph's edge set list.
+ typename Config::in_edge_iterator in_i, in_end;
+ for (boost::tie(in_i, in_end) = in_edges(v, g); in_i != in_end; ++in_i)
+ if (pred(*in_i)) {
+ typename Config::vertex_descriptor u = source(*in_i, g);
+ detail::remove_directed_edge_dispatch
+ (*in_i, g.out_edge_list(u), *(PropT*)(*in_i).get_property());
+ // Put in garbage to delete later. Will need the properties
+ // for the remove_if of the out-edges.
+ garbage.push_back((*in_i.base()).get_iter());
+ }
+ // Now remove the edges from this in-edge list.
+ typename Config::in_edge_iterator first, last;
+ boost::tie(first, last) = in_edges(v, g);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_directed_edge_if_dispatch
+ (first, last, in_edge_list(g, v), pred, Cat());
+
+ // Now delete the edge properties from the g.m_edges list
+ for (typename Garbage::iterator i = garbage.begin();
+ i != garbage.end(); ++i)
+ g.m_edges.erase(*i);
+ }
+
+ // O(1)
+ template <class Config>
+ inline typename Config::edges_size_type
+ num_edges(const bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ return g.m_edges.size();
+ }
+ // O(E/V * E/V) for allow_parallel_edge_tag
+ // O(E/V * log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline void
+ clear_vertex(typename Config::vertex_descriptor u,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator
+ ei = el.begin(), ei_end = el.end();
+ for (; ei != ei_end; ++ei) {
+ detail::erase_from_incidence_list
+ (in_edge_list(g, (*ei).get_target()), u, Cat());
+ g.m_edges.erase((*ei).get_iter());
+ }
+ typename Config::InEdgeList& in_el = in_edge_list(g, u);
+ typename Config::InEdgeList::iterator
+ in_ei = in_el.begin(), in_ei_end = in_el.end();
+ for (; in_ei != in_ei_end; ++in_ei) {
+ detail::erase_from_incidence_list
+ (g.out_edge_list((*in_ei).get_target()), u, Cat());
+ g.m_edges.erase((*in_ei).get_iter());
+ }
+ g.out_edge_list(u).clear();
+ in_edge_list(g, u).clear();
+ }
+
+ template <class Config>
+ inline void
+ clear_out_edges(typename Config::vertex_descriptor u,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator
+ ei = el.begin(), ei_end = el.end();
+ for (; ei != ei_end; ++ei) {
+ detail::erase_from_incidence_list
+ (in_edge_list(g, (*ei).get_target()), u, Cat());
+ g.m_edges.erase((*ei).get_iter());
+ }
+ g.out_edge_list(u).clear();
+ }
+
+ template <class Config>
+ inline void
+ clear_in_edges(typename Config::vertex_descriptor u,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::InEdgeList& in_el = in_edge_list(g, u);
+ typename Config::InEdgeList::iterator
+ in_ei = in_el.begin(), in_ei_end = in_el.end();
+ for (; in_ei != in_ei_end; ++in_ei) {
+ detail::erase_from_incidence_list
+ (g.out_edge_list((*in_ei).get_target()), u, Cat());
+ g.m_edges.erase((*in_ei).get_iter());
+ }
+ in_edge_list(g, u).clear();
+ }
+
+ // O(1) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::StoredEdge StoredEdge;
+ bool inserted;
+ typename Config::EdgeContainer::value_type e(u, v, p);
+ typename Config::EdgeContainer::iterator p_iter
+ = graph_detail::push(g.m_edges, e).first;
+ typename Config::OutEdgeList::iterator i;
+ boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+ StoredEdge(v, p_iter, &g.m_edges));
+ if (inserted) {
+ boost::graph_detail::push(in_edge_list(g, v), StoredEdge(u, p_iter, &g.m_edges));
+ return std::make_pair(edge_descriptor(u, v, &p_iter->m_property),
+ true);
+ } else {
+ g.m_edges.erase(p_iter);
+ return std::make_pair(edge_descriptor(u, v,
+ &i->get_iter()->get_property()),
+ false);
+ }
+ }
+
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+ // O(1)
+ template <class Config>
+ inline typename Config::degree_size_type
+ degree(typename Config::vertex_descriptor u,
+ const bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ return in_degree(u, g) + out_degree(u, g);
+ }
+
+ //=========================================================================
+ // Adjacency List Helper Class
+
+ template <class Config, class Base>
+ struct adj_list_helper : public Base
+ {
+ typedef typename Config::graph_type AdjList;
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ typedef typename Config::in_edge_iterator in_edge_iterator;
+ typedef typename Config::adjacency_iterator adjacency_iterator;
+ typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator;
+ typedef typename Config::vertex_iterator vertex_iterator;
+ typedef typename Config::edge_iterator edge_iterator;
+ typedef typename Config::directed_category directed_category;
+ typedef typename Config::edge_parallel_category edge_parallel_category;
+ typedef typename Config::vertices_size_type vertices_size_type;
+ typedef typename Config::edges_size_type edges_size_type;
+ typedef typename Config::degree_size_type degree_size_type;
+ typedef typename Config::StoredEdge StoredEdge;
+ typedef typename Config::vertex_property_type vertex_property_type;
+ typedef typename Config::edge_property_type edge_property_type;
+ typedef typename Config::graph_property_type graph_property_type;
+
+ typedef typename Config::global_edgelist_selector
+ global_edgelist_selector;
+
+ typedef typename lookup_one_property<vertex_property_type, vertex_bundle_t>::type vertex_bundled;
+ typedef typename lookup_one_property<edge_property_type, edge_bundle_t>::type edge_bundled;
+ typedef typename lookup_one_property<graph_property_type, graph_bundle_t>::type graph_bundled;
+ };
+
+ template <class Config, class Base>
+ inline std::pair<typename Config::adjacency_iterator,
+ typename Config::adjacency_iterator>
+ adjacent_vertices(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ typedef typename Config::adjacency_iterator adjacency_iterator;
+ typename Config::out_edge_iterator first, last;
+ boost::tie(first, last) = out_edges(u, g);
+ return std::make_pair(adjacency_iterator(first, &g),
+ adjacency_iterator(last, &g));
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::inv_adjacency_iterator,
+ typename Config::inv_adjacency_iterator>
+ inv_adjacent_vertices(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator;
+ typename Config::in_edge_iterator first, last;
+ boost::tie(first, last) = in_edges(u, g);
+ return std::make_pair(inv_adjacency_iterator(first, &g),
+ inv_adjacency_iterator(last, &g));
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::out_edge_iterator,
+ typename Config::out_edge_iterator>
+ out_edges(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ return
+ std::make_pair(out_edge_iterator(g.out_edge_list(u).begin(), u),
+ out_edge_iterator(g.out_edge_list(u).end(), u));
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::vertex_iterator,
+ typename Config::vertex_iterator>
+ vertices(const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ return std::make_pair( g.vertex_set().begin(), g.vertex_set().end() );
+ }
+ template <class Config, class Base>
+ inline typename Config::vertices_size_type
+ num_vertices(const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& g = static_cast<const AdjList&>(g_);
+ return g.vertex_set().size();
+ }
+ template <class Config, class Base>
+ inline typename Config::degree_size_type
+ out_degree(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& g = static_cast<const AdjList&>(g_);
+ return g.out_edge_list(u).size();
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ typedef typename Config::StoredEdge StoredEdge;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ const typename Config::OutEdgeList& el = cg.out_edge_list(u);
+ typename Config::OutEdgeList::const_iterator it = graph_detail::
+ find(el, StoredEdge(v));
+ return std::make_pair(
+ typename Config::edge_descriptor
+ (u, v, (it == el.end() ? 0 : &(*it).get_property())),
+ (it != el.end()));
+ }
+
+ template <class Config, class Base>
+ inline std::pair<typename Config::out_edge_iterator,
+ typename Config::out_edge_iterator>
+ edge_range(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ typedef typename Config::StoredEdge StoredEdge;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator first, last;
+ typename Config::EdgeContainer fake_edge_container;
+ boost::tie(first, last) = graph_detail::
+ equal_range(el, StoredEdge(v, fake_edge_container.end(),
+ &fake_edge_container));
+ return std::make_pair(out_edge_iterator(first, u),
+ out_edge_iterator(last, u));
+ }
+
+ template <class Config>
+ inline typename Config::degree_size_type
+ in_degree(typename Config::vertex_descriptor u,
+ const directed_edges_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ return in_edge_list(g, u).size();
+ }
+
+ namespace detail {
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::type
+ get_dispatch(adj_list_helper<Config,Base>&, Property p,
+ boost::edge_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::type PA;
+ return PA(p);
+ }
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ get_dispatch(const adj_list_helper<Config,Base>&, Property p,
+ boost::edge_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::const_type PA;
+ return PA(p);
+ }
+
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::type
+ get_dispatch(adj_list_helper<Config,Base>& g, Property p,
+ boost::vertex_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::type PA;
+ return PA(&static_cast<Graph&>(g), p);
+ }
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ get_dispatch(const adj_list_helper<Config, Base>& g, Property p,
+ boost::vertex_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::const_type PA;
+ const Graph& cg = static_cast<const Graph&>(g);
+ return PA(&cg, p);
+ }
+
+ } // namespace detail
+
+ // Implementation of the PropertyGraph interface
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type, Property>::type
+ get(Property p, adj_list_helper<Config, Base>& g) {
+ typedef typename detail::property_kind_from_graph<adj_list_helper<Config, Base>, Property>::type Kind;
+ return detail::get_dispatch(g, p, Kind());
+ }
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ get(Property p, const adj_list_helper<Config, Base>& g) {
+ typedef typename detail::property_kind_from_graph<adj_list_helper<Config, Base>, Property>::type Kind;
+ return detail::get_dispatch(g, p, Kind());
+ }
+
+ template <class Config, class Base, class Property, class Key>
+ inline
+ typename boost::property_traits<
+ typename boost::property_map<typename Config::graph_type,
+ Property>::type
+ >::reference
+ get(Property p, adj_list_helper<Config, Base>& g, const Key& key) {
+ return get(get(p, g), key);
+ }
+
+ template <class Config, class Base, class Property, class Key>
+ inline
+ typename boost::property_traits<
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ >::reference
+ get(Property p, const adj_list_helper<Config, Base>& g, const Key& key) {
+ return get(get(p, g), key);
+ }
+
+ template <class Config, class Base, class Property, class Key,class Value>
+ inline void
+ put(Property p, adj_list_helper<Config, Base>& g,
+ const Key& key, const Value& value)
+ {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::type Map;
+ Map pmap = get(p, static_cast<Graph&>(g));
+ put(pmap, key, value);
+ }
+
+
+ //=========================================================================
+ // Generalize Adjacency List Implementation
+
+ struct adj_list_tag { };
+
+ template <class Derived, class Config, class Base>
+ class adj_list_impl
+ : public adj_list_helper<Config, Base>
+ {
+ typedef typename Config::OutEdgeList OutEdgeList;
+ typedef typename Config::InEdgeList InEdgeList;
+ typedef typename Config::StoredVertexList StoredVertexList;
+ public:
+ typedef typename Config::stored_vertex stored_vertex;
+ typedef typename Config::EdgeContainer EdgeContainer;
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::vertex_iterator vertex_iterator;
+ typedef typename Config::edge_iterator edge_iterator;
+ typedef typename Config::edge_parallel_category edge_parallel_category;
+ typedef typename Config::vertices_size_type vertices_size_type;
+ typedef typename Config::edges_size_type edges_size_type;
+ typedef typename Config::degree_size_type degree_size_type;
+ typedef typename Config::edge_property_type edge_property_type;
+ typedef adj_list_tag graph_tag;
+
+ static vertex_descriptor null_vertex()
+ {
+ return 0;
+ }
+
+ inline adj_list_impl() { }
+
+ inline adj_list_impl(const adj_list_impl& x) {
+ copy_impl(x);
+ }
+ inline adj_list_impl& operator=(const adj_list_impl& x) {
+ this->clear();
+ copy_impl(x);
+ return *this;
+ }
+ inline void clear() {
+ for (typename StoredVertexList::iterator i = m_vertices.begin();
+ i != m_vertices.end(); ++i)
+ delete (stored_vertex*)*i;
+ m_vertices.clear();
+ m_edges.clear();
+ }
+ inline adj_list_impl(vertices_size_type num_vertices) {
+ for (vertices_size_type i = 0; i < num_vertices; ++i)
+ add_vertex(static_cast<Derived&>(*this));
+ }
+ template <class EdgeIterator>
+ inline adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last)
+ {
+ vertex_descriptor* v = new vertex_descriptor[num_vertices];
+ for (vertices_size_type i = 0; i < num_vertices; ++i)
+ v[i] = add_vertex(static_cast<Derived&>(*this));
+
+ while (first != last) {
+ add_edge(v[(*first).first], v[(*first).second], *this);
+ ++first;
+ }
+ delete [] v;
+ }
+ template <class EdgeIterator, class EdgePropertyIterator>
+ inline adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last,
+ EdgePropertyIterator ep_iter)
+ {
+ vertex_descriptor* v = new vertex_descriptor[num_vertices];
+ for (vertices_size_type i = 0; i < num_vertices; ++i)
+ v[i] = add_vertex(static_cast<Derived&>(*this));
+
+ while (first != last) {
+ add_edge(v[(*first).first], v[(*first).second], *ep_iter, *this);
+ ++first;
+ ++ep_iter;
+ }
+ delete [] v;
+ }
+ ~adj_list_impl() {
+ for (typename StoredVertexList::iterator i = m_vertices.begin();
+ i != m_vertices.end(); ++i)
+ delete (stored_vertex*)*i;
+ }
+ // protected:
+ inline OutEdgeList& out_edge_list(vertex_descriptor v) {
+ stored_vertex* sv = (stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+ inline const OutEdgeList& out_edge_list(vertex_descriptor v) const {
+ stored_vertex* sv = (stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+ inline StoredVertexList& vertex_set() { return m_vertices; }
+ inline const StoredVertexList& vertex_set() const { return m_vertices; }
+
+ inline void copy_impl(const adj_list_impl& x_)
+ {
+ const Derived& x = static_cast<const Derived&>(x_);
+
+ // Would be better to have a constant time way to get from
+ // vertices in x to the corresponding vertices in *this.
+ std::map<stored_vertex*,stored_vertex*> vertex_map;
+
+ // Copy the stored vertex objects by adding each vertex
+ // and copying its property object.
+ vertex_iterator vi, vi_end;
+ for (boost::tie(vi, vi_end) = vertices(x); vi != vi_end; ++vi) {
+ stored_vertex* v = (stored_vertex*)add_vertex(*this);
+ v->m_property = ((stored_vertex*)*vi)->m_property;
+ vertex_map[(stored_vertex*)*vi] = v;
+ }
+ // Copy the edges by adding each edge and copying its
+ // property object.
+ edge_iterator ei, ei_end;
+ for (boost::tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) {
+ edge_descriptor e;
+ bool inserted;
+ vertex_descriptor s = source(*ei,x), t = target(*ei,x);
+ boost::tie(e, inserted) = add_edge(vertex_map[(stored_vertex*)s],
+ vertex_map[(stored_vertex*)t], *this);
+ *((edge_property_type*)e.m_eproperty)
+ = *((edge_property_type*)(*ei).m_eproperty);
+ }
+ }
+
+
+ typename Config::EdgeContainer m_edges;
+ StoredVertexList m_vertices;
+ };
+
+ // O(1)
+ template <class Derived, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(adj_list_impl<Derived, Config, Base>& g_)
+ {
+ Derived& g = static_cast<Derived&>(g_);
+ typedef typename Config::stored_vertex stored_vertex;
+ stored_vertex* v = new stored_vertex;
+ typename Config::StoredVertexList::iterator pos;
+ bool inserted;
+ boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v);
+ v->m_position = pos;
+ g.added_vertex(v);
+ return v;
+ }
+ // O(1)
+ template <class Derived, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(const typename Config::vertex_property_type& p,
+ adj_list_impl<Derived, Config, Base>& g_)
+ {
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ Derived& g = static_cast<Derived&>(g_);
+ if (optional<vertex_descriptor> v
+ = g.vertex_by_property(get_property_value(p, vertex_bundle)))
+ return *v;
+
+ typedef typename Config::stored_vertex stored_vertex;
+ stored_vertex* v = new stored_vertex(p);
+ typename Config::StoredVertexList::iterator pos;
+ bool inserted;
+ boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v);
+ v->m_position = pos;
+ g.added_vertex(v);
+ return v;
+ }
+ // O(1)
+ template <class Derived, class Config, class Base>
+ inline void remove_vertex(typename Config::vertex_descriptor u,
+ adj_list_impl<Derived, Config, Base>& g_)
+ {
+ typedef typename Config::stored_vertex stored_vertex;
+ Derived& g = static_cast<Derived&>(g_);
+ g.removing_vertex(u);
+ stored_vertex* su = (stored_vertex*)u;
+ g.m_vertices.erase(su->m_position);
+ delete su;
+ }
+ // O(V)
+ template <class Derived, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ vertex(typename Config::vertices_size_type n,
+ const adj_list_impl<Derived, Config, Base>& g_)
+ {
+ const Derived& g = static_cast<const Derived&>(g_);
+ typename Config::vertex_iterator i = vertices(g).first;
+ while (n--) ++i; // std::advance(i, n); (not VC++ portable)
+ return *i;
+ }
+
+ //=========================================================================
+ // Vector-Backbone Adjacency List Implementation
+
+ namespace detail {
+
+ template <class Graph, class vertex_descriptor>
+ inline void
+ remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+ boost::directed_tag)
+ {
+ typedef typename Graph::edge_parallel_category edge_parallel_category;
+ g.m_vertices.erase(g.m_vertices.begin() + u);
+ vertex_descriptor V = num_vertices(g);
+ if (u != V) {
+ for (vertex_descriptor v = 0; v < V; ++v)
+ reindex_edge_list(g.out_edge_list(v), u, edge_parallel_category());
+ }
+ }
+
+ template <class Graph, class vertex_descriptor>
+ inline void
+ remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+ boost::undirected_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Graph::edge_parallel_category edge_parallel_category;
+ g.m_vertices.erase(g.m_vertices.begin() + u);
+ vertex_descriptor V = num_vertices(g);
+ for (vertex_descriptor v = 0; v < V; ++v)
+ reindex_edge_list(g.out_edge_list(v), u,
+ edge_parallel_category());
+ typedef typename Graph::EdgeContainer Container;
+ typedef typename Container::iterator Iter;
+ Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end();
+ for (; ei != ei_end; ++ei) {
+ if (ei->m_source > u)
+ --ei->m_source;
+ if (ei->m_target > u)
+ --ei->m_target;
+ }
+ }
+ template <class Graph, class vertex_descriptor>
+ inline void
+ remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+ boost::bidirectional_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+ typedef typename Graph::edge_parallel_category edge_parallel_category;
+ g.m_vertices.erase(g.m_vertices.begin() + u);
+ vertex_descriptor V = num_vertices(g);
+ vertex_descriptor v;
+ if (u != V) {
+ for (v = 0; v < V; ++v)
+ reindex_edge_list(g.out_edge_list(v), u,
+ edge_parallel_category());
+ for (v = 0; v < V; ++v)
+ reindex_edge_list(in_edge_list(g, v), u,
+ edge_parallel_category());
+
+ typedef typename Graph::EdgeContainer Container;
+ typedef typename Container::iterator Iter;
+ Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end();
+ for (; ei != ei_end; ++ei) {
+ if (ei->m_source > u)
+ --ei->m_source;
+ if (ei->m_target > u)
+ --ei->m_target;
+ }
+ }
+ }
+
+ template <class EdgeList, class vertex_descriptor>
+ inline void
+ reindex_edge_list(EdgeList& el, vertex_descriptor u,
+ boost::allow_parallel_edge_tag)
+ {
+ typename EdgeList::iterator ei = el.begin(), e_end = el.end();
+ for (; ei != e_end; ++ei)
+ if ((*ei).get_target() > u)
+ --(*ei).get_target();
+ }
+ template <class EdgeList, class vertex_descriptor>
+ inline void
+ reindex_edge_list(EdgeList& el, vertex_descriptor u,
+ boost::disallow_parallel_edge_tag)
+ {
+ typename EdgeList::iterator ei = el.begin(), e_end = el.end();
+ while (ei != e_end) {
+ typename EdgeList::value_type ce = *ei;
+ ++ei;
+ if (ce.get_target() > u) {
+ el.erase(ce);
+ --ce.get_target();
+ el.insert(ce);
+ }
+ }
+ }
+ } // namespace detail
+
+ struct vec_adj_list_tag { };
+
+ template <class Graph, class Config, class Base>
+ class vec_adj_list_impl
+ : public adj_list_helper<Config, Base>
+ {
+ typedef typename Config::OutEdgeList OutEdgeList;
+ typedef typename Config::InEdgeList InEdgeList;
+ typedef typename Config::StoredVertexList StoredVertexList;
+ public:
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ typedef typename Config::edge_iterator edge_iterator;
+ typedef typename Config::directed_category directed_category;
+ typedef typename Config::vertices_size_type vertices_size_type;
+ typedef typename Config::edges_size_type edges_size_type;
+ typedef typename Config::degree_size_type degree_size_type;
+ typedef typename Config::StoredEdge StoredEdge;
+ typedef typename Config::stored_vertex stored_vertex;
+ typedef typename Config::EdgeContainer EdgeContainer;
+ typedef typename Config::edge_property_type edge_property_type;
+ typedef vec_adj_list_tag graph_tag;
+
+ static vertex_descriptor null_vertex()
+ {
+ return (std::numeric_limits<vertex_descriptor>::max)();
+ }
+
+ inline vec_adj_list_impl() { }
+
+ inline vec_adj_list_impl(const vec_adj_list_impl& x) {
+ copy_impl(x);
+ }
+ inline vec_adj_list_impl& operator=(const vec_adj_list_impl& x) {
+ this->clear();
+ copy_impl(x);
+ return *this;
+ }
+ inline void clear() {
+ m_vertices.clear();
+ m_edges.clear();
+ }
+
+ inline vec_adj_list_impl(vertices_size_type _num_vertices)
+ : m_vertices(_num_vertices) { }
+
+ template <class EdgeIterator>
+ inline vec_adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last)
+ : m_vertices(num_vertices)
+ {
+ while (first != last) {
+ add_edge((*first).first, (*first).second,
+ static_cast<Graph&>(*this));
+ ++first;
+ }
+ }
+ template <class EdgeIterator, class EdgePropertyIterator>
+ inline vec_adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last,
+ EdgePropertyIterator ep_iter)
+ : m_vertices(num_vertices)
+ {
+ while (first != last) {
+ add_edge((*first).first, (*first).second, *ep_iter,
+ static_cast<Graph&>(*this));
+ ++first;
+ ++ep_iter;
+ }
+ }
+
+ // protected:
+ inline boost::integer_range<vertex_descriptor> vertex_set() const {
+ return boost::integer_range<vertex_descriptor>(0, m_vertices.size());
+ }
+ inline OutEdgeList& out_edge_list(vertex_descriptor v) {
+ return m_vertices[v].m_out_edges;
+ }
+ inline const OutEdgeList& out_edge_list(vertex_descriptor v) const {
+ return m_vertices[v].m_out_edges;
+ }
+ inline void copy_impl(const vec_adj_list_impl& x_)
+ {
+ const Graph& x = static_cast<const Graph&>(x_);
+ // Copy the stored vertex objects by adding each vertex
+ // and copying its property object.
+ for (vertices_size_type i = 0; i < num_vertices(x); ++i) {
+ vertex_descriptor v = add_vertex(*this);
+ m_vertices[v].m_property = x.m_vertices[i].m_property;
+ }
+ // Copy the edges by adding each edge and copying its
+ // property object.
+ edge_iterator ei, ei_end;
+ for (boost::tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) {
+ edge_descriptor e;
+ bool inserted;
+ boost::tie(e, inserted) = add_edge(source(*ei,x), target(*ei,x) , *this);
+ *((edge_property_type*)e.m_eproperty)
+ = *((edge_property_type*)(*ei).m_eproperty);
+ }
+ }
+ typename Config::EdgeContainer m_edges;
+ StoredVertexList m_vertices;
+ };
+ // Had to make these non-members to avoid accidental instantiation
+ // on SGI MIPSpro C++
+ template <class G, class C, class B>
+ inline typename C::InEdgeList&
+ in_edge_list(vec_adj_list_impl<G,C,B>& g,
+ typename C::vertex_descriptor v) {
+ return g.m_vertices[v].m_in_edges;
+ }
+ template <class G, class C, class B>
+ inline const typename C::InEdgeList&
+ in_edge_list(const vec_adj_list_impl<G,C,B>& g,
+ typename C::vertex_descriptor v) {
+ return g.m_vertices[v].m_in_edges;
+ }
+
+ // O(1)
+ template <class Graph, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(vec_adj_list_impl<Graph, Config, Base>& g_) {
+ Graph& g = static_cast<Graph&>(g_);
+ g.m_vertices.resize(g.m_vertices.size() + 1);
+ g.added_vertex(g.m_vertices.size() - 1);
+ return g.m_vertices.size() - 1;
+ }
+
+ template <class Graph, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(const typename Config::vertex_property_type& p,
+ vec_adj_list_impl<Graph, Config, Base>& g_) {
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ Graph& g = static_cast<Graph&>(g_);
+ if (optional<vertex_descriptor> v
+ = g.vertex_by_property(get_property_value(p, vertex_bundle)))
+ return *v;
+ typedef typename Config::stored_vertex stored_vertex;
+ g.m_vertices.push_back(stored_vertex(p));
+ g.added_vertex(g.m_vertices.size() - 1);
+ return g.m_vertices.size() - 1;
+ }
+
+ // Here we override the directed_graph_helper add_edge() function
+ // so that the number of vertices is automatically changed if
+ // either u or v is greater than the number of vertices.
+ template <class Graph, class Config, class Base>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ vec_adj_list_impl<Graph, Config, Base>& g_)
+ {
+ BOOST_USING_STD_MAX();
+ typename Config::vertex_descriptor x = max BOOST_PREVENT_MACRO_SUBSTITUTION(u, v);
+ if (x >= num_vertices(g_))
+ g_.m_vertices.resize(x + 1);
+ adj_list_helper<Config, Base>& g = g_;
+ return add_edge(u, v, p, g);
+ }
+ template <class Graph, class Config, class Base>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ vec_adj_list_impl<Graph, Config, Base>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+
+
+ // O(V + E)
+ template <class Graph, class Config, class Base>
+ inline void remove_vertex(typename Config::vertex_descriptor v,
+ vec_adj_list_impl<Graph, Config, Base>& g_)
+ {
+ typedef typename Config::directed_category Cat;
+ Graph& g = static_cast<Graph&>(g_);
+ g.removing_vertex(v);
+ detail::remove_vertex_dispatch(g, v, Cat());
+ }
+ // O(1)
+ template <class Graph, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ vertex(typename Config::vertices_size_type n,
+ const vec_adj_list_impl<Graph, Config, Base>&)
+ {
+ return n;
+ }
+
+
+ namespace detail {
+
+ //=========================================================================
+ // Adjacency List Generator
+
+ template <class Graph, class VertexListS, class OutEdgeListS,
+ class DirectedS, class VertexProperty, class EdgeProperty,
+ class GraphProperty, class EdgeListS>
+ struct adj_list_gen
+ {
+ // Remove these assertions once PtrContainer support is implemented.
+ BOOST_STATIC_ASSERT((!is_ptr_selector<VertexListS>::value));
+ BOOST_STATIC_ASSERT((!is_ptr_selector<OutEdgeListS>::value));
+ BOOST_STATIC_ASSERT((!is_ptr_selector<EdgeListS>::value));
+
+ typedef typename is_random_access_selector<VertexListS>::type
+ is_rand_access;
+ typedef typename has_property<EdgeProperty>::type has_edge_property;
+ typedef typename DirectedS::is_directed_t DirectedT;
+ typedef typename DirectedS::is_bidir_t BidirectionalT;
+
+ struct config
+ {
+ typedef OutEdgeListS edgelist_selector;
+ typedef EdgeListS global_edgelist_selector;
+
+ typedef Graph graph_type;
+ typedef EdgeProperty edge_property_type;
+ typedef VertexProperty vertex_property_type;
+ typedef GraphProperty graph_property_type;
+ typedef std::size_t vertices_size_type;
+
+ typedef adjacency_list_traits<OutEdgeListS, VertexListS, DirectedS>
+ Traits;
+
+ typedef typename Traits::directed_category directed_category;
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+
+ typedef void* vertex_ptr;
+
+ // need to reorganize this to avoid instantiating stuff
+ // that doesn't get used -JGS
+
+ // VertexList and vertex_iterator
+ typedef typename container_gen<VertexListS,
+ vertex_ptr>::type SeqVertexList;
+ typedef boost::integer_range<vertex_descriptor> RandVertexList;
+ typedef typename mpl::if_<is_rand_access,
+ RandVertexList, SeqVertexList>::type VertexList;
+
+ typedef typename VertexList::iterator vertex_iterator;
+
+ // EdgeContainer and StoredEdge
+
+ typedef typename container_gen<EdgeListS,
+ list_edge<vertex_descriptor, EdgeProperty> >::type EdgeContainer;
+
+ typedef typename mpl::and_<DirectedT,
+ typename mpl::not_<BidirectionalT>::type >::type on_edge_storage;
+
+ typedef typename mpl::if_<on_edge_storage,
+ std::size_t, typename EdgeContainer::size_type
+ >::type edges_size_type;
+
+ typedef typename EdgeContainer::iterator EdgeIter;
+
+ typedef typename is_random_access_selector<EdgeListS>::type is_edge_ra;
+
+ typedef typename mpl::if_<on_edge_storage,
+ stored_edge_property<vertex_descriptor, EdgeProperty>,
+ typename mpl::if_<is_edge_ra,
+ stored_ra_edge_iter<vertex_descriptor, EdgeContainer, EdgeProperty>,
+ stored_edge_iter<vertex_descriptor, EdgeIter, EdgeProperty>
+ >::type
+ >::type StoredEdge;
+
+ // Adjacency Types
+
+ typedef typename container_gen<OutEdgeListS, StoredEdge>::type
+ OutEdgeList;
+ typedef typename OutEdgeList::size_type degree_size_type;
+ typedef typename OutEdgeList::iterator OutEdgeIter;
+
+ typedef boost::detail::iterator_traits<OutEdgeIter> OutEdgeIterTraits;
+ typedef typename OutEdgeIterTraits::iterator_category OutEdgeIterCat;
+ typedef typename OutEdgeIterTraits::difference_type OutEdgeIterDiff;
+
+ typedef out_edge_iter<
+ OutEdgeIter, vertex_descriptor, edge_descriptor, OutEdgeIterDiff
+ > out_edge_iterator;
+
+ typedef typename adjacency_iterator_generator<graph_type,
+ vertex_descriptor, out_edge_iterator>::type adjacency_iterator;
+
+ typedef OutEdgeList InEdgeList;
+ typedef OutEdgeIter InEdgeIter;
+ typedef OutEdgeIterCat InEdgeIterCat;
+ typedef OutEdgeIterDiff InEdgeIterDiff;
+
+ typedef in_edge_iter<
+ InEdgeIter, vertex_descriptor, edge_descriptor, InEdgeIterDiff
+ > in_edge_iterator;
+
+ typedef typename inv_adjacency_iterator_generator<graph_type,
+ vertex_descriptor, in_edge_iterator>::type inv_adjacency_iterator;
+
+ // Edge Iterator
+
+ typedef boost::detail::iterator_traits<EdgeIter> EdgeIterTraits;
+ typedef typename EdgeIterTraits::iterator_category EdgeIterCat;
+ typedef typename EdgeIterTraits::difference_type EdgeIterDiff;
+
+ typedef undirected_edge_iter<
+ EdgeIter
+ , edge_descriptor
+ , EdgeIterDiff
+ > UndirectedEdgeIter; // also used for bidirectional
+
+ typedef adj_list_edge_iterator<vertex_iterator, out_edge_iterator,
+ graph_type> DirectedEdgeIter;
+
+ typedef typename mpl::if_<on_edge_storage,
+ DirectedEdgeIter, UndirectedEdgeIter>::type edge_iterator;
+
+ // stored_vertex and StoredVertexList
+ typedef typename container_gen<VertexListS, vertex_ptr>::type
+ SeqStoredVertexList;
+ struct seq_stored_vertex {
+ seq_stored_vertex() { }
+ seq_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ VertexProperty m_property;
+ typename SeqStoredVertexList::iterator m_position;
+ };
+ struct bidir_seq_stored_vertex {
+ bidir_seq_stored_vertex() { }
+ bidir_seq_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ InEdgeList m_in_edges;
+ VertexProperty m_property;
+ typename SeqStoredVertexList::iterator m_position;
+ };
+ struct rand_stored_vertex {
+ rand_stored_vertex() { }
+ rand_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ VertexProperty m_property;
+ };
+ struct bidir_rand_stored_vertex {
+ bidir_rand_stored_vertex() { }
+ bidir_rand_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ InEdgeList m_in_edges;
+ VertexProperty m_property;
+ };
+ typedef typename mpl::if_<is_rand_access,
+ typename mpl::if_<BidirectionalT,
+ bidir_rand_stored_vertex, rand_stored_vertex>::type,
+ typename mpl::if_<BidirectionalT,
+ bidir_seq_stored_vertex, seq_stored_vertex>::type
+ >::type StoredVertex;
+ struct stored_vertex : public StoredVertex {
+ stored_vertex() { }
+ stored_vertex(const VertexProperty& p) : StoredVertex(p) { }
+ };
+
+ typedef typename container_gen<VertexListS, stored_vertex>::type
+ RandStoredVertexList;
+ typedef typename mpl::if_< is_rand_access,
+ RandStoredVertexList, SeqStoredVertexList>::type StoredVertexList;
+ }; // end of config
+
+
+ typedef typename mpl::if_<BidirectionalT,
+ bidirectional_graph_helper_with_property<config>,
+ typename mpl::if_<DirectedT,
+ directed_graph_helper<config>,
+ undirected_graph_helper<config>
+ >::type
+ >::type DirectedHelper;
+
+ typedef typename mpl::if_<is_rand_access,
+ vec_adj_list_impl<Graph, config, DirectedHelper>,
+ adj_list_impl<Graph, config, DirectedHelper>
+ >::type type;
+
+ };
+
+ } // namespace detail
+
+ //=========================================================================
+ // Vertex Property Maps
+
+ template <class Graph, class ValueType, class Reference, class Tag>
+ struct adj_list_vertex_property_map
+ : public boost::put_get_helper<
+ Reference,
+ adj_list_vertex_property_map<Graph, ValueType, Reference, Tag>
+ >
+ {
+ typedef typename Graph::stored_vertex StoredVertex;
+ typedef ValueType value_type;
+ typedef Reference reference;
+ typedef typename Graph::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline adj_list_vertex_property_map(const Graph* = 0, Tag tag = Tag()): m_tag(tag) { }
+ inline Reference operator[](key_type v) const {
+ StoredVertex* sv = (StoredVertex*)v;
+ return get_property_value(sv->m_property, m_tag);
+ }
+ inline Reference operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ Tag m_tag;
+ };
+
+ template <class Graph, class Property, class PropRef>
+ struct adj_list_vertex_all_properties_map
+ : public boost::put_get_helper<PropRef,
+ adj_list_vertex_all_properties_map<Graph, Property, PropRef>
+ >
+ {
+ typedef typename Graph::stored_vertex StoredVertex;
+ typedef Property value_type;
+ typedef PropRef reference;
+ typedef typename Graph::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline adj_list_vertex_all_properties_map(const Graph* = 0, vertex_all_t = vertex_all_t()) { }
+ inline PropRef operator[](key_type v) const {
+ StoredVertex* sv = (StoredVertex*)v;
+ return sv->m_property;
+ }
+ inline PropRef operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ };
+
+ template <class Graph, class GraphPtr, class ValueType, class Reference,
+ class Tag>
+ struct vec_adj_list_vertex_property_map
+ : public boost::put_get_helper<
+ Reference,
+ vec_adj_list_vertex_property_map<Graph,GraphPtr,ValueType,Reference,
+ Tag>
+ >
+ {
+ typedef ValueType value_type;
+ typedef Reference reference;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ vec_adj_list_vertex_property_map(GraphPtr g = 0, Tag tag = Tag()) : m_g(g), m_tag(tag) { }
+ inline Reference operator[](key_type v) const {
+ return get_property_value(m_g->m_vertices[v].m_property, m_tag);
+ }
+ inline Reference operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ GraphPtr m_g;
+ Tag m_tag;
+ };
+
+ template <class Graph, class GraphPtr, class Property, class PropertyRef>
+ struct vec_adj_list_vertex_all_properties_map
+ : public boost::put_get_helper<PropertyRef,
+ vec_adj_list_vertex_all_properties_map<Graph,GraphPtr,Property,
+ PropertyRef>
+ >
+ {
+ typedef Property value_type;
+ typedef PropertyRef reference;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ vec_adj_list_vertex_all_properties_map(GraphPtr g = 0, vertex_all_t = vertex_all_t()) : m_g(g) { }
+ inline PropertyRef operator[](key_type v) const {
+ return m_g->m_vertices[v].m_property;
+ }
+ inline PropertyRef operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ GraphPtr m_g;
+ };
+
+ struct adj_list_any_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename property_value<Property, Tag>::type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+
+ typedef adj_list_vertex_property_map
+ <Graph, value_type, reference, Tag> type;
+ typedef adj_list_vertex_property_map
+ <Graph, value_type, const_reference, Tag> const_type;
+ };
+ };
+ struct adj_list_all_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef adj_list_vertex_all_properties_map<Graph,Property,
+ Property&> type;
+ typedef adj_list_vertex_all_properties_map<Graph,Property,
+ const Property&> const_type;
+ };
+ };
+
+ template <class Property, class Vertex>
+ struct vec_adj_list_vertex_id_map
+ : public boost::put_get_helper<
+ Vertex, vec_adj_list_vertex_id_map<Property, Vertex>
+ >
+ {
+ typedef Vertex value_type;
+ typedef Vertex key_type;
+ typedef Vertex reference;
+ typedef boost::readable_property_map_tag category;
+ inline vec_adj_list_vertex_id_map() { }
+ template <class Graph>
+ inline vec_adj_list_vertex_id_map(const Graph&, vertex_index_t) { }
+ inline value_type operator[](key_type v) const { return v; }
+ inline value_type operator()(key_type v) const { return v; }
+ };
+
+ struct vec_adj_list_any_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename property_value<Property, Tag>::type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+
+ typedef vec_adj_list_vertex_property_map
+ <Graph, Graph*, value_type, reference, Tag> type;
+ typedef vec_adj_list_vertex_property_map
+ <Graph, const Graph*, value_type, const_reference, Tag> const_type;
+ };
+ };
+ struct vec_adj_list_id_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef vec_adj_list_vertex_id_map<Property, Vertex> type;
+ typedef vec_adj_list_vertex_id_map<Property, Vertex> const_type;
+ };
+ };
+ struct vec_adj_list_all_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef vec_adj_list_vertex_all_properties_map
+ <Graph, Graph*, Property, Property&> type;
+ typedef vec_adj_list_vertex_all_properties_map
+ <Graph, const Graph*, Property, const Property&> const_type;
+ };
+ };
+ namespace detail {
+ template <class Tag, class Graph, class Property>
+ struct adj_list_choose_vertex_pa
+ : boost::mpl::if_<
+ boost::is_same<Tag, vertex_all_t>,
+ adj_list_all_vertex_pa,
+ adj_list_any_vertex_pa>::type
+ ::template bind_<Tag, Graph, Property>
+ {};
+
+
+ template <class Tag>
+ struct vec_adj_list_choose_vertex_pa_helper {
+ typedef vec_adj_list_any_vertex_pa type;
+ };
+ template <>
+ struct vec_adj_list_choose_vertex_pa_helper<vertex_index_t> {
+ typedef vec_adj_list_id_vertex_pa type;
+ };
+ template <>
+ struct vec_adj_list_choose_vertex_pa_helper<vertex_all_t> {
+ typedef vec_adj_list_all_vertex_pa type;
+ };
+ template <class Tag, class Graph, class Property>
+ struct vec_adj_list_choose_vertex_pa
+ : vec_adj_list_choose_vertex_pa_helper<Tag>::type::template bind_<Tag,Graph,Property>
+ {};
+ } // namespace detail
+
+ //=========================================================================
+ // Edge Property Map
+
+ template <class Directed, class Value, class Ref, class Vertex,
+ class Property, class Tag>
+ struct adj_list_edge_property_map
+ : public put_get_helper<
+ Ref,
+ adj_list_edge_property_map<Directed, Value, Ref, Vertex, Property,
+ Tag>
+ >
+ {
+ Tag tag;
+ explicit adj_list_edge_property_map(Tag tag = Tag()): tag(tag) {}
+
+ typedef Value value_type;
+ typedef Ref reference;
+ typedef detail::edge_desc_impl<Directed, Vertex> key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline Ref operator[](key_type e) const {
+ Property& p = *(Property*)e.get_property();
+ return get_property_value(p, tag);
+ }
+ inline Ref operator()(key_type e) const {
+ return this->operator[](e);
+ }
+ };
+
+ template <class Directed, class Property, class PropRef, class PropPtr,
+ class Vertex>
+ struct adj_list_edge_all_properties_map
+ : public put_get_helper<PropRef,
+ adj_list_edge_all_properties_map<Directed, Property, PropRef,
+ PropPtr, Vertex>
+ >
+ {
+ explicit adj_list_edge_all_properties_map(edge_all_t = edge_all_t()) {}
+ typedef Property value_type;
+ typedef PropRef reference;
+ typedef detail::edge_desc_impl<Directed, Vertex> key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline PropRef operator[](key_type e) const {
+ return *(PropPtr)e.get_property();
+ }
+ inline PropRef operator()(key_type e) const {
+ return this->operator[](e);
+ }
+ };
+
+ // Edge Property Maps
+
+ namespace detail {
+ struct adj_list_any_edge_pmap {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef typename property_value<Property,Tag>::type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+
+ typedef adj_list_edge_property_map
+ <typename Graph::directed_category, value_type, reference,
+ typename Graph::vertex_descriptor,Property,Tag> type;
+ typedef adj_list_edge_property_map
+ <typename Graph::directed_category, value_type, const_reference,
+ typename Graph::vertex_descriptor,const Property, Tag> const_type;
+ };
+ };
+ struct adj_list_all_edge_pmap {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef adj_list_edge_all_properties_map
+ <typename Graph::directed_category, Property, Property&, Property*,
+ typename Graph::vertex_descriptor> type;
+ typedef adj_list_edge_all_properties_map
+ <typename Graph::directed_category, Property, const Property&,
+ const Property*, typename Graph::vertex_descriptor> const_type;
+ };
+ };
+
+ template <class Tag>
+ struct adj_list_choose_edge_pmap_helper {
+ typedef adj_list_any_edge_pmap type;
+ };
+ template <>
+ struct adj_list_choose_edge_pmap_helper<edge_all_t> {
+ typedef adj_list_all_edge_pmap type;
+ };
+ template <class Tag, class Graph, class Property>
+ struct adj_list_choose_edge_pmap
+ : adj_list_choose_edge_pmap_helper<Tag>::type::template bind_<Graph, Property, Tag>
+ {};
+ struct adj_list_edge_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_: adj_list_choose_edge_pmap<Tag, Graph, Property> {};
+ };
+ } // namespace detail
+
+ template <>
+ struct edge_property_selector<adj_list_tag> {
+ typedef detail::adj_list_edge_property_selector type;
+ };
+ template <>
+ struct edge_property_selector<vec_adj_list_tag> {
+ typedef detail::adj_list_edge_property_selector type;
+ };
+
+ // Vertex Property Maps
+
+ struct adj_list_vertex_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_
+ : detail::adj_list_choose_vertex_pa<Tag,Graph,Property>
+ {};
+ };
+ template <>
+ struct vertex_property_selector<adj_list_tag> {
+ typedef adj_list_vertex_property_selector type;
+ };
+
+ struct vec_adj_list_vertex_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_: detail::vec_adj_list_choose_vertex_pa<Tag,Graph,Property> {};
+ };
+ template <>
+ struct vertex_property_selector<vec_adj_list_tag> {
+ typedef vec_adj_list_vertex_property_selector type;
+ };
+
+} // namespace boost
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace boost {
+
+ template <typename V>
+ struct hash< boost::detail::stored_edge<V> >
+ {
+ std::size_t
+ operator()(const boost::detail::stored_edge<V>& e) const
+ {
+ return hash<V>()(e.m_target);
+ }
+ };
+
+ template <typename V, typename P>
+ struct hash< boost::detail::stored_edge_property <V,P> >
+ {
+ std::size_t
+ operator()(const boost::detail::stored_edge_property<V,P>& e) const
+ {
+ return hash<V>()(e.m_target);
+ }
+ };
+
+ template <typename V, typename I, typename P>
+ struct hash< boost::detail::stored_edge_iter<V,I, P> >
+ {
+ std::size_t
+ operator()(const boost::detail::stored_edge_iter<V,I,P>& e) const
+ {
+ return hash<V>()(e.m_target);
+ }
+ };
+
+}
+#endif
+
+
+#endif // BOOST_GRAPH_DETAIL_DETAIL_ADJACENCY_LIST_CCT
+
+/*
+ Implementation Notes:
+
+ Many of the public interface functions in this file would have been
+ more conveniently implemented as inline friend functions.
+ However there are a few compiler bugs that make that approach
+ non-portable.
+
+ 1. g++ inline friend in namespace bug
+ 2. g++ using clause doesn't work with inline friends
+ 3. VC++ doesn't have Koenig lookup
+
+ For these reasons, the functions were all written as non-inline free
+ functions, and static cast was used to convert from the helper
+ class to the adjacency_list derived class.
+
+ Looking back, it might have been better to write out all functions
+ in terms of the adjacency_list, and then use a tag to dispatch
+ to the various helpers instead of using inheritance.
+
+ */

Added: sandbox/container_gen/boost/graph/detail/metafunction/is_front_insertion_sequence.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/graph/detail/metafunction/is_front_insertion_sequence.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,51 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP
+#define BOOST_GRAPH_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/is_sequence.hpp>
+
+namespace boost { namespace graph_detail {
+
+ // Major BGL assumption:
+ // A Front Insertion Sequence is a Sequence without
+ // Bidirectional Iterators.
+ template <typename T>
+ struct is_front_insertion_sequence_impl
+ : ::boost::mpl::if_<
+ ::std::tr1::is_convertible<
+ typename ::boost::BOOST_ITERATOR_CATEGORY<
+ typename T::iterator
+ >::type
+ , ::std::bidirectional_iterator_tag
+ >
+ , ::boost::mpl::false_
+ , ::boost::mpl::true_
+ >
+ {
+ };
+
+ template <typename T>
+ struct is_front_insertion_sequence
+ : ::boost::mpl::eval_if<
+ ::boost::detail::metafunction::is_sequence<T>
+ , is_front_insertion_sequence_impl<T>
+ , ::boost::mpl::false_
+ >::type
+ {
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_front_insertion_sequence,(T))
+ };
+}} // namespace boost::graph_detail
+
+#endif // BOOST_GRAPH_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP
+

Added: sandbox/container_gen/boost/pending/container_traits.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/pending/container_traits.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,863 @@
+// (C) Copyright Jeremy Siek 2004
+// (C) Copyright Thomas Claveirole 2010
+// (C) Copyright Ignacy Gawedzki 2010
+// (C) Copyright Cromwell D. Enage 2012
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+#define BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/next_prior.hpp>
+#include <algorithm>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+// Sure would be nice to be able to forward declare these
+// instead of pulling in all the headers. Too bad that
+// is not legal. There ought to be a standard <stlfwd> header. -JGS
+
+#include <vector>
+#include <list>
+#include <set>
+#include <map>
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SLIST
+# ifdef BOOST_SLIST_HEADER
+# include BOOST_SLIST_HEADER
+# else
+# include <slist>
+# endif
+#endif
+
+#if defined BOOST_HAS_HASH
+# if defined BOOST_HASH_SET_HEADER
+# include BOOST_HASH_SET_HEADER
+# else
+# include <hash_set>
+# endif
+# if defined BOOST_HASH_MAP_HEADER
+# include BOOST_HASH_MAP_HEADER
+# else
+# include <hash_map>
+# endif
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Stay out of the way of concept checking class templates
+# define Container Container_
+# define AssociativeContainer AssociativeContainer_
+#endif
+
+// The content of this file is in 'graph_detail' because otherwise
+// there will be name clashes with
+// sandbox/boost/sequence_algo/container_traits.hpp
+// The 'detail' subnamespace will still cause problems.
+namespace boost { namespace graph_detail {
+
+ //======================================================================
+ // Container Category Tags
+ //
+ // They use virtual inheritance because there are lots of
+ // inheritance diamonds.
+
+ struct container_tag { };
+ struct forward_container_tag : virtual public container_tag { };
+ struct reversible_container_tag : virtual public forward_container_tag { };
+ struct random_access_container_tag
+ : virtual public reversible_container_tag { };
+
+ struct sequence_tag : virtual public forward_container_tag { };
+
+ struct associative_container_tag : virtual public forward_container_tag { };
+
+ struct sorted_associative_container_tag
+ : virtual public associative_container_tag,
+ virtual public reversible_container_tag { };
+
+ struct front_insertion_sequence_tag : virtual public sequence_tag { };
+ struct back_insertion_sequence_tag : virtual public sequence_tag { };
+
+ struct unique_associative_container_tag
+ : virtual public associative_container_tag { };
+ struct multiple_associative_container_tag
+ : virtual public associative_container_tag { };
+ struct simple_associative_container_tag
+ : virtual public associative_container_tag { };
+ struct pair_associative_container_tag
+ : virtual public associative_container_tag { };
+
+
+ //======================================================================
+ // Iterator Stability Tags
+ //
+ // Do mutating operations such as insert/erase/resize invalidate all
+ // outstanding iterators?
+
+ struct stable_tag { };
+ struct unstable_tag { };
+
+ //======================================================================
+ // Container Traits Class and container_category() function
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // don't use this unless there is partial specialization
+ template <class Container>
+ struct container_traits {
+ typedef typename Container::category category;
+ typedef typename Container::iterator_stability iterator_stability;
+ };
+#endif
+
+ // Use this as a compile-time assertion that X is stable
+ inline void require_stable(stable_tag) { }
+
+ // std::vector
+ struct vector_tag :
+ virtual public random_access_container_tag,
+ virtual public back_insertion_sequence_tag { };
+
+ template <class T, class Alloc>
+ vector_tag container_category(const std::vector<T,Alloc>&)
+ { return vector_tag(); }
+
+ template <class T, class Alloc>
+ unstable_tag iterator_stability(const std::vector<T,Alloc>&)
+ { return unstable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class Alloc>
+ struct container_traits< std::vector<T,Alloc> > {
+ typedef vector_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif
+
+ // std::list
+ struct list_tag :
+ virtual public reversible_container_tag,
+ virtual public back_insertion_sequence_tag
+ // this causes problems for push_dispatch...
+ // virtual public front_insertion_sequence_tag
+ { };
+
+ template <class T, class Alloc>
+ list_tag container_category(const std::list<T,Alloc>&)
+ { return list_tag(); }
+
+ template <class T, class Alloc>
+ stable_tag iterator_stability(const std::list<T,Alloc>&)
+ { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class Alloc>
+ struct container_traits< std::list<T,Alloc> > {
+ typedef list_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+
+ // std::slist
+#if !defined BOOST_NO_SLIST
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class Alloc>
+ struct container_traits<BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc> > {
+ typedef front_insertion_sequence_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+ template <class T, class Alloc>
+ front_insertion_sequence_tag container_category(
+ const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&
+ )
+ { return front_insertion_sequence_tag(); }
+
+ template <class T, class Alloc>
+ stable_tag iterator_stability(
+ const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&
+ )
+ { return stable_tag(); }
+#endif
+
+
+ // std::set
+ struct set_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public simple_associative_container_tag,
+ virtual public unique_associative_container_tag
+ { };
+
+ template <class Key, class Cmp, class Alloc>
+ set_tag container_category(const std::set<Key,Cmp,Alloc>&)
+ { return set_tag(); }
+
+ template <class Key, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::set<Key,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class Cmp, class Alloc>
+ struct container_traits< std::set<Key,Cmp,Alloc> > {
+ typedef set_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ // std::multiset
+ struct multiset_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public simple_associative_container_tag,
+ virtual public multiple_associative_container_tag
+ { };
+
+ template <class Key, class Cmp, class Alloc>
+ multiset_tag container_category(const std::multiset<Key,Cmp,Alloc>&)
+ { return multiset_tag(); }
+
+ template <class Key, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::multiset<Key,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class Cmp, class Alloc>
+ struct container_traits< std::multiset<Key,Cmp,Alloc> > {
+ typedef multiset_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ // deque
+
+ // std::map
+ struct map_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public pair_associative_container_tag,
+ virtual public unique_associative_container_tag
+ { };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class T, class Cmp, class Alloc>
+ struct container_traits< std::map<Key,T,Cmp,Alloc> > {
+ typedef map_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ template <class Key, class T, class Cmp, class Alloc>
+ map_tag container_category(const std::map<Key,T,Cmp,Alloc>&)
+ { return map_tag(); }
+
+ template <class Key, class T, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::map<Key,T,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+ // std::multimap
+ struct multimap_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public pair_associative_container_tag,
+ virtual public multiple_associative_container_tag
+ { };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class T, class Cmp, class Alloc>
+ struct container_traits< std::multimap<Key,T,Cmp,Alloc> > {
+ typedef multimap_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ template <class Key, class T, class Cmp, class Alloc>
+ multimap_tag container_category(const std::multimap<Key,T,Cmp,Alloc>&)
+ { return multimap_tag(); }
+
+ template <class Key, class T, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::multimap<Key,T,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+
+ // hash_set, hash_map
+
+ struct unordered_set_tag :
+ virtual public simple_associative_container_tag,
+ virtual public unique_associative_container_tag
+ { };
+
+ struct unordered_multiset_tag :
+ virtual public simple_associative_container_tag,
+ virtual public multiple_associative_container_tag
+ { };
+
+
+ struct unordered_map_tag :
+ virtual public pair_associative_container_tag,
+ virtual public unique_associative_container_tag
+ { };
+
+ struct unordered_multimap_tag :
+ virtual public pair_associative_container_tag,
+ virtual public multiple_associative_container_tag
+ { };
+
+#if defined BOOST_HAS_HASH
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class Eq, class Hash, class Alloc>
+ struct container_traits<
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>
+ > {
+ typedef unordered_set_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ struct container_traits<
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>
+ > {
+ typedef unordered_map_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+ template <class Key, class Eq, class Hash, class Alloc>
+ struct container_traits<
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Key,Eq,Hash,Alloc>
+ > {
+ typedef unordered_multiset_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ struct container_traits<
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Key,T,Eq,Hash,Alloc>
+ > {
+ typedef unordered_multimap_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ template <class Key, class Eq, class Hash, class Alloc>
+ unordered_set_tag container_category(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>&
+ )
+ { return unordered_set_tag(); }
+
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unordered_map_tag container_category(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>&
+ )
+ { return unordered_map_tag(); }
+
+ template <class Key, class Eq, class Hash, class Alloc>
+ unstable_tag iterator_stability(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>&
+ )
+ { return unstable_tag(); }
+
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unstable_tag iterator_stability(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>&
+ )
+ { return unstable_tag(); }
+ template <class Key, class Eq, class Hash, class Alloc>
+ unordered_multiset_tag container_category(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Key,Eq,Hash,Alloc>&
+ )
+ { return unordered_multiset_tag(); }
+
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unordered_multimap_tag container_category(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Key,T,Eq,Hash,Alloc>&
+ )
+ { return unordered_multimap_tag(); }
+
+ template <class Key, class Eq, class Hash, class Alloc>
+ unstable_tag iterator_stability(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Key,Eq,Hash,Alloc>&
+ )
+ { return unstable_tag(); }
+
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ unstable_tag iterator_stability(
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Key,T,Eq,Hash,Alloc>&
+ )
+ { return unstable_tag(); }
+#endif // BOOST_HAS_HASH
+
+
+
+ //===========================================================================
+ // Generalized Container Functions
+
+
+ // Erase
+ template <class Sequence, class T>
+ void erase_dispatch(Sequence& c, const T& x,
+ sequence_tag)
+ {
+ c.erase(std::remove(c.begin(), c.end(), x), c.end());
+ }
+
+ template <class AssociativeContainer, class T>
+ void erase_dispatch(AssociativeContainer& c, const T& x,
+ associative_container_tag)
+ {
+ c.erase(x);
+ }
+ template <class Container, class T>
+ void erase(Container& c, const T& x)
+ {
+ erase_dispatch(c, x, container_category(c));
+ }
+
+ // Erase If
+ template <class Sequence, class Predicate, class IteratorStability>
+ void erase_if_dispatch(Sequence& c, Predicate p,
+ sequence_tag, IteratorStability)
+ {
+#if 0
+ c.erase(std::remove_if(c.begin(), c.end(), p), c.end());
+#else
+ if (! c.empty())
+ c.erase(std::remove_if(c.begin(), c.end(), p), c.end());
+#endif
+ }
+ template <class AssociativeContainer, class Predicate>
+ void erase_if_dispatch(AssociativeContainer& c, Predicate p,
+ associative_container_tag, stable_tag)
+ {
+ typename AssociativeContainer::iterator i, next;
+ for (i = next = c.begin(); next != c.end(); i = next) {
+ ++next;
+ if (p(*i))
+ c.erase(i);
+ }
+ }
+ template <class AssociativeContainer, class Predicate>
+ void erase_if_dispatch(AssociativeContainer& c, Predicate p,
+ associative_container_tag, unstable_tag)
+ {
+ // This method is really slow, so hopefully we won't have any
+ // associative containers with unstable iterators!
+ // Is there a better way to do this?
+ typename AssociativeContainer::iterator i;
+ typename AssociativeContainer::size_type n = c.size();
+ while (n--)
+ for (i = c.begin(); i != c.end(); ++i)
+ if (p(*i)) {
+ c.erase(i);
+ break;
+ }
+ }
+ template <class Container, class Predicate>
+ void erase_if(Container& c, Predicate p)
+ {
+ erase_if_dispatch(c, p, container_category(c), iterator_stability(c));
+ }
+
+ // Push
+ template <class Container, class T>
+ std::pair<typename Container::iterator, bool>
+ push_dispatch(Container& c, const T& v, back_insertion_sequence_tag)
+ {
+ c.push_back(v);
+ return std::make_pair(boost::prior(c.end()), true);
+ }
+
+ template <class Container, class T>
+ std::pair<typename Container::iterator, bool>
+ push_dispatch(Container& c, const T& v, front_insertion_sequence_tag)
+ {
+ c.push_front(v);
+ return std::make_pair(c.begin(), true);
+ }
+
+ template <class AssociativeContainer, class T>
+ std::pair<typename AssociativeContainer::iterator, bool>
+ push_dispatch(AssociativeContainer& c, const T& v,
+ unique_associative_container_tag)
+ {
+ return c.insert(v);
+ }
+
+ template <class AssociativeContainer, class T>
+ std::pair<typename AssociativeContainer::iterator, bool>
+ push_dispatch(AssociativeContainer& c, const T& v,
+ multiple_associative_container_tag)
+ {
+ return std::make_pair(c.insert(v), true);
+ }
+
+ template <class Container, class T>
+ std::pair<typename Container::iterator,bool>
+ push(Container& c, const T& v)
+ {
+ return push_dispatch(c, v, container_category(c));
+ }
+
+ // Find
+ template <class Container, class Value>
+ typename Container::iterator
+ find_dispatch(Container& c,
+ const Value& value,
+ container_tag)
+ {
+ return std::find(c.begin(), c.end(), value);
+ }
+
+ template <class AssociativeContainer, class Value>
+ typename AssociativeContainer::iterator
+ find_dispatch(AssociativeContainer& c,
+ const Value& value,
+ associative_container_tag)
+ {
+ return c.find(value);
+ }
+
+ template <class Container, class Value>
+ typename Container::iterator
+ find(Container& c,
+ const Value& value)
+ {
+ return find_dispatch(c, value, graph_detail::container_category(c));
+ }
+
+ // Find (const versions)
+ template <class Container, class Value>
+ typename Container::const_iterator
+ find_dispatch(const Container& c,
+ const Value& value,
+ container_tag)
+ {
+ return std::find(c.begin(), c.end(), value);
+ }
+
+ template <class AssociativeContainer, class Value>
+ typename AssociativeContainer::const_iterator
+ find_dispatch(const AssociativeContainer& c,
+ const Value& value,
+ associative_container_tag)
+ {
+ return c.find(value);
+ }
+
+ template <class Container, class Value>
+ typename Container::const_iterator
+ find(const Container& c,
+ const Value& value)
+ {
+ return find_dispatch(c, value, graph_detail::container_category(c));
+ }
+
+ // Equal range
+#if 0
+ // Make the dispatch fail if c is not an Associative Container (and thus
+ // doesn't have equal_range unless it is sorted, which we cannot check
+ // statically and is not typically true for BGL's uses of this function).
+ template <class Container,
+ class LessThanComparable>
+ std::pair<typename Container::iterator, typename Container::iterator>
+ equal_range_dispatch(Container& c,
+ const LessThanComparable& value,
+ container_tag)
+ {
+ // c must be sorted for std::equal_range to behave properly.
+ return std::equal_range(c.begin(), c.end(), value);
+ }
+#endif
+
+ template <class AssociativeContainer, class Value>
+ std::pair<typename AssociativeContainer::iterator,
+ typename AssociativeContainer::iterator>
+ equal_range_dispatch(AssociativeContainer& c,
+ const Value& value,
+ associative_container_tag)
+ {
+ return c.equal_range(value);
+ }
+
+ template <class Container, class Value>
+ std::pair<typename Container::iterator, typename Container::iterator>
+ equal_range(Container& c,
+ const Value& value)
+ {
+ return equal_range_dispatch(c, value, graph_detail::container_category(c));
+ }
+
+}} // namespace boost::graph_detail
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Stay out of the way of concept checking class templates
+# undef Container
+# undef AssociativeContainer
+#endif
+
+#else // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <utility>
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/is_unique_assoc_container.hpp>
+#include <boost/detail/metafunction/has_stable_iterators.hpp>
+#include <boost/graph/detail/metafunction/is_front_insertion_sequence.hpp>
+
+namespace boost { namespace graph_detail {
+
+ template <typename AC, typename Value>
+ inline void erase_dispatch(AC& c, Value const& value, ::boost::mpl::true_)
+ {
+ c.erase(value);
+ }
+
+ template <typename C, typename Value>
+ inline void erase_dispatch(C& c, Value const& value, ::boost::mpl::false_)
+ {
+ c.erase(::std::remove(c.begin(), c.end(), value), c.end());
+ }
+
+ template <typename C, typename Value>
+ inline void erase(C& c, Value const& value)
+ {
+ erase_dispatch(
+ c
+ , value
+ , ::boost::detail::metafunction::is_associative_container<C>()
+ );
+ }
+
+ template <typename AC, typename Pred>
+ void erase_if_dispatch_assoc(AC& c, Pred p, ::boost::mpl::true_)
+ {
+ typename AC::iterator i, next;
+
+ for (i = next = c.begin(); next != c.end(); i = next)
+ {
+ ++next;
+
+ if (p(*i))
+ {
+ c.erase(i);
+ }
+ }
+ }
+
+ template <typename AC, typename Pred>
+ void erase_if_dispatch_assoc(AC& c, Pred p, ::boost::mpl::false_)
+ {
+ // Major assumption:
+ // The erase(iterator) method of all Associative Containers without
+ // iterator stability returns the next valid iterator.
+ typename AC::iterator i = c.begin();
+
+ while (i != c.end())
+ {
+ if (p(*i))
+ {
+ i = c.erase(i);
+ }
+ else
+ {
+ ++i;
+ }
+ }
+ }
+
+ template <typename AC, typename Pred>
+ inline void erase_if_dispatch(AC& c, Pred p, ::boost::mpl::true_)
+ {
+ erase_if_dispatch_assoc(
+ c
+ , p
+ , ::boost::detail::metafunction::has_stable_iterators<AC>()
+ );
+ }
+
+ template <typename C, typename Pred>
+ inline void erase_if_dispatch(C& c, Pred p, ::boost::mpl::false_)
+ {
+ if (!c.empty())
+ {
+ c.erase(::std::remove_if(c.begin(), c.end(), p), c.end());
+ }
+ }
+
+ template <typename C, typename Pred>
+ inline void erase_if(C& c, Pred p)
+ {
+ erase_if_dispatch(
+ c
+ , p
+ , ::boost::detail::metafunction::is_associative_container<C>()
+ );
+ }
+
+ template <typename AC, typename Value>
+ inline ::std::pair<typename AC::iterator,bool>
+ push_dispatch_associative(
+ AC& c
+ , Value const& value
+ , ::boost::mpl::true_ // is_unique_associative_container
+ )
+ {
+ return c.insert(value);
+ }
+
+ template <typename AC, typename Value>
+ inline ::std::pair<typename AC::iterator,bool>
+ push_dispatch_associative(
+ AC& c
+ , Value const& value
+ , ::boost::mpl::false_ // is_multiple_associative_container
+ )
+ {
+ return std::make_pair(c.insert(value), true);
+ }
+
+ template <typename C, typename Value>
+ inline ::std::pair<typename C::iterator,bool>
+ push_dispatch_sequence(
+ C& c
+ , Value const& value
+ , ::boost::mpl::true_ // is_front_insertion_sequence
+ )
+ {
+ c.push_front(value);
+ return ::std::make_pair(c.begin(), true);
+ }
+
+ template <typename C, typename Value>
+ inline ::std::pair<typename C::iterator,bool>
+ push_dispatch_sequence(
+ C& c
+ , Value const& value
+ , ::boost::mpl::false_ // is_back_insertion_sequence
+ )
+ {
+ c.push_back(value);
+ return ::std::make_pair(::boost::prior(c.end()), true);
+ }
+
+ template <typename AC, typename Value>
+ inline ::std::pair<typename AC::iterator,bool>
+ push_dispatch(
+ AC& c
+ , Value const& value
+ , ::boost::mpl::true_ // is_associative_container
+ )
+ {
+ return push_dispatch_associative(
+ c
+ , value
+ , ::boost::detail::metafunction::is_unique_associative_container<AC>()
+ );
+ }
+
+ template <typename C, typename Value>
+ inline ::std::pair<typename C::iterator,bool>
+ push_dispatch(
+ C& c
+ , Value const& value
+ , ::boost::mpl::false_ // is_sequence
+ )
+ {
+ return push_dispatch_sequence(
+ c
+ , value
+ , ::boost::graph_detail::is_front_insertion_sequence<C>()
+ );
+ }
+
+ template <typename C, typename Value>
+ inline ::std::pair<typename C::iterator,bool>
+ push(C& c, Value const& value)
+ {
+ return push_dispatch(
+ c
+ , value
+ , ::boost::detail::metafunction::is_associative_container<C>()
+ );
+ }
+
+ template <typename AC, typename Value>
+ inline typename AC::iterator
+ find_dispatch(AC& c, Value const& value, ::boost::mpl::true_)
+ {
+ return c.find(value);
+ }
+
+ template <typename C, typename Value>
+ inline typename C::iterator
+ find_dispatch(C& c, Value const& value, ::boost::mpl::false_)
+ {
+ return ::std::find(c.begin(), c.end(), value);
+ }
+
+ template <typename C, typename Value>
+ inline typename C::iterator find(C& c, Value const& value)
+ {
+ return find_dispatch(
+ c
+ , value
+ , ::boost::detail::metafunction::is_associative_container<C>()
+ );
+ }
+
+ template <typename AC, typename Value>
+ inline typename AC::const_iterator
+ find_dispatch(AC const& c, Value const& value, ::boost::mpl::true_)
+ {
+ return c.find(value);
+ }
+
+ template <typename C, typename Value>
+ inline typename C::const_iterator
+ find_dispatch(C const& c, Value const& value, ::boost::mpl::false_)
+ {
+ return ::std::find(c.begin(), c.end(), value);
+ }
+
+ template <typename C, typename Value>
+ inline typename C::const_iterator find(C const& c, Value const& value)
+ {
+ return find_dispatch(
+ c
+ , value
+ , ::boost::detail::metafunction::is_associative_container<C>()
+ );
+ }
+
+ template <typename AC, typename Value>
+ inline ::std::pair<typename AC::iterator,typename AC::iterator>
+ equal_range_dispatch(AC& c, Value const& value, ::boost::mpl::true_)
+ {
+ return c.equal_range(value);
+ }
+
+#if 0
+ // Make the dispatch fail if c is not an Associative Container (and thus
+ // doesn't have equal_range unless it is sorted, which we cannot check
+ // statically and is not typically true for BGL's uses of this function).
+ template <typename AC, typename Value>
+ inline ::std::pair<typename AC::iterator,typename AC::iterator>
+ equal_range_dispatch(AC& c, Value const& value, ::boost::mpl::false_)
+ {
+ return ::std::equal_range(c.begin(), c.end(), value);
+ }
+#endif
+
+ template <typename C, typename Value>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ equal_range(C& c, Value const& value)
+ {
+ return equal_range_dispatch(
+ c
+ , value
+ , ::boost::detail::metafunction::is_associative_container<C>()
+ );
+ }
+
+}} // namespace boost::graph_detail
+
+#endif // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif // BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_base.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_base.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,21 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_BASE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_BASE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulators_base.hpp>
+#include <boost/typeof/accumulators/framework/accumulator_concept.hpp>
+#include <boost/typeof/boost/mpl/bool.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::detail::void_)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::dont_care)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::accumulator_base)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_BASE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_concept.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_concept.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,17 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATOR_CONCEPT_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATOR_CONCEPT_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulator_concept.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::accumulator_concept, 1)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATOR_CONCEPT_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_set.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulator_set.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,31 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATOR_SET_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATOR_SET_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulator_set.hpp>
+#include <boost/typeof/boost/accumulators/framework/depends_on.hpp>
+#include <boost/typeof/boost/accumulators/framework/accumulator_concept.hpp>
+#include <boost/typeof/boost/accumulators/framework/accumulators/external_accumulator.hpp>
+#include <boost/typeof/boost/accumulators/framework/accumulators/droppable_accumulator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::accumulator_visitor
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::detail::accumulator_params)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::detail::accumulator_set_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::is_accumulator_set
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::accumulator_set, 3)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATOR_SET_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/droppable_accumulator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,31 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_DROPPABLE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_DROPPABLE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulators/droppable_accumulator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::add_ref_visitor
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::detail::accumulator_params)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::detail::accumulator_set_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::detail::drop_visitor, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::droppable_accumulator_base
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::droppable_accumulator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::with_cached_result, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::as_droppable, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::droppable, 1)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_DROPPABLE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/external_accumulator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/external_accumulator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,18 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_EXTERNAL_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_EXTERNAL_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulators/reference_accumulator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::external_impl, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::external, 3)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_EXTERNAL_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/reference_accumulator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/reference_accumulator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_REFERENCE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_REFERENCE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulators/reference_accumulator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::reference_accumulator_impl
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::reference_tag, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::reference, 2)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_REFERENCE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/value_accumulator.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/accumulators/value_accumulator.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_VALUE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_VALUE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/accumulators/value_accumulator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::value_accumulator_impl
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::value_tag, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::value, 2)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_ACCUMULATORS_VALUE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/depends_on.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/depends_on.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,118 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_DEPENDS_ON_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_DEPENDS_ON_HPP
+
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/depends_on.hpp>
+
+namespace boost { namespace accumulators {
+
+ typedef depends_on<> depends_on_nothing;
+}}
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::as_feature, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::as_weighted_feature, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::feature_of, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::detail::feature_tag, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::detail::undroppable, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::is_dependent_on
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::dependencies_of
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::set_insert_range
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::collect_abstract_features
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::depends_on_base
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::matches_feature
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::contains_feature_of
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::contains_feature_of_
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::build_acc_list
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::build_acc_list
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::meta::make_acc_list
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::checked_as_weighted_feature
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::as_feature_list
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::accumulator_wrapper
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::to_accumulator
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::insert_feature
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::insert_dependencies
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::insert_sequence
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::make_accumulator_tuple
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::depends_on_nothing)
+
+#define BOOST_TYPEOF_REGISTER_BOOST_ACCUMULATORS_TEMPLATE(z, n, Type) \
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::Type, BOOST_PP_INC(n)) \
+//
+
+BOOST_PP_REPEAT(
+ BOOST_PP_DEC(BOOST_ACCUMULATORS_MAX_FEATURES)
+ , BOOST_TYPEOF_REGISTER_BOOST_ACCUMULATORS_TEMPLATE
+ , depends_on
+)
+
+#undef BOOST_TYPEOF_REGISTER_BOOST_ACCUMULATORS_TEMPLATE
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_DEPENDS_ON_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/extractor.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/extractor.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,29 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_EXTRACTOR_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_EXTRACTOR_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::accumulator_set_result
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::argument_pack_result
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::detail::extractor_result
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::extractor, 1)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FRAMEWORK_EXTRACTOR_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/framework/features.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/framework/features.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,37 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_FEATURES_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_FEATURES_HPP
+
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/framework/features.hpp>
+
+namespace boost { namespace accumulators {
+
+ typedef features<> no_features;
+}} // namespace boost::accumulators
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::no_features)
+
+#define BOOST_TYPEOF_REGISTER_BOOST_ACCUMULATORS_TEMPLATE(z, n, Type) \
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::Type, BOOST_PP_INC(n)) \
+//
+
+BOOST_PP_REPEAT(
+ BOOST_PP_DEC(BOOST_ACCUMULATORS_MAX_FEATURES)
+ , BOOST_TYPEOF_REGISTER_BOOST_ACCUMULATORS_TEMPLATE
+ , features
+)
+
+#undef BOOST_TYPEOF_REGISTER_BOOST_ACCUMULATORS_TEMPLATE
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_FEATURES_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/count.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/count.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/count.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::impl::count_impl)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::count)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/covariance.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/covariance.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,32 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_COVARIANCE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_COVARIANCE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/covariance.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::numeric::functional::outer_product_base
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::numeric::functional::outer_product_base
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::numeric::functional::outer_product, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::numeric::functional::outer_product, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::numeric::functional::outer_product, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::numeric::op::outer_product)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::covariance_impl, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::covariance, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::abstract_covariance)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_COVARIANCE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/density.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/density.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_DENSITY_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_DENSITY_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/density.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::density_impl, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::density)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_DENSITY_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/error_of.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/error_of.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,23 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ERROR_OF_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ERROR_OF_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/error_of.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::this_feature_has_no_error_calculation
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::error_of_impl, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::error_of, 1)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ERROR_OF_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/error_of_mean.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/error_of_mean.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ERROR_OF_MEAN_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ERROR_OF_MEAN_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/error_of_mean.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+#include <boost/typeof/boost/accumulators/statistics/error_of.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::error_of_mean_impl
+ , 2
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ERROR_OF_MEAN_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/extended_p_square.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/extended_p_square.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_EXTENDED_P_SQUARE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_EXTENDED_P_SQUARE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/extended_p_square.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::extended_p_square_impl
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::extended_p_square)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_EXTENDED_P_SQUARE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/extended_p_square_quantile.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/extended_p_square_quantile.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,33 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_EXTENDED_SINGLE_QUANTILE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_EXTENDED_SINGLE_QUANTILE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/extended_p_square_quantile.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::extended_p_square_quantile_impl
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::extended_p_square_quantile
+)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::extended_p_square_quantile_quadratic
+)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::weighted_extended_p_square_quantile
+)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::weighted_extended_p_square_quantile_quadratic
+)
+
+#endif // header include guard
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/kurtosis.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/kurtosis.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_KURTOSIS_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_KURTOSIS_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/kurtosis.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::kurtosis_impl, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::kurtosis)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_KURTOSIS_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/max.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/max.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MAX_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MAX_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/max.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::max_impl, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::max)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MAX_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/mean.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/mean.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,36 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MEAN_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MEAN_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/mean.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::mean_impl, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::immediate_mean_impl
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::mean)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::immediate_mean)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::mean_of_weights)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::immediate_mean_of_weights
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::mean_of_variates
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::immediate_mean_of_variates
+ , 2
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MEAN_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/median.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/median.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,31 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MEDIAN_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MEDIAN_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/median.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::median_impl, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::with_density_median_impl
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+::boost::accumulators::impl::with_p_square_cumulative_distribution_median_impl
+, 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::mean)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::with_density_median)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::with_p_square_cumulative_distribution_median
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MEDIAN_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/min.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/min.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MIN_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MIN_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/min.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::min_impl, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::min)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MIN_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/moment.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/moment.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MOMENT_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MOMENT_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/moment.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::impl::moment_impl, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::moment, (int))
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_MOMENT_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/p_square_cumul_dist.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/p_square_cumul_dist.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,24 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/p_square_cumul_dist.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::p_square_cumulative_distribution_impl
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::p_square_cumulative_distribution
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/p_square_quantile.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/p_square_quantile.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,25 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_QUANTILE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_QUANTILE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/p_square_quantile.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::p_square_quantile_impl
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::p_square_quantile)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::p_square_quantile_for_median
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_QUANTILE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/peaks_over_threshold.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/peaks_over_threshold.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,36 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_PEAKS_OVER_THRESHOLD_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_PEAKS_OVER_THRESHOLD_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/peaks_over_threshold.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::peaks_over_threshold_impl
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::peaks_over_threshold_prob_impl
+ , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::peaks_over_threshold
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::peaks_over_threshold_prob
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(
+ ::boost::accumulators::tag::abstract_peaks_over_threshold
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_PEAKS_OVER_THRESHOLD_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/pot_quantile.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/pot_quantile.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_POT_QUANTILE_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_POT_QUANTILE_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/pot_quantile.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::pot_quantile_impl
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::pot_quantile, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::pot_quantile_prob
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::weighted_pot_quantile
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::weighted_pot_quantile_prob
+ , 1
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_POT_QUANTILE_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/pot_tail_mean.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/pot_tail_mean.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,34 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_POT_TAIL_MEAN_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_POT_TAIL_MEAN_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/pot_tail_mean.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::pot_tail_mean_impl
+ , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::accumulators::tag::pot_tail_mean, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::pot_tail_mean_prob
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::weighted_pot_tail_mean
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::tag::weighted_pot_tail_mean_prob
+ , 1
+)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_POT_TAIL_MEAN_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_count.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_count.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_COUNT_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_COUNT_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/rolling_count.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::rolling_count_impl
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::rolling_count)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_COUNT_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_mean.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_mean.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_MEAN_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_MEAN_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/rolling_mean.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::rolling_mean_impl
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::rolling_mean)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_MEAN_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_sum.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_sum.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_SUM_HPP
+#define BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_SUM_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/accumulators/statistics/rolling_sum.hpp>
+#include <boost/typeof/boost/accumulators/framework/extractor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+ ::boost::accumulators::impl::rolling_sum_impl
+ , 1
+)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::accumulators::tag::rolling_sum)
+
+#endif // BOOST_TYPEOF_BOOST_ACCUMULATORS_STATISTICS_ROLLING_SUM_HPP
+

Added: sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_window.hpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ sandbox/container_gen/boost/typeof/boost/accumulators/statistics/rolling_window.hpp 2013-06-06 11:02:40 EDT (Thu, 06 Jun 2013) (r84654)
@@ -0,0 +1,27 @@
+// Copyright (C) 2012 Cromwell D. Enage