aboutsummaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.com>2023-06-28 20:00:21 +0300
committerthegeorg <thegeorg@yandex-team.com>2023-06-28 20:00:21 +0300
commit0abb29c131758b92583251c6051e12add7083c29 (patch)
tree0f02449b3164ca1144fa29b697139e1db92912ba /contrib
parentc47dcb09adea44757e308fd4e8ce44fa17bb55b8 (diff)
downloadydb-0abb29c131758b92583251c6051e12add7083c29.tar.gz
Add ydb to sandboxing autocheck
Stop copying entire boost/ into ydb project
Diffstat (limited to 'contrib')
-rw-r--r--contrib/restricted/boost/atomic/include/boost/atomic/detail/caps_arch_gcc_arm.hpp103
-rw-r--r--contrib/restricted/boost/atomic/include/boost/atomic/detail/core_arch_ops_gcc_arm.hpp1417
-rw-r--r--contrib/restricted/boost/atomic/include/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp90
-rw-r--r--contrib/restricted/boost/function/include/boost/function/function_typeof.hpp45
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_tags/master.hpp126
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_variate_loop/master.hpp152
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/function_arity.hpp36
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/function_pointer.hpp30
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/function_reference.hpp30
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/function_type.hpp28
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/is_function_pointer.hpp32
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/is_function_reference.hpp32
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/is_member_object_pointer.hpp32
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/is_nonmember_callable_builtin.hpp33
-rw-r--r--contrib/restricted/boost/function_types/include/boost/function_types/member_object_pointer.hpp32
-rw-r--r--contrib/restricted/boost/graph/include/boost/detail/algorithm.hpp83
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/adj_list_serialize.hpp130
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/adjacency_list_io.hpp405
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/adjacency_matrix.hpp1296
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/astar_search.hpp655
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/bandwidth.hpp93
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/bc_clustering.hpp169
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/bellman_ford_shortest_paths.hpp226
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/betweenness_centrality.hpp645
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/biconnected_components.hpp440
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/bipartite.hpp403
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/boyer_myrvold_planar_test.hpp262
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/bron_kerbosch_all_cliques.hpp312
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/chrobak_payne_drawing.hpp250
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/circle_layout.hpp60
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/closeness_centrality.hpp151
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/clustering_coefficient.hpp160
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/core_numbers.hpp375
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/create_condensation_graph.hpp86
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/cuthill_mckee_ordering.hpp181
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/cycle_canceling.hpp191
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/degree_centrality.hpp135
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/augment.hpp66
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/connected_components.hpp206
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/empty_header.hpp10
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/geodesic.hpp138
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/incidence_iterator.hpp98
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/incremental_components.hpp92
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/index.hpp77
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/labeled_graph_traits.hpp232
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/list_base.hpp206
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/permutation.hpp211
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/self_avoiding_walk.hpp483
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/shadow_iterator.hpp183
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/detail/sparse_ordering.hpp210
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/dijkstra_shortest_paths_no_color_map.hpp235
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/dimacs.hpp374
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/directed_graph.hpp795
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/dominator_tree.hpp483
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/eccentricity.hpp121
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/edge_coloring.hpp201
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/edge_connectivity.hpp187
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/edge_list.hpp330
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/edmonds_karp_max_flow.hpp245
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/edmunds_karp_max_flow.hpp22
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/erdos_renyi_generator.hpp221
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/exterior_property.hpp114
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/find_flow_cost.hpp57
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/floyd_warshall_shortest.hpp223
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/fruchterman_reingold.hpp460
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/geodesic_distance.hpp217
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/graph_archetypes.hpp326
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/graph_as_tree.hpp156
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/graph_stats.hpp146
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/graph_utility.hpp489
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/grid_graph.hpp1059
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/gursoy_atun_layout.hpp338
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/hawick_circuits.hpp387
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/howard_cycle_ratio.hpp643
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/incremental_components.hpp234
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/is_kuratowski_subgraph.hpp295
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/is_straight_line_drawing.hpp209
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/isomorphism.hpp709
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/iteration_macros_undef.hpp22
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/johnson_all_pairs_shortest.hpp198
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/kamada_kawai_spring_layout.hpp688
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/king_ordering.hpp346
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/kruskal_min_spanning_tree.hpp152
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/labeled_graph.hpp960
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/leda_graph.hpp942
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/loop_erased_random_walk.hpp141
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/make_biconnected_planar.hpp96
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/make_connected.hpp79
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/make_maximal_planar.hpp213
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/matrix_as_graph.hpp167
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/max_cardinality_matching.hpp844
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/maximum_adjacency_search.hpp399
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/maximum_weighted_matching.hpp1313
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/mcgregor_common_subgraphs.hpp1117
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/mesh_graph_generator.hpp184
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/metis.hpp367
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/metric_tsp_approx.hpp316
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/minimum_degree_ordering.hpp760
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/neighbor_bfs.hpp326
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/one_bit_color_map.hpp104
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/page_rank.hpp179
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_canonical_ordering.hpp204
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_detail/add_edge_visitors.hpp54
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_detail/boyer_myrvold_impl.hpp1813
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_detail/bucket_sort.hpp118
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_handles.hpp453
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_iterators.hpp332
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/planar_face_traversal.hpp178
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/plod_generator.hpp275
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/point_traits.hpp29
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/prim_minimum_spanning_tree.hpp84
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/profile.hpp44
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/property_iter_range.hpp120
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/property_maps/container_property_map.hpp70
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/property_maps/matrix_property_map.hpp68
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/push_relabel_max_flow.hpp860
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/r_c_shortest_paths.hpp723
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/random.hpp290
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/random_layout.hpp35
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/random_spanning_tree.hpp144
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/read_dimacs.hpp370
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/rmat_graph_generator.hpp663
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/sequential_vertex_coloring.hpp126
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/simple_point.hpp23
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/sloan_ordering.hpp448
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/small_world_generator.hpp131
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/smallest_last_ordering.hpp152
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/ssca_graph_generator.hpp196
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/st_connected.hpp89
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/stanford_graph.hpp586
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/stoer_wagner_min_cut.hpp383
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/successive_shortest_path_nonnegative_weights.hpp255
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/tiernan_all_cycles.hpp372
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/topology.hpp700
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/transitive_closure.hpp392
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/transitive_reduction.hpp137
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/tree_traits.hpp48
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/two_graphs_common_spanning_trees.hpp852
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/undirected_dfs.hpp269
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/undirected_graph.hpp822
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/vector_as_graph.hpp334
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/vertex_and_edge_range.hpp158
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/vf2_sub_graph_iso.hpp1301
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/wavefront.hpp125
-rw-r--r--contrib/restricted/boost/graph/include/boost/graph/write_dimacs.hpp73
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/bucket_sorter.hpp158
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/detail/disjoint_sets.hpp93
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/disjoint_sets.hpp211
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/fenced_priority_queue.hpp160
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/fibonacci_heap.hpp320
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/property_serialize.hpp99
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/relaxed_heap.hpp743
-rw-r--r--contrib/restricted/boost/graph/include/boost/pending/stringtok.hpp116
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/accumulate.hpp39
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/alias.hpp21
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/arithmetic.hpp25
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/as_sequence.hpp38
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/apply_1st.hpp35
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/basic_bind.hpp21
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/count_impl.hpp44
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/filter_iter.hpp140
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_op.hpp37
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_pred.hpp37
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/partition_op.hpp58
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessed/plain/vector.hpp323
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/is_seq.hpp54
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/token_equal.hpp56
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/O1_size.hpp31
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/back.hpp34
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/empty.hpp37
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/front.hpp33
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/iterator.hpp106
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/size.hpp37
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/tag.hpp24
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/shift_op.hpp87
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/single_element_iter.hpp118
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/sort_impl.hpp121
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/test.hpp32
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/assert.hpp29
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/data.hpp25
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/test_case.hpp21
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/bitor.hpp45
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/bitwise.hpp24
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/char.hpp22
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/char_fwd.hpp27
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/copy_if.hpp96
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/count.hpp40
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/count_if.hpp79
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/deque.hpp58
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/divides.hpp21
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/empty_sequence.hpp43
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/filter_view.hpp46
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/get_tag.hpp26
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/index_if.hpp60
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/index_of.hpp39
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/inherit_linearly.hpp39
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/key_type.hpp42
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/limits/set.hpp21
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/limits/string.hpp21
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list/list0_c.hpp31
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list/list10_c.hpp43
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list/list20_c.hpp43
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list/list30_c.hpp43
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list/list40_c.hpp43
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list/list50_c.hpp43
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/list_c.hpp60
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/lower_bound.hpp143
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/math/fixed_c.hpp36
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/math/is_even.hpp54
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/math/rational_c.hpp37
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/max.hpp19
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/min_element.hpp40
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/modulus.hpp22
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/count_impl.hpp82
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/insert_impl.hpp34
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/item.hpp114
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/multiset0.hpp34
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/tag.hpp23
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/multiset/multiset0.hpp36
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/order.hpp41
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/partition.hpp53
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/range_c.hpp48
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/replace.hpp55
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/replace_if.hpp88
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/reverse.hpp38
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set.hpp57
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/include_preprocessed.hpp42
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10.hpp140
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp145
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20.hpp168
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp154
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30.hpp195
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp164
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40.hpp221
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp174
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50.hpp250
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp184
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set0_c.hpp32
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set10.hpp44
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set10_c.hpp45
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set20.hpp44
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set20_c.hpp45
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set30.hpp44
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set30_c.hpp45
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set40.hpp44
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set40_c.hpp45
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set50.hpp44
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set/set50_c.hpp45
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/set_c.hpp60
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/shift_left.hpp22
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/shift_right.hpp22
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/single_view.hpp38
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/sort.hpp27
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/stable_partition.hpp75
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/string.hpp607
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/switch.hpp49
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/unique.hpp85
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/upper_bound.hpp141
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/value_type.hpp42
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector/vector0_c.hpp31
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector/vector10_c.hpp46
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector/vector20_c.hpp46
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector/vector30_c.hpp47
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector/vector40_c.hpp46
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector/vector50_c.hpp46
-rw-r--r--contrib/restricted/boost/mpl/include/boost/mpl/vector_c.hpp61
-rw-r--r--contrib/restricted/boost/parameter/include/boost/parameter/aux_/cast.hpp12
-rw-r--r--contrib/restricted/boost/parameter/include/boost/parameter/aux_/maybe.hpp151
-rw-r--r--contrib/restricted/boost/parameter/include/boost/parameter/aux_/parenthesized_type.hpp12
-rw-r--r--contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/flatten.hpp12
-rw-r--r--contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/for_each.hpp12
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/assert_msg.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/comma.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/detail/null.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/enum_shifted.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/facilities/is_empty_or_1.hpp31
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/for.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/limits.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/max.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/min.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_2nd.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_3rd.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_2nd.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_3rd.hpp17
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot2.hpp267
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot3.hpp267
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot4.hpp267
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot5.hpp267
-rw-r--r--contrib/restricted/boost/preprocessor/include/boost/preprocessor/while.hpp17
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex.h100
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/concepts.hpp1134
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/icu.hpp30
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/mfc.hpp186
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp29
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp32
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp1516
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp185
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp360
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp871
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v5/icu.hpp1402
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v5/iterator_traits.hpp32
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_iterator.hpp177
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_token_iterator.hpp312
-rw-r--r--contrib/restricted/boost/regex/include/boost/regex/v5/unicode_iterator.hpp862
304 files changed, 0 insertions, 63450 deletions
diff --git a/contrib/restricted/boost/atomic/include/boost/atomic/detail/caps_arch_gcc_arm.hpp b/contrib/restricted/boost/atomic/include/boost/atomic/detail/caps_arch_gcc_arm.hpp
deleted file mode 100644
index 0e3b219172..0000000000
--- a/contrib/restricted/boost/atomic/include/boost/atomic/detail/caps_arch_gcc_arm.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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)
- *
- * Copyright (c) 2009 Helge Bahmann
- * Copyright (c) 2009 Phil Endecott
- * Copyright (c) 2013 Tim Blechmann
- * ARM Code by Phil Endecott, based on other architectures.
- * Copyright (c) 2014, 2020, 2022 Andrey Semashev
- */
-/*!
- * \file atomic/detail/caps_arch_gcc_arm.hpp
- *
- * This header defines feature capabilities macros
- */
-
-#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ARM_HPP_INCLUDED_
-#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ARM_HPP_INCLUDED_
-
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/platform.hpp>
-
-#ifdef BOOST_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-#if defined(__ARMEL__) || \
- (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
- (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
- defined(BOOST_WINDOWS)
-#define BOOST_ATOMIC_DETAIL_ARM_LITTLE_ENDIAN
-#elif defined(__ARMEB__) || \
- defined(__ARM_BIG_ENDIAN) || \
- (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
- (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__))
-#define BOOST_ATOMIC_DETAIL_ARM_BIG_ENDIAN
-#else
-#include <boost/predef/other/endian.h>
-#if BOOST_ENDIAN_LITTLE_BYTE
-#define BOOST_ATOMIC_DETAIL_ARM_LITTLE_ENDIAN
-#elif BOOST_ENDIAN_BIG_BYTE
-#define BOOST_ATOMIC_DETAIL_ARM_BIG_ENDIAN
-#else
-#error "Boost.Atomic: Failed to determine ARM endianness, the target platform is not supported. Please, report to the developers (patches are welcome)."
-#endif
-#endif
-
-#if defined(__GNUC__) && defined(__arm__) && (BOOST_ATOMIC_DETAIL_ARM_ARCH >= 6)
-
-#if BOOST_ATOMIC_DETAIL_ARM_ARCH > 6
-// ARMv7 and later have dmb instruction
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_DMB 1
-#endif
-
-#if defined(__ARM_FEATURE_LDREX)
-
-#if (__ARM_FEATURE_LDREX & 1)
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1
-#endif
-#if (__ARM_FEATURE_LDREX & 2)
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1
-#endif
-#if (__ARM_FEATURE_LDREX & 8)
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1
-#endif
-
-#else // defined(__ARM_FEATURE_LDREX)
-
-#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__))
-
-// ARMv6k and ARMv7 have 8 and 16-bit ldrex/strex variants, but at least GCC 4.7 fails to compile them. GCC 4.9 is known to work.
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1
-#endif
-
-#if !(((defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__)) && defined(__thumb__)) || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7M__))
-// ARMv6k and ARMv7 except ARMv7-M have 64-bit ldrex/strex variants.
-// Unfortunately, GCC (at least 4.7.3 on Ubuntu) does not allocate register pairs properly when targeting ARMv6k Thumb,
-// which is required for ldrexd/strexd instructions, so we disable 64-bit support. When targeting ARMv6k ARM
-// or ARMv7 (both ARM and Thumb 2) it works as expected.
-#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1
-#endif
-
-#endif // !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__))
-
-#endif // defined(__ARM_FEATURE_LDREX)
-
-#endif // defined(__GNUC__) && defined(__arm__) && (BOOST_ATOMIC_DETAIL_ARM_ARCH >= 6)
-
-#define BOOST_ATOMIC_INT8_LOCK_FREE 2
-#define BOOST_ATOMIC_INT16_LOCK_FREE 2
-#define BOOST_ATOMIC_INT32_LOCK_FREE 2
-#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
-#define BOOST_ATOMIC_INT64_LOCK_FREE 2
-#endif
-#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
-
-#define BOOST_ATOMIC_THREAD_FENCE 2
-#define BOOST_ATOMIC_SIGNAL_FENCE 2
-
-#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ARM_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/atomic/include/boost/atomic/detail/core_arch_ops_gcc_arm.hpp b/contrib/restricted/boost/atomic/include/boost/atomic/detail/core_arch_ops_gcc_arm.hpp
deleted file mode 100644
index 271a26a52a..0000000000
--- a/contrib/restricted/boost/atomic/include/boost/atomic/detail/core_arch_ops_gcc_arm.hpp
+++ /dev/null
@@ -1,1417 +0,0 @@
-/*
- * 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)
- *
- * Copyright (c) 2009 Helge Bahmann
- * Copyright (c) 2013 Tim Blechmann
- * Copyright (c) 2014, 2020 Andrey Semashev
- */
-/*!
- * \file atomic/detail/core_arch_ops_gcc_arm.hpp
- *
- * This header contains implementation of the \c core_arch_operations template.
- */
-
-#ifndef BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_ARM_HPP_INCLUDED_
-#define BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_ARM_HPP_INCLUDED_
-
-#include <cstddef>
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/storage_traits.hpp>
-#include <boost/atomic/detail/integral_conversions.hpp>
-#include <boost/atomic/detail/core_arch_operations_fwd.hpp>
-#include <boost/atomic/detail/ops_gcc_arm_common.hpp>
-#include <boost/atomic/detail/gcc_arm_asm_common.hpp>
-#include <boost/atomic/detail/capabilities.hpp>
-#include <boost/atomic/detail/header.hpp>
-
-#ifdef BOOST_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-// From the ARM Architecture Reference Manual for architecture v6:
-//
-// LDREX{<cond>} <Rd>, [<Rn>]
-// <Rd> Specifies the destination register for the memory word addressed by <Rd>
-// <Rn> Specifies the register containing the address.
-//
-// STREX{<cond>} <Rd>, <Rm>, [<Rn>]
-// <Rd> Specifies the destination register for the returned status value.
-// 0 if the operation updates memory
-// 1 if the operation fails to update memory
-// <Rm> Specifies the register containing the word to be stored to memory.
-// <Rn> Specifies the register containing the address.
-// Rd must not be the same register as Rm or Rn.
-//
-// ARM v7 is like ARM v6 plus:
-// There are half-word and byte versions of the LDREX and STREX instructions,
-// LDREXH, LDREXB, STREXH and STREXB.
-// There are also double-word versions, LDREXD and STREXD.
-// (Actually it looks like these are available from version 6k onwards.)
-
-template< bool Signed, bool Interprocess >
-struct core_arch_operations< 4u, Signed, Interprocess > :
- public core_arch_operations_gcc_arm_base
-{
- typedef typename storage_traits< 4u >::type storage_type;
-
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u;
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 4u;
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
-
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage = v;
- fence_after_store(order);
- }
-
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- storage_type v = storage;
- fence_after(order);
- return v;
- }
-
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // load the original value
- "strex %[tmp], %[value], %[storage]\n\t" // store the replacement, tmp = store failed
- "teq %[tmp], #0\n\t" // check if store succeeded
- "bne 1b\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [tmp] "=&l" (tmp), [original] "=&r" (original), [storage] "+Q" (storage)
- : [value] "r" (v)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_weak(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- bool success = false;
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- uint32_t tmp;
-#endif
- storage_type original;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "cmp %[original], %[expected]\n\t" // flags = original==expected
- "itt eq\n\t" // [hint that the following 2 instructions are conditional on flags.equal]
- "strexeq %[success], %[desired], %[storage]\n\t" // if (flags.equal) *(&storage) = desired, success = store failed
- "eoreq %[success], %[success], #1\n\t" // if (flags.equal) success ^= 1 (i.e. make it 1 if store succeeded)
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original),
- [success] "+r" (success),
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- [tmp] "=&l" (tmp),
-#endif
- [storage] "+Q" (storage)
- : [expected] "Ir" (expected),
- [desired] "r" (desired)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = original;
- return success;
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_strong(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- bool success = false;
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- uint32_t tmp;
-#endif
- storage_type original;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "cmp %[original], %[expected]\n\t" // flags = original==expected
- "bne 2f\n\t" // if (!flags.equal) goto end
- "strex %[success], %[desired], %[storage]\n\t" // *(&storage) = desired, success = store failed
- "eors %[success], %[success], #1\n\t" // success ^= 1 (i.e. make it 1 if store succeeded); flags.equal = success == 0
- "beq 1b\n\t" // if (flags.equal) goto retry
- "2:\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original),
- [success] "+r" (success),
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- [tmp] "=&l" (tmp),
-#endif
- [storage] "+Q" (storage)
- : [expected] "Ir" (expected),
- [desired] "r" (desired)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = original;
- return success;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "and %[result], %[original], %[value]\n\t" // result = original & value
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "orr %[result], %[original], %[value]\n\t" // result = original | value
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "eor %[result], %[original], %[value]\n\t" // result = original ^ value
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- return !!exchange(storage, (storage_type)1, order);
- }
-
- static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- store(storage, (storage_type)0, order);
- }
-};
-
-#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB)
-
-template< bool Signed, bool Interprocess >
-struct core_arch_operations< 1u, Signed, Interprocess > :
- public core_arch_operations_gcc_arm_base
-{
- typedef typename storage_traits< 1u >::type storage_type;
- typedef typename storage_traits< 4u >::type extended_storage_type;
-
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 1u;
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 1u;
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
-
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage = v;
- fence_after_store(order);
- }
-
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- storage_type v = storage;
- fence_after(order);
- return v;
- }
-
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- extended_storage_type original;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // load the original value and zero-extend to 32 bits
- "strexb %[tmp], %[value], %[storage]\n\t" // store the replacement, tmp = store failed
- "teq %[tmp], #0\n\t" // check if store succeeded
- "bne 1b\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [tmp] "=&l" (tmp), [original] "=&r" (original), [storage] "+Q" (storage)
- : [value] "r" (v)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_weak(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- bool success = false;
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- uint32_t tmp;
-#endif
- extended_storage_type original;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "cmp %[original], %[expected]\n\t" // flags = original==expected
- "itt eq\n\t" // [hint that the following 2 instructions are conditional on flags.equal]
- "strexbeq %[success], %[desired], %[storage]\n\t" // if (flags.equal) *(&storage) = desired, success = store failed
- "eoreq %[success], %[success], #1\n\t" // if (flags.equal) success ^= 1 (i.e. make it 1 if store succeeded)
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original),
- [success] "+r" (success),
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- [tmp] "=&l" (tmp),
-#endif
- [storage] "+Q" (storage)
- : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)),
- [desired] "r" (desired)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = static_cast< storage_type >(original);
- return success;
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_strong(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- bool success = false;
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- uint32_t tmp;
-#endif
- extended_storage_type original;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "cmp %[original], %[expected]\n\t" // flags = original==expected
- "bne 2f\n\t" // if (!flags.equal) goto end
- "strexb %[success], %[desired], %[storage]\n\t" // *(&storage) = desired, success = store failed
- "eors %[success], %[success], #1\n\t" // success ^= 1 (i.e. make it 1 if store succeeded); flags.equal = success == 0
- "beq 1b\n\t" // if (flags.equal) goto retry
- "2:\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original),
- [success] "+r" (success),
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- [tmp] "=&l" (tmp),
-#endif
- [storage] "+Q" (storage)
- : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)),
- [desired] "r" (desired)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = static_cast< storage_type >(original);
- return success;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "strexb %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "strexb %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "and %[result], %[original], %[value]\n\t" // result = original & value
- "strexb %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "orr %[result], %[original], %[value]\n\t" // result = original | value
- "strexb %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexb %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "eor %[result], %[original], %[value]\n\t" // result = original ^ value
- "strexb %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- return !!exchange(storage, (storage_type)1, order);
- }
-
- static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- store(storage, (storage_type)0, order);
- }
-};
-
-#else // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB)
-
-template< bool Interprocess >
-struct core_arch_operations< 1u, false, Interprocess > :
- public core_arch_operations< 4u, false, Interprocess >
-{
- typedef core_arch_operations< 4u, false, Interprocess > base_type;
- typedef typename base_type::storage_type storage_type;
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "uxtb %[result], %[result]\n\t" // zero extend result from 8 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "uxtb %[result], %[result]\n\t" // zero extend result from 8 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-};
-
-template< bool Interprocess >
-struct core_arch_operations< 1u, true, Interprocess > :
- public core_arch_operations< 4u, true, Interprocess >
-{
- typedef core_arch_operations< 4u, true, Interprocess > base_type;
- typedef typename base_type::storage_type storage_type;
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "sxtb %[result], %[result]\n\t" // sign extend result from 8 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "sxtb %[result], %[result]\n\t" // sign extend result from 8 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-};
-
-#endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB)
-
-#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH)
-
-template< bool Signed, bool Interprocess >
-struct core_arch_operations< 2u, Signed, Interprocess > :
- public core_arch_operations_gcc_arm_base
-{
- typedef typename storage_traits< 2u >::type storage_type;
- typedef typename storage_traits< 4u >::type extended_storage_type;
-
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 2u;
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 2u;
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
-
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage = v;
- fence_after_store(order);
- }
-
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- storage_type v = storage;
- fence_after(order);
- return v;
- }
-
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- extended_storage_type original;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // load the original value and zero-extend to 32 bits
- "strexh %[tmp], %[value], %[storage]\n\t" // store the replacement, tmp = store failed
- "teq %[tmp], #0\n\t" // check if store succeeded
- "bne 1b\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [tmp] "=&l" (tmp), [original] "=&r" (original), [storage] "+Q" (storage)
- : [value] "r" (v)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_weak(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- bool success = false;
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- uint32_t tmp;
-#endif
- extended_storage_type original;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "cmp %[original], %[expected]\n\t" // flags = original==expected
- "itt eq\n\t" // [hint that the following 2 instructions are conditional on flags.equal]
- "strexheq %[success], %[desired], %[storage]\n\t" // if (flags.equal) *(&storage) = desired, success = store failed
- "eoreq %[success], %[success], #1\n\t" // if (flags.equal) success ^= 1 (i.e. make it 1 if store succeeded)
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original),
- [success] "+r" (success),
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- [tmp] "=&l" (tmp),
-#endif
- [storage] "+Q" (storage)
- : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)),
- [desired] "r" (desired)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = static_cast< storage_type >(original);
- return success;
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_strong(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- bool success = false;
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- uint32_t tmp;
-#endif
- extended_storage_type original;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "cmp %[original], %[expected]\n\t" // flags = original==expected
- "bne 2f\n\t" // if (!flags.equal) goto end
- "strexh %[success], %[desired], %[storage]\n\t" // *(&storage) = desired, success = store failed
- "eors %[success], %[success], #1\n\t" // success ^= 1 (i.e. make it 1 if store succeeded); flags.equal = success == 0
- "beq 1b\n\t" // if (flags.equal) goto retry
- "2:\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original),
- [success] "+r" (success),
-#if !defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- [tmp] "=&l" (tmp),
-#endif
- [storage] "+Q" (storage)
- : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)),
- [desired] "r" (desired)
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = static_cast< storage_type >(original);
- return success;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "strexh %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "strexh %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "and %[result], %[original], %[value]\n\t" // result = original & value
- "strexh %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "orr %[result], %[original], %[value]\n\t" // result = original | value
- "strexh %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- uint32_t tmp;
- extended_storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrexh %[original], %[storage]\n\t" // original = zero_extend(*(&storage))
- "eor %[result], %[original], %[value]\n\t" // result = original ^ value
- "strexh %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return static_cast< storage_type >(original);
- }
-
- static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- return !!exchange(storage, (storage_type)1, order);
- }
-
- static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- store(storage, (storage_type)0, order);
- }
-};
-
-#else // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH)
-
-template< bool Interprocess >
-struct core_arch_operations< 2u, false, Interprocess > :
- public core_arch_operations< 4u, false, Interprocess >
-{
- typedef core_arch_operations< 4u, false, Interprocess > base_type;
- typedef typename base_type::storage_type storage_type;
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "uxth %[result], %[result]\n\t" // zero extend result from 16 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "uxth %[result], %[result]\n\t" // zero extend result from 16 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-};
-
-template< bool Interprocess >
-struct core_arch_operations< 2u, true, Interprocess > :
- public core_arch_operations< 4u, true, Interprocess >
-{
- typedef core_arch_operations< 4u, true, Interprocess > base_type;
- typedef typename base_type::storage_type storage_type;
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "add %[result], %[original], %[value]\n\t" // result = original + value
- "sxth %[result], %[result]\n\t" // sign extend result from 16 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- base_type::fence_before(order);
- uint32_t tmp;
- storage_type original, result;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp])
- "1:\n\t"
- "ldrex %[original], %[storage]\n\t" // original = *(&storage)
- "sub %[result], %[original], %[value]\n\t" // result = original - value
- "sxth %[result], %[result]\n\t" // sign extend result from 16 to 32 bits
- "strex %[tmp], %[result], %[storage]\n\t" // *(&storage) = result, tmp = store failed
- "teq %[tmp], #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp])
- : [original] "=&r" (original), // %0
- [result] "=&r" (result), // %1
- [tmp] "=&l" (tmp), // %2
- [storage] "+Q" (storage) // %3
- : [value] "Ir" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- base_type::fence_after(order);
- return original;
- }
-};
-
-#endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH)
-
-#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
-
-// Unlike 32-bit operations, for 64-bit loads and stores we must use ldrexd/strexd.
-// Any other instructions result in a non-atomic sequence of 32-bit accesses.
-// See "ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition",
-// Section A3.5.3 "Atomicity in the ARM architecture".
-
-// In the asm blocks below we have to use 32-bit register pairs to compose 64-bit values.
-// In order to pass the 64-bit operands to/from asm blocks, we use undocumented gcc feature:
-// the lower half (Rt) of the operand is accessible normally, via the numbered placeholder (e.g. %0),
-// and the upper half (Rt2) - via the same placeholder with an 'H' after the '%' sign (e.g. %H0).
-// See: http://hardwarebug.org/2010/07/06/arm-inline-asm-secrets/
-
-template< bool Signed, bool Interprocess >
-struct core_arch_operations< 8u, Signed, Interprocess > :
- public core_arch_operations_gcc_arm_base
-{
- typedef typename storage_traits< 8u >::type storage_type;
-
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u;
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 8u;
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
-
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- exchange(storage, v, order);
- }
-
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- // ARMv7 says ldrex (and other load-exclusive instructions) can be used without a matching strex, see
- // "ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition", Section A3.4.5 "Load-Exclusive and Store-Exclusive usage restrictions".
- storage_type original;
-#if defined(BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_UNUSED)
- __asm__ __volatile__
- (
- "ldrexd %0, %H0, %1\n\t"
- : "=&r" (original) // %0
- : "Q" (storage) // %1
- );
-#else
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "ldrexd %1, %H1, %2\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original) // %1
- : "Q" (storage) // %2
- );
-#endif
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %2\n\t" // load the original value
- "strexd %0, %3, %H3, %2\n\t" // store the replacement, tmp = store failed
- "teq %0, #0\n\t" // check if store succeeded
- "bne 1b\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "+Q" (storage) // %2
- : "r" (v) // %3
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_weak(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- storage_type original;
- bool success = false;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "cmp %1, %4\n\t" // flags = original.lo==expected.lo
- "it eq\n\t" // [hint that the following 1 instruction is conditional on flags.equal]
- "cmpeq %H1, %H4\n\t" // if (flags.equal) flags = original.hi==expected.hi
- "bne 1f\n\t"
- "strexd %2, %5, %H5, %3\n\t" // *(&storage) = desired, success = store failed
- "eor %2, %2, #1\n\t" // success ^= 1 (i.e. make it 1 if store succeeded)
- "1:\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "+r" (success), // %2
- "+Q" (storage) // %3
- : "r" (expected), // %4
- "r" (desired) // %5
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = original;
- return success;
- }
-
- static BOOST_FORCEINLINE bool compare_exchange_strong(
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
- {
- fence_before(success_order);
- storage_type original;
- bool success = false;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "cmp %1, %4\n\t" // flags = original.lo==expected.lo
- "it eq\n\t" // [hint that the following 1 instruction is conditional on flags.equal]
- "cmpeq %H1, %H4\n\t" // if (flags.equal) flags = original.hi==expected.hi
- "bne 2f\n\t"
- "strexd %2, %5, %H5, %3\n\t" // *(&storage) = desired, success = store failed
- "eors %2, %2, #1\n\t" // success ^= 1 (i.e. make it 1 if store succeeded), flags.equal = success == 0
- "beq 1b\n\t" // if (flags.equal) goto retry
- "2:\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "+r" (success), // %2
- "+Q" (storage) // %3
- : "r" (expected), // %4
- "r" (desired) // %5
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- if (success)
- fence_after(success_order);
- else
- fence_after(failure_order);
- expected = original;
- return success;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original, result;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "adds " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_LO(2) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_LO(1) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_LO(4) "\n\t" // result = original + value
- "adc " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_HI(2) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_HI(1) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_HI(4) "\n\t"
- "strexd %0, %2, %H2, %3\n\t" // *(&storage) = result, tmp = store failed
- "teq %0, #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "=&r" (result), // %2
- "+Q" (storage) // %3
- : "r" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original, result;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "subs " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_LO(2) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_LO(1) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_LO(4) "\n\t" // result = original - value
- "sbc " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_HI(2) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_HI(1) ", " BOOST_ATOMIC_DETAIL_ARM_ASM_ARG_HI(4) "\n\t"
- "strexd %0, %2, %H2, %3\n\t" // *(&storage) = result, tmp = store failed
- "teq %0, #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "=&r" (result), // %2
- "+Q" (storage) // %3
- : "r" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original, result;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "and %2, %1, %4\n\t" // result = original & value
- "and %H2, %H1, %H4\n\t"
- "strexd %0, %2, %H2, %3\n\t" // *(&storage) = result, tmp = store failed
- "teq %0, #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "=&r" (result), // %2
- "+Q" (storage) // %3
- : "r" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original, result;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "orr %2, %1, %4\n\t" // result = original | value
- "orr %H2, %H1, %H4\n\t"
- "strexd %0, %2, %H2, %3\n\t" // *(&storage) = result, tmp = store failed
- "teq %0, #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "=&r" (result), // %2
- "+Q" (storage) // %3
- : "r" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- fence_before(order);
- storage_type original, result;
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "1:\n\t"
- "ldrexd %1, %H1, %3\n\t" // original = *(&storage)
- "eor %2, %1, %4\n\t" // result = original ^ value
- "eor %H2, %H1, %H4\n\t"
- "strexd %0, %2, %H2, %3\n\t" // *(&storage) = result, tmp = store failed
- "teq %0, #0\n\t" // flags = tmp==0
- "bne 1b\n\t" // if (!flags.equal) goto retry
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(tmp), // %0
- "=&r" (original), // %1
- "=&r" (result), // %2
- "+Q" (storage) // %3
- : "r" (v) // %4
- : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
- );
- fence_after(order);
- return original;
- }
-
- static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- return !!exchange(storage, (storage_type)1, order);
- }
-
- static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
- {
- store(storage, (storage_type)0, order);
- }
-};
-
-#endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
-
-} // namespace detail
-} // namespace atomics
-} // namespace boost
-
-#include <boost/atomic/detail/footer.hpp>
-
-#endif // BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_ARM_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/atomic/include/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp b/contrib/restricted/boost/atomic/include/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp
deleted file mode 100644
index 537a5c7cd5..0000000000
--- a/contrib/restricted/boost/atomic/include/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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)
- *
- * Copyright (c) 2020 Andrey Semashev
- */
-/*!
- * \file atomic/detail/fence_arch_ops_gcc_arm.hpp
- *
- * This header contains implementation of the \c fence_arch_operations struct.
- */
-
-#ifndef BOOST_ATOMIC_DETAIL_FENCE_ARCH_OPS_GCC_ARM_HPP_INCLUDED_
-#define BOOST_ATOMIC_DETAIL_FENCE_ARCH_OPS_GCC_ARM_HPP_INCLUDED_
-
-#include <boost/cstdint.hpp>
-#include <boost/memory_order.hpp>
-#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/capabilities.hpp>
-#include <boost/atomic/detail/gcc_arm_asm_common.hpp>
-#include <boost/atomic/detail/header.hpp>
-
-#ifdef BOOST_HAS_PRAGMA_ONCE
-#pragma once
-#endif
-
-namespace boost {
-namespace atomics {
-namespace detail {
-
-//! Fence operations for legacy ARM
-struct fence_arch_operations_gcc_arm
-{
- static BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
- {
- if (order != memory_order_relaxed)
- hardware_full_fence();
- }
-
- static BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
- {
- if (order != memory_order_relaxed)
- __asm__ __volatile__ ("" ::: "memory");
- }
-
- static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT
- {
- // A memory barrier is effected using a "co-processor 15" instruction,
- // though a separate assembler mnemonic is available for it in v7.
-
-#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_DMB)
- // Older binutils (supposedly, older than 2.21.1) didn't support symbolic or numeric arguments of the "dmb" instruction such as "ish" or "#11".
- // As a workaround we have to inject encoded bytes of the instruction. There are two encodings for the instruction: ARM and Thumb. See ARM Architecture Reference Manual, A8.8.43.
- // Since we cannot detect binutils version at compile time, we'll have to always use this hack.
- __asm__ __volatile__
- (
-#if defined(__thumb2__)
- ".short 0xF3BF, 0x8F5B\n\t" // dmb ish
-#else
- ".word 0xF57FF05B\n\t" // dmb ish
-#endif
- :
- :
- : "memory"
- );
-#else
- uint32_t tmp;
- __asm__ __volatile__
- (
- BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0)
- "mcr p15, 0, r0, c7, c10, 5\n\t"
- BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0)
- : "=&l" (tmp)
- :
- : "memory"
- );
-#endif
- }
-};
-
-typedef fence_arch_operations_gcc_arm fence_arch_operations;
-
-} // namespace detail
-} // namespace atomics
-} // namespace boost
-
-#include <boost/atomic/detail/footer.hpp>
-
-#endif // BOOST_ATOMIC_DETAIL_FENCE_ARCH_OPS_GCC_ARM_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/function/include/boost/function/function_typeof.hpp b/contrib/restricted/boost/function/include/boost/function/function_typeof.hpp
deleted file mode 100644
index 246dc15d09..0000000000
--- a/contrib/restricted/boost/function/include/boost/function/function_typeof.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Boost.Function library - Typeof support
-// Copyright (C) Douglas Gregor 2008
-//
-// Use, modification and distribution is subject to 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)
-//
-// For more information, see http://www.boost.org
-#ifndef BOOST_FUNCTION_TYPEOF_HPP
-#define BOOST_FUNCTION_TYPEOF_HPP
-#include <boost/function/function_fwd.hpp>
-#include <boost/typeof/typeof.hpp>
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::bad_function_call)
-
-#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function, (typename))
-#endif
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function0, (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function1, (typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function2, (typename)(typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function3,
- (typename)(typename)(typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function4,
- (typename)(typename)(typename)(typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function5,
- (typename)(typename)(typename)(typename)(typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function6,
- (typename)(typename)(typename)(typename)(typename)(typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function7,
- (typename)(typename)(typename)(typename)(typename)(typename)(typename)
- (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function8,
- (typename)(typename)(typename)(typename)(typename)(typename)(typename)
- (typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function9,
- (typename)(typename)(typename)(typename)(typename)(typename)(typename)
- (typename)(typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function10,
- (typename)(typename)(typename)(typename)(typename)(typename)(typename)
- (typename)(typename)(typename)(typename))
-#endif
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_tags/master.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_tags/master.hpp
deleted file mode 100644
index 9cce212fcd..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_tags/master.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-// no include guards, this file is guarded externally
-
-#ifdef __WAVE__
-// this file has been generated from the master.hpp file in the same directory
-# pragma wave option(preserve: 0)
-#endif
-
-#if !defined(BOOST_FT_PREPROCESSING_MODE) || defined(BOOST_FT_CONFIG_HPP_INCLUDED)
-# error "this file used with two-pass preprocessing, only"
-#endif
-
-#include <boost/preprocessor/slot/slot.hpp>
-#include <boost/function_types/detail/encoding/def.hpp>
-
-namespace boost { namespace function_types {
-
-typedef detail::property_tag<BOOST_FT_non_variadic,BOOST_FT_variadic_mask> non_variadic;
-typedef detail::property_tag<BOOST_FT_variadic,BOOST_FT_variadic_mask> variadic;
-
-typedef detail::property_tag<0,BOOST_FT_const> non_const;
-typedef detail::property_tag<BOOST_FT_const,BOOST_FT_const> const_qualified;
-
-typedef detail::property_tag<0,BOOST_FT_volatile> non_volatile;
-typedef detail::property_tag<BOOST_FT_volatile,BOOST_FT_volatile> volatile_qualified;
-
-typedef detail::property_tag<BOOST_FT_default_cc,BOOST_FT_cc_mask> default_cc;
-
-#define BOOST_PP_VALUE BOOST_FT_const|BOOST_FT_volatile
-#include BOOST_PP_ASSIGN_SLOT(1)
-
-typedef detail::property_tag<0 , BOOST_PP_SLOT(1)> non_cv;
-typedef detail::property_tag<BOOST_FT_const , BOOST_PP_SLOT(1)> const_non_volatile;
-typedef detail::property_tag<BOOST_FT_volatile, BOOST_PP_SLOT(1)> volatile_non_const;
-typedef detail::property_tag<BOOST_PP_SLOT(1) , BOOST_PP_SLOT(1)> cv_qualified;
-
-namespace detail {
-
- typedef constant<BOOST_FT_full_mask> full_mask;
-
- template <bits_t Flags, bits_t CCID> struct encode_bits_impl
- {
- BOOST_STATIC_CONSTANT( bits_t, value =
- Flags | (BOOST_FT_default_cc * CCID) << 1 );
- };
-
- template <bits_t Flags, bits_t CCID, std::size_t Arity>
- struct encode_charr_impl
- {
- BOOST_STATIC_CONSTANT(std::size_t, value = (std::size_t)(1+
- Flags | (BOOST_FT_default_cc * CCID) << 1 | Arity << BOOST_FT_arity_shift
- ));
- };
-
- template <bits_t Bits> struct decode_bits
- {
- BOOST_STATIC_CONSTANT(bits_t, flags = Bits & BOOST_FT_flags_mask);
-
- BOOST_STATIC_CONSTANT(bits_t, cc_id =
- ( (Bits & BOOST_FT_full_mask) / BOOST_FT_default_cc) >> 1
- );
-
- BOOST_STATIC_CONSTANT(bits_t, tag_bits = (Bits & BOOST_FT_full_mask));
-
- BOOST_STATIC_CONSTANT(std::size_t, arity = (std::size_t)
- (Bits >> BOOST_FT_arity_shift)
- );
- };
-
- template <bits_t LHS_bits, bits_t LHS_mask, bits_t RHS_bits, bits_t RHS_mask>
- struct tag_ice
- {
- BOOST_STATIC_CONSTANT(bool, match =
- RHS_bits == (LHS_bits & RHS_mask & (RHS_bits |~BOOST_FT_type_mask))
- );
-
- BOOST_STATIC_CONSTANT(bits_t, combined_bits =
- (LHS_bits & ~RHS_mask) | RHS_bits
- );
-
- BOOST_STATIC_CONSTANT(bits_t, combined_mask =
- LHS_mask | RHS_mask
- );
-
- BOOST_STATIC_CONSTANT(bits_t, extracted_bits =
- LHS_bits & RHS_mask
- );
-
- };
-
-#define BOOST_FT_mask BOOST_FT_type_mask
- typedef property_tag<BOOST_FT_callable_builtin,BOOST_FT_mask> callable_builtin_tag;
- typedef property_tag<BOOST_FT_non_member_callable_builtin,BOOST_FT_mask> nonmember_callable_builtin_tag;
- typedef property_tag<BOOST_FT_function,BOOST_FT_mask> function_tag;
- typedef property_tag<BOOST_FT_reference,BOOST_FT_mask> reference_tag;
- typedef property_tag<BOOST_FT_pointer,BOOST_FT_mask> pointer_tag;
- typedef property_tag<BOOST_FT_member_function_pointer,BOOST_FT_mask> member_function_pointer_tag;
- typedef property_tag<BOOST_FT_member_object_pointer,BOOST_FT_mask> member_object_pointer_tag;
- typedef property_tag<BOOST_FT_member_object_pointer_flags,BOOST_FT_full_mask> member_object_pointer_base;
- typedef property_tag<BOOST_FT_member_pointer,BOOST_FT_mask> member_pointer_tag;
-#undef BOOST_FT_mask
-
-#define BOOST_PP_VALUE BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_default_cc
-#include BOOST_PP_ASSIGN_SLOT(1)
-#define BOOST_PP_VALUE BOOST_FT_type_mask|BOOST_FT_variadic_mask|BOOST_FT_cc_mask
-#include BOOST_PP_ASSIGN_SLOT(2)
-
- typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_func;
-
-#define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_default_cc
-#include BOOST_PP_ASSIGN_SLOT(1)
-
- typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_mfp;
-
-} // namespace detail
-
-} } // namespace ::boost::function_types
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_variate_loop/master.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_variate_loop/master.hpp
deleted file mode 100644
index 50263429d7..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/detail/pp_variate_loop/master.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifdef __WAVE__
-// this file has been generated from the master.hpp file in the same directory
-# pragma wave option(preserve: 0)
-#endif
-
-#if !defined(BOOST_FT_PREPROCESSING_MODE)
-# error "this file is only for two-pass preprocessing"
-#endif
-
-#if !defined(BOOST_PP_VALUE)
-# include <boost/preprocessor/slot/slot.hpp>
-# include <boost/preprocessor/facilities/empty.hpp>
-# include <boost/preprocessor/facilities/expand.hpp>
-# include <boost/function_types/detail/encoding/def.hpp>
-
-BOOST_PP_EXPAND(#) define BOOST_FT_mfp 0
-BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function
-
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_non_variadic
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_variadic
-# include __FILE__
-
-BOOST_PP_EXPAND(#) if !BOOST_FT_NO_CV_FUNC_SUPPORT
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_const
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_const
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_volatile
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_volatile
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_const|BOOST_FT_volatile
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_function|BOOST_FT_variadic|BOOST_FT_const|BOOST_FT_volatile
-# include __FILE__
-BOOST_PP_EXPAND(#) endif
-
-
-BOOST_PP_EXPAND(#) undef BOOST_FT_syntax
-BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function_pointer
-
-# define BOOST_PP_VALUE \
- BOOST_FT_pointer|BOOST_FT_non_variadic
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_pointer|BOOST_FT_variadic
-# include __FILE__
-
-BOOST_PP_EXPAND(#) undef BOOST_FT_syntax
-BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_function_reference
-
-# define BOOST_PP_VALUE \
- BOOST_FT_reference|BOOST_FT_non_variadic
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_reference|BOOST_FT_variadic
-# include __FILE__
-
-BOOST_PP_EXPAND(#) undef BOOST_FT_syntax
-BOOST_PP_EXPAND(#) undef BOOST_FT_mfp
-
-BOOST_PP_EXPAND(#) define BOOST_FT_mfp 1
-BOOST_PP_EXPAND(#) define BOOST_FT_syntax BOOST_FT_type_member_function_pointer
-
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_non_variadic
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_variadic
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_const
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_const
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_volatile
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_volatile
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_const|BOOST_FT_volatile
-# include __FILE__
-# define BOOST_PP_VALUE \
- BOOST_FT_member_function_pointer|BOOST_FT_variadic|BOOST_FT_const|BOOST_FT_volatile
-# include __FILE__
-
-BOOST_PP_EXPAND(#) undef BOOST_FT_syntax
-BOOST_PP_EXPAND(#) undef BOOST_FT_mfp
-
-# include <boost/function_types/detail/encoding/undef.hpp>
-#else
-
-# include BOOST_PP_ASSIGN_SLOT(1)
-
-# define BOOST_PP_VALUE BOOST_PP_SLOT(1) & BOOST_FT_kind_mask
-# include BOOST_PP_ASSIGN_SLOT(2)
-
-BOOST_PP_EXPAND(#) if !!(BOOST_PP_SLOT(2) & (BOOST_FT_variations))
-BOOST_PP_EXPAND(#) if (BOOST_PP_SLOT(1) & (BOOST_FT_cond)) == (BOOST_FT_cond)
-
-# if ( BOOST_PP_SLOT(1) & (BOOST_FT_variadic) )
-BOOST_PP_EXPAND(#) define BOOST_FT_ell ...
-BOOST_PP_EXPAND(#) define BOOST_FT_nullary_param
-# else
-BOOST_PP_EXPAND(#) define BOOST_FT_ell
-BOOST_PP_EXPAND(#) define BOOST_FT_nullary_param BOOST_FT_NULLARY_PARAM
-# endif
-
-# if !( BOOST_PP_SLOT(1) & (BOOST_FT_volatile) )
-# if !( BOOST_PP_SLOT(1) & (BOOST_FT_const) )
-BOOST_PP_EXPAND(#) define BOOST_FT_cv
-# else
-BOOST_PP_EXPAND(#) define BOOST_FT_cv const
-# endif
-# else
-# if !( BOOST_PP_SLOT(1) & (BOOST_FT_const) )
-BOOST_PP_EXPAND(#) define BOOST_FT_cv volatile
-# else
-BOOST_PP_EXPAND(#) define BOOST_FT_cv const volatile
-# endif
-# endif
-BOOST_PP_EXPAND(#) define BOOST_FT_flags BOOST_PP_SLOT(1)
-BOOST_PP_EXPAND(#) include BOOST_FT_variate_file
-
-BOOST_PP_EXPAND(#) undef BOOST_FT_cv
-BOOST_PP_EXPAND(#) undef BOOST_FT_ell
-BOOST_PP_EXPAND(#) undef BOOST_FT_nullary_param
-BOOST_PP_EXPAND(#) undef BOOST_FT_flags
-BOOST_PP_EXPAND(#) endif
-BOOST_PP_EXPAND(#) endif
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/function_arity.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/function_arity.hpp
deleted file mode 100644
index a81001be3f..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/function_arity.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_FUNCTION_ARITY_HPP_INCLUDED
-#define BOOST_FT_FUNCTION_ARITY_HPP_INCLUDED
-
-#include <boost/blank.hpp>
-#include <boost/mpl/if.hpp>
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/is_callable_builtin.hpp>
-#include <boost/function_types/components.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template<typename T> struct function_arity
- : mpl::if_
- < function_types::is_callable_builtin<T>
- , typename components<T>::function_arity, boost::blank
- >::type
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,function_arity,(T))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/function_pointer.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/function_pointer.hpp
deleted file mode 100644
index cb139187f0..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/function_pointer.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_FUNCTION_POINTER_HPP_INCLUDED
-#define BOOST_FT_FUNCTION_POINTER_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/function_type.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template<typename Types, typename Tag = null_tag> struct function_pointer
- {
- typedef typename function_types::function_type<Types,Tag>::type * type;
-
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,function_pointer,(Types,Tag))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/function_reference.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/function_reference.hpp
deleted file mode 100644
index 3eceae00ea..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/function_reference.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_FUNCTION_REFERENCE_HPP_INCLUDED
-#define BOOST_FT_FUNCTION_REFERENCE_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/function_type.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template<typename Types, typename Tag = null_tag> struct function_reference
- {
- typedef typename function_types::function_type<Types,Tag>::type & type;
-
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,function_reference,(Types,Tag))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/function_type.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/function_type.hpp
deleted file mode 100644
index afe3654a7c..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/function_type.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_FUNCTION_TYPE_HPP_INCLUDED
-#define BOOST_FT_FUNCTION_TYPE_HPP_INCLUDED
-
-#include <boost/function_types/detail/synthesize.hpp>
-#include <boost/function_types/detail/to_sequence.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template<typename Types, typename Tag = null_tag> struct function_type
- : detail::synthesize_func<typename detail::to_sequence<Types>::type, Tag>
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,function_type,(Types,Tag))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/is_function_pointer.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/is_function_pointer.hpp
deleted file mode 100644
index 67a04026f4..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/is_function_pointer.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_IS_FUNCTION_POINTER_HPP_INCLUDED
-#define BOOST_FT_IS_FUNCTION_POINTER_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/components.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template< typename T, typename Tag = null_tag >
- struct is_function_pointer
- : function_types::represents
- < function_types::components<T>
- , function_types::tag<Tag ,detail::pointer_tag>
- >
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_function_pointer,(T,Tag))
- };
- }
-}
-
-#endif
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/is_function_reference.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/is_function_reference.hpp
deleted file mode 100644
index 6bf908dc5d..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/is_function_reference.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_IS_FUNCTION_REFERENCE_HPP_INCLUDED
-#define BOOST_FT_IS_FUNCTION_REFERENCE_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/components.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template< typename T, typename Tag = null_tag >
- struct is_function_reference
- : function_types::represents
- < function_types::components<T>
- , function_types::tag<Tag ,detail::reference_tag> >
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_function_reference,(T,Tag))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/is_member_object_pointer.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/is_member_object_pointer.hpp
deleted file mode 100644
index 10bc89a163..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/is_member_object_pointer.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED
-#define BOOST_FT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/components.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template< typename T >
- struct is_member_object_pointer
- : function_types::detail::represents_impl
- < function_types::components<T>
- , detail::member_object_pointer_tag >
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_member_object_pointer,(T))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/is_nonmember_callable_builtin.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/is_nonmember_callable_builtin.hpp
deleted file mode 100644
index 61052858b7..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/is_nonmember_callable_builtin.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_IS_NONMEMBER_CALLABLE_BUILTIN_HPP_INCLUDED
-#define BOOST_FT_IS_NONMEMBER_CALLABLE_BUILTIN_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/components.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template< typename T, typename Tag = null_tag >
- struct is_nonmember_callable_builtin
- : function_types::represents
- < function_types::components<T>
- , function_types::tag<Tag,detail::nonmember_callable_builtin_tag>
- >
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,is_nonmember_callable_builtin,(T,Tag))
- };
- }
-}
-
-#endif
-
diff --git a/contrib/restricted/boost/function_types/include/boost/function_types/member_object_pointer.hpp b/contrib/restricted/boost/function_types/include/boost/function_types/member_object_pointer.hpp
deleted file mode 100644
index 1951654550..0000000000
--- a/contrib/restricted/boost/function_types/include/boost/function_types/member_object_pointer.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-// (C) Copyright Tobias Schwinger
-//
-// Use modification and distribution are subject to the boost Software License,
-// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
-
-//------------------------------------------------------------------------------
-
-#ifndef BOOST_FT_MEMBER_OBJECT_POINTER_HPP_INCLUDED
-#define BOOST_FT_MEMBER_OBJECT_POINTER_HPP_INCLUDED
-
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#include <boost/function_types/detail/synthesize.hpp>
-#include <boost/function_types/detail/to_sequence.hpp>
-
-namespace boost
-{
- namespace function_types
- {
- template<typename Types>
- struct member_object_pointer
- : detail::synthesize_mop< typename detail::to_sequence<Types>::type >
- {
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,member_object_pointer,(Types))
- };
- }
-}
-
-#endif
-
-
diff --git a/contrib/restricted/boost/graph/include/boost/detail/algorithm.hpp b/contrib/restricted/boost/graph/include/boost/detail/algorithm.hpp
deleted file mode 100644
index 9b3195cbf0..0000000000
--- a/contrib/restricted/boost/graph/include/boost/detail/algorithm.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// (C) Copyright Jeremy Siek 2001.
-// Distributed under the Boost Software License, Version 1.0. (See accompany-
-// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef BOOST_ALGORITHM_HPP
-#define BOOST_ALGORITHM_HPP
-
-// Algorithms on sequences
-//
-// The functions in this file have not yet gone through formal
-// review, and are subject to change. This is a work in progress.
-// They have been checked into the detail directory because
-// there are some graph algorithms that use these functions.
-
-#include <algorithm>
-#include <vector>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/algorithm/copy.hpp>
-#include <boost/range/algorithm/equal.hpp>
-#include <boost/range/algorithm/sort.hpp>
-#include <boost/range/algorithm/stable_sort.hpp>
-#include <boost/range/algorithm/find_if.hpp>
-#include <boost/range/algorithm/count.hpp>
-#include <boost/range/algorithm/count_if.hpp>
-#include <boost/range/algorithm_ext/is_sorted.hpp>
-#include <boost/range/algorithm_ext/iota.hpp>
-
-namespace boost
-{
-
-template < typename InputIterator, typename Predicate >
-bool any_if(InputIterator first, InputIterator last, Predicate p)
-{
- return std::find_if(first, last, p) != last;
-}
-
-template < typename Container, typename Predicate >
-bool any_if(const Container& c, Predicate p)
-{
- return any_if(boost::begin(c), boost::end(c), p);
-}
-
-template < typename InputIterator, typename T >
-bool container_contains(InputIterator first, InputIterator last, T value)
-{
- return std::find(first, last, value) != last;
-}
-template < typename Container, typename T >
-bool container_contains(const Container& c, const T& value)
-{
- return container_contains(boost::begin(c), boost::end(c), value);
-}
-
-} // namespace boost
-
-#endif // BOOST_ALGORITHM_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/adj_list_serialize.hpp b/contrib/restricted/boost/graph/include/boost/graph/adj_list_serialize.hpp
deleted file mode 100644
index 85f7e2ed41..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/adj_list_serialize.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-//=======================================================================
-// Copyright 2005 Jeremy G. Siek
-// Authors: Jeremy G. Siek
-//
-// 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_ADJ_LIST_SERIALIZE_HPP
-#define BOOST_GRAPH_ADJ_LIST_SERIALIZE_HPP
-
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/pending/property_serialize.hpp>
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-#include <boost/serialization/collections_save_imp.hpp>
-#include <boost/serialization/collections_load_imp.hpp>
-#include <boost/serialization/split_free.hpp>
-
-namespace boost
-{
-
-namespace serialization
-{
-
- // Turn off tracking for adjacency_list. It's not polymorphic, and we
- // need to do this to enable saving of non-const adjacency lists.
- template < class OEL, class VL, class D, class VP, class EP, class GP,
- class EL >
- struct tracking_level< boost::adjacency_list< OEL, VL, D, VP, EP, GP, EL > >
- {
- typedef mpl::integral_c_tag tag;
- typedef mpl::int_< track_never > type;
- BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
- };
-
- template < class Archive, class OEL, class VL, class D, class VP, class EP,
- class GP, class EL >
- inline void save(Archive& ar,
- const boost::adjacency_list< OEL, VL, D, VP, EP, GP, EL >& graph,
- const unsigned int /* file_version */
- )
- {
- typedef adjacency_list< OEL, VL, D, VP, EP, GP, EL > Graph;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- int V = num_vertices(graph);
- int E = num_edges(graph);
- ar << BOOST_SERIALIZATION_NVP(V);
- ar << BOOST_SERIALIZATION_NVP(E);
-
- // assign indices to vertices
- std::map< Vertex, int > indices;
- int num = 0;
- BGL_FORALL_VERTICES_T(v, graph, Graph)
- {
- indices[v] = num++;
- ar << serialization::make_nvp(
- "vertex_property", get(vertex_all_t(), graph, v));
- }
-
- // write edges
- BGL_FORALL_EDGES_T(e, graph, Graph)
- {
- ar << serialization::make_nvp("u", indices[source(e, graph)]);
- ar << serialization::make_nvp("v", indices[target(e, graph)]);
- ar << serialization::make_nvp(
- "edge_property", get(edge_all_t(), graph, e));
- }
-
- ar << serialization::make_nvp(
- "graph_property", get_property(graph, graph_all_t()));
- }
-
- template < class Archive, class OEL, class VL, class D, class VP, class EP,
- class GP, class EL >
- inline void load(
- Archive& ar, boost::adjacency_list< OEL, VL, D, VP, EP, GP, EL >& graph,
- const unsigned int /* file_version */
- )
- {
- typedef adjacency_list< OEL, VL, D, VP, EP, GP, EL > Graph;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::edge_descriptor Edge;
-
- unsigned int V;
- ar >> BOOST_SERIALIZATION_NVP(V);
- unsigned int E;
- ar >> BOOST_SERIALIZATION_NVP(E);
-
- std::vector< Vertex > verts(V);
- int i = 0;
- while (V-- > 0)
- {
- Vertex v = add_vertex(graph);
- verts[i++] = v;
- ar >> serialization::make_nvp(
- "vertex_property", get(vertex_all_t(), graph, v));
- }
- while (E-- > 0)
- {
- int u;
- int v;
- ar >> BOOST_SERIALIZATION_NVP(u);
- ar >> BOOST_SERIALIZATION_NVP(v);
- Edge e;
- bool inserted;
- boost::tie(e, inserted) = add_edge(verts[u], verts[v], graph);
- ar >> serialization::make_nvp(
- "edge_property", get(edge_all_t(), graph, e));
- }
- ar >> serialization::make_nvp(
- "graph_property", get_property(graph, graph_all_t()));
- }
-
- template < class Archive, class OEL, class VL, class D, class VP, class EP,
- class GP, class EL >
- inline void serialize(Archive& ar,
- boost::adjacency_list< OEL, VL, D, VP, EP, GP, EL >& graph,
- const unsigned int file_version)
- {
- boost::serialization::split_free(ar, graph, file_version);
- }
-
-} // serialization
-} // boost
-
-#endif // BOOST_GRAPH_ADJ_LIST_SERIALIZE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/adjacency_list_io.hpp b/contrib/restricted/boost/graph/include/boost/graph/adjacency_list_io.hpp
deleted file mode 100644
index 4a85bebd99..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/adjacency_list_io.hpp
+++ /dev/null
@@ -1,405 +0,0 @@
-//=======================================================================
-// Copyright 2001 Universite Joseph Fourier, Grenoble.
-// Author: Francois Faure
-//
-// 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_IO_HPP
-#define BOOST_GRAPH_ADJACENCY_LIST_IO_HPP
-
-#include <iostream>
-#include <vector>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <cctype>
-
-// Method read to parse an adjacency list from an input stream. Examples:
-// cin >> read( G );
-// cin >> read( G, NodePropertySubset(), EdgepropertySubset() );
-//
-// Method write to print an adjacency list to an output stream. Examples:
-// cout << write( G );
-// cout << write( G, NodePropertySubset(), EdgepropertySubset() );
-
-namespace boost
-{
-
-/* outline
- - basic property input
- - get property subset
- - graph parser
- - property printer
- - graph printer
- - user methods
-*/
-
-//===========================================================================
-// basic property input
-
-template < class Tag, class Value, class Next >
-std::istream& operator>>(std::istream& in, property< Tag, Value, Next >& p)
-{
- in >> p.m_value >> p.m_base; // houpla !!
- return in;
-}
-
-template < class Tag, class Value >
-std::istream& operator>>(
- std::istream& in, property< Tag, Value, no_property >& p)
-{
- in >> p.m_value;
- return in;
-}
-
-inline std::istream& operator>>(std::istream& in, no_property&) { return in; }
-
-// basic property input
-//===========================================================================
-// get property subsets
-
-// get a single property tagged Stag
-template < class Tag, class Value, class Next, class V, class Stag >
-void get(property< Tag, Value, Next >& p, const V& v, Stag s)
-{
- get(p.m_base, v, s);
-}
-
-template < class Value, class Next, class V, class Stag >
-void get(property< Stag, Value, Next >& p, const V& v, Stag)
-{
- p.m_value = v;
-}
-
-// get a subset of properties tagged Stag
-template < class Tag, class Value, class Next, class Stag, class Svalue,
- class Snext >
-void getSubset(
- property< Tag, Value, Next >& p, const property< Stag, Svalue, Snext >& s)
-{
- get(p, s.m_value, Stag());
- getSubset(p, s.m_base);
-}
-
-template < class Tag, class Value, class Next, class Stag, class Svalue >
-void getSubset(property< Tag, Value, Next >& p,
- const property< Stag, Svalue, no_property >& s)
-{
- get(p, s.m_value, Stag());
-}
-
-inline void getSubset(no_property&, const no_property&) {}
-
-#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
-template < typename T, typename U > void getSubset(T& p, const U& s) { p = s; }
-
-template < typename T > void getSubset(T&, const no_property&) {}
-
-#endif
-
-// get property subset
-//===========================================================================
-// graph parser
-typedef enum
-{
- PARSE_NUM_NODES,
- PARSE_VERTEX,
- PARSE_EDGE
-} GraphParserState;
-
-template < class Graph_t, class VertexProperty, class EdgeProperty,
- class VertexPropertySubset, class EdgePropertySubset >
-struct GraphParser
-{
-
- typedef Graph_t Graph;
-
- GraphParser(Graph* g) : graph(g) {}
-
- GraphParser& operator()(std::istream& in)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- std::vector< Vertex > nodes;
-
- GraphParserState state = PARSE_VERTEX;
-
- unsigned int numLine = 1;
- char c;
- while (in.get(c))
- {
- if (c == '#')
- skip(in);
- else if (c == 'n')
- state = PARSE_NUM_NODES;
- else if (c == 'v')
- state = PARSE_VERTEX;
- else if (c == 'e')
- state = PARSE_EDGE;
- else if (c == '\n')
- numLine++;
- else if (!std::isspace(c))
- {
- in.putback(c);
- if (state == PARSE_VERTEX)
- {
- VertexPropertySubset readProp;
- if (in >> readProp)
- {
- VertexProperty vp;
- getSubset(vp, readProp);
- nodes.push_back(add_vertex(vp, *graph));
- }
- else
- std::cerr << "read vertex, parse error at line"
- << numLine << std::endl;
- }
- else if (state == PARSE_EDGE)
- {
- int source, target;
- EdgePropertySubset readProp;
- in >> source >> target;
- if (in >> readProp)
- {
- EdgeProperty ep;
- getSubset(ep, readProp);
- add_edge(nodes[source], nodes[target], ep, *graph);
- }
- else
- std::cerr << "read edge, parse error at line" << numLine
- << std::endl;
- }
- else
- { // state == PARSE_NUM_NODES
- int n;
- if (in >> n)
- {
- for (int i = 0; i < n; ++i)
- nodes.push_back(add_vertex(*graph));
- }
- else
- std::cerr << "read num_nodes, parse error at line "
- << numLine << std::endl;
- }
- }
- }
- return (*this);
- }
-
-protected:
- Graph* graph;
-
- void skip(std::istream& in)
- {
- char c = 0;
- while (c != '\n' && !in.eof())
- in.get(c);
- in.putback(c);
- }
-};
-
-// parser
-//=======================================================================
-// property printer
-
-#if defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
-template < class Graph, class Property > struct PropertyPrinter
-{
- typedef typename Property::value_type Value;
- typedef typename Property::tag_type Tag;
- typedef typename Property::next_type Next;
-
- PropertyPrinter(const Graph& g) : graph(&g) {}
-
- template < class Val >
- PropertyPrinter& operator()(std::ostream& out, const Val& v)
- {
- typename property_map< Graph, Tag >::const_type ps = get(Tag(), *graph);
- out << ps[v] << " ";
- PropertyPrinter< Graph, Next > print(*graph);
- print(out, v);
- return (*this);
- }
-
-private:
- const Graph* graph;
-};
-#else
-template < class Graph, typename Property > struct PropertyPrinter
-{
- PropertyPrinter(const Graph& g) : graph(&g) {}
-
- template < class Val >
- PropertyPrinter& operator()(std::ostream& out, const Val& v)
- {
- out << (*graph)[v] << " ";
- return (*this);
- }
-
-private:
- const Graph* graph;
-};
-
-template < class Graph, typename Tag, typename Value, typename Next >
-struct PropertyPrinter< Graph, property< Tag, Value, Next > >
-{
- PropertyPrinter(const Graph& g) : graph(&g) {}
-
- template < class Val >
- PropertyPrinter& operator()(std::ostream& out, const Val& v)
- {
- typename property_map< Graph, Tag >::const_type ps = get(Tag(), *graph);
- out << ps[v] << " ";
- PropertyPrinter< Graph, Next > print(*graph);
- print(out, v);
- return (*this);
- }
-
-private:
- const Graph* graph;
-};
-#endif
-
-template < class Graph > struct PropertyPrinter< Graph, no_property >
-{
- PropertyPrinter(const Graph&) {}
-
- template < class Val >
- PropertyPrinter& operator()(std::ostream&, const Val&)
- {
- return *this;
- }
-};
-
-// property printer
-//=========================================================================
-// graph printer
-
-template < class Graph_t, class EdgeProperty > struct EdgePrinter
-{
-
- typedef Graph_t Graph;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- EdgePrinter(const Graph& g) : graph(g) {}
-
- const EdgePrinter& operator()(std::ostream& out) const
- {
- // assign indices to vertices
- std::map< Vertex, int > indices;
- int num = 0;
- BGL_FORALL_VERTICES_T(v, graph, Graph) { indices[v] = num++; }
-
- // write edges
- PropertyPrinter< Graph, EdgeProperty > print_Edge(graph);
- out << "e" << std::endl;
- BGL_FORALL_EDGES_T(e, graph, Graph)
- {
- out << indices[source(e, graph)] << " " << indices[target(e, graph)]
- << " ";
- print_Edge(out, e);
- out << std::endl;
- }
- out << std::endl;
- return (*this);
- }
-
-protected:
- const Graph& graph;
-};
-
-template < class Graph, class V, class E >
-struct GraphPrinter : public EdgePrinter< Graph, E >
-{
- GraphPrinter(const Graph& g) : EdgePrinter< Graph, E >(g) {}
-
- const GraphPrinter& operator()(std::ostream& out) const
- {
- PropertyPrinter< Graph, V > printNode(this->graph);
- out << "v" << std::endl;
- BGL_FORALL_VERTICES_T(v, this->graph, Graph)
- {
- printNode(out, v);
- out << std::endl;
- }
-
- EdgePrinter< Graph, E >::operator()(out);
- return (*this);
- }
-};
-
-template < class Graph, class E >
-struct GraphPrinter< Graph, no_property, E > : public EdgePrinter< Graph, E >
-{
- GraphPrinter(const Graph& g) : EdgePrinter< Graph, E >(g) {}
-
- const GraphPrinter& operator()(std::ostream& out) const
- {
- out << "n " << num_vertices(this->graph) << std::endl;
- EdgePrinter< Graph, E >::operator()(out);
- return (*this);
- }
-};
-
-// graph printer
-//=========================================================================
-// user methods
-
-/// input stream for reading a graph
-template < class Graph, class VP, class EP, class VPS, class EPS >
-std::istream& operator>>(
- std::istream& in, GraphParser< Graph, VP, EP, VPS, EPS > gp)
-{
- gp(in);
- return in;
-}
-
-/// graph parser for given subsets of internal vertex and edge properties
-template < class EL, class VL, class D, class VP, class EP, class GP, class VPS,
- class EPS >
-GraphParser< adjacency_list< EL, VL, D, VP, EP, GP >, VP, EP, VPS, EPS > read(
- adjacency_list< EL, VL, D, VP, EP, GP >& g, VPS vps, EPS eps)
-{
- return GraphParser< adjacency_list< EL, VL, D, VP, EP, GP >, VP, EP, VPS,
- EPS >(&g);
-}
-
-/// graph parser for all internal vertex and edge properties
-template < class EL, class VL, class D, class VP, class EP, class GP >
-GraphParser< adjacency_list< EL, VL, D, VP, EP, GP >, VP, EP, VP, EP > read(
- adjacency_list< EL, VL, D, VP, EP, GP >& g)
-{
- return GraphParser< adjacency_list< EL, VL, D, VP, EP, GP >, VP, EP, VP,
- EP >(&g);
-}
-
-/// output stream for writing a graph
-template < class Graph, class VP, class EP >
-std::ostream& operator<<(
- std::ostream& out, const GraphPrinter< Graph, VP, EP >& gp)
-{
- gp(out);
- return out;
-}
-
-/// write the graph with given property subsets
-template < class EL, class VL, class D, class VP, class EP, class GP, class VPS,
- class EPS >
-GraphPrinter< adjacency_list< EL, VL, D, VP, EP, GP >, VPS, EPS > write(
- const adjacency_list< EL, VL, D, VP, EP, GP >& g, VPS, EPS)
-{
- return GraphPrinter< adjacency_list< EL, VL, D, VP, EP, GP >, VPS, EPS >(g);
-}
-
-/// write the graph with all internal vertex and edge properties
-template < class EL, class VL, class D, class VP, class EP, class GP >
-GraphPrinter< adjacency_list< EL, VL, D, VP, EP, GP >, VP, EP > write(
- const adjacency_list< EL, VL, D, VP, EP, GP >& g)
-{
- return GraphPrinter< adjacency_list< EL, VL, D, VP, EP, GP >, VP, EP >(g);
-}
-
-// user methods
-//=========================================================================
-} // boost
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/adjacency_matrix.hpp b/contrib/restricted/boost/graph/include/boost/graph/adjacency_matrix.hpp
deleted file mode 100644
index 8d6990cb30..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/adjacency_matrix.hpp
+++ /dev/null
@@ -1,1296 +0,0 @@
-//=======================================================================
-// Copyright 2001 University of Notre Dame.
-// Copyright 2006 Trustees of Indiana University
-// Authors: Jeremy G. Siek and Douglas Gregor <dgregor@cs.indiana.edu>
-//
-// 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_ADJACENCY_MATRIX_HPP
-#define BOOST_ADJACENCY_MATRIX_HPP
-
-#include <boost/config.hpp>
-#include <vector>
-#include <memory>
-#include <iterator>
-#include <boost/assert.hpp>
-#include <boost/limits.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_mutability_traits.hpp>
-#include <boost/graph/graph_selectors.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/graph/adjacency_iterator.hpp>
-#include <boost/graph/detail/edge.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/filter_iterator.hpp>
-#include <boost/range/irange.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/property_map/transform_value_property_map.hpp>
-#include <boost/property_map/function_property_map.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < class Directed, class Vertex >
- class matrix_edge_desc_impl : public edge_desc_impl< Directed, Vertex >
- {
- typedef edge_desc_impl< Directed, Vertex > Base;
-
- public:
- matrix_edge_desc_impl() {}
- matrix_edge_desc_impl(
- bool exists, Vertex s, Vertex d, const void* ep = 0)
- : Base(s, d, ep), m_exists(exists)
- {
- }
- bool exists() const { return m_exists; }
-
- private:
- bool m_exists;
- };
-
- struct does_edge_exist
- {
- template < class Edge > bool operator()(const Edge& e) const
- {
- return e.exists();
- }
- };
-
- // Note to self... The int for get_edge_exists and set_edge exist helps
- // make these calls unambiguous.
- template < typename EdgeProperty >
- bool get_edge_exists(
- const std::pair< bool, EdgeProperty >& stored_edge, int)
- {
- return stored_edge.first;
- }
- template < typename EdgeProperty >
- void set_edge_exists(
- std::pair< bool, EdgeProperty >& stored_edge, bool flag, int)
- {
- stored_edge.first = flag;
- }
-
- template < typename EdgeProxy >
- bool get_edge_exists(const EdgeProxy& edge_proxy, ...)
- {
- return edge_proxy;
- }
- template < typename EdgeProxy >
- EdgeProxy& set_edge_exists(EdgeProxy& edge_proxy, bool flag, ...)
- {
- edge_proxy = flag;
- return edge_proxy; // just to avoid never used warning
- }
-
- // NOTE: These functions collide with the get_property function for
- // accessing bundled graph properties. Be excplicit when using them.
- template < typename EdgeProperty >
- const EdgeProperty& get_edge_property(
- const std::pair< bool, EdgeProperty >& stored_edge)
- {
- return stored_edge.second;
- }
- template < typename EdgeProperty >
- EdgeProperty& get_edge_property(
- std::pair< bool, EdgeProperty >& stored_edge)
- {
- return stored_edge.second;
- }
-
- template < typename StoredEdgeProperty, typename EdgeProperty >
- inline void set_edge_property(
- std::pair< bool, StoredEdgeProperty >& stored_edge,
- const EdgeProperty& ep, int)
- {
- stored_edge.second = ep;
- }
-
- inline const no_property& get_edge_property(const char&)
- {
- static no_property s_prop;
- return s_prop;
- }
- inline no_property& get_edge_property(char&)
- {
- static no_property s_prop;
- return s_prop;
- }
- template < typename EdgeProxy, typename EdgeProperty >
- inline void set_edge_property(EdgeProxy, const EdgeProperty&, ...)
- {
- }
-
- //=======================================================================
- // Directed Out Edge Iterator
-
- template < typename VertexDescriptor, typename MatrixIter,
- typename VerticesSizeType, typename EdgeDescriptor >
- struct dir_adj_matrix_out_edge_iter
- : iterator_adaptor< dir_adj_matrix_out_edge_iter< VertexDescriptor,
- MatrixIter, VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- {
- typedef iterator_adaptor<
- dir_adj_matrix_out_edge_iter< VertexDescriptor, MatrixIter,
- VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- super_t;
-
- dir_adj_matrix_out_edge_iter() {}
-
- dir_adj_matrix_out_edge_iter(const MatrixIter& i,
- const VertexDescriptor& src, const VerticesSizeType& n)
- : super_t(i), m_src(src), m_targ(0), m_n(n)
- {
- }
-
- void increment()
- {
- ++this->base_reference();
- ++m_targ;
- }
-
- inline EdgeDescriptor dereference() const
- {
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src,
- m_targ, &get_edge_property(*this->base()));
- }
- VertexDescriptor m_src, m_targ;
- VerticesSizeType m_n;
- };
-
- //=======================================================================
- // Directed In Edge Iterator
-
- template < typename VertexDescriptor, typename MatrixIter,
- typename VerticesSizeType, typename EdgeDescriptor >
- struct dir_adj_matrix_in_edge_iter
- : iterator_adaptor< dir_adj_matrix_in_edge_iter< VertexDescriptor,
- MatrixIter, VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- {
- typedef iterator_adaptor<
- dir_adj_matrix_in_edge_iter< VertexDescriptor, MatrixIter,
- VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- super_t;
-
- dir_adj_matrix_in_edge_iter() {}
-
- dir_adj_matrix_in_edge_iter(const MatrixIter& i, const MatrixIter& last,
- const VertexDescriptor& tgt, const VerticesSizeType& n)
- : super_t(i), m_last(last), m_src(0), m_targ(tgt), m_n(n)
- {
- }
-
- void increment()
- {
- if (VerticesSizeType(m_last - this->base_reference()) >= m_n)
- {
- this->base_reference() += m_n;
- ++m_src;
- }
- else
- {
- this->base_reference() = m_last;
- }
- }
-
- inline EdgeDescriptor dereference() const
- {
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src,
- m_targ, &get_edge_property(*this->base()));
- }
- MatrixIter m_last;
- VertexDescriptor m_src, m_targ;
- VerticesSizeType m_n;
- };
-
- //=======================================================================
- // Undirected Out Edge Iterator
-
- template < typename VertexDescriptor, typename MatrixIter,
- typename VerticesSizeType, typename EdgeDescriptor >
- struct undir_adj_matrix_out_edge_iter
- : iterator_adaptor< undir_adj_matrix_out_edge_iter< VertexDescriptor,
- MatrixIter, VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- {
- typedef iterator_adaptor<
- undir_adj_matrix_out_edge_iter< VertexDescriptor, MatrixIter,
- VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- super_t;
-
- undir_adj_matrix_out_edge_iter() {}
-
- undir_adj_matrix_out_edge_iter(const MatrixIter& i,
- const VertexDescriptor& src, const VerticesSizeType& n)
- : super_t(i), m_src(src), m_inc(src), m_targ(0), m_n(n)
- {
- }
-
- void increment()
- {
- if (m_targ < m_src) // first half
- {
- ++this->base_reference();
- }
- else if (m_targ < m_n - 1)
- { // second half
- ++m_inc;
- this->base_reference() += m_inc;
- }
- else
- { // past-the-end
- this->base_reference() += m_n - m_src;
- }
- ++m_targ;
- }
-
- inline EdgeDescriptor dereference() const
- {
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src,
- m_targ, &get_edge_property(*this->base()));
- }
-
- VertexDescriptor m_src, m_inc, m_targ;
- VerticesSizeType m_n;
- };
-
- //=======================================================================
- // Undirected In Edge Iterator
-
- template < typename VertexDescriptor, typename MatrixIter,
- typename VerticesSizeType, typename EdgeDescriptor >
- struct undir_adj_matrix_in_edge_iter
- : iterator_adaptor< undir_adj_matrix_in_edge_iter< VertexDescriptor,
- MatrixIter, VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- {
- typedef iterator_adaptor<
- undir_adj_matrix_in_edge_iter< VertexDescriptor, MatrixIter,
- VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- super_t;
-
- undir_adj_matrix_in_edge_iter() {}
-
- undir_adj_matrix_in_edge_iter(const MatrixIter& i,
- const VertexDescriptor& src, const VerticesSizeType& n)
- : super_t(i), m_src(src), m_inc(src), m_targ(0), m_n(n)
- {
- }
-
- void increment()
- {
- if (m_targ < m_src) // first half
- {
- ++this->base_reference();
- }
- else if (m_targ < m_n - 1)
- { // second half
- ++m_inc;
- this->base_reference() += m_inc;
- }
- else
- { // past-the-end
- this->base_reference() += m_n - m_src;
- }
- ++m_targ;
- }
-
- inline EdgeDescriptor dereference() const
- {
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_targ,
- m_src, &get_edge_property(*this->base()));
- }
-
- VertexDescriptor m_src, m_inc, m_targ;
- VerticesSizeType m_n;
- };
-
- //=======================================================================
- // Edge Iterator
-
- template < typename Directed, typename MatrixIter,
- typename VerticesSizeType, typename EdgeDescriptor >
- struct adj_matrix_edge_iter
- : iterator_adaptor< adj_matrix_edge_iter< Directed, MatrixIter,
- VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- {
- typedef iterator_adaptor< adj_matrix_edge_iter< Directed, MatrixIter,
- VerticesSizeType, EdgeDescriptor >,
- MatrixIter, EdgeDescriptor, use_default, EdgeDescriptor,
- std::ptrdiff_t >
- super_t;
-
- adj_matrix_edge_iter() {}
-
- adj_matrix_edge_iter(const MatrixIter& i, const MatrixIter& start,
- const VerticesSizeType& n)
- : super_t(i), m_start(start), m_src(0), m_targ(0), m_n(n)
- {
- }
-
- void increment()
- {
- increment_dispatch(this->base_reference(), Directed());
- }
-
- void increment_dispatch(MatrixIter& i, directedS)
- {
- ++i;
- if (m_targ == m_n - 1)
- {
- m_targ = 0;
- ++m_src;
- }
- else
- {
- ++m_targ;
- }
- }
-
- void increment_dispatch(MatrixIter& i, undirectedS)
- {
- ++i;
- if (m_targ == m_src)
- {
- m_targ = 0;
- ++m_src;
- }
- else
- {
- ++m_targ;
- }
- }
-
- inline EdgeDescriptor dereference() const
- {
- return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src,
- m_targ, &get_edge_property(*this->base()));
- }
-
- MatrixIter m_start;
- VerticesSizeType m_src, m_targ, m_n;
- };
-
-} // namespace detail
-
-//=========================================================================
-// Adjacency Matrix Traits
-template < typename Directed = directedS > class adjacency_matrix_traits
-{
- typedef typename Directed::is_directed_t is_directed;
-
-public:
- // The bidirectionalS tag is not allowed with the adjacency_matrix
- // graph type. Instead, use directedS, which also provides the
- // functionality required for a Bidirectional Graph (in_edges,
- // in_degree, etc.).
- BOOST_STATIC_ASSERT(!(is_same< Directed, bidirectionalS >::value));
-
- typedef typename mpl::if_< is_directed, bidirectional_tag,
- undirected_tag >::type directed_category;
-
- typedef disallow_parallel_edge_tag edge_parallel_category;
-
- typedef std::size_t vertex_descriptor;
-
- typedef detail::matrix_edge_desc_impl< directed_category,
- vertex_descriptor >
- edge_descriptor;
-};
-
-struct adjacency_matrix_class_tag
-{
-};
-
-struct adj_matrix_traversal_tag : public virtual adjacency_matrix_tag,
- public virtual vertex_list_graph_tag,
- public virtual incidence_graph_tag,
- public virtual adjacency_graph_tag,
- public virtual edge_list_graph_tag
-{
-};
-
-//=========================================================================
-// Adjacency Matrix Class
-template < typename Directed = directedS, typename VertexProperty = no_property,
- typename EdgeProperty = no_property, typename GraphProperty = no_property,
- typename Allocator = std::allocator< bool > >
-class adjacency_matrix
-{
- typedef adjacency_matrix self;
- typedef adjacency_matrix_traits< Directed > Traits;
-
-public:
- // The bidirectionalS tag is not allowed with the adjacency_matrix
- // graph type. Instead, use directedS, which also provides the
- // functionality required for a Bidirectional Graph (in_edges,
- // in_degree, etc.).
- BOOST_STATIC_ASSERT(!(is_same< Directed, bidirectionalS >::value));
-
- 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;
-
-public: // should be private
- typedef
- typename mpl::if_< typename has_property< edge_property_type >::type,
- std::pair< bool, edge_property_type >, char >::type StoredEdge;
-#if defined(BOOST_NO_STD_ALLOCATOR)
- typedef std::vector< StoredEdge > Matrix;
-#else
-#if defined(BOOST_NO_CXX11_ALLOCATOR)
- typedef typename Allocator::template rebind< StoredEdge >::other Alloc;
-#else
- typedef typename std::allocator_traits< Allocator >::template rebind_alloc<
- StoredEdge >
- Alloc;
-#endif
- typedef std::vector< StoredEdge, Alloc > Matrix;
-#endif
- typedef typename Matrix::iterator MatrixIter;
- typedef typename Matrix::size_type size_type;
-
-public:
- // Graph concept required types
- typedef typename Traits::vertex_descriptor vertex_descriptor;
- typedef typename Traits::edge_descriptor edge_descriptor;
- typedef typename Traits::directed_category directed_category;
- typedef typename Traits::edge_parallel_category edge_parallel_category;
- typedef adj_matrix_traversal_tag traversal_category;
-
- static vertex_descriptor null_vertex()
- {
- return (std::numeric_limits< vertex_descriptor >::max)();
- }
-
- // private: if friends worked, these would be private
-
- typedef detail::dir_adj_matrix_out_edge_iter< vertex_descriptor, MatrixIter,
- size_type, edge_descriptor >
- DirOutEdgeIter;
-
- typedef detail::undir_adj_matrix_out_edge_iter< vertex_descriptor,
- MatrixIter, size_type, edge_descriptor >
- UnDirOutEdgeIter;
-
- typedef typename mpl::if_< typename Directed::is_directed_t, DirOutEdgeIter,
- UnDirOutEdgeIter >::type unfiltered_out_edge_iter;
-
- typedef detail::dir_adj_matrix_in_edge_iter< vertex_descriptor, MatrixIter,
- size_type, edge_descriptor >
- DirInEdgeIter;
-
- typedef detail::undir_adj_matrix_in_edge_iter< vertex_descriptor,
- MatrixIter, size_type, edge_descriptor >
- UnDirInEdgeIter;
-
- typedef typename mpl::if_< typename Directed::is_directed_t, DirInEdgeIter,
- UnDirInEdgeIter >::type unfiltered_in_edge_iter;
-
- typedef detail::adj_matrix_edge_iter< Directed, MatrixIter, size_type,
- edge_descriptor >
- unfiltered_edge_iter;
-
-public:
- // IncidenceGraph concept required types
- typedef filter_iterator< detail::does_edge_exist, unfiltered_out_edge_iter >
- out_edge_iterator;
-
- typedef size_type degree_size_type;
-
- // BidirectionalGraph required types
- typedef filter_iterator< detail::does_edge_exist, unfiltered_in_edge_iter >
- in_edge_iterator;
-
- // AdjacencyGraph required types
- typedef typename adjacency_iterator_generator< self, vertex_descriptor,
- out_edge_iterator >::type adjacency_iterator;
-
- // VertexListGraph required types
- typedef size_type vertices_size_type;
- typedef integer_range< vertex_descriptor > VertexList;
- typedef typename VertexList::iterator vertex_iterator;
-
- // EdgeListGraph required types
- typedef size_type edges_size_type;
- typedef filter_iterator< detail::does_edge_exist, unfiltered_edge_iter >
- edge_iterator;
-
- // PropertyGraph required types
- typedef adjacency_matrix_class_tag graph_tag;
-
- // Constructor required by MutableGraph
- adjacency_matrix(
- vertices_size_type n_vertices, const GraphProperty& p = GraphProperty())
- : m_matrix(Directed::is_directed ? (n_vertices * n_vertices)
- : (n_vertices * (n_vertices + 1) / 2))
- , m_vertex_set(0, n_vertices)
- , m_vertex_properties(n_vertices)
- , m_num_edges(0)
- , m_property(p)
- {
- }
-
- template < typename EdgeIterator >
- adjacency_matrix(EdgeIterator first, EdgeIterator last,
- vertices_size_type n_vertices, const GraphProperty& p = GraphProperty())
- : m_matrix(Directed::is_directed ? (n_vertices * n_vertices)
- : (n_vertices * (n_vertices + 1) / 2))
- , m_vertex_set(0, n_vertices)
- , m_vertex_properties(n_vertices)
- , m_num_edges(0)
- , m_property(p)
- {
- for (; first != last; ++first)
- {
- add_edge(first->first, first->second, *this);
- }
- }
-
- template < typename EdgeIterator, typename EdgePropertyIterator >
- adjacency_matrix(EdgeIterator first, EdgeIterator last,
- EdgePropertyIterator ep_iter, vertices_size_type n_vertices,
- const GraphProperty& p = GraphProperty())
- : m_matrix(Directed::is_directed ? (n_vertices * n_vertices)
- : (n_vertices * (n_vertices + 1) / 2))
- , m_vertex_set(0, n_vertices)
- , m_vertex_properties(n_vertices)
- , m_num_edges(0)
- , m_property(p)
- {
- for (; first != last; ++first, ++ep_iter)
- {
- add_edge(first->first, first->second, *ep_iter, *this);
- }
- }
-
-#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); }
-
- const graph_bundled& operator[](graph_bundle_t) const
- {
- return get_property(*this);
- }
-#endif
-
- // private: if friends worked, these would be private
-
- typename Matrix::const_reference get_edge(
- vertex_descriptor u, vertex_descriptor v) const
- {
- if (Directed::is_directed)
- return m_matrix[u * m_vertex_set.size() + v];
- else
- {
- if (v > u)
- std::swap(u, v);
- return m_matrix[u * (u + 1) / 2 + v];
- }
- }
- typename Matrix::reference get_edge(
- vertex_descriptor u, vertex_descriptor v)
- {
- if (Directed::is_directed)
- return m_matrix[u * m_vertex_set.size() + v];
- else
- {
- if (v > u)
- std::swap(u, v);
- return m_matrix[u * (u + 1) / 2 + v];
- }
- }
-
- Matrix m_matrix;
- VertexList m_vertex_set;
- std::vector< vertex_property_type > m_vertex_properties;
- size_type m_num_edges;
- graph_property_type m_property;
-};
-
-//=========================================================================
-// Functions required by the AdjacencyMatrix concept
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-std::pair< typename adjacency_matrix< D, VP, EP, GP, A >::edge_descriptor,
- bool >
-edge(typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor v,
- const adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- bool exists = detail::get_edge_exists(g.get_edge(u, v), 0);
- typename adjacency_matrix< D, VP, EP, GP, A >::edge_descriptor e(
- exists, u, v, &detail::get_edge_property(g.get_edge(u, v)));
- return std::make_pair(e, exists);
-}
-
-//=========================================================================
-// Functions required by the IncidenceGraph concept
-
-// O(1)
-template < typename VP, typename EP, typename GP, typename A >
-std::pair<
- typename adjacency_matrix< directedS, VP, EP, GP, A >::out_edge_iterator,
- typename adjacency_matrix< directedS, VP, EP, GP, A >::out_edge_iterator >
-out_edges(
- typename adjacency_matrix< directedS, VP, EP, GP, A >::vertex_descriptor u,
- const adjacency_matrix< directedS, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< directedS, VP, EP, GP, A > Graph;
- Graph& g = const_cast< Graph& >(g_);
- typename Graph::vertices_size_type offset = u * g.m_vertex_set.size();
- typename Graph::MatrixIter f = g.m_matrix.begin() + offset;
- typename Graph::MatrixIter l = f + g.m_vertex_set.size();
- typename Graph::unfiltered_out_edge_iter first(f, u, g.m_vertex_set.size()),
- last(l, u, g.m_vertex_set.size());
- detail::does_edge_exist pred;
- typedef typename Graph::out_edge_iterator out_edge_iterator;
- return std::make_pair(out_edge_iterator(pred, first, last),
- out_edge_iterator(pred, last, last));
-}
-
-// O(1)
-template < typename VP, typename EP, typename GP, typename A >
-std::pair<
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::out_edge_iterator,
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::out_edge_iterator >
-out_edges(
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::vertex_descriptor
- u,
- const adjacency_matrix< undirectedS, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< undirectedS, VP, EP, GP, A > Graph;
- Graph& g = const_cast< Graph& >(g_);
- typename Graph::vertices_size_type offset = u * (u + 1) / 2;
- typename Graph::MatrixIter f = g.m_matrix.begin() + offset;
- typename Graph::MatrixIter l = g.m_matrix.end();
-
- typename Graph::unfiltered_out_edge_iter first(f, u, g.m_vertex_set.size()),
- last(l, u, g.m_vertex_set.size());
-
- detail::does_edge_exist pred;
- typedef typename Graph::out_edge_iterator out_edge_iterator;
- return std::make_pair(out_edge_iterator(pred, first, last),
- out_edge_iterator(pred, last, last));
-}
-
-// O(N)
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::degree_size_type out_degree(
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- const adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- typename adjacency_matrix< D, VP, EP, GP, A >::degree_size_type n = 0;
- typename adjacency_matrix< D, VP, EP, GP, A >::out_edge_iterator f, l;
- for (boost::tie(f, l) = out_edges(u, g); f != l; ++f)
- ++n;
- return n;
-}
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Dir, typename Vertex >
-typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor source(
- const detail::matrix_edge_desc_impl< Dir, Vertex >& e,
- const adjacency_matrix< D, VP, EP, GP, A >&)
-{
- return e.m_source;
-}
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Dir, typename Vertex >
-typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor target(
- const detail::matrix_edge_desc_impl< Dir, Vertex >& e,
- const adjacency_matrix< D, VP, EP, GP, A >&)
-{
- return e.m_target;
-}
-
-//=========================================================================
-// Functions required by the BidirectionalGraph concept
-
-// O(1)
-template < typename VP, typename EP, typename GP, typename A >
-std::pair<
- typename adjacency_matrix< directedS, VP, EP, GP, A >::in_edge_iterator,
- typename adjacency_matrix< directedS, VP, EP, GP, A >::in_edge_iterator >
-in_edges(
- typename adjacency_matrix< directedS, VP, EP, GP, A >::vertex_descriptor u,
- const adjacency_matrix< directedS, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< directedS, VP, EP, GP, A > Graph;
- Graph& g = const_cast< Graph& >(g_);
- typename Graph::MatrixIter f = g.m_matrix.begin() + u;
- typename Graph::MatrixIter l = g.m_matrix.end();
- typename Graph::unfiltered_in_edge_iter first(
- f, l, u, g.m_vertex_set.size()),
- last(l, l, u, g.m_vertex_set.size());
- detail::does_edge_exist pred;
- typedef typename Graph::in_edge_iterator in_edge_iterator;
- return std::make_pair(in_edge_iterator(pred, first, last),
- in_edge_iterator(pred, last, last));
-}
-
-// O(1)
-template < typename VP, typename EP, typename GP, typename A >
-std::pair<
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::in_edge_iterator,
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::in_edge_iterator >
-in_edges(
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::vertex_descriptor
- u,
- const adjacency_matrix< undirectedS, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< undirectedS, VP, EP, GP, A > Graph;
- Graph& g = const_cast< Graph& >(g_);
- typename Graph::vertices_size_type offset = u * (u + 1) / 2;
- typename Graph::MatrixIter f = g.m_matrix.begin() + offset;
- typename Graph::MatrixIter l = g.m_matrix.end();
-
- typename Graph::unfiltered_in_edge_iter first(f, u, g.m_vertex_set.size()),
- last(l, u, g.m_vertex_set.size());
-
- detail::does_edge_exist pred;
- typedef typename Graph::in_edge_iterator in_edge_iterator;
- return std::make_pair(in_edge_iterator(pred, first, last),
- in_edge_iterator(pred, last, last));
-}
-
-// O(N)
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::degree_size_type in_degree(
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- const adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- typename adjacency_matrix< D, VP, EP, GP, A >::degree_size_type n = 0;
- typename adjacency_matrix< D, VP, EP, GP, A >::in_edge_iterator f, l;
- for (boost::tie(f, l) = in_edges(u, g); f != l; ++f)
- ++n;
- return n;
-}
-
-//=========================================================================
-// Functions required by the AdjacencyGraph concept
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-std::pair< typename adjacency_matrix< D, VP, EP, GP, A >::adjacency_iterator,
- typename adjacency_matrix< D, VP, EP, GP, A >::adjacency_iterator >
-adjacent_vertices(
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- const adjacency_matrix< D, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< D, VP, EP, GP, A > Graph;
- const Graph& cg = static_cast< const Graph& >(g_);
- Graph& g = const_cast< Graph& >(cg);
- typedef typename Graph::adjacency_iterator adjacency_iterator;
- typename Graph::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));
-}
-
-//=========================================================================
-// Functions required by the VertexListGraph concept
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-std::pair< typename adjacency_matrix< D, VP, EP, GP, A >::vertex_iterator,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_iterator >
-vertices(const adjacency_matrix< D, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< D, VP, EP, GP, A > Graph;
- Graph& g = const_cast< Graph& >(g_);
- return std::make_pair(g.m_vertex_set.begin(), g.m_vertex_set.end());
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::vertices_size_type num_vertices(
- const adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- return g.m_vertex_set.size();
-}
-
-//=========================================================================
-// Functions required by the EdgeListGraph concept
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-std::pair< typename adjacency_matrix< D, VP, EP, GP, A >::edge_iterator,
- typename adjacency_matrix< D, VP, EP, GP, A >::edge_iterator >
-edges(const adjacency_matrix< D, VP, EP, GP, A >& g_)
-{
- typedef adjacency_matrix< D, VP, EP, GP, A > Graph;
- Graph& g = const_cast< Graph& >(g_);
-
- typename Graph::unfiltered_edge_iter first(
- g.m_matrix.begin(), g.m_matrix.begin(), g.m_vertex_set.size()),
- last(g.m_matrix.end(), g.m_matrix.begin(), g.m_vertex_set.size());
- detail::does_edge_exist pred;
- typedef typename Graph::edge_iterator edge_iterator;
- return std::make_pair(
- edge_iterator(pred, first, last), edge_iterator(pred, last, last));
-}
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::edges_size_type num_edges(
- const adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- return g.m_num_edges;
-}
-
-//=========================================================================
-// Functions required by the MutableGraph concept
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename EP2 >
-std::pair< typename adjacency_matrix< D, VP, EP, GP, A >::edge_descriptor,
- bool >
-add_edge(typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor v,
- const EP2& ep, adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- typedef typename adjacency_matrix< D, VP, EP, GP, A >::edge_descriptor
- edge_descriptor;
- if (detail::get_edge_exists(g.get_edge(u, v), 0) == false)
- {
- ++(g.m_num_edges);
- detail::set_edge_property(g.get_edge(u, v), EP(ep), 0);
- detail::set_edge_exists(g.get_edge(u, v), true, 0);
- return std::make_pair(edge_descriptor(true, u, v,
- &detail::get_edge_property(g.get_edge(u, v))),
- true);
- }
- else
- return std::make_pair(edge_descriptor(true, u, v,
- &detail::get_edge_property(g.get_edge(u, v))),
- false);
-}
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A >
-std::pair< typename adjacency_matrix< D, VP, EP, GP, A >::edge_descriptor,
- bool >
-add_edge(typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor v,
- adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- EP ep;
- return add_edge(u, v, ep, g);
-}
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A >
-void remove_edge(
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor u,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor v,
- adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- // Don'remove the edge unless it already exists.
- if (detail::get_edge_exists(g.get_edge(u, v), 0))
- {
- --(g.m_num_edges);
- detail::set_edge_exists(g.get_edge(u, v), false, 0);
- }
-}
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A >
-void remove_edge(
- typename adjacency_matrix< D, VP, EP, GP, A >::edge_descriptor e,
- adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- remove_edge(source(e, g), target(e, g), g);
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-inline typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor
-add_vertex(adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- // UNDER CONSTRUCTION
- BOOST_ASSERT(false);
- return *vertices(g).first;
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename VP2 >
-inline typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor
-add_vertex(const VP2& /*vp*/, adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- // UNDER CONSTRUCTION
- BOOST_ASSERT(false);
- return *vertices(g).first;
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-inline void remove_vertex(
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor /*u*/,
- adjacency_matrix< D, VP, EP, GP, A >& /*g*/)
-{
- // UNDER CONSTRUCTION
- BOOST_ASSERT(false);
-}
-
-// O(V)
-template < typename VP, typename EP, typename GP, typename A >
-void clear_vertex(
- typename adjacency_matrix< directedS, VP, EP, GP, A >::vertex_descriptor u,
- adjacency_matrix< directedS, VP, EP, GP, A >& g)
-{
- typename adjacency_matrix< directedS, VP, EP, GP, A >::vertex_iterator vi,
- vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- remove_edge(u, *vi, g);
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- remove_edge(*vi, u, g);
-}
-
-// O(V)
-template < typename VP, typename EP, typename GP, typename A >
-void clear_vertex(
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::vertex_descriptor
- u,
- adjacency_matrix< undirectedS, VP, EP, GP, A >& g)
-{
- typename adjacency_matrix< undirectedS, VP, EP, GP, A >::vertex_iterator vi,
- vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- remove_edge(u, *vi, g);
-}
-
-//=========================================================================
-// Functions required by the PropertyGraph concept
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Prop, typename Kind >
-struct adj_mat_pm_helper;
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Prop >
-struct adj_mat_pm_helper< D, VP, EP, GP, A, Prop, vertex_property_tag >
-{
- typedef typename graph_traits<
- adjacency_matrix< D, VP, EP, GP, A > >::vertex_descriptor arg_type;
- typedef typed_identity_property_map< arg_type > vi_map_type;
- typedef iterator_property_map< typename std::vector< VP >::iterator,
- vi_map_type >
- all_map_type;
- typedef iterator_property_map< typename std::vector< VP >::const_iterator,
- vi_map_type >
- all_map_const_type;
- typedef transform_value_property_map<
- detail::lookup_one_property_f< VP, Prop >, all_map_type >
- type;
- typedef transform_value_property_map<
- detail::lookup_one_property_f< const VP, Prop >, all_map_const_type >
- const_type;
- typedef typename property_traits< type >::reference single_nonconst_type;
- typedef typename property_traits< const_type >::reference single_const_type;
-
- static type get_nonconst(adjacency_matrix< D, VP, EP, GP, A >& g, Prop prop)
- {
- return type(
- prop, all_map_type(g.m_vertex_properties.begin(), vi_map_type()));
- }
-
- static const_type get_const(
- const adjacency_matrix< D, VP, EP, GP, A >& g, Prop prop)
- {
- return const_type(prop,
- all_map_const_type(g.m_vertex_properties.begin(), vi_map_type()));
- }
-
- static single_nonconst_type get_nonconst_one(
- adjacency_matrix< D, VP, EP, GP, A >& g, Prop prop, arg_type v)
- {
- return lookup_one_property< VP, Prop >::lookup(
- g.m_vertex_properties[v], prop);
- }
-
- static single_const_type get_const_one(
- const adjacency_matrix< D, VP, EP, GP, A >& g, Prop prop, arg_type v)
- {
- return lookup_one_property< const VP, Prop >::lookup(
- g.m_vertex_properties[v], prop);
- }
-};
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-struct adj_mat_pm_helper< D, VP, EP, GP, A, Tag, edge_property_tag >
-{
- typedef typename graph_traits<
- adjacency_matrix< D, VP, EP, GP, A > >::edge_descriptor edge_descriptor;
-
- template < typename IsConst > struct lookup_property_from_edge
- {
- Tag tag;
- lookup_property_from_edge(Tag tag) : tag(tag) {}
- typedef typename boost::mpl::if_< IsConst, const EP, EP >::type
- ep_type_nonref;
- typedef ep_type_nonref& ep_type;
- typedef typename lookup_one_property< ep_type_nonref, Tag >::type&
- result_type;
- result_type operator()(edge_descriptor e) const
- {
- return lookup_one_property< ep_type_nonref, Tag >::lookup(
- *static_cast< ep_type_nonref* >(e.get_property()), tag);
- }
- };
-
- typedef function_property_map<
- lookup_property_from_edge< boost::mpl::false_ >,
- typename graph_traits<
- adjacency_matrix< D, VP, EP, GP, A > >::edge_descriptor >
- type;
- typedef function_property_map<
- lookup_property_from_edge< boost::mpl::true_ >,
- typename graph_traits<
- adjacency_matrix< D, VP, EP, GP, A > >::edge_descriptor >
- const_type;
- typedef edge_descriptor arg_type;
- typedef
- typename lookup_property_from_edge< boost::mpl::false_ >::result_type
- single_nonconst_type;
- typedef typename lookup_property_from_edge< boost::mpl::true_ >::result_type
- single_const_type;
-
- static type get_nonconst(adjacency_matrix< D, VP, EP, GP, A >& /* g */, Tag tag)
- {
- return type(tag);
- }
-
- static const_type get_const(
- const adjacency_matrix< D, VP, EP, GP, A >& /* g */, Tag tag)
- {
- return const_type(tag);
- }
-
- static single_nonconst_type get_nonconst_one(
- adjacency_matrix< D, VP, EP, GP, A >& /* g */, Tag tag, edge_descriptor e)
- {
- return lookup_one_property< EP, Tag >::lookup(
- *static_cast< EP* >(e.get_property()), tag);
- }
-
- static single_const_type get_const_one(
- const adjacency_matrix< D, VP, EP, GP, A >& /* g */, Tag tag,
- edge_descriptor e)
- {
- return lookup_one_property< const EP, Tag >::lookup(
- *static_cast< const EP* >(e.get_property()), tag);
- }
-};
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-struct property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >
-: adj_mat_pm_helper< D, VP, EP, GP, A, Tag,
- typename detail::property_kind_from_graph<
- adjacency_matrix< D, VP, EP, GP, A >, Tag >::type >
-{
-};
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-typename property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::type get(
- Tag tag, adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- return property_map< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::get_nonconst(g, tag);
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-typename property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::const_type
-get(Tag tag, const adjacency_matrix< D, VP, EP, GP, A >& g)
-{
- return property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::get_const(
- g, tag);
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::single_nonconst_type
-get(Tag tag, adjacency_matrix< D, VP, EP, GP, A >& g,
- typename property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::arg_type
- a)
-{
- return property_map< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::get_nonconst_one(g, tag, a);
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::single_const_type
-get(Tag tag, const adjacency_matrix< D, VP, EP, GP, A >& g,
- typename property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::arg_type
- a)
-{
- return property_map< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::get_const_one(g, tag, a);
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-void put(Tag tag, adjacency_matrix< D, VP, EP, GP, A >& g,
- typename property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::arg_type
- a,
- typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::single_const_type val)
-{
- property_map< adjacency_matrix< D, VP, EP, GP, A >, Tag >::get_nonconst_one(
- g, tag, a)
- = val;
-}
-
-// O(1)
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag, typename Value >
-inline void set_property(
- adjacency_matrix< D, VP, EP, GP, A >& g, Tag tag, const Value& value)
-{
- get_property_value(g.m_property, tag) = value;
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-inline
- typename graph_property< adjacency_matrix< D, VP, EP, GP, A >, Tag >::type&
- get_property(adjacency_matrix< D, VP, EP, GP, A >& g, Tag tag)
-{
- return get_property_value(g.m_property, tag);
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A,
- typename Tag >
-inline const typename graph_property< adjacency_matrix< D, VP, EP, GP, A >,
- Tag >::type&
-get_property(const adjacency_matrix< D, VP, EP, GP, A >& g, Tag tag)
-{
- return get_property_value(g.m_property, tag);
-}
-
-//=========================================================================
-// Vertex Property Map
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-struct property_map< adjacency_matrix< D, VP, EP, GP, A >, vertex_index_t >
-{
- typedef
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor Vertex;
- typedef typed_identity_property_map< Vertex > type;
- typedef type const_type;
-};
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- vertex_index_t >::const_type
-get(vertex_index_t, adjacency_matrix< D, VP, EP, GP, A >&)
-{
- return typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- vertex_index_t >::const_type();
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor get(
- vertex_index_t, adjacency_matrix< D, VP, EP, GP, A >&,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor v)
-{
- return v;
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- vertex_index_t >::const_type
-get(vertex_index_t, const adjacency_matrix< D, VP, EP, GP, A >&)
-{
- return typename property_map< adjacency_matrix< D, VP, EP, GP, A >,
- vertex_index_t >::const_type();
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor get(
- vertex_index_t, const adjacency_matrix< D, VP, EP, GP, A >&,
- typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor v)
-{
- return v;
-}
-
-//=========================================================================
-// Other Functions
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-typename adjacency_matrix< D, VP, EP, GP, A >::vertex_descriptor vertex(
- typename adjacency_matrix< D, VP, EP, GP, A >::vertices_size_type n,
- const adjacency_matrix< D, VP, EP, GP, A >&)
-{
- return n;
-}
-
-template < typename D, typename VP, typename EP, typename GP, typename A >
-struct graph_mutability_traits< adjacency_matrix< D, VP, EP, GP, A > >
-{
- typedef mutable_edge_property_graph_tag category;
-};
-
-} // namespace boost
-
-#endif // BOOST_ADJACENCY_MATRIX_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/astar_search.hpp b/contrib/restricted/boost/graph/include/boost/graph/astar_search.hpp
deleted file mode 100644
index 02f4b1cb49..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/astar_search.hpp
+++ /dev/null
@@ -1,655 +0,0 @@
-
-
-//
-//=======================================================================
-// Copyright (c) 2004 Kristopher Beevers
-//
-// 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_ASTAR_SEARCH_HPP
-#define BOOST_GRAPH_ASTAR_SEARCH_HPP
-
-#include <functional>
-#include <vector>
-#include <boost/limits.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/relax.hpp>
-#include <boost/graph/exception.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/detail/d_ary_heap.hpp>
-#include <boost/graph/property_maps/constant_property_map.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/property_map/vector_property_map.hpp>
-#include <boost/property_map/function_property_map.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-template < class Heuristic, class Graph > struct AStarHeuristicConcept
-{
- void constraints()
- {
- BOOST_CONCEPT_ASSERT((CopyConstructibleConcept< Heuristic >));
- h(u);
- }
- Heuristic h;
- typename graph_traits< Graph >::vertex_descriptor u;
-};
-
-template < class Graph, class CostType > class astar_heuristic
-{
-public:
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef Vertex argument_type;
- typedef CostType result_type;
- astar_heuristic() {}
- CostType operator()(Vertex u) { return static_cast< CostType >(0); }
-};
-
-template < class Visitor, class Graph > struct AStarVisitorConcept
-{
- void constraints()
- {
- BOOST_CONCEPT_ASSERT((CopyConstructibleConcept< Visitor >));
- vis.initialize_vertex(u, g);
- vis.discover_vertex(u, g);
- vis.examine_vertex(u, g);
- vis.examine_edge(e, g);
- vis.edge_relaxed(e, g);
- vis.edge_not_relaxed(e, g);
- vis.black_target(e, g);
- vis.finish_vertex(u, g);
- }
- Visitor vis;
- Graph g;
- typename graph_traits< Graph >::vertex_descriptor u;
- typename graph_traits< Graph >::edge_descriptor e;
-};
-
-template < class Visitors = null_visitor >
-class astar_visitor : public bfs_visitor< Visitors >
-{
-public:
- astar_visitor() {}
- astar_visitor(Visitors vis) : bfs_visitor< Visitors >(vis) {}
-
- template < class Edge, class Graph >
- void edge_relaxed(Edge e, const Graph& g)
- {
- invoke_visitors(this->m_vis, e, g, on_edge_relaxed());
- }
- template < class Edge, class Graph >
- void edge_not_relaxed(Edge e, const Graph& g)
- {
- invoke_visitors(this->m_vis, e, g, on_edge_not_relaxed());
- }
-
-private:
- template < class Edge, class Graph > void tree_edge(Edge e, const Graph& g)
- {
- }
- template < class Edge, class Graph >
- void non_tree_edge(Edge e, const Graph& g)
- {
- }
-};
-template < class Visitors >
-astar_visitor< Visitors > make_astar_visitor(Visitors vis)
-{
- return astar_visitor< Visitors >(vis);
-}
-typedef astar_visitor<> default_astar_visitor;
-
-namespace detail
-{
-
- template < class AStarHeuristic, class UniformCostVisitor,
- class UpdatableQueue, class PredecessorMap, class CostMap,
- class DistanceMap, class WeightMap, class ColorMap,
- class BinaryFunction, class BinaryPredicate >
- struct astar_bfs_visitor
- {
-
- typedef typename property_traits< CostMap >::value_type C;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
- typedef
- typename property_traits< DistanceMap >::value_type distance_type;
-
- astar_bfs_visitor(AStarHeuristic h, UniformCostVisitor vis,
- UpdatableQueue& Q, PredecessorMap p, CostMap c, DistanceMap d,
- WeightMap w, ColorMap col, BinaryFunction combine,
- BinaryPredicate compare, C zero)
- : m_h(h)
- , m_vis(vis)
- , m_Q(Q)
- , m_predecessor(p)
- , m_cost(c)
- , m_distance(d)
- , m_weight(w)
- , m_color(col)
- , m_combine(combine)
- , m_compare(compare)
- , m_zero(zero)
- {
- }
-
- template < class Vertex, class Graph >
- void initialize_vertex(Vertex u, const Graph& g)
- {
- m_vis.initialize_vertex(u, g);
- }
- template < class Vertex, class Graph >
- void discover_vertex(Vertex u, const Graph& g)
- {
- m_vis.discover_vertex(u, g);
- }
- template < class Vertex, class Graph >
- void examine_vertex(Vertex u, const Graph& g)
- {
- m_vis.examine_vertex(u, g);
- }
- template < class Vertex, class Graph >
- void finish_vertex(Vertex u, const Graph& g)
- {
- m_vis.finish_vertex(u, g);
- }
- template < class Edge, class Graph >
- void examine_edge(Edge e, const Graph& g)
- {
- if (m_compare(get(m_weight, e), m_zero))
- BOOST_THROW_EXCEPTION(negative_edge());
- m_vis.examine_edge(e, g);
- }
- template < class Edge, class Graph >
- void non_tree_edge(Edge, const Graph&)
- {
- }
-
- template < class Edge, class Graph >
- void tree_edge(Edge e, const Graph& g)
- {
- using boost::get;
- bool m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
- m_combine, m_compare);
-
- if (m_decreased)
- {
- m_vis.edge_relaxed(e, g);
- put(m_cost, target(e, g),
- m_combine(
- get(m_distance, target(e, g)), m_h(target(e, g))));
- }
- else
- m_vis.edge_not_relaxed(e, g);
- }
-
- template < class Edge, class Graph >
- void gray_target(Edge e, const Graph& g)
- {
- using boost::get;
- bool m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
- m_combine, m_compare);
-
- if (m_decreased)
- {
- put(m_cost, target(e, g),
- m_combine(
- get(m_distance, target(e, g)), m_h(target(e, g))));
- m_Q.update(target(e, g));
- m_vis.edge_relaxed(e, g);
- }
- else
- m_vis.edge_not_relaxed(e, g);
- }
-
- template < class Edge, class Graph >
- void black_target(Edge e, const Graph& g)
- {
- using boost::get;
- bool m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
- m_combine, m_compare);
-
- if (m_decreased)
- {
- m_vis.edge_relaxed(e, g);
- put(m_cost, target(e, g),
- m_combine(
- get(m_distance, target(e, g)), m_h(target(e, g))));
- m_Q.push(target(e, g));
- put(m_color, target(e, g), Color::gray());
- m_vis.black_target(e, g);
- }
- else
- m_vis.edge_not_relaxed(e, g);
- }
-
- AStarHeuristic m_h;
- UniformCostVisitor m_vis;
- UpdatableQueue& m_Q;
- PredecessorMap m_predecessor;
- CostMap m_cost;
- DistanceMap m_distance;
- WeightMap m_weight;
- ColorMap m_color;
- BinaryFunction m_combine;
- BinaryPredicate m_compare;
- C m_zero;
- };
-
-} // namespace detail
-
-template < typename VertexListGraph, typename AStarHeuristic,
- typename AStarVisitor, typename PredecessorMap, typename CostMap,
- typename DistanceMap, typename WeightMap, typename ColorMap,
- typename VertexIndexMap, typename CompareFunction, typename CombineFunction,
- typename CostInf, typename CostZero >
-inline void astar_search_no_init(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, AStarVisitor vis, PredecessorMap predecessor,
- CostMap cost, DistanceMap distance, WeightMap weight, ColorMap color,
- VertexIndexMap index_map, CompareFunction compare, CombineFunction combine,
- CostInf /*inf*/, CostZero zero)
-{
- typedef typename graph_traits< VertexListGraph >::vertex_descriptor Vertex;
- typedef boost::vector_property_map< std::size_t, VertexIndexMap >
- IndexInHeapMap;
- IndexInHeapMap index_in_heap(index_map);
- typedef d_ary_heap_indirect< Vertex, 4, IndexInHeapMap, CostMap,
- CompareFunction >
- MutableQueue;
- MutableQueue Q(cost, index_in_heap, compare);
-
- detail::astar_bfs_visitor< AStarHeuristic, AStarVisitor, MutableQueue,
- PredecessorMap, CostMap, DistanceMap, WeightMap, ColorMap,
- CombineFunction, CompareFunction >
- bfs_vis(h, vis, Q, predecessor, cost, distance, weight, color, combine,
- compare, zero);
-
- breadth_first_visit(g, s, Q, bfs_vis, color);
-}
-
-namespace graph_detail
-{
- template < typename A, typename B > struct select1st
- {
- typedef std::pair< A, B > argument_type;
- typedef A result_type;
- A operator()(const std::pair< A, B >& p) const { return p.first; }
- };
-}
-
-template < typename VertexListGraph, typename AStarHeuristic,
- typename AStarVisitor, typename PredecessorMap, typename CostMap,
- typename DistanceMap, typename WeightMap, typename CompareFunction,
- typename CombineFunction, typename CostInf, typename CostZero >
-inline void astar_search_no_init_tree(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, AStarVisitor vis, PredecessorMap predecessor,
- CostMap cost, DistanceMap distance, WeightMap weight,
- CompareFunction compare, CombineFunction combine, CostInf /*inf*/,
- CostZero zero)
-{
- typedef typename graph_traits< VertexListGraph >::vertex_descriptor Vertex;
- typedef typename property_traits< DistanceMap >::value_type Distance;
- typedef d_ary_heap_indirect< std::pair< Distance, Vertex >, 4,
- null_property_map< std::pair< Distance, Vertex >, std::size_t >,
- function_property_map< graph_detail::select1st< Distance, Vertex >,
- std::pair< Distance, Vertex > >,
- CompareFunction >
- MutableQueue;
- MutableQueue Q(make_function_property_map< std::pair< Distance, Vertex > >(
- graph_detail::select1st< Distance, Vertex >()),
- null_property_map< std::pair< Distance, Vertex >, std::size_t >(),
- compare);
-
- vis.discover_vertex(s, g);
- Q.push(std::make_pair(get(cost, s), s));
- while (!Q.empty())
- {
- Vertex v;
- Distance v_rank;
- boost::tie(v_rank, v) = Q.top();
- Q.pop();
- vis.examine_vertex(v, g);
- BGL_FORALL_OUTEDGES_T(v, e, g, VertexListGraph)
- {
- Vertex w = target(e, g);
- vis.examine_edge(e, g);
- Distance e_weight = get(weight, e);
- if (compare(e_weight, zero))
- BOOST_THROW_EXCEPTION(negative_edge());
- bool decreased
- = relax(e, g, weight, predecessor, distance, combine, compare);
- if (decreased)
- {
- vis.edge_relaxed(e, g);
- Distance w_rank = combine(get(distance, w), h(w));
- put(cost, w, w_rank);
- vis.discover_vertex(w, g);
- Q.push(std::make_pair(w_rank, w));
- }
- else
- {
- vis.edge_not_relaxed(e, g);
- }
- }
- vis.finish_vertex(v, g);
- }
-}
-
-// Non-named parameter interface
-template < typename VertexListGraph, typename AStarHeuristic,
- typename AStarVisitor, typename PredecessorMap, typename CostMap,
- typename DistanceMap, typename WeightMap, typename VertexIndexMap,
- typename ColorMap, typename CompareFunction, typename CombineFunction,
- typename CostInf, typename CostZero >
-inline void astar_search(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, AStarVisitor vis, PredecessorMap predecessor,
- CostMap cost, DistanceMap distance, WeightMap weight,
- VertexIndexMap index_map, ColorMap color, CompareFunction compare,
- CombineFunction combine, CostInf inf, CostZero zero)
-{
-
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
- typename graph_traits< VertexListGraph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- put(color, *ui, Color::white());
- put(distance, *ui, inf);
- put(cost, *ui, inf);
- put(predecessor, *ui, *ui);
- vis.initialize_vertex(*ui, g);
- }
- put(distance, s, zero);
- put(cost, s, h(s));
-
- astar_search_no_init(g, s, h, vis, predecessor, cost, distance, weight,
- color, index_map, compare, combine, inf, zero);
-}
-
-// Non-named parameter interface
-template < typename VertexListGraph, typename AStarHeuristic,
- typename AStarVisitor, typename PredecessorMap, typename CostMap,
- typename DistanceMap, typename WeightMap, typename CompareFunction,
- typename CombineFunction, typename CostInf, typename CostZero >
-inline void astar_search_tree(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, AStarVisitor vis, PredecessorMap predecessor,
- CostMap cost, DistanceMap distance, WeightMap weight,
- CompareFunction compare, CombineFunction combine, CostInf inf,
- CostZero zero)
-{
-
- typename graph_traits< VertexListGraph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- put(distance, *ui, inf);
- put(cost, *ui, inf);
- put(predecessor, *ui, *ui);
- vis.initialize_vertex(*ui, g);
- }
- put(distance, s, zero);
- put(cost, s, h(s));
-
- astar_search_no_init_tree(g, s, h, vis, predecessor, cost, distance, weight,
- compare, combine, inf, zero);
-}
-
-// Named parameter interfaces
-template < typename VertexListGraph, typename AStarHeuristic, typename P,
- typename T, typename R >
-void astar_search(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, const bgl_named_params< P, T, R >& params)
-{
- using namespace boost::graph::keywords;
- typedef bgl_named_params< P, T, R > params_type;
- BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
-
- // Distance type is the value type of the distance map if there is one,
- // otherwise the value type of the weight map.
- typedef
- typename boost::detail::override_const_property_result< arg_pack_type,
- boost::graph::keywords::tag::weight_map, edge_weight_t,
- VertexListGraph >::type weight_map_type;
- typedef typename boost::property_traits< weight_map_type >::value_type D;
- const D inf = arg_pack[_distance_inf || detail::get_max< D >()];
- const D zero_actual = D();
- const D zero_d = arg_pack[_distance_zero | zero_actual];
- null_visitor null_vis;
- astar_visitor< null_visitor > default_visitor(null_vis);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::visitor, dummy_property_map& >::type vis
- = arg_pack[_visitor | default_visitor];
- dummy_property_map dummy_prop;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::predecessor_map,
- dummy_property_map& >::type pred_map
- = arg_pack[_predecessor_map | dummy_prop];
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::rank_map, D >
- rank_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::rank_map, D >::map_type r_map
- = rank_map_gen(g, arg_pack);
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::distance_map, D >
- dist_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::distance_map, D >::map_type dist_map
- = dist_map_gen(g, arg_pack);
- weight_map_type w_map = detail::override_const_property(
- arg_pack, _weight_map, g, edge_weight);
- typename boost::detail::override_const_property_result< arg_pack_type,
- boost::graph::keywords::tag::vertex_index_map, vertex_index_t,
- VertexListGraph >::type v_i_map
- = detail::override_const_property(
- arg_pack, _vertex_index_map, g, vertex_index);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::color_map,
- boost::default_color_type >::map_type c_map
- = boost::detail::make_color_map_from_arg_pack(g, arg_pack);
- std::less< D > default_compare;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_compare, std::less< D >& >::type
- dist_comp
- = arg_pack[_distance_compare | default_compare];
- closed_plus< D > default_combine(inf);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_combine, closed_plus< D >& >::type
- dist_comb
- = arg_pack[_distance_combine | default_combine];
- astar_search(g, s, h, vis, pred_map, r_map, dist_map, w_map, v_i_map, c_map,
- dist_comp, dist_comb, inf, zero_d);
-}
-
-template < typename VertexListGraph, typename AStarHeuristic, typename P,
- typename T, typename R >
-void astar_search_tree(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, const bgl_named_params< P, T, R >& params)
-{
- using namespace boost::graph::keywords;
- typedef bgl_named_params< P, T, R > params_type;
- BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
-
- // Distance type is the value type of the distance map if there is one,
- // otherwise the value type of the weight map.
- typedef
- typename boost::detail::override_const_property_result< arg_pack_type,
- boost::graph::keywords::tag::weight_map, edge_weight_t,
- VertexListGraph >::type weight_map_type;
- typedef typename boost::property_traits< weight_map_type >::value_type D;
- const D inf = arg_pack[_distance_inf || detail::get_max< D >()];
- const D zero_actual = D();
- const D zero_d = arg_pack[_distance_zero | zero_actual];
- null_visitor null_vis;
- astar_visitor< null_visitor > default_visitor(null_vis);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::visitor, dummy_property_map& >::type vis
- = arg_pack[_visitor | default_visitor];
- dummy_property_map dummy_prop;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::predecessor_map,
- dummy_property_map& >::type pred_map
- = arg_pack[_predecessor_map | dummy_prop];
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::rank_map, D >
- rank_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::rank_map, D >::map_type r_map
- = rank_map_gen(g, arg_pack);
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::distance_map, D >
- dist_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::distance_map, D >::map_type dist_map
- = dist_map_gen(g, arg_pack);
- weight_map_type w_map = detail::override_const_property(
- arg_pack, _weight_map, g, edge_weight);
- std::less< D > default_compare;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_compare, std::less< D >& >::type
- dist_comp
- = arg_pack[_distance_compare | default_compare];
- closed_plus< D > default_combine(inf);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_combine, closed_plus< D >& >::type
- dist_comb
- = arg_pack[_distance_combine | default_combine];
- astar_search_tree(g, s, h, vis, pred_map, r_map, dist_map, w_map, dist_comp,
- dist_comb, inf, zero_d);
-}
-
-template < typename VertexListGraph, typename AStarHeuristic, typename P,
- typename T, typename R >
-void astar_search_no_init(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, const bgl_named_params< P, T, R >& params)
-{
- using namespace boost::graph::keywords;
- typedef bgl_named_params< P, T, R > params_type;
- BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
- typedef
- typename boost::detail::override_const_property_result< arg_pack_type,
- boost::graph::keywords::tag::weight_map, edge_weight_t,
- VertexListGraph >::type weight_map_type;
- typedef typename boost::property_traits< weight_map_type >::value_type D;
- const D inf = arg_pack[_distance_inf || detail::get_max< D >()];
- const D zero_actual = D();
- const D zero_d = arg_pack[_distance_zero | zero_actual];
- null_visitor null_vis;
- astar_visitor< null_visitor > default_visitor(null_vis);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::visitor, dummy_property_map& >::type vis
- = arg_pack[_visitor | default_visitor];
- dummy_property_map dummy_prop;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::predecessor_map,
- dummy_property_map& >::type pred_map
- = arg_pack[_predecessor_map | dummy_prop];
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::rank_map, D >
- rank_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::rank_map, D >::map_type r_map
- = rank_map_gen(g, arg_pack);
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::distance_map, D >
- dist_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::distance_map, D >::map_type dist_map
- = dist_map_gen(g, arg_pack);
- weight_map_type w_map = detail::override_const_property(
- arg_pack, _weight_map, g, edge_weight);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::color_map,
- boost::default_color_type >::map_type c_map
- = boost::detail::make_color_map_from_arg_pack(g, arg_pack);
- typename boost::detail::override_const_property_result< arg_pack_type,
- boost::graph::keywords::tag::vertex_index_map, vertex_index_t,
- VertexListGraph >::type v_i_map
- = detail::override_const_property(
- arg_pack, _vertex_index_map, g, vertex_index);
- std::less< D > default_compare;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_compare, std::less< D >& >::type
- dist_comp
- = arg_pack[_distance_compare | default_compare];
- closed_plus< D > default_combine(inf);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_combine, closed_plus< D >& >::type
- dist_comb
- = arg_pack[_distance_combine | default_combine];
- astar_search_no_init(g, s, h, vis, pred_map, r_map, dist_map, w_map, c_map,
- v_i_map, dist_comp, dist_comb, inf, zero_d);
-}
-
-template < typename VertexListGraph, typename AStarHeuristic, typename P,
- typename T, typename R >
-void astar_search_no_init_tree(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- AStarHeuristic h, const bgl_named_params< P, T, R >& params)
-{
- using namespace boost::graph::keywords;
- typedef bgl_named_params< P, T, R > params_type;
- BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
- typedef
- typename boost::detail::override_const_property_result< arg_pack_type,
- boost::graph::keywords::tag::weight_map, edge_weight_t,
- VertexListGraph >::type weight_map_type;
- typedef typename boost::property_traits< weight_map_type >::value_type D;
- const D inf = arg_pack[_distance_inf || detail::get_max< D >()];
- const D zero_actual = D();
- const D zero_d = arg_pack[_distance_zero | zero_actual];
- null_visitor null_vis;
- astar_visitor< null_visitor > default_visitor(null_vis);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::visitor, dummy_property_map& >::type vis
- = arg_pack[_visitor | default_visitor];
- dummy_property_map dummy_prop;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::predecessor_map,
- dummy_property_map& >::type pred_map
- = arg_pack[_predecessor_map | dummy_prop];
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::rank_map, D >
- rank_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::rank_map, D >::map_type r_map
- = rank_map_gen(g, arg_pack);
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::distance_map, D >
- dist_map_gen(zero_actual);
- typename boost::detail::map_maker< VertexListGraph, arg_pack_type,
- boost::graph::keywords::tag::distance_map, D >::map_type dist_map
- = dist_map_gen(g, arg_pack);
- weight_map_type w_map = detail::override_const_property(
- arg_pack, _weight_map, g, edge_weight);
- std::less< D > default_compare;
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_compare, std::less< D >& >::type
- dist_comp
- = arg_pack[_distance_compare | default_compare];
- closed_plus< D > default_combine(inf);
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::distance_combine, closed_plus< D >& >::type
- dist_comb
- = arg_pack[_distance_combine | default_combine];
- astar_search_no_init_tree(g, s, h, vis, pred_map, r_map, dist_map, w_map,
- dist_comp, dist_comb, inf, zero_d);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_ASTAR_SEARCH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/bandwidth.hpp b/contrib/restricted/boost/graph/include/boost/graph/bandwidth.hpp
deleted file mode 100644
index 9d08ea54c8..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/bandwidth.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) Jeremy Siek 2001, Marc Wintermantel 2002
-//
-// 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_BANDWIDTH_HPP
-#define BOOST_GRAPH_BANDWIDTH_HPP
-
-#include <algorithm> // for std::min and std::max
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/detail/numeric_traits.hpp>
-
-namespace boost
-{
-
-template < typename Graph, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type ith_bandwidth(
- typename graph_traits< Graph >::vertex_descriptor i, const Graph& g,
- VertexIndexMap index)
-{
- BOOST_USING_STD_MAX();
- using std::abs;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- vertices_size_type b = 0;
- typename graph_traits< Graph >::out_edge_iterator e, end;
- for (boost::tie(e, end) = out_edges(i, g); e != end; ++e)
- {
- int f_i = get(index, i);
- int f_j = get(index, target(*e, g));
- b = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- b, vertices_size_type(abs(f_i - f_j)));
- }
- return b;
-}
-
-template < typename Graph >
-typename graph_traits< Graph >::vertices_size_type ith_bandwidth(
- typename graph_traits< Graph >::vertex_descriptor i, const Graph& g)
-{
- return ith_bandwidth(i, g, get(vertex_index, g));
-}
-
-template < typename Graph, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type bandwidth(
- const Graph& g, VertexIndexMap index)
-{
- BOOST_USING_STD_MAX();
- using std::abs;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- vertices_size_type b = 0;
- typename graph_traits< Graph >::edge_iterator i, end;
- for (boost::tie(i, end) = edges(g); i != end; ++i)
- {
- int f_i = get(index, source(*i, g));
- int f_j = get(index, target(*i, g));
- b = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- b, vertices_size_type(abs(f_i - f_j)));
- }
- return b;
-}
-
-template < typename Graph >
-typename graph_traits< Graph >::vertices_size_type bandwidth(const Graph& g)
-{
- return bandwidth(g, get(vertex_index, g));
-}
-
-template < typename Graph, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type edgesum(
- const Graph& g, VertexIndexMap index_map)
-{
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
- typedef
- typename detail::numeric_traits< size_type >::difference_type diff_t;
- size_type sum = 0;
- typename graph_traits< Graph >::edge_iterator i, end;
- for (boost::tie(i, end) = edges(g); i != end; ++i)
- {
- diff_t f_u = get(index_map, source(*i, g));
- diff_t f_v = get(index_map, target(*i, g));
- using namespace std; // to call abs() unqualified
- sum += abs(f_u - f_v);
- }
- return sum;
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_BANDWIDTH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/bc_clustering.hpp b/contrib/restricted/boost/graph/include/boost/graph/bc_clustering.hpp
deleted file mode 100644
index dd26bdf397..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/bc_clustering.hpp
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_BETWEENNESS_CENTRALITY_CLUSTERING_HPP
-#define BOOST_GRAPH_BETWEENNESS_CENTRALITY_CLUSTERING_HPP
-
-#include <boost/algorithm/minmax_element.hpp>
-#include <boost/graph/betweenness_centrality.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_utility.hpp>
-#include <boost/pending/indirect_cmp.hpp>
-#include <vector>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-/** Threshold termination function for the betweenness centrality
- * clustering algorithm.
- */
-template < typename T > struct bc_clustering_threshold
-{
- typedef T centrality_type;
-
- /// Terminate clustering when maximum absolute edge centrality is
- /// below the given threshold.
- explicit bc_clustering_threshold(T threshold)
- : threshold(threshold), dividend(1.0)
- {
- }
-
- /**
- * Terminate clustering when the maximum edge centrality is below
- * the given threshold.
- *
- * @param threshold the threshold value
- *
- * @param g the graph on which the threshold will be calculated
- *
- * @param normalize when true, the threshold is compared against the
- * normalized edge centrality based on the input graph; otherwise,
- * the threshold is compared against the absolute edge centrality.
- */
- template < typename Graph >
- bc_clustering_threshold(T threshold, const Graph& g, bool normalize = true)
- : threshold(threshold), dividend(1.0)
- {
- if (normalize)
- {
- typename graph_traits< Graph >::vertices_size_type n
- = num_vertices(g);
- dividend = T((n - 1) * (n - 2)) / T(2);
- }
- }
-
- /** Returns true when the given maximum edge centrality (potentially
- * normalized) falls below the threshold.
- */
- template < typename Graph, typename Edge >
- bool operator()(T max_centrality, Edge, const Graph&)
- {
- return (max_centrality / dividend) < threshold;
- }
-
-protected:
- T threshold;
- T dividend;
-};
-
-/** Graph clustering based on edge betweenness centrality.
- *
- * This algorithm implements graph clustering based on edge
- * betweenness centrality. It is an iterative algorithm, where in each
- * step it compute the edge betweenness centrality (via @ref
- * brandes_betweenness_centrality) and removes the edge with the
- * maximum betweenness centrality. The @p done function object
- * determines when the algorithm terminates (the edge found when the
- * algorithm terminates will not be removed).
- *
- * @param g The graph on which clustering will be performed. The type
- * of this parameter (@c MutableGraph) must be a model of the
- * VertexListGraph, IncidenceGraph, EdgeListGraph, and Mutable Graph
- * concepts.
- *
- * @param done The function object that indicates termination of the
- * algorithm. It must be a ternary function object thats accepts the
- * maximum centrality, the descriptor of the edge that will be
- * removed, and the graph @p g.
- *
- * @param edge_centrality (UTIL/OUT) The property map that will store
- * the betweenness centrality for each edge. When the algorithm
- * terminates, it will contain the edge centralities for the
- * graph. The type of this property map must model the
- * ReadWritePropertyMap concept. Defaults to an @c
- * iterator_property_map whose value type is
- * @c Done::centrality_type and using @c get(edge_index, g) for the
- * index map.
- *
- * @param vertex_index (IN) The property map that maps vertices to
- * indices in the range @c [0, num_vertices(g)). This type of this
- * property map must model the ReadablePropertyMap concept and its
- * value type must be an integral type. Defaults to
- * @c get(vertex_index, g).
- */
-template < typename MutableGraph, typename Done, typename EdgeCentralityMap,
- typename VertexIndexMap >
-void betweenness_centrality_clustering(MutableGraph& g, Done done,
- EdgeCentralityMap edge_centrality, VertexIndexMap vertex_index)
-{
- typedef typename property_traits< EdgeCentralityMap >::value_type
- centrality_type;
- typedef typename graph_traits< MutableGraph >::edge_iterator edge_iterator;
- typedef
- typename graph_traits< MutableGraph >::edge_descriptor edge_descriptor;
-
- if (has_no_edges(g))
- return;
-
- // Function object that compares the centrality of edges
- indirect_cmp< EdgeCentralityMap, std::less< centrality_type > > cmp(
- edge_centrality);
-
- bool is_done;
- do
- {
- brandes_betweenness_centrality(g,
- edge_centrality_map(edge_centrality)
- .vertex_index_map(vertex_index));
- std::pair< edge_iterator, edge_iterator > edges_iters = edges(g);
- edge_descriptor e
- = *boost::first_max_element(edges_iters.first, edges_iters.second, cmp);
- is_done = done(get(edge_centrality, e), e, g);
- if (!is_done)
- remove_edge(e, g);
- } while (!is_done && !has_no_edges(g));
-}
-
-/**
- * \overload
- */
-template < typename MutableGraph, typename Done, typename EdgeCentralityMap >
-void betweenness_centrality_clustering(
- MutableGraph& g, Done done, EdgeCentralityMap edge_centrality)
-{
- betweenness_centrality_clustering(
- g, done, edge_centrality, get(vertex_index, g));
-}
-
-/**
- * \overload
- */
-template < typename MutableGraph, typename Done >
-void betweenness_centrality_clustering(MutableGraph& g, Done done)
-{
- typedef typename Done::centrality_type centrality_type;
- std::vector< centrality_type > edge_centrality(num_edges(g));
- betweenness_centrality_clustering(g, done,
- make_iterator_property_map(edge_centrality.begin(), get(edge_index, g)),
- get(vertex_index, g));
-}
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_BETWEENNESS_CENTRALITY_CLUSTERING_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/bellman_ford_shortest_paths.hpp b/contrib/restricted/boost/graph/include/boost/graph/bellman_ford_shortest_paths.hpp
deleted file mode 100644
index 2aa4e80833..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/bellman_ford_shortest_paths.hpp
+++ /dev/null
@@ -1,226 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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)
-//=======================================================================
-//
-
-/*
- This file implements the function
-
- template <class EdgeListGraph, class Size, class P, class T, class R>
- bool bellman_ford_shortest_paths(EdgeListGraph& g, Size N,
- const bgl_named_params<P, T, R>& params)
-
- */
-
-#ifndef BOOST_GRAPH_BELLMAN_FORD_SHORTEST_PATHS_HPP
-#define BOOST_GRAPH_BELLMAN_FORD_SHORTEST_PATHS_HPP
-
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/relax.hpp>
-#include <boost/graph/visitors.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-template < class Visitor, class Graph > struct BellmanFordVisitorConcept
-{
- void constraints()
- {
- BOOST_CONCEPT_ASSERT((CopyConstructibleConcept< Visitor >));
- vis.examine_edge(e, g);
- vis.edge_relaxed(e, g);
- vis.edge_not_relaxed(e, g);
- vis.edge_minimized(e, g);
- vis.edge_not_minimized(e, g);
- }
- Visitor vis;
- Graph g;
- typename graph_traits< Graph >::edge_descriptor e;
-};
-
-template < class Visitors = null_visitor > class bellman_visitor
-{
-public:
- bellman_visitor() {}
- bellman_visitor(Visitors vis) : m_vis(vis) {}
-
- template < class Edge, class Graph > void examine_edge(Edge u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_examine_edge());
- }
- template < class Edge, class Graph > void edge_relaxed(Edge u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_edge_relaxed());
- }
- template < class Edge, class Graph > void edge_not_relaxed(Edge u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_edge_not_relaxed());
- }
- template < class Edge, class Graph > void edge_minimized(Edge u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_edge_minimized());
- }
- template < class Edge, class Graph >
- void edge_not_minimized(Edge u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_edge_not_minimized());
- }
-
-protected:
- Visitors m_vis;
-};
-template < class Visitors >
-bellman_visitor< Visitors > make_bellman_visitor(Visitors vis)
-{
- return bellman_visitor< Visitors >(vis);
-}
-typedef bellman_visitor<> default_bellman_visitor;
-
-template < class EdgeListGraph, class Size, class WeightMap,
- class PredecessorMap, class DistanceMap, class BinaryFunction,
- class BinaryPredicate, class BellmanFordVisitor >
-bool bellman_ford_shortest_paths(EdgeListGraph& g, Size N, WeightMap weight,
- PredecessorMap pred, DistanceMap distance, BinaryFunction combine,
- BinaryPredicate compare, BellmanFordVisitor v)
-{
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< EdgeListGraph >));
- typedef graph_traits< EdgeListGraph > GTraits;
- typedef typename GTraits::edge_descriptor Edge;
- typedef typename GTraits::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept< DistanceMap, Vertex >));
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< WeightMap, Edge >));
-
- typename GTraits::edge_iterator i, end;
-
- for (Size k = 0; k < N; ++k)
- {
- bool at_least_one_edge_relaxed = false;
- for (boost::tie(i, end) = edges(g); i != end; ++i)
- {
- v.examine_edge(*i, g);
- if (relax(*i, g, weight, pred, distance, combine, compare))
- {
- at_least_one_edge_relaxed = true;
- v.edge_relaxed(*i, g);
- }
- else
- v.edge_not_relaxed(*i, g);
- }
- if (!at_least_one_edge_relaxed)
- break;
- }
-
- for (boost::tie(i, end) = edges(g); i != end; ++i)
- if (compare(combine(get(distance, source(*i, g)), get(weight, *i)),
- get(distance, target(*i, g))))
- {
- v.edge_not_minimized(*i, g);
- return false;
- }
- else
- v.edge_minimized(*i, g);
-
- return true;
-}
-
-namespace detail
-{
-
- template < typename VertexAndEdgeListGraph, typename Size,
- typename WeightMap, typename PredecessorMap, typename DistanceMap,
- typename P, typename T, typename R >
- bool bellman_dispatch2(VertexAndEdgeListGraph& g,
- typename graph_traits< VertexAndEdgeListGraph >::vertex_descriptor s,
- Size N, WeightMap weight, PredecessorMap pred, DistanceMap distance,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename property_traits< DistanceMap >::value_type D;
- bellman_visitor<> null_vis;
- typedef typename property_traits< WeightMap >::value_type weight_type;
- typename graph_traits< VertexAndEdgeListGraph >::vertex_iterator v,
- v_end;
- for (boost::tie(v, v_end) = vertices(g); v != v_end; ++v)
- {
- put(distance, *v, (std::numeric_limits< weight_type >::max)());
- put(pred, *v, *v);
- }
- put(distance, s, weight_type(0));
- return bellman_ford_shortest_paths(g, N, weight, pred, distance,
- choose_param(
- get_param(params, distance_combine_t()), closed_plus< D >()),
- choose_param(
- get_param(params, distance_compare_t()), std::less< D >()),
- choose_param(get_param(params, graph_visitor), null_vis));
- }
-
- template < typename VertexAndEdgeListGraph, typename Size,
- typename WeightMap, typename PredecessorMap, typename DistanceMap,
- typename P, typename T, typename R >
- bool bellman_dispatch2(VertexAndEdgeListGraph& g, param_not_found, Size N,
- WeightMap weight, PredecessorMap pred, DistanceMap distance,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename property_traits< DistanceMap >::value_type D;
- bellman_visitor<> null_vis;
- return bellman_ford_shortest_paths(g, N, weight, pred, distance,
- choose_param(
- get_param(params, distance_combine_t()), closed_plus< D >()),
- choose_param(
- get_param(params, distance_compare_t()), std::less< D >()),
- choose_param(get_param(params, graph_visitor), null_vis));
- }
-
- template < class EdgeListGraph, class Size, class WeightMap,
- class DistanceMap, class P, class T, class R >
- bool bellman_dispatch(EdgeListGraph& g, Size N, WeightMap weight,
- DistanceMap distance, const bgl_named_params< P, T, R >& params)
- {
- dummy_property_map dummy_pred;
- return detail::bellman_dispatch2(g, get_param(params, root_vertex_t()),
- N, weight,
- choose_param(get_param(params, vertex_predecessor), dummy_pred),
- distance, params);
- }
-} // namespace detail
-
-template < class EdgeListGraph, class Size, class P, class T, class R >
-bool bellman_ford_shortest_paths(
- EdgeListGraph& g, Size N, const bgl_named_params< P, T, R >& params)
-{
- return detail::bellman_dispatch(g, N,
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- choose_pmap(get_param(params, vertex_distance), g, vertex_distance),
- params);
-}
-
-template < class EdgeListGraph, class Size >
-bool bellman_ford_shortest_paths(EdgeListGraph& g, Size N)
-{
- bgl_named_params< int, int > params(0);
- return bellman_ford_shortest_paths(g, N, params);
-}
-
-template < class VertexAndEdgeListGraph, class P, class T, class R >
-bool bellman_ford_shortest_paths(
- VertexAndEdgeListGraph& g, const bgl_named_params< P, T, R >& params)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< VertexAndEdgeListGraph >));
- return detail::bellman_dispatch(g, num_vertices(g),
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- choose_pmap(get_param(params, vertex_distance), g, vertex_distance),
- params);
-}
-} // namespace boost
-
-#endif // BOOST_GRAPH_BELLMAN_FORD_SHORTEST_PATHS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/betweenness_centrality.hpp b/contrib/restricted/boost/graph/include/boost/graph/betweenness_centrality.hpp
deleted file mode 100644
index b6148e46ab..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/betweenness_centrality.hpp
+++ /dev/null
@@ -1,645 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_BRANDES_BETWEENNESS_CENTRALITY_HPP
-#define BOOST_GRAPH_BRANDES_BETWEENNESS_CENTRALITY_HPP
-
-#include <stack>
-#include <vector>
-#include <boost/graph/overloading.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/graph/relax.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <algorithm>
-
-namespace boost
-{
-
-namespace detail
-{
- namespace graph
- {
-
- /**
- * Customized visitor passed to Dijkstra's algorithm by Brandes'
- * betweenness centrality algorithm. This visitor is responsible for
- * keeping track of the order in which vertices are discovered, the
- * predecessors on the shortest path(s) to a vertex, and the number
- * of shortest paths.
- */
- template < typename Graph, typename WeightMap, typename IncomingMap,
- typename DistanceMap, typename PathCountMap >
- struct brandes_dijkstra_visitor : public bfs_visitor<>
- {
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
- typedef
- typename graph_traits< Graph >::edge_descriptor edge_descriptor;
-
- brandes_dijkstra_visitor(
- std::stack< vertex_descriptor >& ordered_vertices,
- WeightMap weight, IncomingMap incoming, DistanceMap distance,
- PathCountMap path_count)
- : ordered_vertices(ordered_vertices)
- , weight(weight)
- , incoming(incoming)
- , distance(distance)
- , path_count(path_count)
- {
- }
-
- /**
- * Whenever an edge e = (v, w) is relaxed, the incoming edge list
- * for w is set to {(v, w)} and the shortest path count of w is set
- * to the number of paths that reach {v}.
- */
- void edge_relaxed(edge_descriptor e, const Graph& g)
- {
- vertex_descriptor v = source(e, g), w = target(e, g);
- incoming[w].clear();
- incoming[w].push_back(e);
- put(path_count, w, get(path_count, v));
- }
-
- /**
- * If an edge e = (v, w) was not relaxed, it may still be the case
- * that we've found more equally-short paths, so include {(v, w)} in
- * the incoming edges of w and add all of the shortest paths to v to
- * the shortest path count of w.
- */
- void edge_not_relaxed(edge_descriptor e, const Graph& g)
- {
- typedef typename property_traits< WeightMap >::value_type
- weight_type;
- typedef typename property_traits< DistanceMap >::value_type
- distance_type;
- vertex_descriptor v = source(e, g), w = target(e, g);
- distance_type d_v = get(distance, v), d_w = get(distance, w);
- weight_type w_e = get(weight, e);
-
- closed_plus< distance_type > combine;
- if (d_w == combine(d_v, w_e))
- {
- put(path_count, w, get(path_count, w) + get(path_count, v));
- incoming[w].push_back(e);
- }
- }
-
- /// Keep track of vertices as they are reached
- void examine_vertex(vertex_descriptor w, const Graph&)
- {
- ordered_vertices.push(w);
- }
-
- private:
- std::stack< vertex_descriptor >& ordered_vertices;
- WeightMap weight;
- IncomingMap incoming;
- DistanceMap distance;
- PathCountMap path_count;
- };
-
- /**
- * Function object that calls Dijkstra's shortest paths algorithm
- * using the Dijkstra visitor for the Brandes betweenness centrality
- * algorithm.
- */
- template < typename WeightMap > struct brandes_dijkstra_shortest_paths
- {
- brandes_dijkstra_shortest_paths(WeightMap weight_map)
- : weight_map(weight_map)
- {
- }
-
- template < typename Graph, typename IncomingMap,
- typename DistanceMap, typename PathCountMap,
- typename VertexIndexMap >
- void operator()(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- std::stack< typename graph_traits< Graph >::vertex_descriptor >&
- ov,
- IncomingMap incoming, DistanceMap distance,
- PathCountMap path_count, VertexIndexMap vertex_index)
- {
- typedef brandes_dijkstra_visitor< Graph, WeightMap, IncomingMap,
- DistanceMap, PathCountMap >
- visitor_type;
- visitor_type visitor(
- ov, weight_map, incoming, distance, path_count);
-
- dijkstra_shortest_paths(g, s,
- boost::weight_map(weight_map)
- .vertex_index_map(vertex_index)
- .distance_map(distance)
- .visitor(visitor));
- }
-
- private:
- WeightMap weight_map;
- };
-
- /**
- * Function object that invokes breadth-first search for the
- * unweighted form of the Brandes betweenness centrality algorithm.
- */
- struct brandes_unweighted_shortest_paths
- {
- /**
- * Customized visitor passed to breadth-first search, which
- * records predecessor and the number of shortest paths to each
- * vertex.
- */
- template < typename Graph, typename IncomingMap,
- typename DistanceMap, typename PathCountMap >
- struct visitor_type : public bfs_visitor<>
- {
- typedef typename graph_traits< Graph >::edge_descriptor
- edge_descriptor;
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
-
- visitor_type(IncomingMap incoming, DistanceMap distance,
- PathCountMap path_count,
- std::stack< vertex_descriptor >& ordered_vertices)
- : incoming(incoming)
- , distance(distance)
- , path_count(path_count)
- , ordered_vertices(ordered_vertices)
- {
- }
-
- /// Keep track of vertices as they are reached
- void examine_vertex(vertex_descriptor v, Graph&)
- {
- ordered_vertices.push(v);
- }
-
- /**
- * Whenever an edge e = (v, w) is labelled a tree edge, the
- * incoming edge list for w is set to {(v, w)} and the shortest
- * path count of w is set to the number of paths that reach {v}.
- */
- void tree_edge(edge_descriptor e, Graph& g)
- {
- vertex_descriptor v = source(e, g);
- vertex_descriptor w = target(e, g);
- put(distance, w, get(distance, v) + 1);
-
- put(path_count, w, get(path_count, v));
- incoming[w].push_back(e);
- }
-
- /**
- * If an edge e = (v, w) is not a tree edge, it may still be the
- * case that we've found more equally-short paths, so include
- * (v, w) in the incoming edge list of w and add all of the
- * shortest paths to v to the shortest path count of w.
- */
- void non_tree_edge(edge_descriptor e, Graph& g)
- {
- vertex_descriptor v = source(e, g);
- vertex_descriptor w = target(e, g);
- if (get(distance, w) == get(distance, v) + 1)
- {
- put(path_count, w,
- get(path_count, w) + get(path_count, v));
- incoming[w].push_back(e);
- }
- }
-
- private:
- IncomingMap incoming;
- DistanceMap distance;
- PathCountMap path_count;
- std::stack< vertex_descriptor >& ordered_vertices;
- };
-
- template < typename Graph, typename IncomingMap,
- typename DistanceMap, typename PathCountMap,
- typename VertexIndexMap >
- void operator()(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- std::stack< typename graph_traits< Graph >::vertex_descriptor >&
- ov,
- IncomingMap incoming, DistanceMap distance,
- PathCountMap path_count, VertexIndexMap vertex_index)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
-
- visitor_type< Graph, IncomingMap, DistanceMap, PathCountMap >
- visitor(incoming, distance, path_count, ov);
-
- std::vector< default_color_type > colors(num_vertices(g),
- color_traits< default_color_type >::white());
- boost::queue< vertex_descriptor > Q;
- breadth_first_visit(g, s, Q, visitor,
- make_iterator_property_map(colors.begin(), vertex_index));
- }
- };
-
- // When the edge centrality map is a dummy property map, no
- // initialization is needed.
- template < typename Iter >
- inline void init_centrality_map(
- std::pair< Iter, Iter >, dummy_property_map)
- {
- }
-
- // When we have a real edge centrality map, initialize all of the
- // centralities to zero.
- template < typename Iter, typename Centrality >
- void init_centrality_map(
- std::pair< Iter, Iter > keys, Centrality centrality_map)
- {
- typedef typename property_traits< Centrality >::value_type
- centrality_type;
- while (keys.first != keys.second)
- {
- put(centrality_map, *keys.first, centrality_type(0));
- ++keys.first;
- }
- }
-
- // When the edge centrality map is a dummy property map, no update
- // is performed.
- template < typename Key, typename T >
- inline void update_centrality(dummy_property_map, const Key&, const T&)
- {
- }
-
- // When we have a real edge centrality map, add the value to the map
- template < typename CentralityMap, typename Key, typename T >
- inline void update_centrality(
- CentralityMap centrality_map, Key k, const T& x)
- {
- put(centrality_map, k, get(centrality_map, k) + x);
- }
-
- template < typename Iter >
- inline void divide_centrality_by_two(
- std::pair< Iter, Iter >, dummy_property_map)
- {
- }
-
- template < typename Iter, typename CentralityMap >
- inline void divide_centrality_by_two(
- std::pair< Iter, Iter > keys, CentralityMap centrality_map)
- {
- typename property_traits< CentralityMap >::value_type two(2);
- while (keys.first != keys.second)
- {
- put(centrality_map, *keys.first,
- get(centrality_map, *keys.first) / two);
- ++keys.first;
- }
- }
-
- template < typename Graph, typename CentralityMap,
- typename EdgeCentralityMap, typename IncomingMap,
- typename DistanceMap, typename DependencyMap, typename PathCountMap,
- typename VertexIndexMap, typename ShortestPaths >
- void brandes_betweenness_centrality_impl(const Graph& g,
- CentralityMap centrality, // C_B
- EdgeCentralityMap edge_centrality_map,
- IncomingMap incoming, // P
- DistanceMap distance, // d
- DependencyMap dependency, // delta
- PathCountMap path_count, // sigma
- VertexIndexMap vertex_index, ShortestPaths shortest_paths)
- {
- typedef
- typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
-
- // Initialize centrality
- init_centrality_map(vertices(g), centrality);
- init_centrality_map(edges(g), edge_centrality_map);
-
- std::stack< vertex_descriptor > ordered_vertices;
- vertex_iterator s, s_end;
- for (boost::tie(s, s_end) = vertices(g); s != s_end; ++s)
- {
- // Initialize for this iteration
- vertex_iterator w, w_end;
- for (boost::tie(w, w_end) = vertices(g); w != w_end; ++w)
- {
- incoming[*w].clear();
- put(path_count, *w, 0);
- put(dependency, *w, 0);
- }
- put(path_count, *s, 1);
-
- // Execute the shortest paths algorithm. This will be either
- // Dijkstra's algorithm or a customized breadth-first search,
- // depending on whether the graph is weighted or unweighted.
- shortest_paths(g, *s, ordered_vertices, incoming, distance,
- path_count, vertex_index);
-
- while (!ordered_vertices.empty())
- {
- vertex_descriptor w = ordered_vertices.top();
- ordered_vertices.pop();
-
- typedef typename property_traits< IncomingMap >::value_type
- incoming_type;
- typedef typename incoming_type::iterator incoming_iterator;
- typedef
- typename property_traits< DependencyMap >::value_type
- dependency_type;
-
- for (incoming_iterator vw = incoming[w].begin();
- vw != incoming[w].end(); ++vw)
- {
- vertex_descriptor v = source(*vw, g);
- dependency_type factor
- = dependency_type(get(path_count, v))
- / dependency_type(get(path_count, w));
- factor *= (dependency_type(1) + get(dependency, w));
- put(dependency, v, get(dependency, v) + factor);
- update_centrality(edge_centrality_map, *vw, factor);
- }
-
- if (w != *s)
- {
- update_centrality(centrality, w, get(dependency, w));
- }
- }
- }
-
- typedef typename graph_traits< Graph >::directed_category
- directed_category;
- const bool is_undirected
- = is_convertible< directed_category*, undirected_tag* >::value;
- if (is_undirected)
- {
- divide_centrality_by_two(vertices(g), centrality);
- divide_centrality_by_two(edges(g), edge_centrality_map);
- }
- }
-
- }
-} // end namespace detail::graph
-
-template < typename Graph, typename CentralityMap, typename EdgeCentralityMap,
- typename IncomingMap, typename DistanceMap, typename DependencyMap,
- typename PathCountMap, typename VertexIndexMap >
-void brandes_betweenness_centrality(const Graph& g,
- CentralityMap centrality, // C_B
- EdgeCentralityMap edge_centrality_map,
- IncomingMap incoming, // P
- DistanceMap distance, // d
- DependencyMap dependency, // delta
- PathCountMap path_count, // sigma
- VertexIndexMap vertex_index BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- Graph, vertex_list_graph_tag))
-{
- detail::graph::brandes_unweighted_shortest_paths shortest_paths;
-
- detail::graph::brandes_betweenness_centrality_impl(g, centrality,
- edge_centrality_map, incoming, distance, dependency, path_count,
- vertex_index, shortest_paths);
-}
-
-template < typename Graph, typename CentralityMap, typename EdgeCentralityMap,
- typename IncomingMap, typename DistanceMap, typename DependencyMap,
- typename PathCountMap, typename VertexIndexMap, typename WeightMap >
-void brandes_betweenness_centrality(const Graph& g,
- CentralityMap centrality, // C_B
- EdgeCentralityMap edge_centrality_map,
- IncomingMap incoming, // P
- DistanceMap distance, // d
- DependencyMap dependency, // delta
- PathCountMap path_count, // sigma
- VertexIndexMap vertex_index,
- WeightMap weight_map BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- Graph, vertex_list_graph_tag))
-{
- detail::graph::brandes_dijkstra_shortest_paths< WeightMap > shortest_paths(
- weight_map);
-
- detail::graph::brandes_betweenness_centrality_impl(g, centrality,
- edge_centrality_map, incoming, distance, dependency, path_count,
- vertex_index, shortest_paths);
-}
-
-namespace detail
-{
- namespace graph
- {
- template < typename Graph, typename CentralityMap,
- typename EdgeCentralityMap, typename WeightMap,
- typename VertexIndexMap >
- void brandes_betweenness_centrality_dispatch2(const Graph& g,
- CentralityMap centrality, EdgeCentralityMap edge_centrality_map,
- WeightMap weight_map, VertexIndexMap vertex_index)
- {
- typedef typename graph_traits< Graph >::degree_size_type
- degree_size_type;
- typedef
- typename graph_traits< Graph >::edge_descriptor edge_descriptor;
- typedef typename mpl::if_c<
- (is_same< CentralityMap, dummy_property_map >::value),
- EdgeCentralityMap, CentralityMap >::type a_centrality_map;
- typedef typename property_traits< a_centrality_map >::value_type
- centrality_type;
-
- typename graph_traits< Graph >::vertices_size_type V
- = num_vertices(g);
-
- std::vector< std::vector< edge_descriptor > > incoming(V);
- std::vector< centrality_type > distance(V);
- std::vector< centrality_type > dependency(V);
- std::vector< degree_size_type > path_count(V);
-
- brandes_betweenness_centrality(g, centrality, edge_centrality_map,
- make_iterator_property_map(incoming.begin(), vertex_index),
- make_iterator_property_map(distance.begin(), vertex_index),
- make_iterator_property_map(dependency.begin(), vertex_index),
- make_iterator_property_map(path_count.begin(), vertex_index),
- vertex_index, weight_map);
- }
-
- template < typename Graph, typename CentralityMap,
- typename EdgeCentralityMap, typename VertexIndexMap >
- void brandes_betweenness_centrality_dispatch2(const Graph& g,
- CentralityMap centrality, EdgeCentralityMap edge_centrality_map,
- VertexIndexMap vertex_index)
- {
- typedef typename graph_traits< Graph >::degree_size_type
- degree_size_type;
- typedef
- typename graph_traits< Graph >::edge_descriptor edge_descriptor;
- typedef typename mpl::if_c<
- (is_same< CentralityMap, dummy_property_map >::value),
- EdgeCentralityMap, CentralityMap >::type a_centrality_map;
- typedef typename property_traits< a_centrality_map >::value_type
- centrality_type;
-
- typename graph_traits< Graph >::vertices_size_type V
- = num_vertices(g);
-
- std::vector< std::vector< edge_descriptor > > incoming(V);
- std::vector< centrality_type > distance(V);
- std::vector< centrality_type > dependency(V);
- std::vector< degree_size_type > path_count(V);
-
- brandes_betweenness_centrality(g, centrality, edge_centrality_map,
- make_iterator_property_map(incoming.begin(), vertex_index),
- make_iterator_property_map(distance.begin(), vertex_index),
- make_iterator_property_map(dependency.begin(), vertex_index),
- make_iterator_property_map(path_count.begin(), vertex_index),
- vertex_index);
- }
-
- template < typename WeightMap >
- struct brandes_betweenness_centrality_dispatch1
- {
- template < typename Graph, typename CentralityMap,
- typename EdgeCentralityMap, typename VertexIndexMap >
- static void run(const Graph& g, CentralityMap centrality,
- EdgeCentralityMap edge_centrality_map,
- VertexIndexMap vertex_index, WeightMap weight_map)
- {
- brandes_betweenness_centrality_dispatch2(g, centrality,
- edge_centrality_map, weight_map, vertex_index);
- }
- };
-
- template <>
- struct brandes_betweenness_centrality_dispatch1< param_not_found >
- {
- template < typename Graph, typename CentralityMap,
- typename EdgeCentralityMap, typename VertexIndexMap >
- static void run(const Graph& g, CentralityMap centrality,
- EdgeCentralityMap edge_centrality_map,
- VertexIndexMap vertex_index, param_not_found)
- {
- brandes_betweenness_centrality_dispatch2(
- g, centrality, edge_centrality_map, vertex_index);
- }
- };
-
- template < typename T > struct is_bgl_named_params
- {
- BOOST_STATIC_CONSTANT(bool, value = false);
- };
-
- template < typename Param, typename Tag, typename Rest >
- struct is_bgl_named_params< bgl_named_params< Param, Tag, Rest > >
- {
- BOOST_STATIC_CONSTANT(bool, value = true);
- };
-
- }
-} // end namespace detail::graph
-
-template < typename Graph, typename Param, typename Tag, typename Rest >
-void brandes_betweenness_centrality(const Graph& g,
- const bgl_named_params< Param, Tag, Rest >& params
- BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, vertex_list_graph_tag))
-{
- typedef bgl_named_params< Param, Tag, Rest > named_params;
-
- typedef typename get_param_type< edge_weight_t, named_params >::type ew;
- detail::graph::brandes_betweenness_centrality_dispatch1< ew >::run(g,
- choose_param(
- get_param(params, vertex_centrality), dummy_property_map()),
- choose_param(get_param(params, edge_centrality), dummy_property_map()),
- choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
- get_param(params, edge_weight));
-}
-
-// disable_if is required to work around problem with MSVC 7.1 (it seems to not
-// get partial ordering getween this overload and the previous one correct)
-template < typename Graph, typename CentralityMap >
-typename disable_if< detail::graph::is_bgl_named_params< CentralityMap >,
- void >::type
-brandes_betweenness_centrality(const Graph& g,
- CentralityMap centrality BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- Graph, vertex_list_graph_tag))
-{
- detail::graph::brandes_betweenness_centrality_dispatch2(
- g, centrality, dummy_property_map(), get(vertex_index, g));
-}
-
-template < typename Graph, typename CentralityMap, typename EdgeCentralityMap >
-void brandes_betweenness_centrality(const Graph& g, CentralityMap centrality,
- EdgeCentralityMap edge_centrality_map BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- Graph, vertex_list_graph_tag))
-{
- detail::graph::brandes_betweenness_centrality_dispatch2(
- g, centrality, edge_centrality_map, get(vertex_index, g));
-}
-
-/**
- * Converts "absolute" betweenness centrality (as computed by the
- * brandes_betweenness_centrality algorithm) in the centrality map
- * into "relative" centrality. The result is placed back into the
- * given centrality map.
- */
-template < typename Graph, typename CentralityMap >
-void relative_betweenness_centrality(const Graph& g, CentralityMap centrality)
-{
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef
- typename property_traits< CentralityMap >::value_type centrality_type;
-
- typename graph_traits< Graph >::vertices_size_type n = num_vertices(g);
- centrality_type factor
- = centrality_type(2) / centrality_type(n * n - 3 * n + 2);
- vertex_iterator v, v_end;
- for (boost::tie(v, v_end) = vertices(g); v != v_end; ++v)
- {
- put(centrality, *v, factor * get(centrality, *v));
- }
-}
-
-// Compute the central point dominance of a graph.
-template < typename Graph, typename CentralityMap >
-typename property_traits< CentralityMap >::value_type central_point_dominance(
- const Graph& g,
- CentralityMap centrality BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- Graph, vertex_list_graph_tag))
-{
- using std::max;
-
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef
- typename property_traits< CentralityMap >::value_type centrality_type;
-
- typename graph_traits< Graph >::vertices_size_type n = num_vertices(g);
-
- // Find max centrality
- centrality_type max_centrality(0);
- vertex_iterator v, v_end;
- for (boost::tie(v, v_end) = vertices(g); v != v_end; ++v)
- {
- max_centrality = (max)(max_centrality, get(centrality, *v));
- }
-
- // Compute central point dominance
- centrality_type sum(0);
- for (boost::tie(v, v_end) = vertices(g); v != v_end; ++v)
- {
- sum += (max_centrality - get(centrality, *v));
- }
- return sum / (n - 1);
-}
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_BRANDES_BETWEENNESS_CENTRALITY_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/biconnected_components.hpp b/contrib/restricted/boost/graph/include/boost/graph/biconnected_components.hpp
deleted file mode 100644
index 9b70e0eb48..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/biconnected_components.hpp
+++ /dev/null
@@ -1,440 +0,0 @@
-// Copyright (c) Jeremy Siek 2001
-// Copyright (c) Douglas Gregor 2004
-//
-// 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)
-
-// NOTE: this final is generated by libs/graph/doc/biconnected_components.w
-
-#ifndef BOOST_GRAPH_BICONNECTED_COMPONENTS_HPP
-#define BOOST_GRAPH_BICONNECTED_COMPONENTS_HPP
-
-#include <stack>
-#include <vector>
-#include <algorithm> // for std::min and std::max
-#include <boost/config.hpp>
-#include <boost/limits.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/depth_first_search.hpp>
-#include <boost/graph/graph_utility.hpp>
-#include <boost/concept/assert.hpp>
-#include <boost/assert.hpp>
-
-namespace boost
-{
-namespace detail
-{
- template < typename ComponentMap, typename DiscoverTimeMap,
- typename LowPointMap, typename PredecessorMap, typename OutputIterator,
- typename Stack, typename ArticulationVector, typename IndexMap,
- typename DFSVisitor >
- struct biconnected_components_visitor : public dfs_visitor<>
- {
- biconnected_components_visitor(ComponentMap comp, std::size_t& c,
- std::size_t& children_of_root, DiscoverTimeMap dtm,
- std::size_t& dfs_time, LowPointMap lowpt, PredecessorMap pred,
- OutputIterator out, Stack& S,
- ArticulationVector& is_articulation_point, IndexMap index_map,
- DFSVisitor vis)
- : comp(comp)
- , c(c)
- , children_of_root(children_of_root)
- , dtm(dtm)
- , dfs_time(dfs_time)
- , lowpt(lowpt)
- , pred(pred)
- , out(out)
- , S(S)
- , is_articulation_point(is_articulation_point)
- , index_map(index_map)
- , vis(vis)
- {
- }
-
- template < typename Vertex, typename Graph >
- void initialize_vertex(const Vertex& u, Graph& g)
- {
- put(pred, u, u);
- vis.initialize_vertex(u, g);
- }
-
- template < typename Vertex, typename Graph >
- void start_vertex(const Vertex& u, Graph& g)
- {
- children_of_root = 0;
- vis.start_vertex(u, g);
- }
-
- template < typename Vertex, typename Graph >
- void discover_vertex(const Vertex& u, Graph& g)
- {
- put(dtm, u, ++dfs_time);
- put(lowpt, u, get(dtm, u));
- vis.discover_vertex(u, g);
- }
-
- template < typename Edge, typename Graph >
- void examine_edge(const Edge& e, Graph& g)
- {
- vis.examine_edge(e, g);
- }
-
- template < typename Edge, typename Graph >
- void tree_edge(const Edge& e, Graph& g)
- {
- typename boost::graph_traits< Graph >::vertex_descriptor src
- = source(e, g);
- typename boost::graph_traits< Graph >::vertex_descriptor tgt
- = target(e, g);
-
- S.push(e);
- put(pred, tgt, src);
- if (get(pred, src) == src)
- {
- ++children_of_root;
- }
- vis.tree_edge(e, g);
- }
-
- template < typename Edge, typename Graph >
- void back_edge(const Edge& e, Graph& g)
- {
- BOOST_USING_STD_MIN();
-
- typename boost::graph_traits< Graph >::vertex_descriptor src
- = source(e, g);
- typename boost::graph_traits< Graph >::vertex_descriptor tgt
- = target(e, g);
- if (tgt != get(pred, src))
- {
- S.push(e);
- put(lowpt, src,
- min BOOST_PREVENT_MACRO_SUBSTITUTION(
- get(lowpt, src), get(dtm, tgt)));
- }
- vis.back_edge(e, g);
- }
-
- template < typename Edge, typename Graph >
- void forward_or_cross_edge(const Edge& e, Graph& g)
- {
- vis.forward_or_cross_edge(e, g);
- }
-
- template < typename Vertex, typename Graph >
- void finish_vertex(const Vertex& u, Graph& g)
- {
- BOOST_USING_STD_MIN();
- Vertex parent = get(pred, u);
- if (parent == u)
- { // Root of tree is special
- is_articulation_point[get(index_map, u)]
- = (children_of_root > 1);
- }
- else
- {
- put(lowpt, parent,
- min BOOST_PREVENT_MACRO_SUBSTITUTION(
- get(lowpt, parent), get(lowpt, u)));
- if (get(lowpt, u) >= get(dtm, parent))
- {
- is_articulation_point[get(index_map, parent)] = true;
- while (get(dtm, source(S.top(), g)) >= get(dtm, u))
- {
- put(comp, S.top(), c);
- S.pop();
- }
- BOOST_ASSERT(source(S.top(), g) == parent);
- BOOST_ASSERT(target(S.top(), g) == u);
- put(comp, S.top(), c);
- S.pop();
- ++c;
- }
- }
- if (is_articulation_point[get(index_map, u)])
- {
- *out++ = u;
- }
- vis.finish_vertex(u, g);
- }
-
- ComponentMap comp;
- std::size_t& c;
- std::size_t& children_of_root;
- DiscoverTimeMap dtm;
- std::size_t& dfs_time;
- LowPointMap lowpt;
- PredecessorMap pred;
- OutputIterator out;
- Stack& S;
- ArticulationVector& is_articulation_point;
- IndexMap index_map;
- DFSVisitor vis;
- };
-
- template < typename Graph, typename ComponentMap, typename OutputIterator,
- typename VertexIndexMap, typename DiscoverTimeMap, typename LowPointMap,
- typename PredecessorMap, typename DFSVisitor >
- std::pair< std::size_t, OutputIterator > biconnected_components_impl(
- const Graph& g, ComponentMap comp, OutputIterator out,
- VertexIndexMap index_map, DiscoverTimeMap dtm, LowPointMap lowpt,
- PredecessorMap pred, DFSVisitor dfs_vis)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT(
- (WritablePropertyMapConcept< ComponentMap, edge_t >));
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< DiscoverTimeMap, vertex_t >));
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< LowPointMap, vertex_t >));
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< PredecessorMap, vertex_t >));
-
- std::size_t num_components = 0;
- std::size_t children_of_root;
- std::size_t dfs_time = 0;
- std::stack< edge_t > S;
- std::vector< char > is_articulation_point(num_vertices(g));
-
- biconnected_components_visitor< ComponentMap, DiscoverTimeMap,
- LowPointMap, PredecessorMap, OutputIterator, std::stack< edge_t >,
- std::vector< char >, VertexIndexMap, DFSVisitor >
- vis(comp, num_components, children_of_root, dtm, dfs_time, lowpt,
- pred, out, S, is_articulation_point, index_map, dfs_vis);
-
- depth_first_search(g, visitor(vis).vertex_index_map(index_map));
-
- return std::pair< std::size_t, OutputIterator >(
- num_components, vis.out);
- }
-
- template < typename PredecessorMap > struct bicomp_dispatch3
- {
- template < typename Graph, typename ComponentMap,
- typename OutputIterator, typename VertexIndexMap,
- typename DiscoverTimeMap, typename LowPointMap, class P, class T,
- class R >
- static std::pair< std::size_t, OutputIterator > apply(const Graph& g,
- ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
- DiscoverTimeMap dtm, LowPointMap lowpt,
- const bgl_named_params< P, T, R >& params, PredecessorMap pred)
- {
- return biconnected_components_impl(g, comp, out, index_map, dtm,
- lowpt, pred,
- choose_param(get_param(params, graph_visitor),
- make_dfs_visitor(null_visitor())));
- }
- };
-
- template <> struct bicomp_dispatch3< param_not_found >
- {
- template < typename Graph, typename ComponentMap,
- typename OutputIterator, typename VertexIndexMap,
- typename DiscoverTimeMap, typename LowPointMap, class P, class T,
- class R >
- static std::pair< std::size_t, OutputIterator > apply(const Graph& g,
- ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
- DiscoverTimeMap dtm, LowPointMap lowpt,
- const bgl_named_params< P, T, R >& params, param_not_found)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- std::vector< vertex_t > pred(num_vertices(g));
- vertex_t vert = graph_traits< Graph >::null_vertex();
-
- return biconnected_components_impl(g, comp, out, index_map, dtm,
- lowpt,
- make_iterator_property_map(pred.begin(), index_map, vert),
- choose_param(get_param(params, graph_visitor),
- make_dfs_visitor(null_visitor())));
- }
- };
-
- template < typename LowPointMap > struct bicomp_dispatch2
- {
- template < typename Graph, typename ComponentMap,
- typename OutputIterator, typename VertexIndexMap,
- typename DiscoverTimeMap, typename P, typename T, typename R >
- static std::pair< std::size_t, OutputIterator > apply(const Graph& g,
- ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
- DiscoverTimeMap dtm, const bgl_named_params< P, T, R >& params,
- LowPointMap lowpt)
- {
- typedef typename get_param_type< vertex_predecessor_t,
- bgl_named_params< P, T, R > >::type dispatch_type;
-
- return bicomp_dispatch3< dispatch_type >::apply(g, comp, out,
- index_map, dtm, lowpt, params,
- get_param(params, vertex_predecessor));
- }
- };
-
- template <> struct bicomp_dispatch2< param_not_found >
- {
- template < typename Graph, typename ComponentMap,
- typename OutputIterator, typename VertexIndexMap,
- typename DiscoverTimeMap, typename P, typename T, typename R >
- static std::pair< std::size_t, OutputIterator > apply(const Graph& g,
- ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
- DiscoverTimeMap dtm, const bgl_named_params< P, T, R >& params,
- param_not_found)
- {
- typedef typename graph_traits< Graph >::vertices_size_type
- vertices_size_type;
- std::vector< vertices_size_type > lowpt(num_vertices(g));
- vertices_size_type vst(0);
-
- typedef typename get_param_type< vertex_predecessor_t,
- bgl_named_params< P, T, R > >::type dispatch_type;
-
- return bicomp_dispatch3< dispatch_type >::apply(g, comp, out,
- index_map, dtm,
- make_iterator_property_map(lowpt.begin(), index_map, vst),
- params, get_param(params, vertex_predecessor));
- }
- };
-
- template < typename DiscoverTimeMap > struct bicomp_dispatch1
- {
- template < typename Graph, typename ComponentMap,
- typename OutputIterator, typename VertexIndexMap, class P, class T,
- class R >
- static std::pair< std::size_t, OutputIterator > apply(const Graph& g,
- ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
- const bgl_named_params< P, T, R >& params, DiscoverTimeMap dtm)
- {
- typedef typename get_param_type< vertex_lowpoint_t,
- bgl_named_params< P, T, R > >::type dispatch_type;
-
- return bicomp_dispatch2< dispatch_type >::apply(g, comp, out,
- index_map, dtm, params, get_param(params, vertex_lowpoint));
- }
- };
-
- template <> struct bicomp_dispatch1< param_not_found >
- {
- template < typename Graph, typename ComponentMap,
- typename OutputIterator, typename VertexIndexMap, class P, class T,
- class R >
- static std::pair< std::size_t, OutputIterator > apply(const Graph& g,
- ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
- const bgl_named_params< P, T, R >& params, param_not_found)
- {
- typedef typename graph_traits< Graph >::vertices_size_type
- vertices_size_type;
- std::vector< vertices_size_type > discover_time(num_vertices(g));
- vertices_size_type vst(0);
-
- typedef typename get_param_type< vertex_lowpoint_t,
- bgl_named_params< P, T, R > >::type dispatch_type;
-
- return bicomp_dispatch2< dispatch_type >::apply(g, comp, out,
- index_map,
- make_iterator_property_map(
- discover_time.begin(), index_map, vst),
- params, get_param(params, vertex_lowpoint));
- }
- };
-
-}
-
-template < typename Graph, typename ComponentMap, typename OutputIterator,
- typename DiscoverTimeMap, typename LowPointMap >
-std::pair< std::size_t, OutputIterator > biconnected_components(const Graph& g,
- ComponentMap comp, OutputIterator out, DiscoverTimeMap dtm,
- LowPointMap lowpt)
-{
- typedef param_not_found dispatch_type;
-
- return detail::bicomp_dispatch3< dispatch_type >::apply(g, comp, out,
- get(vertex_index, g), dtm, lowpt,
- bgl_named_params< int, buffer_param_t >(0), param_not_found());
-}
-
-template < typename Graph, typename ComponentMap, typename OutputIterator,
- typename P, typename T, typename R >
-std::pair< std::size_t, OutputIterator > biconnected_components(const Graph& g,
- ComponentMap comp, OutputIterator out,
- const bgl_named_params< P, T, R >& params)
-{
- typedef typename get_param_type< vertex_discover_time_t,
- bgl_named_params< P, T, R > >::type dispatch_type;
-
- return detail::bicomp_dispatch1< dispatch_type >::apply(g, comp, out,
- choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
- params, get_param(params, vertex_discover_time));
-}
-
-template < typename Graph, typename ComponentMap, typename OutputIterator >
-std::pair< std::size_t, OutputIterator > biconnected_components(
- const Graph& g, ComponentMap comp, OutputIterator out)
-{
- return biconnected_components(
- g, comp, out, bgl_named_params< int, buffer_param_t >(0));
-}
-
-namespace graph_detail
-{
- struct dummy_output_iterator
- {
- typedef std::output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void pointer;
- typedef void difference_type;
-
- struct reference
- {
- template < typename T > reference& operator=(const T&)
- {
- return *this;
- }
- };
-
- reference operator*() const { return reference(); }
- dummy_output_iterator& operator++() { return *this; }
- dummy_output_iterator operator++(int) { return *this; }
- };
-} // end namespace graph_detail
-
-template < typename Graph, typename ComponentMap, typename P, typename T,
- typename R >
-std::size_t biconnected_components(const Graph& g, ComponentMap comp,
- const bgl_named_params< P, T, R >& params)
-{
- return biconnected_components(
- g, comp, graph_detail::dummy_output_iterator(), params)
- .first;
-}
-
-template < typename Graph, typename ComponentMap >
-std::size_t biconnected_components(const Graph& g, ComponentMap comp)
-{
- return biconnected_components(
- g, comp, graph_detail::dummy_output_iterator())
- .first;
-}
-
-template < typename Graph, typename OutputIterator, typename P, typename T,
- typename R >
-OutputIterator articulation_points(const Graph& g, OutputIterator out,
- const bgl_named_params< P, T, R >& params)
-{
- return biconnected_components(g, dummy_property_map(), out, params).second;
-}
-
-template < typename Graph, typename OutputIterator >
-OutputIterator articulation_points(const Graph& g, OutputIterator out)
-{
- return biconnected_components(g, dummy_property_map(), out,
- bgl_named_params< int, buffer_param_t >(0))
- .second;
-}
-
-} // namespace boost
-
-#endif /* BOOST_GRAPH_BICONNECTED_COMPONENTS_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/bipartite.hpp b/contrib/restricted/boost/graph/include/boost/graph/bipartite.hpp
deleted file mode 100644
index 21382840c3..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/bipartite.hpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/**
- *
- * Copyright (c) 2010 Matthias Walter (xammy@xammy.homelinux.net)
- *
- * Authors: Matthias Walter
- *
- * 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_BIPARTITE_HPP
-#define BOOST_GRAPH_BIPARTITE_HPP
-
-#include <utility>
-#include <vector>
-#include <exception>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/depth_first_search.hpp>
-#include <boost/graph/one_bit_color_map.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- /**
- * The bipartite_visitor_error is thrown if an edge cannot be colored.
- * The witnesses are the edges incident vertices.
- */
-
- template < typename Vertex >
- struct BOOST_SYMBOL_VISIBLE bipartite_visitor_error : std::exception
- {
- std::pair< Vertex, Vertex > witnesses;
-
- bipartite_visitor_error(Vertex a, Vertex b) : witnesses(a, b) {}
-
- const char* what() const noexcept { return "Graph is not bipartite."; }
- };
-
- /**
- * Functor which colors edges to be non-monochromatic.
- */
-
- template < typename PartitionMap > struct bipartition_colorize
- {
- typedef on_tree_edge event_filter;
-
- bipartition_colorize(PartitionMap partition_map)
- : partition_map_(partition_map)
- {
- }
-
- template < typename Edge, typename Graph >
- void operator()(Edge e, const Graph& g)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor_t;
- typedef color_traits<
- typename property_traits< PartitionMap >::value_type >
- color_traits;
-
- vertex_descriptor_t source_vertex = source(e, g);
- vertex_descriptor_t target_vertex = target(e, g);
- if (get(partition_map_, source_vertex) == color_traits::white())
- put(partition_map_, target_vertex, color_traits::black());
- else
- put(partition_map_, target_vertex, color_traits::white());
- }
-
- private:
- PartitionMap partition_map_;
- };
-
- /**
- * Creates a bipartition_colorize functor which colors edges
- * to be non-monochromatic.
- *
- * @param partition_map Color map for the bipartition
- * @return The functor.
- */
-
- template < typename PartitionMap >
- inline bipartition_colorize< PartitionMap > colorize_bipartition(
- PartitionMap partition_map)
- {
- return bipartition_colorize< PartitionMap >(partition_map);
- }
-
- /**
- * Functor which tests an edge to be monochromatic.
- */
-
- template < typename PartitionMap > struct bipartition_check
- {
- typedef on_back_edge event_filter;
-
- bipartition_check(PartitionMap partition_map)
- : partition_map_(partition_map)
- {
- }
-
- template < typename Edge, typename Graph >
- void operator()(Edge e, const Graph& g)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor_t;
-
- vertex_descriptor_t source_vertex = source(e, g);
- vertex_descriptor_t target_vertex = target(e, g);
- if (get(partition_map_, source_vertex)
- == get(partition_map_, target_vertex))
- throw bipartite_visitor_error< vertex_descriptor_t >(
- source_vertex, target_vertex);
- }
-
- private:
- PartitionMap partition_map_;
- };
-
- /**
- * Creates a bipartition_check functor which raises an error if a
- * monochromatic edge is found.
- *
- * @param partition_map The map for a bipartition.
- * @return The functor.
- */
-
- template < typename PartitionMap >
- inline bipartition_check< PartitionMap > check_bipartition(
- PartitionMap partition_map)
- {
- return bipartition_check< PartitionMap >(partition_map);
- }
-
- /**
- * Find the beginning of a common suffix of two sequences
- *
- * @param sequence1 Pair of bidirectional iterators defining the first
- * sequence.
- * @param sequence2 Pair of bidirectional iterators defining the second
- * sequence.
- * @return Pair of iterators pointing to the beginning of the common suffix.
- */
-
- template < typename BiDirectionalIterator1,
- typename BiDirectionalIterator2 >
- inline std::pair< BiDirectionalIterator1, BiDirectionalIterator2 >
- reverse_mismatch(
- std::pair< BiDirectionalIterator1, BiDirectionalIterator1 > sequence1,
- std::pair< BiDirectionalIterator2, BiDirectionalIterator2 > sequence2)
- {
- if (sequence1.first == sequence1.second
- || sequence2.first == sequence2.second)
- return std::make_pair(sequence1.first, sequence2.first);
-
- BiDirectionalIterator1 iter1 = sequence1.second;
- BiDirectionalIterator2 iter2 = sequence2.second;
-
- while (true)
- {
- --iter1;
- --iter2;
- if (*iter1 != *iter2)
- {
- ++iter1;
- ++iter2;
- break;
- }
- if (iter1 == sequence1.first)
- break;
- if (iter2 == sequence2.first)
- break;
- }
-
- return std::make_pair(iter1, iter2);
- }
-
-}
-
-/**
- * Checks a given graph for bipartiteness and fills the given color map with
- * white and black according to the bipartition. If the graph is not
- * bipartite, the contents of the color map are undefined. Runs in linear
- * time in the size of the graph, if access to the property maps is in
- * constant time.
- *
- * @param graph The given graph.
- * @param index_map An index map associating vertices with an index.
- * @param partition_map A color map to fill with the bipartition.
- * @return true if and only if the given graph is bipartite.
- */
-
-template < typename Graph, typename IndexMap, typename PartitionMap >
-bool is_bipartite(
- const Graph& graph, const IndexMap index_map, PartitionMap partition_map)
-{
- /// General types and variables
- typedef
- typename property_traits< PartitionMap >::value_type partition_color_t;
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
-
- /// Declare dfs visitor
- // detail::empty_recorder recorder;
- // typedef detail::bipartite_visitor <PartitionMap,
- // detail::empty_recorder> dfs_visitor_t; dfs_visitor_t dfs_visitor
- // (partition_map, recorder);
-
- /// Call dfs
- try
- {
- depth_first_search(graph,
- vertex_index_map(index_map).visitor(make_dfs_visitor(
- std::make_pair(detail::colorize_bipartition(partition_map),
- std::make_pair(detail::check_bipartition(partition_map),
- put_property(partition_map,
- color_traits< partition_color_t >::white(),
- on_start_vertex()))))));
- }
- catch (const detail::bipartite_visitor_error< vertex_descriptor_t >&)
- {
- return false;
- }
-
- return true;
-}
-
-/**
- * Checks a given graph for bipartiteness.
- *
- * @param graph The given graph.
- * @param index_map An index map associating vertices with an index.
- * @return true if and only if the given graph is bipartite.
- */
-
-template < typename Graph, typename IndexMap >
-bool is_bipartite(const Graph& graph, const IndexMap index_map)
-{
- typedef one_bit_color_map< IndexMap > partition_map_t;
- partition_map_t partition_map(num_vertices(graph), index_map);
-
- return is_bipartite(graph, index_map, partition_map);
-}
-
-/**
- * Checks a given graph for bipartiteness. The graph must
- * have an internal vertex_index property. Runs in linear time in the
- * size of the graph, if access to the property maps is in constant time.
- *
- * @param graph The given graph.
- * @return true if and only if the given graph is bipartite.
- */
-
-template < typename Graph > bool is_bipartite(const Graph& graph)
-{
- return is_bipartite(graph, get(vertex_index, graph));
-}
-
-/**
- * Checks a given graph for bipartiteness and fills a given color map with
- * white and black according to the bipartition. If the graph is not
- * bipartite, a sequence of vertices, producing an odd-cycle, is written to
- * the output iterator. The final iterator value is returned. Runs in linear
- * time in the size of the graph, if access to the property maps is in
- * constant time.
- *
- * @param graph The given graph.
- * @param index_map An index map associating vertices with an index.
- * @param partition_map A color map to fill with the bipartition.
- * @param result An iterator to write the odd-cycle vertices to.
- * @return The final iterator value after writing.
- */
-
-template < typename Graph, typename IndexMap, typename PartitionMap,
- typename OutputIterator >
-OutputIterator find_odd_cycle(const Graph& graph, const IndexMap index_map,
- PartitionMap partition_map, OutputIterator result)
-{
- /// General types and variables
- typedef
- typename property_traits< PartitionMap >::value_type partition_color_t;
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- vertex_iterator_t vertex_iter, vertex_end;
-
- /// Declare predecessor map
- typedef std::vector< vertex_descriptor_t > predecessors_t;
- typedef iterator_property_map< typename predecessors_t::iterator, IndexMap,
- vertex_descriptor_t, vertex_descriptor_t& >
- predecessor_map_t;
-
- predecessors_t predecessors(
- num_vertices(graph), graph_traits< Graph >::null_vertex());
- predecessor_map_t predecessor_map(predecessors.begin(), index_map);
-
- /// Initialize predecessor map
- for (boost::tie(vertex_iter, vertex_end) = vertices(graph);
- vertex_iter != vertex_end; ++vertex_iter)
- {
- put(predecessor_map, *vertex_iter, *vertex_iter);
- }
-
- /// Call dfs
- try
- {
- depth_first_search(graph,
- vertex_index_map(index_map).visitor(make_dfs_visitor(
- std::make_pair(detail::colorize_bipartition(partition_map),
- std::make_pair(detail::check_bipartition(partition_map),
- std::make_pair(
- put_property(partition_map,
- color_traits< partition_color_t >::white(),
- on_start_vertex()),
- record_predecessors(
- predecessor_map, on_tree_edge())))))));
- }
- catch (const detail::bipartite_visitor_error< vertex_descriptor_t >& error)
- {
- typedef std::vector< vertex_descriptor_t > path_t;
-
- path_t path1, path2;
- vertex_descriptor_t next, current;
-
- /// First path
- next = error.witnesses.first;
- do
- {
- current = next;
- path1.push_back(current);
- next = predecessor_map[current];
- } while (current != next);
-
- /// Second path
- next = error.witnesses.second;
- do
- {
- current = next;
- path2.push_back(current);
- next = predecessor_map[current];
- } while (current != next);
-
- /// Find beginning of common suffix
- std::pair< typename path_t::iterator, typename path_t::iterator >
- mismatch = detail::reverse_mismatch(
- std::make_pair(path1.begin(), path1.end()),
- std::make_pair(path2.begin(), path2.end()));
-
- /// Copy the odd-length cycle
- result = std::copy(path1.begin(), mismatch.first + 1, result);
- return std::reverse_copy(path2.begin(), mismatch.second, result);
- }
-
- return result;
-}
-
-/**
- * Checks a given graph for bipartiteness. If the graph is not bipartite, a
- * sequence of vertices, producing an odd-cycle, is written to the output
- * iterator. The final iterator value is returned. Runs in linear time in the
- * size of the graph, if access to the property maps is in constant time.
- *
- * @param graph The given graph.
- * @param index_map An index map associating vertices with an index.
- * @param result An iterator to write the odd-cycle vertices to.
- * @return The final iterator value after writing.
- */
-
-template < typename Graph, typename IndexMap, typename OutputIterator >
-OutputIterator find_odd_cycle(
- const Graph& graph, const IndexMap index_map, OutputIterator result)
-{
- typedef one_bit_color_map< IndexMap > partition_map_t;
- partition_map_t partition_map(num_vertices(graph), index_map);
-
- return find_odd_cycle(graph, index_map, partition_map, result);
-}
-
-/**
- * Checks a given graph for bipartiteness. If the graph is not bipartite, a
- * sequence of vertices, producing an odd-cycle, is written to the output
- * iterator. The final iterator value is returned. The graph must have an
- * internal vertex_index property. Runs in linear time in the size of the
- * graph, if access to the property maps is in constant time.
- *
- * @param graph The given graph.
- * @param result An iterator to write the odd-cycle vertices to.
- * @return The final iterator value after writing.
- */
-
-template < typename Graph, typename OutputIterator >
-OutputIterator find_odd_cycle(const Graph& graph, OutputIterator result)
-{
- return find_odd_cycle(graph, get(vertex_index, graph), result);
-}
-}
-
-#endif /// BOOST_GRAPH_BIPARTITE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/boyer_myrvold_planar_test.hpp b/contrib/restricted/boost/graph/include/boost/graph/boyer_myrvold_planar_test.hpp
deleted file mode 100644
index 34a476b50e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/boyer_myrvold_planar_test.hpp
+++ /dev/null
@@ -1,262 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __BOYER_MYRVOLD_PLANAR_TEST_HPP__
-#define __BOYER_MYRVOLD_PLANAR_TEST_HPP__
-
-#include <boost/graph/planar_detail/boyer_myrvold_impl.hpp>
-#include <boost/parameter.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost
-{
-
-struct no_kuratowski_subgraph_isolation
-{
-};
-struct no_planar_embedding
-{
-};
-
-namespace boyer_myrvold_params
-{
-
- BOOST_PARAMETER_KEYWORD(tag, graph)
- BOOST_PARAMETER_KEYWORD(tag, embedding)
- BOOST_PARAMETER_KEYWORD(tag, kuratowski_subgraph)
- BOOST_PARAMETER_KEYWORD(tag, vertex_index_map)
- BOOST_PARAMETER_KEYWORD(tag, edge_index_map)
-
- typedef parameter::parameters< parameter::required< tag::graph >,
- tag::embedding, tag::kuratowski_subgraph, tag::vertex_index_map,
- tag::edge_index_map >
- boyer_myrvold_params_t;
-
- namespace core
- {
-
- template < typename ArgumentPack >
- bool dispatched_boyer_myrvold(
- ArgumentPack const& args, mpl::true_, mpl::true_)
- {
- // Dispatch for no planar embedding, no kuratowski subgraph
- // isolation
-
- typedef typename remove_const< typename parameter::value_type<
- ArgumentPack, tag::graph >::type >::type graph_t;
-
- typedef typename property_map< graph_t, vertex_index_t >::const_type
- vertex_default_index_map_t;
-
- typedef typename parameter::value_type< ArgumentPack,
- tag::vertex_index_map, vertex_default_index_map_t >::type
- vertex_index_map_t;
-
- graph_t const& g = args[graph];
- vertex_default_index_map_t v_d_map = get(vertex_index, g);
- vertex_index_map_t v_i_map = args[vertex_index_map | v_d_map];
- boyer_myrvold_impl< graph_t, vertex_index_map_t,
- graph::detail::no_old_handles, graph::detail::no_embedding >
- planarity_tester(g, v_i_map);
-
- return planarity_tester.is_planar() ? true : false;
- }
-
- template < typename ArgumentPack >
- bool dispatched_boyer_myrvold(
- ArgumentPack const& args, mpl::true_, mpl::false_)
- {
- // Dispatch for no planar embedding, kuratowski subgraph isolation
- typedef typename remove_const< typename parameter::value_type<
- ArgumentPack, tag::graph >::type >::type graph_t;
-
- typedef typename property_map< graph_t, vertex_index_t >::const_type
- vertex_default_index_map_t;
-
- typedef typename parameter::value_type< ArgumentPack,
- tag::vertex_index_map, vertex_default_index_map_t >::type
- vertex_index_map_t;
-
- typedef typename property_map< graph_t, edge_index_t >::const_type
- edge_default_index_map_t;
-
- typedef typename parameter::value_type< ArgumentPack,
- tag::edge_index_map, edge_default_index_map_t >::type
- edge_index_map_t;
-
- graph_t const& g = args[graph];
- vertex_default_index_map_t v_d_map = get(vertex_index, g);
- vertex_index_map_t v_i_map = args[vertex_index_map | v_d_map];
- edge_default_index_map_t e_d_map = get(edge_index, g);
- edge_index_map_t e_i_map = args[edge_index_map | e_d_map];
- boyer_myrvold_impl< graph_t, vertex_index_map_t,
- graph::detail::store_old_handles, graph::detail::no_embedding >
- planarity_tester(g, v_i_map);
-
- if (planarity_tester.is_planar())
- return true;
- else
- {
- planarity_tester.extract_kuratowski_subgraph(
- args[kuratowski_subgraph], e_i_map);
- return false;
- }
- }
-
- template < typename ArgumentPack >
- bool dispatched_boyer_myrvold(
- ArgumentPack const& args, mpl::false_, mpl::true_)
- {
- // Dispatch for planar embedding, no kuratowski subgraph isolation
- typedef typename remove_const< typename parameter::value_type<
- ArgumentPack, tag::graph >::type >::type graph_t;
-
- typedef typename property_map< graph_t, vertex_index_t >::const_type
- vertex_default_index_map_t;
-
- typedef typename parameter::value_type< ArgumentPack,
- tag::vertex_index_map, vertex_default_index_map_t >::type
- vertex_index_map_t;
-
- graph_t const& g = args[graph];
- vertex_default_index_map_t v_d_map = get(vertex_index, g);
- vertex_index_map_t v_i_map = args[vertex_index_map | v_d_map];
- boyer_myrvold_impl< graph_t, vertex_index_map_t,
- graph::detail::no_old_handles,
-#ifdef BOOST_GRAPH_PREFER_STD_LIB
- graph::detail::std_list
-#else
- graph::detail::recursive_lazy_list
-#endif
- >
- planarity_tester(g, v_i_map);
-
- if (planarity_tester.is_planar())
- {
- planarity_tester.make_edge_permutation(args[embedding]);
- return true;
- }
- else
- return false;
- }
-
- template < typename ArgumentPack >
- bool dispatched_boyer_myrvold(
- ArgumentPack const& args, mpl::false_, mpl::false_)
- {
- // Dispatch for planar embedding, kuratowski subgraph isolation
- typedef typename remove_const< typename parameter::value_type<
- ArgumentPack, tag::graph >::type >::type graph_t;
-
- typedef typename property_map< graph_t, vertex_index_t >::const_type
- vertex_default_index_map_t;
-
- typedef typename parameter::value_type< ArgumentPack,
- tag::vertex_index_map, vertex_default_index_map_t >::type
- vertex_index_map_t;
-
- typedef typename property_map< graph_t, edge_index_t >::const_type
- edge_default_index_map_t;
-
- typedef typename parameter::value_type< ArgumentPack,
- tag::edge_index_map, edge_default_index_map_t >::type
- edge_index_map_t;
-
- graph_t const& g = args[graph];
- vertex_default_index_map_t v_d_map = get(vertex_index, g);
- vertex_index_map_t v_i_map = args[vertex_index_map | v_d_map];
- edge_default_index_map_t e_d_map = get(edge_index, g);
- edge_index_map_t e_i_map = args[edge_index_map | e_d_map];
- boyer_myrvold_impl< graph_t, vertex_index_map_t,
- graph::detail::store_old_handles,
-#ifdef BOOST_BGL_PREFER_STD_LIB
- graph::detail::std_list
-#else
- graph::detail::recursive_lazy_list
-#endif
- >
- planarity_tester(g, v_i_map);
-
- if (planarity_tester.is_planar())
- {
- planarity_tester.make_edge_permutation(args[embedding]);
- return true;
- }
- else
- {
- planarity_tester.extract_kuratowski_subgraph(
- args[kuratowski_subgraph], e_i_map);
- return false;
- }
- }
-
- template < typename ArgumentPack >
- bool boyer_myrvold_planarity_test(ArgumentPack const& args)
- {
-
- typedef typename parameter::binding< ArgumentPack,
- tag::kuratowski_subgraph,
- const no_kuratowski_subgraph_isolation& >::type
- kuratowski_arg_t;
-
- typedef typename parameter::binding< ArgumentPack, tag::embedding,
- const no_planar_embedding& >::type embedding_arg_t;
-
- return dispatched_boyer_myrvold(args,
- boost::is_same< embedding_arg_t, const no_planar_embedding& >(),
- boost::is_same< kuratowski_arg_t,
- const no_kuratowski_subgraph_isolation& >());
- }
-
- } // namespace core
-
-} // namespace boyer_myrvold_params
-
-template < typename A0 > bool boyer_myrvold_planarity_test(A0 const& arg0)
-{
- return boyer_myrvold_params::core::boyer_myrvold_planarity_test(
- boyer_myrvold_params::boyer_myrvold_params_t()(arg0));
-}
-
-template < typename A0, typename A1 >
-// bool boyer_myrvold_planarity_test(A0 const& arg0, A1 const& arg1)
-bool boyer_myrvold_planarity_test(A0 const& arg0, A1 const& arg1)
-{
- return boyer_myrvold_params::core::boyer_myrvold_planarity_test(
- boyer_myrvold_params::boyer_myrvold_params_t()(arg0, arg1));
-}
-
-template < typename A0, typename A1, typename A2 >
-bool boyer_myrvold_planarity_test(
- A0 const& arg0, A1 const& arg1, A2 const& arg2)
-{
- return boyer_myrvold_params::core::boyer_myrvold_planarity_test(
- boyer_myrvold_params::boyer_myrvold_params_t()(arg0, arg1, arg2));
-}
-
-template < typename A0, typename A1, typename A2, typename A3 >
-bool boyer_myrvold_planarity_test(
- A0 const& arg0, A1 const& arg1, A2 const& arg2, A3 const& arg3)
-{
- return boyer_myrvold_params::core::boyer_myrvold_planarity_test(
- boyer_myrvold_params::boyer_myrvold_params_t()(arg0, arg1, arg2, arg3));
-}
-
-template < typename A0, typename A1, typename A2, typename A3, typename A4 >
-bool boyer_myrvold_planarity_test(A0 const& arg0, A1 const& arg1,
- A2 const& arg2, A3 const& arg3, A4 const& arg4)
-{
- return boyer_myrvold_params::core::boyer_myrvold_planarity_test(
- boyer_myrvold_params::boyer_myrvold_params_t()(
- arg0, arg1, arg2, arg3, arg4));
-}
-
-}
-
-#endif //__BOYER_MYRVOLD_PLANAR_TEST_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/bron_kerbosch_all_cliques.hpp b/contrib/restricted/boost/graph/include/boost/graph/bron_kerbosch_all_cliques.hpp
deleted file mode 100644
index e0f862e837..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/bron_kerbosch_all_cliques.hpp
+++ /dev/null
@@ -1,312 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_CLIQUE_HPP
-#define BOOST_GRAPH_CLIQUE_HPP
-
-#include <vector>
-#include <deque>
-#include <boost/config.hpp>
-
-#include <boost/concept/assert.hpp>
-
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/lookup_edge.hpp>
-
-#include <boost/concept/detail/concept_def.hpp>
-namespace boost
-{
-namespace concepts
-{
- BOOST_concept(CliqueVisitor, (Visitor)(Clique)(Graph))
- {
- BOOST_CONCEPT_USAGE(CliqueVisitor) { vis.clique(k, g); }
-
- private:
- Visitor vis;
- Graph g;
- Clique k;
- };
-} /* namespace concepts */
-using concepts::CliqueVisitorConcept;
-} /* namespace boost */
-#include <boost/concept/detail/concept_undef.hpp>
-
-namespace boost
-{
-// The algorithm implemented in this paper is based on the so-called
-// Algorithm 457, published as:
-//
-// @article{362367,
-// author = {Coen Bron and Joep Kerbosch},
-// title = {Algorithm 457: finding all cliques of an undirected graph},
-// journal = {Communications of the ACM},
-// volume = {16},
-// number = {9},
-// year = {1973},
-// issn = {0001-0782},
-// pages = {575--577},
-// doi = {http://doi.acm.org/10.1145/362342.362367},
-// publisher = {ACM Press},
-// address = {New York, NY, USA},
-// }
-//
-// Sort of. This implementation is adapted from the 1st version of the
-// algorithm and does not implement the candidate selection optimization
-// described as published - it could, it just doesn't yet.
-//
-// The algorithm is given as proportional to (3.14)^(n/3) power. This is
-// not the same as O(...), but based on time measures and approximation.
-//
-// Unfortunately, this implementation may be less efficient on non-
-// AdjacencyMatrix modeled graphs due to the non-constant implementation
-// of the edge(u,v,g) functions.
-//
-// TODO: It might be worthwhile to provide functionality for passing
-// a connectivity matrix to improve the efficiency of those lookups
-// when needed. This could simply be passed as a BooleanMatrix
-// s.t. edge(u,v,B) returns true or false. This could easily be
-// abstracted for adjacency matricies.
-//
-// The following paper is interesting for a number of reasons. First,
-// it lists a number of other such algorithms and second, it describes
-// a new algorithm (that does not appear to require the edge(u,v,g)
-// function and appears fairly efficient. It is probably worth investigating.
-//
-// @article{DBLP:journals/tcs/TomitaTT06,
-// author = {Etsuji Tomita and Akira Tanaka and Haruhisa Takahashi},
-// title = {The worst-case time complexity for generating all maximal
-// cliques and computational experiments}, journal = {Theor. Comput.
-// Sci.}, volume = {363}, number = {1}, year = {2006}, pages = {28-42}
-// ee = {https://doi.org/10.1016/j.tcs.2006.06.015}
-// }
-
-/**
- * The default clique_visitor supplies an empty visitation function.
- */
-struct clique_visitor
-{
- template < typename VertexSet, typename Graph >
- void clique(const VertexSet&, Graph&)
- {
- }
-};
-
-/**
- * The max_clique_visitor records the size of the maximum clique (but not the
- * clique itself).
- */
-struct max_clique_visitor
-{
- max_clique_visitor(std::size_t& max) : maximum(max) {}
-
- template < typename Clique, typename Graph >
- inline void clique(const Clique& p, const Graph& g)
- {
- BOOST_USING_STD_MAX();
- maximum = max BOOST_PREVENT_MACRO_SUBSTITUTION(maximum, p.size());
- }
- std::size_t& maximum;
-};
-
-inline max_clique_visitor find_max_clique(std::size_t& max)
-{
- return max_clique_visitor(max);
-}
-
-namespace detail
-{
- template < typename Graph >
- inline bool is_connected_to_clique(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor u,
- typename graph_traits< Graph >::vertex_descriptor v,
- typename graph_traits< Graph >::undirected_category)
- {
- return lookup_edge(u, v, g).second;
- }
-
- template < typename Graph >
- inline bool is_connected_to_clique(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor u,
- typename graph_traits< Graph >::vertex_descriptor v,
- typename graph_traits< Graph >::directed_category)
- {
- // Note that this could alternate between using an || to determine
- // full connectivity. I believe that this should produce strongly
- // connected components. Note that using && instead of || will
- // change the results to a fully connected subgraph (i.e., symmetric
- // edges between all vertices s.t., if a->b, then b->a.
- return lookup_edge(u, v, g).second && lookup_edge(v, u, g).second;
- }
-
- template < typename Graph, typename Container >
- inline void filter_unconnected_vertices(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor v,
- const Container& in, Container& out)
- {
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
-
- typename graph_traits< Graph >::directed_category cat;
- typename Container::const_iterator i, end = in.end();
- for (i = in.begin(); i != end; ++i)
- {
- if (is_connected_to_clique(g, v, *i, cat))
- {
- out.push_back(*i);
- }
- }
- }
-
- template < typename Graph,
- typename Clique, // compsub type
- typename Container, // candidates/not type
- typename Visitor >
- void extend_clique(const Graph& g, Clique& clique, Container& cands,
- Container& nots, Visitor vis, std::size_t min)
- {
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((CliqueVisitorConcept< Visitor, Clique, Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- // Is there vertex in nots that is connected to all vertices
- // in the candidate set? If so, no clique can ever be found.
- // This could be broken out into a separate function.
- {
- typename Container::iterator ni, nend = nots.end();
- typename Container::iterator ci, cend = cands.end();
- for (ni = nots.begin(); ni != nend; ++ni)
- {
- for (ci = cands.begin(); ci != cend; ++ci)
- {
- // if we don't find an edge, then we're okay.
- if (!lookup_edge(*ni, *ci, g).second)
- break;
- }
- // if we iterated all the way to the end, then *ni
- // is connected to all *ci
- if (ci == cend)
- break;
- }
- // if we broke early, we found *ni connected to all *ci
- if (ni != nend)
- return;
- }
-
- // TODO: the original algorithm 457 describes an alternative
- // (albeit really complicated) mechanism for selecting candidates.
- // The given optimizaiton seeks to bring about the above
- // condition sooner (i.e., there is a vertex in the not set
- // that is connected to all candidates). unfortunately, the
- // method they give for doing this is fairly unclear.
-
- // basically, for every vertex in not, we should know how many
- // vertices it is disconnected from in the candidate set. if
- // we fix some vertex in the not set, then we want to keep
- // choosing vertices that are not connected to that fixed vertex.
- // apparently, by selecting fix point with the minimum number
- // of disconnections (i.e., the maximum number of connections
- // within the candidate set), then the previous condition wil
- // be reached sooner.
-
- // there's some other stuff about using the number of disconnects
- // as a counter, but i'm jot really sure i followed it.
-
- // TODO: If we min-sized cliques to visit, then theoretically, we
- // should be able to stop recursing if the clique falls below that
- // size - maybe?
-
- // otherwise, iterate over candidates and and test
- // for maxmimal cliquiness.
- typename Container::iterator i, j;
- for (i = cands.begin(); i != cands.end();)
- {
- Vertex candidate = *i;
-
- // add the candidate to the clique (keeping the iterator!)
- // typename Clique::iterator ci = clique.insert(clique.end(),
- // candidate);
- clique.push_back(candidate);
-
- // remove it from the candidate set
- i = cands.erase(i);
-
- // build new candidate and not sets by removing all vertices
- // that are not connected to the current candidate vertex.
- // these actually invert the operation, adding them to the new
- // sets if the vertices are connected. its semantically the same.
- Container new_cands, new_nots;
- filter_unconnected_vertices(g, candidate, cands, new_cands);
- filter_unconnected_vertices(g, candidate, nots, new_nots);
-
- if (new_cands.empty() && new_nots.empty())
- {
- // our current clique is maximal since there's nothing
- // that's connected that we haven't already visited. If
- // the clique is below our radar, then we won't visit it.
- if (clique.size() >= min)
- {
- vis.clique(clique, g);
- }
- }
- else
- {
- // recurse to explore the new candidates
- extend_clique(g, clique, new_cands, new_nots, vis, min);
- }
-
- // we're done with this vertex, so we need to move it
- // to the nots, and remove the candidate from the clique.
- nots.push_back(candidate);
- clique.pop_back();
- }
- }
-} /* namespace detail */
-
-template < typename Graph, typename Visitor >
-inline void bron_kerbosch_all_cliques(
- const Graph& g, Visitor vis, std::size_t min)
-{
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT(
- (AdjacencyMatrixConcept< Graph >)); // Structural requirement only
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- typedef std::vector< Vertex > VertexSet;
- typedef std::deque< Vertex > Clique;
- BOOST_CONCEPT_ASSERT((CliqueVisitorConcept< Visitor, Clique, Graph >));
-
- // NOTE: We're using a deque to implement the clique, because it provides
- // constant inserts and removals at the end and also a constant size.
-
- VertexIterator i, end;
- boost::tie(i, end) = vertices(g);
- VertexSet cands(i, end); // start with all vertices as candidates
- VertexSet nots; // start with no vertices visited
-
- Clique clique; // the first clique is an empty vertex set
- detail::extend_clique(g, clique, cands, nots, vis, min);
-}
-
-// NOTE: By default the minimum number of vertices per clique is set at 2
-// because singleton cliques aren't really very interesting.
-template < typename Graph, typename Visitor >
-inline void bron_kerbosch_all_cliques(const Graph& g, Visitor vis)
-{
- bron_kerbosch_all_cliques(g, vis, 2);
-}
-
-template < typename Graph >
-inline std::size_t bron_kerbosch_clique_number(const Graph& g)
-{
- std::size_t ret = 0;
- bron_kerbosch_all_cliques(g, find_max_clique(ret));
- return ret;
-}
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/chrobak_payne_drawing.hpp b/contrib/restricted/boost/graph/include/boost/graph/chrobak_payne_drawing.hpp
deleted file mode 100644
index fc3ca40d37..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/chrobak_payne_drawing.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-//=======================================================================
-// Copyright (c) Aaron Windsor 2007
-//
-// 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 __CHROBAK_PAYNE_DRAWING_HPP__
-#define __CHROBAK_PAYNE_DRAWING_HPP__
-
-#include <vector>
-#include <list>
-#include <stack>
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-namespace graph
-{
- namespace detail
- {
-
- template < typename Graph, typename VertexToVertexMap,
- typename VertexTo1DCoordMap >
- void accumulate_offsets(
- typename graph_traits< Graph >::vertex_descriptor v,
- std::size_t offset, const Graph& g, VertexTo1DCoordMap x,
- VertexTo1DCoordMap delta_x, VertexToVertexMap left,
- VertexToVertexMap right)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
- // Suggestion of explicit stack from Aaron Windsor to avoid system
- // stack overflows.
- typedef std::pair< vertex_descriptor, std::size_t > stack_entry;
- std::stack< stack_entry > st;
- st.push(stack_entry(v, offset));
- while (!st.empty())
- {
- vertex_descriptor v = st.top().first;
- std::size_t offset = st.top().second;
- st.pop();
- if (v != graph_traits< Graph >::null_vertex())
- {
- x[v] += delta_x[v] + offset;
- st.push(stack_entry(left[v], x[v]));
- st.push(stack_entry(right[v], x[v]));
- }
- }
- }
-
- } /*namespace detail*/
-} /*namespace graph*/
-
-template < typename Graph, typename PlanarEmbedding, typename ForwardIterator,
- typename GridPositionMap, typename VertexIndexMap >
-void chrobak_payne_straight_line_drawing(const Graph& g,
- PlanarEmbedding embedding, ForwardIterator ordering_begin,
- ForwardIterator ordering_end, GridPositionMap drawing, VertexIndexMap vm)
-{
-
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename PlanarEmbedding::value_type::const_iterator
- edge_permutation_iterator_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef std::vector< vertex_t > vertex_vector_t;
- typedef std::vector< v_size_t > vsize_vector_t;
- typedef std::vector< bool > bool_vector_t;
- typedef boost::iterator_property_map< typename vertex_vector_t::iterator,
- VertexIndexMap >
- vertex_to_vertex_map_t;
- typedef boost::iterator_property_map< typename vsize_vector_t::iterator,
- VertexIndexMap >
- vertex_to_vsize_map_t;
- typedef boost::iterator_property_map< typename bool_vector_t::iterator,
- VertexIndexMap >
- vertex_to_bool_map_t;
-
- vertex_vector_t left_vector(
- num_vertices(g), graph_traits< Graph >::null_vertex());
- vertex_vector_t right_vector(
- num_vertices(g), graph_traits< Graph >::null_vertex());
- vsize_vector_t seen_as_right_vector(num_vertices(g), 0);
- vsize_vector_t seen_vector(num_vertices(g), 0);
- vsize_vector_t delta_x_vector(num_vertices(g), 0);
- vsize_vector_t y_vector(num_vertices(g));
- vsize_vector_t x_vector(num_vertices(g), 0);
- bool_vector_t installed_vector(num_vertices(g), false);
-
- vertex_to_vertex_map_t left(left_vector.begin(), vm);
- vertex_to_vertex_map_t right(right_vector.begin(), vm);
- vertex_to_vsize_map_t seen_as_right(seen_as_right_vector.begin(), vm);
- vertex_to_vsize_map_t seen(seen_vector.begin(), vm);
- vertex_to_vsize_map_t delta_x(delta_x_vector.begin(), vm);
- vertex_to_vsize_map_t y(y_vector.begin(), vm);
- vertex_to_vsize_map_t x(x_vector.begin(), vm);
- vertex_to_bool_map_t installed(installed_vector.begin(), vm);
-
- v_size_t timestamp = 1;
- vertex_vector_t installed_neighbors;
-
- ForwardIterator itr = ordering_begin;
- vertex_t v1 = *itr;
- ++itr;
- vertex_t v2 = *itr;
- ++itr;
- vertex_t v3 = *itr;
- ++itr;
-
- delta_x[v2] = 1;
- delta_x[v3] = 1;
-
- y[v1] = 0;
- y[v2] = 0;
- y[v3] = 1;
-
- right[v1] = v3;
- right[v3] = v2;
-
- installed[v1] = installed[v2] = installed[v3] = true;
-
- for (ForwardIterator itr_end = ordering_end; itr != itr_end; ++itr)
- {
- vertex_t v = *itr;
-
- // First, find the leftmost and rightmost neighbor of v on the outer
- // cycle of the embedding.
- // Note: since we're moving clockwise through the edges adjacent to v,
- // we're actually moving from right to left among v's neighbors on the
- // outer face (since v will be installed above them all) looking for
- // the leftmost and rightmost installed neigbhors
-
- vertex_t leftmost = graph_traits< Graph >::null_vertex();
- vertex_t rightmost = graph_traits< Graph >::null_vertex();
-
- installed_neighbors.clear();
-
- vertex_t prev_vertex = graph_traits< Graph >::null_vertex();
- edge_permutation_iterator_t pi, pi_end;
- pi_end = embedding[v].end();
- for (pi = embedding[v].begin(); pi != pi_end; ++pi)
- {
- vertex_t curr_vertex
- = source(*pi, g) == v ? target(*pi, g) : source(*pi, g);
-
- // Skip any self-loops or parallel edges
- if (curr_vertex == v || curr_vertex == prev_vertex)
- continue;
-
- if (installed[curr_vertex])
- {
- seen[curr_vertex] = timestamp;
-
- if (right[curr_vertex] != graph_traits< Graph >::null_vertex())
- {
- seen_as_right[right[curr_vertex]] = timestamp;
- }
- installed_neighbors.push_back(curr_vertex);
- }
-
- prev_vertex = curr_vertex;
- }
-
- typename vertex_vector_t::iterator vi, vi_end;
- vi_end = installed_neighbors.end();
- for (vi = installed_neighbors.begin(); vi != vi_end; ++vi)
- {
- if (right[*vi] == graph_traits< Graph >::null_vertex()
- || seen[right[*vi]] != timestamp)
- rightmost = *vi;
- if (seen_as_right[*vi] != timestamp)
- leftmost = *vi;
- }
-
- ++timestamp;
-
- // stretch gaps
- ++delta_x[right[leftmost]];
- ++delta_x[rightmost];
-
- // adjust offsets
- std::size_t delta_p_q = 0;
- vertex_t stopping_vertex = right[rightmost];
- for (vertex_t temp = right[leftmost]; temp != stopping_vertex;
- temp = right[temp])
- {
- delta_p_q += delta_x[temp];
- }
-
- delta_x[v] = ((y[rightmost] + delta_p_q) - y[leftmost]) / 2;
- y[v] = y[leftmost] + delta_x[v];
- delta_x[rightmost] = delta_p_q - delta_x[v];
-
- bool leftmost_and_rightmost_adjacent = right[leftmost] == rightmost;
- if (!leftmost_and_rightmost_adjacent)
- delta_x[right[leftmost]] -= delta_x[v];
-
- // install v
- if (!leftmost_and_rightmost_adjacent)
- {
- left[v] = right[leftmost];
- vertex_t next_to_rightmost;
- for (vertex_t temp = leftmost; temp != rightmost;
- temp = right[temp])
- {
- next_to_rightmost = temp;
- }
-
- right[next_to_rightmost] = graph_traits< Graph >::null_vertex();
- }
- else
- {
- left[v] = graph_traits< Graph >::null_vertex();
- }
-
- right[leftmost] = v;
- right[v] = rightmost;
- installed[v] = true;
- }
-
- graph::detail::accumulate_offsets(
- *ordering_begin, 0, g, x, delta_x, left, right);
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_t v(*vi);
- drawing[v].x = x[v];
- drawing[v].y = y[v];
- }
-}
-
-template < typename Graph, typename PlanarEmbedding, typename ForwardIterator,
- typename GridPositionMap >
-inline void chrobak_payne_straight_line_drawing(const Graph& g,
- PlanarEmbedding embedding, ForwardIterator ord_begin,
- ForwardIterator ord_end, GridPositionMap drawing)
-{
- chrobak_payne_straight_line_drawing(
- g, embedding, ord_begin, ord_end, drawing, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif //__CHROBAK_PAYNE_DRAWING_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/circle_layout.hpp b/contrib/restricted/boost/graph/include/boost/graph/circle_layout.hpp
deleted file mode 100644
index f30ee65be4..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/circle_layout.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_CIRCLE_LAYOUT_HPP
-#define BOOST_GRAPH_CIRCLE_LAYOUT_HPP
-#include <boost/config/no_tr1/cmath.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <utility>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/topology.hpp>
-#include <boost/static_assert.hpp>
-
-namespace boost
-{
-/**
- * \brief Layout the graph with the vertices at the points of a regular
- * n-polygon.
- *
- * The distance from the center of the polygon to each point is
- * determined by the @p radius parameter. The @p position parameter
- * must be an Lvalue Property Map whose value type is a class type
- * containing @c x and @c y members that will be set to the @c x and
- * @c y coordinates.
- */
-template < typename VertexListGraph, typename PositionMap, typename Radius >
-void circle_graph_layout(
- const VertexListGraph& g, PositionMap position, Radius radius)
-{
- BOOST_STATIC_ASSERT(
- property_traits< PositionMap >::value_type::dimensions >= 2);
- const double pi = boost::math::constants::pi< double >();
-
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::cos;
- using std::sin;
-#endif // BOOST_NO_STDC_NAMESPACE
-
- typedef typename graph_traits< VertexListGraph >::vertices_size_type
- vertices_size_type;
-
- vertices_size_type n = num_vertices(g);
-
- vertices_size_type i = 0;
- double two_pi_over_n = 2. * pi / n;
- BGL_FORALL_VERTICES_T(v, g, VertexListGraph)
- {
- position[v][0] = radius * cos(i * two_pi_over_n);
- position[v][1] = radius * sin(i * two_pi_over_n);
- ++i;
- }
-}
-} // end namespace boost
-
-#endif // BOOST_GRAPH_CIRCLE_LAYOUT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/closeness_centrality.hpp b/contrib/restricted/boost/graph/include/boost/graph/closeness_centrality.hpp
deleted file mode 100644
index d28123cad5..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/closeness_centrality.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_CLOSENESS_CENTRALITY_HPP
-#define BOOST_GRAPH_CLOSENESS_CENTRALITY_HPP
-
-#include <boost/graph/detail/geodesic.hpp>
-#include <boost/graph/exterior_property.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-template < typename Graph, typename DistanceType, typename ResultType,
- typename Reciprocal = detail::reciprocal< ResultType > >
-struct closeness_measure
-: public geodesic_measure< Graph, DistanceType, ResultType >
-{
- typedef geodesic_measure< Graph, DistanceType, ResultType > base_type;
- typedef typename base_type::distance_type distance_type;
- typedef typename base_type::result_type result_type;
-
- result_type operator()(distance_type d, const Graph&)
- {
- BOOST_CONCEPT_ASSERT((NumericValueConcept< DistanceType >));
- BOOST_CONCEPT_ASSERT((NumericValueConcept< ResultType >));
- BOOST_CONCEPT_ASSERT((AdaptableUnaryFunctionConcept< Reciprocal,
- ResultType, ResultType >));
- return (d == base_type::infinite_distance()) ? base_type::zero_result()
- : rec(result_type(d));
- }
- Reciprocal rec;
-};
-
-template < typename Graph, typename DistanceMap >
-inline closeness_measure< Graph,
- typename property_traits< DistanceMap >::value_type, double,
- detail::reciprocal< double > >
-measure_closeness(const Graph&, DistanceMap)
-{
- typedef typename property_traits< DistanceMap >::value_type Distance;
- return closeness_measure< Graph, Distance, double,
- detail::reciprocal< double > >();
-}
-
-template < typename T, typename Graph, typename DistanceMap >
-inline closeness_measure< Graph,
- typename property_traits< DistanceMap >::value_type, T,
- detail::reciprocal< T > >
-measure_closeness(const Graph&, DistanceMap)
-{
- typedef typename property_traits< DistanceMap >::value_type Distance;
- return closeness_measure< Graph, Distance, T, detail::reciprocal< T > >();
-}
-
-template < typename T, typename Graph, typename DistanceMap,
- typename Reciprocal >
-inline closeness_measure< Graph,
- typename property_traits< DistanceMap >::value_type, T, Reciprocal >
-measure_closeness(const Graph&, DistanceMap)
-{
- typedef typename property_traits< DistanceMap >::value_type Distance;
- return closeness_measure< Graph, Distance, T, Reciprocal >();
-}
-
-template < typename Graph, typename DistanceMap, typename Measure,
- typename Combinator >
-inline typename Measure::result_type closeness_centrality(
- const Graph& g, DistanceMap dist, Measure measure, Combinator combine)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< DistanceMap, Vertex >));
- typedef typename property_traits< DistanceMap >::value_type Distance;
- BOOST_CONCEPT_ASSERT((NumericValueConcept< Distance >));
- BOOST_CONCEPT_ASSERT((DistanceMeasureConcept< Measure, Graph >));
-
- Distance n = detail::combine_distances(g, dist, combine, Distance(0));
- return measure(n, g);
-}
-
-template < typename Graph, typename DistanceMap, typename Measure >
-inline typename Measure::result_type closeness_centrality(
- const Graph& g, DistanceMap dist, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< DistanceMap, Vertex >));
- typedef typename property_traits< DistanceMap >::value_type Distance;
-
- return closeness_centrality(g, dist, measure, std::plus< Distance >());
-}
-
-template < typename Graph, typename DistanceMap >
-inline double closeness_centrality(const Graph& g, DistanceMap dist)
-{
- return closeness_centrality(g, dist, measure_closeness(g, dist));
-}
-
-template < typename T, typename Graph, typename DistanceMap >
-inline T closeness_centrality(const Graph& g, DistanceMap dist)
-{
- return closeness_centrality(g, dist, measure_closeness< T >(g, dist));
-}
-
-template < typename Graph, typename DistanceMatrixMap, typename CentralityMap,
- typename Measure >
-inline void all_closeness_centralities(
- const Graph& g, DistanceMatrixMap dist, CentralityMap cent, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< DistanceMatrixMap, Vertex >));
- typedef
- typename property_traits< DistanceMatrixMap >::value_type DistanceMap;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< DistanceMap, Vertex >));
- BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept< CentralityMap, Vertex >));
- typedef typename property_traits< CentralityMap >::value_type Centrality;
-
- typename graph_traits< Graph >::vertex_iterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- DistanceMap dm = get(dist, *i);
- Centrality c = closeness_centrality(g, dm, measure);
- put(cent, *i, c);
- }
-}
-
-template < typename Graph, typename DistanceMatrixMap, typename CentralityMap >
-inline void all_closeness_centralities(
- const Graph& g, DistanceMatrixMap dist, CentralityMap cent)
-{
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< DistanceMatrixMap, Vertex >));
- typedef
- typename property_traits< DistanceMatrixMap >::value_type DistanceMap;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< DistanceMap, Vertex >));
- typedef typename property_traits< CentralityMap >::value_type Result;
-
- all_closeness_centralities(
- g, dist, cent, measure_closeness< Result >(g, DistanceMap()));
-}
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/clustering_coefficient.hpp b/contrib/restricted/boost/graph/include/boost/graph/clustering_coefficient.hpp
deleted file mode 100644
index e275dd7e32..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/clustering_coefficient.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_CLUSTERING_COEFFICIENT_HPP
-#define BOOST_GRAPH_CLUSTERING_COEFFICIENT_HPP
-
-#include <boost/next_prior.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/lookup_edge.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-namespace detail
-{
- template < class Graph >
- inline typename graph_traits< Graph >::degree_size_type possible_edges(
- const Graph& g, std::size_t k, directed_tag)
- {
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::degree_size_type T;
- return T(k) * (T(k) - 1);
- }
-
- template < class Graph >
- inline typename graph_traits< Graph >::degree_size_type possible_edges(
- const Graph& g, size_t k, undirected_tag)
- {
- // dirty little trick...
- return possible_edges(g, k, directed_tag()) / 2;
- }
-
- // This template matches directedS and bidirectionalS.
- template < class Graph >
- inline typename graph_traits< Graph >::degree_size_type count_edges(
- const Graph& g, typename graph_traits< Graph >::vertex_descriptor u,
- typename graph_traits< Graph >::vertex_descriptor v, directed_tag)
-
- {
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< Graph >));
- return (lookup_edge(u, v, g).second ? 1 : 0)
- + (lookup_edge(v, u, g).second ? 1 : 0);
- }
-
- // This template matches undirectedS
- template < class Graph >
- inline typename graph_traits< Graph >::degree_size_type count_edges(
- const Graph& g, typename graph_traits< Graph >::vertex_descriptor u,
- typename graph_traits< Graph >::vertex_descriptor v, undirected_tag)
- {
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< Graph >));
- return lookup_edge(u, v, g).second ? 1 : 0;
- }
-}
-
-template < typename Graph, typename Vertex >
-inline typename graph_traits< Graph >::degree_size_type
-num_paths_through_vertex(const Graph& g, Vertex v)
-{
- BOOST_CONCEPT_ASSERT((AdjacencyGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::directed_category Directed;
- typedef
- typename graph_traits< Graph >::adjacency_iterator AdjacencyIterator;
-
- // TODO: There should actually be a set of neighborhood functions
- // for things like this (num_neighbors() would be great).
-
- AdjacencyIterator i, end;
- boost::tie(i, end) = adjacent_vertices(v, g);
- std::size_t k = std::distance(i, end);
- return detail::possible_edges(g, k, Directed());
-}
-
-template < typename Graph, typename Vertex >
-inline typename graph_traits< Graph >::degree_size_type num_triangles_on_vertex(
- const Graph& g, Vertex v)
-{
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((AdjacencyGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::degree_size_type Degree;
- typedef typename graph_traits< Graph >::directed_category Directed;
- typedef
- typename graph_traits< Graph >::adjacency_iterator AdjacencyIterator;
-
- // TODO: I might be able to reduce the requirement from adjacency graph
- // to incidence graph by using out edges.
-
- Degree count(0);
- AdjacencyIterator i, j, end;
- for (boost::tie(i, end) = adjacent_vertices(v, g); i != end; ++i)
- {
- for (j = boost::next(i); j != end; ++j)
- {
- count += detail::count_edges(g, *i, *j, Directed());
- }
- }
- return count;
-} /* namespace detail */
-
-template < typename T, typename Graph, typename Vertex >
-inline T clustering_coefficient(const Graph& g, Vertex v)
-{
- T zero(0);
- T routes = T(num_paths_through_vertex(g, v));
- return (routes > zero) ? T(num_triangles_on_vertex(g, v)) / routes : zero;
-}
-
-template < typename Graph, typename Vertex >
-inline double clustering_coefficient(const Graph& g, Vertex v)
-{
- return clustering_coefficient< double >(g, v);
-}
-
-template < typename Graph, typename ClusteringMap >
-inline typename property_traits< ClusteringMap >::value_type
-all_clustering_coefficients(const Graph& g, ClusteringMap cm)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept< ClusteringMap, Vertex >));
- typedef typename property_traits< ClusteringMap >::value_type Coefficient;
-
- Coefficient sum(0);
- VertexIterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- Coefficient cc = clustering_coefficient< Coefficient >(g, *i);
- put(cm, *i, cc);
- sum += cc;
- }
- return sum / Coefficient(num_vertices(g));
-}
-
-template < typename Graph, typename ClusteringMap >
-inline typename property_traits< ClusteringMap >::value_type
-mean_clustering_coefficient(const Graph& g, ClusteringMap cm)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< ClusteringMap, Vertex >));
- typedef typename property_traits< ClusteringMap >::value_type Coefficient;
-
- Coefficient cc(0);
- VertexIterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- cc += get(cm, *i);
- }
- return cc / Coefficient(num_vertices(g));
-}
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/core_numbers.hpp b/contrib/restricted/boost/graph/include/boost/graph/core_numbers.hpp
deleted file mode 100644
index 95053caf1f..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/core_numbers.hpp
+++ /dev/null
@@ -1,375 +0,0 @@
-//
-//=======================================================================
-// Copyright 2007 Stanford University
-// Authors: David Gleich
-//
-// 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_CORE_NUMBERS_HPP
-#define BOOST_GRAPH_CORE_NUMBERS_HPP
-
-#include <boost/graph/detail/d_ary_heap.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/iterator/reverse_iterator.hpp>
-#include <boost/concept/assert.hpp>
-
-/*
- * core_numbers
- *
- * Requirement: IncidenceGraph
- */
-
-// History
-//
-// 30 July 2007
-// Added visitors to the implementation
-//
-// 8 February 2008
-// Fixed headers and missing typename
-
-namespace boost
-{
-
-// A linear time O(m) algorithm to compute the indegree core number
-// of a graph for unweighted graphs.
-//
-// and a O((n+m) log n) algorithm to compute the in-edge-weight core
-// numbers of a weighted graph.
-//
-// The linear algorithm comes from:
-// Vladimir Batagelj and Matjaz Zaversnik, "An O(m) Algorithm for Cores
-// Decomposition of Networks." Sept. 1 2002.
-
-template < typename Visitor, typename Graph > struct CoreNumbersVisitorConcept
-{
- void constraints()
- {
- BOOST_CONCEPT_ASSERT((CopyConstructibleConcept< Visitor >));
- vis.examine_vertex(u, g);
- vis.finish_vertex(u, g);
- vis.examine_edge(e, g);
- }
- Visitor vis;
- Graph g;
- typename graph_traits< Graph >::vertex_descriptor u;
- typename graph_traits< Graph >::edge_descriptor e;
-};
-
-template < class Visitors = null_visitor >
-class core_numbers_visitor : public bfs_visitor< Visitors >
-{
-public:
- core_numbers_visitor() {}
- core_numbers_visitor(Visitors vis) : bfs_visitor< Visitors >(vis) {}
-
-private:
- template < class Vertex, class Graph >
- void initialize_vertex(Vertex, Graph&)
- {
- }
-
- template < class Vertex, class Graph > void discover_vertex(Vertex, Graph&)
- {
- }
-
- template < class Vertex, class Graph > void gray_target(Vertex, Graph&) {}
-
- template < class Vertex, class Graph > void black_target(Vertex, Graph&) {}
-
- template < class Edge, class Graph > void tree_edge(Edge, Graph&) {}
-
- template < class Edge, class Graph > void non_tree_edge(Edge, Graph&) {}
-};
-
-template < class Visitors >
-core_numbers_visitor< Visitors > make_core_numbers_visitor(Visitors vis)
-{
- return core_numbers_visitor< Visitors >(vis);
-}
-
-typedef core_numbers_visitor<> default_core_numbers_visitor;
-
-namespace detail
-{
-
- // implement a constant_property_map to simplify compute_in_degree
- // for the weighted and unweighted case
- // this is based on dummy property map
- template < typename ValueType >
- class constant_value_property_map
- : public boost::put_get_helper< ValueType,
- constant_value_property_map< ValueType > >
- {
- public:
- typedef void key_type;
- typedef ValueType value_type;
- typedef const ValueType& reference;
- typedef boost::readable_property_map_tag category;
- inline constant_value_property_map(ValueType cc) : c(cc) {}
- inline constant_value_property_map(
- const constant_value_property_map< ValueType >& x)
- : c(x.c)
- {
- }
- template < class Vertex > inline reference operator[](Vertex) const
- {
- return c;
- }
-
- protected:
- ValueType c;
- };
-
- // the core numbers start as the indegree or inweight. This function
- // will initialize these values
- template < typename Graph, typename CoreMap, typename EdgeWeightMap >
- void compute_in_degree_map(Graph& g, CoreMap d, EdgeWeightMap wm)
- {
- typename graph_traits< Graph >::vertex_iterator vi, vi_end;
- typename graph_traits< Graph >::out_edge_iterator ei, ei_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- put(d, *vi, 0);
- }
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- for (boost::tie(ei, ei_end) = out_edges(*vi, g); ei != ei_end; ++ei)
- {
- put(d, target(*ei, g), get(d, target(*ei, g)) + get(wm, *ei));
- }
- }
- }
-
- // the version for weighted graphs is a little different
- template < typename Graph, typename CoreMap, typename EdgeWeightMap,
- typename MutableQueue, typename Visitor >
- typename property_traits< CoreMap >::value_type core_numbers_impl(
- Graph& g, CoreMap c, EdgeWeightMap wm, MutableQueue& Q, Visitor vis)
- {
- typename property_traits< CoreMap >::value_type v_cn = 0;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex;
- while (!Q.empty())
- {
- // remove v from the Q, and then decrease the core numbers
- // of its successors
- vertex v = Q.top();
- vis.examine_vertex(v, g);
- Q.pop();
- v_cn = get(c, v);
- typename graph_traits< Graph >::out_edge_iterator oi, oi_end;
- for (boost::tie(oi, oi_end) = out_edges(v, g); oi != oi_end; ++oi)
- {
- vis.examine_edge(*oi, g);
- vertex u = target(*oi, g);
- // if c[u] > c[v], then u is still in the graph,
- if (get(c, u) > v_cn)
- {
- // remove the edge
- put(c, u, get(c, u) - get(wm, *oi));
- if (Q.contains(u))
- Q.update(u);
- }
- }
- vis.finish_vertex(v, g);
- }
- return (v_cn);
- }
-
- template < typename Graph, typename CoreMap, typename EdgeWeightMap,
- typename IndexMap, typename CoreNumVisitor >
- typename property_traits< CoreMap >::value_type core_numbers_dispatch(
- Graph& g, CoreMap c, EdgeWeightMap wm, IndexMap im, CoreNumVisitor vis)
- {
- typedef typename property_traits< CoreMap >::value_type D;
- typedef std::less< D > Cmp;
- // build the mutable queue
- typedef typename graph_traits< Graph >::vertex_descriptor vertex;
- std::vector< std::size_t > index_in_heap_data(num_vertices(g));
- typedef iterator_property_map< std::vector< std::size_t >::iterator,
- IndexMap >
- index_in_heap_map_type;
- index_in_heap_map_type index_in_heap_map(
- index_in_heap_data.begin(), im);
- typedef d_ary_heap_indirect< vertex, 4, index_in_heap_map_type, CoreMap,
- Cmp >
- MutableQueue;
- MutableQueue Q(c, index_in_heap_map, Cmp());
- typename graph_traits< Graph >::vertex_iterator vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- Q.push(*vi);
- }
- return core_numbers_impl(g, c, wm, Q, vis);
- }
-
- // the version for the unweighted case
- // for this functions CoreMap must be initialized
- // with the in degree of each vertex
- template < typename Graph, typename CoreMap, typename PositionMap,
- typename Visitor >
- typename property_traits< CoreMap >::value_type core_numbers_impl(
- Graph& g, CoreMap c, PositionMap pos, Visitor vis)
- {
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
- typedef typename graph_traits< Graph >::degree_size_type degree_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex;
- typename graph_traits< Graph >::vertex_iterator vi, vi_end;
-
- // store the vertex core numbers
- typename property_traits< CoreMap >::value_type v_cn = 0;
-
- // compute the maximum degree (degrees are in the coremap)
- typename graph_traits< Graph >::degree_size_type max_deg = 0;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- max_deg = (std::max<
- typename graph_traits< Graph >::degree_size_type >)(max_deg,
- get(c, *vi));
- }
-
- // store the vertices in bins by their degree
- // allocate two extra locations to ease boundary cases
- std::vector< size_type > bin(max_deg + 2);
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- ++bin[get(c, *vi)];
- }
-
- // this loop sets bin[d] to the starting position of vertices
- // with degree d in the vert array for the bucket sort
- size_type cur_pos = 0;
- for (degree_type cur_deg = 0; cur_deg < max_deg + 2; ++cur_deg)
- {
- degree_type tmp = bin[cur_deg];
- bin[cur_deg] = cur_pos;
- cur_pos += tmp;
- }
-
- // perform the bucket sort with pos and vert so that
- // pos[0] is the vertex of smallest degree
- std::vector< vertex > vert(num_vertices(g));
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex v = *vi;
- size_type p = bin[get(c, v)];
- put(pos, v, p);
- vert[p] = v;
- ++bin[get(c, v)];
- }
- // we ``abused'' bin while placing the vertices, now,
- // we need to restore it
- std::copy(boost::make_reverse_iterator(bin.end() - 2),
- boost::make_reverse_iterator(bin.begin()),
- boost::make_reverse_iterator(bin.end() - 1));
- // now simulate removing the vertices
- for (size_type i = 0; i < num_vertices(g); ++i)
- {
- vertex v = vert[i];
- vis.examine_vertex(v, g);
- v_cn = get(c, v);
- typename graph_traits< Graph >::out_edge_iterator oi, oi_end;
- for (boost::tie(oi, oi_end) = out_edges(v, g); oi != oi_end; ++oi)
- {
- vis.examine_edge(*oi, g);
- vertex u = target(*oi, g);
- // if c[u] > c[v], then u is still in the graph,
- if (get(c, u) > v_cn)
- {
- degree_type deg_u = get(c, u);
- degree_type pos_u = get(pos, u);
- // w is the first vertex with the same degree as u
- // (this is the resort operation!)
- degree_type pos_w = bin[deg_u];
- vertex w = vert[pos_w];
- if (u != v)
- {
- // swap u and w
- put(pos, u, pos_w);
- put(pos, w, pos_u);
- vert[pos_w] = u;
- vert[pos_u] = w;
- }
- // now, the vertices array is sorted assuming
- // we perform the following step
- // start the set of vertices with degree of u
- // one into the future (this now points at vertex
- // w which we swapped with u).
- ++bin[deg_u];
- // we are removing v from the graph, so u's degree
- // decreases
- put(c, u, get(c, u) - 1);
- }
- }
- vis.finish_vertex(v, g);
- }
- return v_cn;
- }
-
-} // namespace detail
-
-// non-named parameter version for the unweighted case
-template < typename Graph, typename CoreMap, typename CoreNumVisitor >
-typename property_traits< CoreMap >::value_type core_numbers(
- Graph& g, CoreMap c, CoreNumVisitor vis)
-{
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
- detail::compute_in_degree_map(g, c,
- detail::constant_value_property_map<
- typename property_traits< CoreMap >::value_type >(1));
- return detail::core_numbers_impl(g, c,
- make_iterator_property_map(
- std::vector< size_type >(num_vertices(g)).begin(),
- get(vertex_index, g)),
- vis);
-}
-
-// non-named paramter version for the unweighted case
-template < typename Graph, typename CoreMap >
-typename property_traits< CoreMap >::value_type core_numbers(
- Graph& g, CoreMap c)
-{
- return core_numbers(g, c, make_core_numbers_visitor(null_visitor()));
-}
-
-// non-named parameter version for the weighted case
-template < typename Graph, typename CoreMap, typename EdgeWeightMap,
- typename VertexIndexMap, typename CoreNumVisitor >
-typename property_traits< CoreMap >::value_type core_numbers(Graph& g,
- CoreMap c, EdgeWeightMap wm, VertexIndexMap vim, CoreNumVisitor vis)
-{
- detail::compute_in_degree_map(g, c, wm);
- return detail::core_numbers_dispatch(g, c, wm, vim, vis);
-}
-
-// non-named parameter version for the weighted case
-// template <typename Graph, typename CoreMap, typename EdgeWeightMap>
-// typename property_traits<CoreMap>::value_type
-// core_numbers(Graph& g, CoreMap c, EdgeWeightMap wm)
-// {
-// typedef typename graph_traits<Graph>::vertices_size_type size_type;
-// detail::compute_in_degree_map(g,c,wm);
-// return detail::core_numbers_dispatch(g,c,wm,get(vertex_index,g),
-// make_core_numbers_visitor(null_visitor()));
-// }
-
-template < typename Graph, typename CoreMap >
-typename property_traits< CoreMap >::value_type weighted_core_numbers(
- Graph& g, CoreMap c)
-{
- return weighted_core_numbers(
- g, c, make_core_numbers_visitor(null_visitor()));
-}
-
-template < typename Graph, typename CoreMap, typename CoreNumVisitor >
-typename property_traits< CoreMap >::value_type weighted_core_numbers(
- Graph& g, CoreMap c, CoreNumVisitor vis)
-{
- return core_numbers(g, c, get(edge_weight, g), get(vertex_index, g), vis);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_CORE_NUMBERS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/create_condensation_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/create_condensation_graph.hpp
deleted file mode 100644
index 1eb6fa2b60..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/create_condensation_graph.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-//=======================================================================
-// Copyright 2002 Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_CREATE_CONDENSATION_GRAPH_HPP
-#define BOOST_CREATE_CONDENSATION_GRAPH_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-template < typename Graph, typename ComponentLists, typename ComponentNumberMap,
- typename CondensationGraph, typename EdgeMultiplicityMap >
-void create_condensation_graph(const Graph& g, const ComponentLists& components,
- ComponentNumberMap component_number, CondensationGraph& cg,
- EdgeMultiplicityMap edge_mult_map)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor vertex;
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
- typedef
- typename graph_traits< CondensationGraph >::vertex_descriptor cg_vertex;
- std::vector< cg_vertex > to_cg_vertex(components.size());
- for (size_type s = 0; s < components.size(); ++s)
- to_cg_vertex[s] = add_vertex(cg);
-
- for (size_type si = 0; si < components.size(); ++si)
- {
- cg_vertex s = to_cg_vertex[si];
- std::vector< cg_vertex > adj;
- for (size_type i = 0; i < components[si].size(); ++i)
- {
- vertex u = components[s][i];
- typename graph_traits< Graph >::adjacency_iterator v, v_end;
- for (boost::tie(v, v_end) = adjacent_vertices(u, g); v != v_end;
- ++v)
- {
- cg_vertex t = to_cg_vertex[component_number[*v]];
- if (s != t) // Avoid loops in the condensation graph
- adj.push_back(t);
- }
- }
- std::sort(adj.begin(), adj.end());
- if (!adj.empty())
- {
- size_type i = 0;
- cg_vertex t = adj[i];
- typename graph_traits< CondensationGraph >::edge_descriptor e;
- bool inserted;
- boost::tie(e, inserted) = add_edge(s, t, cg);
- put(edge_mult_map, e, 1);
- ++i;
- while (i < adj.size())
- {
- if (adj[i] == t)
- put(edge_mult_map, e, get(edge_mult_map, e) + 1);
- else
- {
- t = adj[i];
- boost::tie(e, inserted) = add_edge(s, t, cg);
- put(edge_mult_map, e, 1);
- }
- ++i;
- }
- }
- }
-}
-
-template < typename Graph, typename ComponentLists, typename ComponentNumberMap,
- typename CondensationGraph >
-void create_condensation_graph(const Graph& g, const ComponentLists& components,
- ComponentNumberMap component_number, CondensationGraph& cg)
-{
- create_condensation_graph(
- g, components, component_number, cg, dummy_property_map());
-}
-
-} // namespace boost
-
-#endif // BOOST_CREATE_CONDENSATION_GRAPH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/cuthill_mckee_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/cuthill_mckee_ordering.hpp
deleted file mode 100644
index 75750bdf5b..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/cuthill_mckee_ordering.hpp
+++ /dev/null
@@ -1,181 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2004, 2005 Trustees of Indiana University
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
-// Doug Gregor, D. Kevin McGrath
-//
-// 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_CUTHILL_MCKEE_HPP
-#define BOOST_GRAPH_CUTHILL_MCKEE_HPP
-
-#include <boost/config.hpp>
-#include <boost/graph/detail/sparse_ordering.hpp>
-#include <boost/graph/graph_utility.hpp>
-#include <algorithm>
-
-/*
- (Reverse) Cuthill-McKee Algorithm for matrix reordering
-*/
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < typename OutputIterator, typename Buffer, typename DegreeMap >
- class bfs_rcm_visitor : public default_bfs_visitor
- {
- public:
- bfs_rcm_visitor(OutputIterator* iter, Buffer* b, DegreeMap deg)
- : permutation(iter), Qptr(b), degree(deg)
- {
- }
- template < class Vertex, class Graph >
- void examine_vertex(Vertex u, Graph&)
- {
- *(*permutation)++ = u;
- index_begin = Qptr->size();
- }
- template < class Vertex, class Graph >
- void finish_vertex(Vertex, Graph&)
- {
- using std::sort;
-
- typedef typename property_traits< DegreeMap >::value_type ds_type;
-
- typedef indirect_cmp< DegreeMap, std::less< ds_type > > Compare;
- Compare comp(degree);
-
- sort(Qptr->begin() + index_begin, Qptr->end(), comp);
- }
-
- protected:
- OutputIterator* permutation;
- int index_begin;
- Buffer* Qptr;
- DegreeMap degree;
- };
-
-} // namespace detail
-
-// Reverse Cuthill-McKee algorithm with a given starting Vertex.
-//
-// If user provides a reverse iterator, this will be a reverse-cuthill-mckee
-// algorithm, otherwise it will be a standard CM algorithm
-
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap >
-OutputIterator cuthill_mckee_ordering(const Graph& g,
- std::deque< typename graph_traits< Graph >::vertex_descriptor >
- vertex_queue,
- OutputIterator permutation, ColorMap color, DegreeMap degree)
-{
-
- // create queue, visitor...don't forget namespaces!
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename boost::sparse::sparse_ordering_queue< Vertex > queue;
- typedef typename detail::bfs_rcm_visitor< OutputIterator, queue, DegreeMap >
- Visitor;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- queue Q;
-
- // create a bfs_rcm_visitor as defined above
- Visitor vis(&permutation, &Q, degree);
-
- typename graph_traits< Graph >::vertex_iterator ui, ui_end;
-
- // Copy degree to pseudo_degree
- // initialize the color map
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- put(color, *ui, Color::white());
- }
-
- while (!vertex_queue.empty())
- {
- Vertex s = vertex_queue.front();
- vertex_queue.pop_front();
-
- // call BFS with visitor
- breadth_first_visit(g, s, Q, vis, color);
- }
- return permutation;
-}
-
-// This is the case where only a single starting vertex is supplied.
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap >
-OutputIterator cuthill_mckee_ordering(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- OutputIterator permutation, ColorMap color, DegreeMap degree)
-{
-
- std::deque< typename graph_traits< Graph >::vertex_descriptor >
- vertex_queue;
- vertex_queue.push_front(s);
-
- return cuthill_mckee_ordering(g, vertex_queue, permutation, color, degree);
-}
-
-// This is the version of CM which selects its own starting vertex
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap >
-OutputIterator cuthill_mckee_ordering(const Graph& G,
- OutputIterator permutation, ColorMap color, DegreeMap degree)
-{
- if (boost::graph::has_no_vertices(G))
- return permutation;
-
- typedef typename boost::graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- std::deque< Vertex > vertex_queue;
-
- // Mark everything white
- BGL_FORALL_VERTICES_T(v, G, Graph) put(color, v, Color::white());
-
- // Find one vertex from each connected component
- BGL_FORALL_VERTICES_T(v, G, Graph)
- {
- if (get(color, v) == Color::white())
- {
- depth_first_visit(G, v, dfs_visitor<>(), color);
- vertex_queue.push_back(v);
- }
- }
-
- // Find starting nodes for all vertices
- // TBD: How to do this with a directed graph?
- for (typename std::deque< Vertex >::iterator i = vertex_queue.begin();
- i != vertex_queue.end(); ++i)
- *i = find_starting_node(G, *i, color, degree);
-
- return cuthill_mckee_ordering(G, vertex_queue, permutation, color, degree);
-}
-
-template < typename Graph, typename OutputIterator, typename VertexIndexMap >
-OutputIterator cuthill_mckee_ordering(
- const Graph& G, OutputIterator permutation, VertexIndexMap index_map)
-{
- if (boost::graph::has_no_vertices(G))
- return permutation;
-
- std::vector< default_color_type > colors(num_vertices(G));
- return cuthill_mckee_ordering(G, permutation,
- make_iterator_property_map(&colors[0], index_map, colors[0]),
- make_out_degree_map(G));
-}
-
-template < typename Graph, typename OutputIterator >
-inline OutputIterator cuthill_mckee_ordering(
- const Graph& G, OutputIterator permutation)
-{
- return cuthill_mckee_ordering(G, permutation, get(vertex_index, G));
-}
-} // namespace boost
-
-#endif // BOOST_GRAPH_CUTHILL_MCKEE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/cycle_canceling.hpp b/contrib/restricted/boost/graph/include/boost/graph/cycle_canceling.hpp
deleted file mode 100644
index 5aaa25e752..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/cycle_canceling.hpp
+++ /dev/null
@@ -1,191 +0,0 @@
-//=======================================================================
-// Copyright 2013 University of Warsaw.
-// Authors: Piotr Wygocki
-//
-// 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)
-//=======================================================================
-//
-//
-// This algorithm is described in "Network Flows: Theory, Algorithms, and
-// Applications"
-// by Ahuja, Magnanti, Orlin.
-
-#ifndef BOOST_GRAPH_CYCLE_CANCELING_HPP
-#define BOOST_GRAPH_CYCLE_CANCELING_HPP
-
-#include <numeric>
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/pending/indirect_cmp.hpp>
-#include <boost/graph/bellman_ford_shortest_paths.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/detail/augment.hpp>
-#include <boost/graph/find_flow_cost.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < typename PredEdgeMap, typename Vertex >
- class RecordEdgeMapAndCycleVertex
- : public bellman_visitor<
- edge_predecessor_recorder< PredEdgeMap, on_edge_relaxed > >
- {
- typedef edge_predecessor_recorder< PredEdgeMap, on_edge_relaxed >
- PredRec;
-
- public:
- RecordEdgeMapAndCycleVertex(PredEdgeMap pred, Vertex& v)
- : bellman_visitor< PredRec >(PredRec(pred)), m_v(v), m_pred(pred)
- {
- }
-
- template < typename Graph, typename Edge >
- void edge_not_minimized(Edge e, const Graph& g) const
- {
- typename graph_traits< Graph >::vertices_size_type n
- = num_vertices(g) + 1;
-
- // edge e is not minimized but does not have to be on the negative
- // weight cycle to find vertex on negative wieight cycle we move n+1
- // times backword in the PredEdgeMap graph.
- while (n > 0)
- {
- e = get(m_pred, source(e, g));
- --n;
- }
- m_v = source(e, g);
- }
-
- private:
- Vertex& m_v;
- PredEdgeMap m_pred;
- };
-
-} // detail
-
-template < class Graph, class Pred, class Distance, class Reversed,
- class ResidualCapacity, class Weight >
-void cycle_canceling(const Graph& g, Weight weight, Reversed rev,
- ResidualCapacity residual_capacity, Pred pred, Distance distance)
-{
- typedef filtered_graph< const Graph, is_residual_edge< ResidualCapacity > >
- ResGraph;
- ResGraph gres = detail::residual_graph(g, residual_capacity);
-
- typedef graph_traits< ResGraph > ResGTraits;
- typedef graph_traits< Graph > GTraits;
- typedef typename ResGTraits::edge_descriptor edge_descriptor;
- typedef typename ResGTraits::vertex_descriptor vertex_descriptor;
-
- typename GTraits::vertices_size_type N = num_vertices(g);
-
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- put(pred, v, edge_descriptor());
- put(distance, v, 0);
- }
-
- vertex_descriptor cycleStart;
- while (!bellman_ford_shortest_paths(gres, N,
- weight_map(weight).distance_map(distance).visitor(
- detail::RecordEdgeMapAndCycleVertex< Pred, vertex_descriptor >(
- pred, cycleStart))))
- {
-
- detail::augment(
- g, cycleStart, cycleStart, pred, residual_capacity, rev);
-
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- put(pred, v, edge_descriptor());
- put(distance, v, 0);
- }
- }
-}
-
-// in this namespace argument dispatching takes place
-namespace detail
-{
-
- template < class Graph, class P, class T, class R, class ResidualCapacity,
- class Weight, class Reversed, class Pred, class Distance >
- void cycle_canceling_dispatch2(const Graph& g, Weight weight, Reversed rev,
- ResidualCapacity residual_capacity, Pred pred, Distance dist,
- const bgl_named_params< P, T, R >& params)
- {
- cycle_canceling(g, weight, rev, residual_capacity, pred, dist);
- }
-
- // setting default distance map
- template < class Graph, class P, class T, class R, class Pred,
- class ResidualCapacity, class Weight, class Reversed >
- void cycle_canceling_dispatch2(Graph& g, Weight weight, Reversed rev,
- ResidualCapacity residual_capacity, Pred pred, param_not_found,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename property_traits< Weight >::value_type D;
-
- std::vector< D > d_map(num_vertices(g));
-
- cycle_canceling(g, weight, rev, residual_capacity, pred,
- make_iterator_property_map(d_map.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index)));
- }
-
- template < class Graph, class P, class T, class R, class ResidualCapacity,
- class Weight, class Reversed, class Pred >
- void cycle_canceling_dispatch1(Graph& g, Weight weight, Reversed rev,
- ResidualCapacity residual_capacity, Pred pred,
- const bgl_named_params< P, T, R >& params)
- {
- cycle_canceling_dispatch2(g, weight, rev, residual_capacity, pred,
- get_param(params, vertex_distance), params);
- }
-
- // setting default predecessors map
- template < class Graph, class P, class T, class R, class ResidualCapacity,
- class Weight, class Reversed >
- void cycle_canceling_dispatch1(Graph& g, Weight weight, Reversed rev,
- ResidualCapacity residual_capacity, param_not_found,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor;
- std::vector< edge_descriptor > p_map(num_vertices(g));
-
- cycle_canceling_dispatch2(g, weight, rev, residual_capacity,
- make_iterator_property_map(p_map.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index)),
- get_param(params, vertex_distance), params);
- }
-
-} // detail
-
-template < class Graph, class P, class T, class R >
-void cycle_canceling(Graph& g, const bgl_named_params< P, T, R >& params)
-{
- cycle_canceling_dispatch1(g,
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
- choose_pmap(get_param(params, edge_residual_capacity), g,
- edge_residual_capacity),
- get_param(params, vertex_predecessor), params);
-}
-
-template < class Graph > void cycle_canceling(Graph& g)
-{
- bgl_named_params< int, buffer_param_t > params(0);
- cycle_canceling(g, params);
-}
-
-}
-
-#endif /* BOOST_GRAPH_CYCLE_CANCELING_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/degree_centrality.hpp b/contrib/restricted/boost/graph/include/boost/graph/degree_centrality.hpp
deleted file mode 100644
index 6db11b95eb..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/degree_centrality.hpp
+++ /dev/null
@@ -1,135 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_DEGREE_CENTRALITY_HPP
-#define BOOST_GRAPH_DEGREE_CENTRALITY_HPP
-
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-template < typename Graph > struct degree_centrality_measure
-{
- typedef typename graph_traits< Graph >::degree_size_type degree_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_type;
-};
-
-template < typename Graph >
-struct influence_measure : public degree_centrality_measure< Graph >
-{
- typedef degree_centrality_measure< Graph > base_type;
- typedef typename base_type::degree_type degree_type;
- typedef typename base_type::vertex_type vertex_type;
-
- inline degree_type operator()(vertex_type v, const Graph& g)
- {
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- return out_degree(v, g);
- }
-};
-
-template < typename Graph >
-inline influence_measure< Graph > measure_influence(const Graph&)
-{
- return influence_measure< Graph >();
-}
-
-template < typename Graph >
-struct prestige_measure : public degree_centrality_measure< Graph >
-{
- typedef degree_centrality_measure< Graph > base_type;
- typedef typename base_type::degree_type degree_type;
- typedef typename base_type::vertex_type vertex_type;
-
- inline degree_type operator()(vertex_type v, const Graph& g)
- {
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
- return in_degree(v, g);
- }
-};
-
-template < typename Graph >
-inline prestige_measure< Graph > measure_prestige(const Graph&)
-{
- return prestige_measure< Graph >();
-}
-
-template < typename Graph, typename Vertex, typename Measure >
-inline typename Measure::degree_type degree_centrality(
- const Graph& g, Vertex v, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((DegreeMeasureConcept< Measure, Graph >));
- return measure(v, g);
-}
-
-template < typename Graph, typename Vertex >
-inline typename graph_traits< Graph >::degree_size_type degree_centrality(
- const Graph& g, Vertex v)
-{
- return degree_centrality(g, v, measure_influence(g));
-}
-
-// These are alias functions, intended to provide a more expressive interface.
-
-template < typename Graph, typename Vertex >
-inline typename graph_traits< Graph >::degree_size_type influence(
- const Graph& g, Vertex v)
-{
- return degree_centrality(g, v, measure_influence(g));
-}
-
-template < typename Graph, typename Vertex >
-inline typename graph_traits< Graph >::degree_size_type prestige(
- const Graph& g, Vertex v)
-{
- return degree_centrality(g, v, measure_prestige(g));
-}
-
-template < typename Graph, typename CentralityMap, typename Measure >
-inline void all_degree_centralities(
- const Graph& g, CentralityMap cent, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept< CentralityMap, Vertex >));
- typedef typename property_traits< CentralityMap >::value_type Centrality;
-
- VertexIterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- Centrality c = degree_centrality(g, *i, measure);
- put(cent, *i, c);
- }
-}
-
-template < typename Graph, typename CentralityMap >
-inline void all_degree_centralities(const Graph& g, CentralityMap cent)
-{
- all_degree_centralities(g, cent, measure_influence(g));
-}
-
-// More helper functions for computing influence and prestige.
-// I hate the names of these functions, but influence and prestige
-// don't pluralize too well.
-
-template < typename Graph, typename CentralityMap >
-inline void all_influence_values(const Graph& g, CentralityMap cent)
-{
- all_degree_centralities(g, cent, measure_influence(g));
-}
-
-template < typename Graph, typename CentralityMap >
-inline void all_prestige_values(const Graph& g, CentralityMap cent)
-{
- all_degree_centralities(g, cent, measure_prestige(g));
-}
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/augment.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/augment.hpp
deleted file mode 100644
index 956f274cb4..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/augment.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-//=======================================================================
-// Copyright 2013 University of Warsaw.
-// Authors: Piotr Wygocki
-//
-// 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_AUGMENT_HPP
-#define BOOST_GRAPH_AUGMENT_HPP
-
-#include <boost/graph/filtered_graph.hpp>
-
-namespace boost
-{
-namespace detail
-{
-
- template < class Graph, class ResCapMap >
- filtered_graph< const Graph, is_residual_edge< ResCapMap > > residual_graph(
- const Graph& g, ResCapMap residual_capacity)
- {
- return filtered_graph< const Graph, is_residual_edge< ResCapMap > >(
- g, is_residual_edge< ResCapMap >(residual_capacity));
- }
-
- template < class Graph, class PredEdgeMap, class ResCapMap,
- class RevEdgeMap >
- inline void augment(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink, PredEdgeMap p,
- ResCapMap residual_capacity, RevEdgeMap reverse_edge)
- {
- typename graph_traits< Graph >::edge_descriptor e;
- typename graph_traits< Graph >::vertex_descriptor u;
- typedef typename property_traits< ResCapMap >::value_type FlowValue;
-
- // find minimum residual capacity along the augmenting path
- FlowValue delta = (std::numeric_limits< FlowValue >::max)();
- e = get(p, sink);
- do
- {
- BOOST_USING_STD_MIN();
- delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- delta, get(residual_capacity, e));
- u = source(e, g);
- e = get(p, u);
- } while (u != src);
-
- // push delta units of flow along the augmenting path
- e = get(p, sink);
- do
- {
- put(residual_capacity, e, get(residual_capacity, e) - delta);
- put(residual_capacity, get(reverse_edge, e),
- get(residual_capacity, get(reverse_edge, e)) + delta);
- u = source(e, g);
- e = get(p, u);
- } while (u != src);
- }
-
-} // namespace detail
-} // namespace boost
-
-#endif /* BOOST_GRAPH_AUGMENT_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/connected_components.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/connected_components.hpp
deleted file mode 100644
index a97159118d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/connected_components.hpp
+++ /dev/null
@@ -1,206 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_CONNECTED_COMPONENTS_HPP
-#define BOOST_GRAPH_DETAIL_CONNECTED_COMPONENTS_HPP
-
-#if defined(__sgi) && !defined(__GNUC__)
-#pragma set woff 1234
-#endif
-
-#include <boost/operators.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- //=========================================================================
- // Implementation details of connected_components
-
- // This is used both in the connected_components algorithm and in
- // the kosaraju strong components algorithm during the second DFS
- // traversal.
- template < class ComponentsPA, class DFSVisitor >
- class components_recorder : public DFSVisitor
- {
- typedef typename property_traits< ComponentsPA >::value_type comp_type;
-
- public:
- components_recorder(ComponentsPA c, comp_type& c_count, DFSVisitor v)
- : DFSVisitor(v), m_component(c), m_count(c_count)
- {
- }
-
- template < class Vertex, class Graph >
- void start_vertex(Vertex u, Graph& g)
- {
- ++m_count;
- DFSVisitor::start_vertex(u, g);
- }
- template < class Vertex, class Graph >
- void discover_vertex(Vertex u, Graph& g)
- {
- put(m_component, u, m_count);
- DFSVisitor::discover_vertex(u, g);
- }
-
- protected:
- ComponentsPA m_component;
- comp_type& m_count;
- };
-
- template < class DiscoverTimeMap, class FinishTimeMap, class TimeT,
- class DFSVisitor >
- class time_recorder : public DFSVisitor
- {
- public:
- time_recorder(
- DiscoverTimeMap d, FinishTimeMap f, TimeT& t, DFSVisitor v)
- : DFSVisitor(v), m_discover_time(d), m_finish_time(f), m_t(t)
- {
- }
-
- template < class Vertex, class Graph >
- void discover_vertex(Vertex u, Graph& g)
- {
- put(m_discover_time, u, ++m_t);
- DFSVisitor::discover_vertex(u, g);
- }
- template < class Vertex, class Graph >
- void finish_vertex(Vertex u, Graph& g)
- {
- put(m_finish_time, u, ++m_t);
- DFSVisitor::discover_vertex(u, g);
- }
-
- protected:
- DiscoverTimeMap m_discover_time;
- FinishTimeMap m_finish_time;
- TimeT m_t;
- };
- template < class DiscoverTimeMap, class FinishTimeMap, class TimeT,
- class DFSVisitor >
- time_recorder< DiscoverTimeMap, FinishTimeMap, TimeT, DFSVisitor >
- record_times(DiscoverTimeMap d, FinishTimeMap f, TimeT& t, DFSVisitor vis)
- {
- return time_recorder< DiscoverTimeMap, FinishTimeMap, TimeT,
- DFSVisitor >(d, f, t, vis);
- }
-
- //=========================================================================
- // Implementation detail of dynamic_components
-
- //-------------------------------------------------------------------------
- // Helper functions for the component_index class
-
- // Record the representative vertices in the header array.
- // Representative vertices now point to the component number.
-
- template < class Parent, class OutputIterator, class Integer >
- inline void build_components_header(
- Parent p, OutputIterator header, Integer num_nodes)
- {
- Parent component = p;
- Integer component_num = 0;
- for (Integer v = 0; v != num_nodes; ++v)
- if (p[v] == v)
- {
- *header++ = v;
- component[v] = component_num++;
- }
- }
-
- // Pushes x onto the front of the list. The list is represented in
- // an array.
- template < class Next, class T, class V >
- inline void push_front(Next next, T& head, V x)
- {
- T tmp = head;
- head = x;
- next[x] = tmp;
- }
-
- // Create a linked list of the vertices in each component
- // by reusing the representative array.
- template < class Parent1, class Parent2, class Integer >
- void link_components(Parent1 component, Parent2 header, Integer num_nodes,
- Integer num_components)
- {
- // Make the non-representative vertices point to their component
- Parent1 representative = component;
- for (Integer v = 0; v != num_nodes; ++v)
- if (component[v] >= num_components || header[component[v]] != v)
- component[v] = component[representative[v]];
-
- // initialize the "head" of the lists to "NULL"
- std::fill_n(header, num_components, num_nodes);
-
- // Add each vertex to the linked list for its component
- Parent1 next = component;
- for (Integer k = 0; k != num_nodes; ++k)
- push_front(next, header[component[k]], k);
- }
-
- template < class IndexContainer, class HeaderContainer >
- void construct_component_index(
- IndexContainer& index, HeaderContainer& header)
- {
- build_components_header(index.begin(), std::back_inserter(header),
- index.end() - index.begin());
-
- link_components(index.begin(), header.begin(),
- index.end() - index.begin(), header.end() - header.begin());
- }
-
- template < class IndexIterator, class Integer, class Distance >
- class component_iterator
- : boost::forward_iterator_helper<
- component_iterator< IndexIterator, Integer, Distance >, Integer,
- Distance, Integer*, Integer& >
- {
- public:
- typedef component_iterator self;
-
- IndexIterator next;
- Integer node;
-
- typedef std::forward_iterator_tag iterator_category;
- typedef Integer value_type;
- typedef Integer& reference;
- typedef Integer* pointer;
- typedef Distance difference_type;
-
- component_iterator() {}
- component_iterator(IndexIterator x, Integer i) : next(x), node(i) {}
- Integer operator*() const { return node; }
- self& operator++()
- {
- node = next[node];
- return *this;
- }
- };
-
- template < class IndexIterator, class Integer, class Distance >
- inline bool operator==(
- const component_iterator< IndexIterator, Integer, Distance >& x,
- const component_iterator< IndexIterator, Integer, Distance >& y)
- {
- return x.node == y.node;
- }
-
-} // namespace detail
-
-} // namespace detail
-
-#if defined(__sgi) && !defined(__GNUC__)
-#pragma reset woff 1234
-#endif
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/empty_header.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/empty_header.hpp
deleted file mode 100644
index fde3672551..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/empty_header.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef BOOST_GRAPH_DETAIL_EMPTY_HEADER_HPP_INCLUDED
-#define BOOST_GRAPH_DETAIL_EMPTY_HEADER_HPP_INCLUDED
-
-// Copyright 2018 Peter Dimov
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#endif // #ifndef BOOST_GRAPH_DETAIL_EMPTY_HEADER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/geodesic.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/geodesic.hpp
deleted file mode 100644
index 84805fb647..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/geodesic.hpp
+++ /dev/null
@@ -1,138 +0,0 @@
-// (C) Copyright 2007 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_DETAIL_GEODESIC_HPP
-#define BOOST_GRAPH_DETAIL_GEODESIC_HPP
-
-#include <functional>
-#include <boost/config.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/numeric_values.hpp>
-#include <boost/concept/assert.hpp>
-
-// TODO: Should this really be in detail?
-
-namespace boost
-{
-// This is a very good discussion on centrality measures. While I can't
-// say that this has been the motivating factor for the design and
-// implementation of ths centrality framework, it does provide a single
-// point of reference for defining things like degree and closeness
-// centrality. Plus, the bibliography seems fairly complete.
-//
-// @article{citeulike:1144245,
-// author = {Borgatti, Stephen P. and Everett, Martin G.},
-// citeulike-article-id = {1144245},
-// doi = {10.1016/j.socnet.2005.11.005},
-// journal = {Social Networks},
-// month = {October},
-// number = {4},
-// pages = {466--484},
-// priority = {0},
-// title = {A Graph-theoretic perspective on centrality},
-// url = {https://doi.org/10.1016/j.socnet.2005.11.005},
-// volume = {28},
-// year = {2006}
-// }
-// }
-
-namespace detail
-{
- // Note that this assumes T == property_traits<DistanceMap>::value_type
- // and that the args and return of combine are also T.
- template < typename Graph, typename DistanceMap, typename Combinator,
- typename Distance >
- inline Distance combine_distances(
- const Graph& g, DistanceMap dist, Combinator combine, Distance init)
- {
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< DistanceMap, Vertex >));
- BOOST_CONCEPT_ASSERT((NumericValueConcept< Distance >));
- typedef numeric_values< Distance > DistanceNumbers;
-// NOTE: Disabled until this concept assert is fixed in Boost.ConceptCheck.
-// BOOST_CONCEPT_ASSERT((AdaptableBinaryFunction< Combinator, Distance,
-// Distance, Distance >));
-
- // If there's ever an infinite distance, then we simply return
- // infinity. Note that this /will/ include the a non-zero
- // distance-to-self in the combined values. However, this is usually
- // zero, so it shouldn't be too problematic.
- Distance ret = init;
- VertexIterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- Vertex v = *i;
- if (get(dist, v) != DistanceNumbers::infinity())
- {
- ret = combine(ret, get(dist, v));
- }
- else
- {
- ret = DistanceNumbers::infinity();
- break;
- }
- }
- return ret;
- }
-
- // Similar to std::plus<T>, but maximizes parameters
- // rather than adding them.
- template < typename T > struct maximize
- {
- typedef T result_type;
- typedef T first_argument_type;
- typedef T second_argument_type;
- T operator()(T x, T y) const
- {
- BOOST_USING_STD_MAX();
- return max BOOST_PREVENT_MACRO_SUBSTITUTION(x, y);
- }
- };
-
- // Another helper, like maximize() to help abstract functional
- // concepts. This is trivially instantiated for builtin numeric
- // types, but should be specialized for those types that have
- // discrete notions of reciprocals.
- template < typename T > struct reciprocal
- {
- typedef T result_type;
- typedef T argument_type;
- T operator()(T t) { return T(1) / t; }
- };
-} /* namespace detail */
-
-// This type defines the basic facilities used for computing values
-// based on the geodesic distances between vertices. Examples include
-// closeness centrality and mean geodesic distance.
-template < typename Graph, typename DistanceType, typename ResultType >
-struct geodesic_measure
-{
- typedef DistanceType distance_type;
- typedef ResultType result_type;
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
-
- typedef numeric_values< distance_type > distance_values;
- typedef numeric_values< result_type > result_values;
-
- static inline distance_type infinite_distance()
- {
- return distance_values::infinity();
- }
-
- static inline result_type infinite_result()
- {
- return result_values::infinity();
- }
-
- static inline result_type zero_result() { return result_values::zero(); }
-};
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/incidence_iterator.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/incidence_iterator.hpp
deleted file mode 100644
index 2da4874ac7..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/incidence_iterator.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_INCIDENCE_ITERATOR_HPP
-#define BOOST_GRAPH_DETAIL_INCIDENCE_ITERATOR_HPP
-
-#include <utility>
-#include <iterator>
-
-// OBSOLETE
-
-namespace boost
-{
-
-namespace detail
-{
- // EdgeDir tags
- struct in_edge_tag
- {
- };
- struct out_edge_tag
- {
- };
-
- template < class Vertex, class Edge, class Iterator1D, class EdgeDir >
- struct bidir_incidence_iterator
- {
- typedef bidir_incidence_iterator self;
- typedef Edge edge_type;
- typedef typename Edge::property_type EdgeProperty;
-
- public:
- typedef int difference_type;
- typedef std::forward_iterator_tag iterator_category;
- typedef edge_type reference;
- typedef edge_type value_type;
- typedef value_type* pointer;
- inline bidir_incidence_iterator() {}
- inline bidir_incidence_iterator(Iterator1D ii, Vertex src)
- : i(ii), _src(src)
- {
- }
-
- inline self& operator++()
- {
- ++i;
- return *this;
- }
- inline self operator++(int)
- {
- self tmp = *this;
- ++(*this);
- return tmp;
- }
-
- inline reference operator*() const { return deref_helper(EdgeDir()); }
- inline self* operator->() { return this; }
-
- Iterator1D& iter() { return i; }
- const Iterator1D& iter() const { return i; }
-
- Iterator1D i;
- Vertex _src;
-
- protected:
- inline reference deref_helper(out_edge_tag) const
- {
- return edge_type(_src, (*i).get_target(), &(*i).get_property());
- }
- inline reference deref_helper(in_edge_tag) const
- {
- return edge_type((*i).get_target(), _src, &(*i).get_property());
- }
- };
-
- template < class V, class E, class Iter, class Dir >
- inline bool operator==(const bidir_incidence_iterator< V, E, Iter, Dir >& x,
- const bidir_incidence_iterator< V, E, Iter, Dir >& y)
- {
- return x.i == y.i;
- }
- template < class V, class E, class Iter, class Dir >
- inline bool operator!=(const bidir_incidence_iterator< V, E, Iter, Dir >& x,
- const bidir_incidence_iterator< V, E, Iter, Dir >& y)
- {
- return x.i != y.i;
- }
-
-}
-}
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/incremental_components.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/incremental_components.hpp
deleted file mode 100644
index 8941f67283..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/incremental_components.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-//=======================================================================
-// Copyright 2002 Indiana University.
-// Copyright 2009 Trustees of Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Michael Hansen
-//
-// 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_INCREMENTAL_COMPONENTS_HPP
-#define BOOST_GRAPH_DETAIL_INCREMENTAL_COMPONENTS_HPP
-
-#include <boost/operators.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- // Iterator for a component index linked list. The contents of
- // each array element represent the next index in the list. A
- // special value (the maximum index + 1) is used to terminate a
- // list.
- template < typename IndexRandomAccessIterator >
- class component_index_iterator
- : boost::forward_iterator_helper<
- component_index_iterator< IndexRandomAccessIterator >,
- typename std::iterator_traits<
- IndexRandomAccessIterator >::value_type,
- typename std::iterator_traits<
- IndexRandomAccessIterator >::difference_type,
- typename std::iterator_traits< IndexRandomAccessIterator >::pointer,
- typename std::iterator_traits<
- IndexRandomAccessIterator >::reference >
- {
-
- private:
- typedef component_index_iterator< IndexRandomAccessIterator > self;
-
- public:
- typedef std::forward_iterator_tag iterator_category;
- typedef typename std::iterator_traits<
- IndexRandomAccessIterator >::value_type value_type;
- typedef typename std::iterator_traits<
- IndexRandomAccessIterator >::difference_type reference;
- typedef
- typename std::iterator_traits< IndexRandomAccessIterator >::pointer
- pointer;
- typedef typename std::iterator_traits<
- IndexRandomAccessIterator >::reference difference_type;
-
- // Constructor for "begin" iterator
- component_index_iterator(
- IndexRandomAccessIterator index_iterator, value_type begin_index)
- : m_index_iterator(index_iterator), m_current_index(begin_index)
- {
- }
-
- // Constructor for "end" iterator (end_index should be the linked
- // list terminator).
- component_index_iterator(value_type end_index)
- : m_current_index(end_index)
- {
- }
-
- inline value_type operator*() const { return (m_current_index); }
-
- self& operator++()
- {
- // Move to the next element in the linked list
- m_current_index = m_index_iterator[m_current_index];
- return (*this);
- }
-
- bool operator==(const self& other_iterator) const
- {
- return (m_current_index == *other_iterator);
- }
-
- protected:
- IndexRandomAccessIterator m_index_iterator;
- value_type m_current_index;
-
- }; // class component_index_iterator
-
-} // namespace detail
-
-} // namespace detail
-
-#endif // BOOST_GRAPH_DETAIL_INCREMENTAL_COMPONENTS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/index.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/index.hpp
deleted file mode 100644
index 1565c57c8c..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/index.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_DETAIL_INDEX_HPP
-#define BOOST_GRAPH_DETAIL_INDEX_HPP
-
-#include <boost/graph/graph_traits.hpp>
-
-// The structures in this module are responsible for selecting and defining
-// types for accessing a builting index map. Note that the selection of these
-// types requires the Graph parameter to model either VertexIndexGraph or
-// EdgeIndexGraph.
-
-namespace boost
-{
-namespace detail
-{
- template < typename Graph > struct vertex_indexer
- {
- typedef vertex_index_t index_type;
- typedef typename property_map< Graph, vertex_index_t >::type map_type;
- typedef typename property_map< Graph, vertex_index_t >::const_type
- const_map_type;
- typedef typename property_traits< map_type >::value_type value_type;
- typedef typename graph_traits< Graph >::vertex_descriptor key_type;
-
- static const_map_type index_map(const Graph& g)
- {
- return get(vertex_index, g);
- }
-
- static map_type index_map(Graph& g) { return get(vertex_index, g); }
-
- static value_type index(key_type k, const Graph& g)
- {
- return get(vertex_index, g, k);
- }
- };
-
- template < typename Graph > struct edge_indexer
- {
- typedef edge_index_t index_type;
- typedef typename property_map< Graph, edge_index_t >::type map_type;
- typedef typename property_map< Graph, edge_index_t >::const_type
- const_map_type;
- typedef typename property_traits< map_type >::value_type value_type;
- typedef typename graph_traits< Graph >::edge_descriptor key_type;
-
- static const_map_type index_map(const Graph& g)
- {
- return get(edge_index, g);
- }
-
- static map_type index_map(Graph& g) { return get(edge_index, g); }
-
- static value_type index(key_type k, const Graph& g)
- {
- return get(edge_index, g, k);
- }
- };
-
- // NOTE: The Graph parameter MUST be a model of VertexIndexGraph or
- // VertexEdgeGraph - whichever type Key is selecting.
- template < typename Graph, typename Key > struct choose_indexer
- {
- typedef typename mpl::if_<
- is_same< Key, typename graph_traits< Graph >::vertex_descriptor >,
- vertex_indexer< Graph >, edge_indexer< Graph > >::type indexer_type;
- typedef typename indexer_type::index_type index_type;
- };
-}
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/labeled_graph_traits.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/labeled_graph_traits.hpp
deleted file mode 100644
index b6600dbb02..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/labeled_graph_traits.hpp
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright (C) 2009 Andrew Sutton
-
-// Use, modification and distribution is subject to 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_LABELED_GRAPH_TRAITS_HPP
-#define BOOST_GRAPH_LABELED_GRAPH_TRAITS_HPP
-
-#include <boost/graph/graph_mutability_traits.hpp>
-
-namespace boost
-{
-
-// Extend the graph mutability traits (and metafunctions) to include options
-// for labeled graphs.
-
-// NOTE: the label_vertex tag denotes the fact that you can basically assign
-// arbitrary labels to vertices without modifying the actual graph.
-
-// TODO: We might also overlay the uniqueness/multiplicity of labels in this
-// hierarchy also. For now, we just assumed that labels are unique.
-
-struct label_vertex_tag
-{
-};
-struct labeled_add_vertex_tag : virtual label_vertex_tag
-{
-};
-struct labeled_add_vertex_property_tag : virtual labeled_add_vertex_tag
-{
-};
-struct labeled_remove_vertex_tag
-{
-};
-struct labeled_add_edge_tag : virtual label_vertex_tag
-{
-};
-struct labeled_add_edge_property_tag : virtual labeled_add_edge_tag
-{
-};
-struct labeled_remove_edge_tag
-{
-};
-
-struct labeled_mutable_vertex_graph_tag : virtual labeled_add_vertex_tag,
- virtual labeled_remove_vertex_tag
-{
-};
-struct labeled_mutable_vertex_property_graph_tag
-: virtual labeled_add_vertex_property_tag,
- virtual labeled_remove_vertex_tag
-{
-};
-struct labeled_mutable_edge_graph_tag : virtual labeled_add_edge_tag,
- virtual labeled_remove_edge_tag
-{
-};
-struct labeled_mutable_edge_property_graph_tag
-: virtual labeled_add_edge_property_tag,
- virtual labeled_remove_edge_tag
-{
-};
-
-struct labeled_graph_tag : virtual label_vertex_tag
-{
-};
-struct labeled_mutable_graph_tag : virtual labeled_mutable_vertex_graph_tag,
- virtual labeled_mutable_edge_graph_tag
-{
-};
-struct labeled_mutable_property_graph_tag
-: virtual labeled_mutable_vertex_property_graph_tag,
- virtual labeled_mutable_edge_property_graph_tag
-{
-};
-struct labeled_add_only_property_graph_tag
-: virtual labeled_add_vertex_property_tag,
- virtual labeled_mutable_edge_property_graph_tag
-{
-};
-
-// Metafunctions
-
-template < typename Graph >
-struct graph_has_add_vertex_by_label
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_add_vertex_tag >::value >
-{
-};
-
-template < typename Graph >
-struct graph_has_add_vertex_by_label_with_property
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_add_vertex_property_tag >::value >
-{
-};
-
-template < typename Graph >
-struct graph_has_remove_vertex_by_label
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_remove_vertex_tag >::value >
-{
-};
-
-template < typename Graph >
-struct graph_has_add_edge_by_label
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_add_edge_tag >::value >
-{
-};
-
-template < typename Graph >
-struct graph_has_add_edge_by_label_with_property
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_add_edge_property_tag >::value >
-{
-};
-
-template < typename Graph >
-struct graph_has_remove_edge_by_label
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_remove_edge_tag >::value >
-{
-};
-
-template < typename Graph >
-struct is_labeled_mutable_vertex_graph
-: mpl::and_< graph_has_add_vertex_by_label< Graph >,
- graph_has_remove_vertex_by_label< Graph > >
-{
-};
-
-template < typename Graph >
-struct is_labeled_mutable_vertex_property_graph
-: mpl::and_< graph_has_add_vertex_by_label< Graph >,
- graph_has_remove_vertex_by_label< Graph > >
-{
-};
-
-template < typename Graph >
-struct is_labeled_mutable_edge_graph
-: mpl::and_< graph_has_add_edge_by_label< Graph >,
- graph_has_remove_edge_by_label< Graph > >
-{
-};
-
-template < typename Graph >
-struct is_labeled_mutable_edge_property_graph
-: mpl::and_< graph_has_add_edge_by_label< Graph >,
- graph_has_remove_edge_by_label< Graph > >
-{
-};
-
-template < typename Graph >
-struct is_labeled_mutable_graph
-: mpl::and_< is_labeled_mutable_vertex_graph< Graph >,
- is_labeled_mutable_edge_graph< Graph > >
-{
-};
-
-template < typename Graph >
-struct is_labeled_mutable_property_graph
-: mpl::and_< is_labeled_mutable_vertex_property_graph< Graph >,
- is_labeled_mutable_edge_property_graph< Graph > >
-{
-};
-
-template < typename Graph >
-struct is_labeled_add_only_property_graph
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- labeled_add_only_property_graph_tag >::value >
-{
-};
-
-template < typename Graph >
-struct is_labeled_graph
-: mpl::bool_<
- is_convertible< typename graph_mutability_traits< Graph >::category,
- label_vertex_tag >::value >
-{
-};
-
-template < typename > struct graph_mutability_traits;
-
-namespace graph_detail
-{
- // The determine mutability metafunction computes a labeled mutability tag
- // based on the mutability of the given graph type. This is used by the
- // graph_mutability_traits specialization below.
- template < typename Graph > struct determine_mutability
- {
- typedef typename mpl::if_< is_add_only_property_graph< Graph >,
- labeled_add_only_property_graph_tag,
- typename mpl::if_< is_mutable_property_graph< Graph >,
- labeled_mutable_property_graph_tag,
- typename mpl::if_< is_mutable_graph< Graph >,
- labeled_mutable_graph_tag,
- typename mpl::if_< is_mutable_edge_graph< Graph >,
- labeled_graph_tag,
- typename graph_mutability_traits< Graph >::category >::
- type >::type >::type >::type type;
- };
-} // namespace graph_detail
-
-#define LABELED_GRAPH_PARAMS typename G, typename L, typename S
-#define LABELED_GRAPH labeled_graph< G, L, S >
-
-// Specialize mutability traits for the labeled graph.
-// This specialization depends on the mutability of the underlying graph type.
-// If the underlying graph is fully mutable, this is also fully mutable.
-// Otherwise, it's different.
-template < LABELED_GRAPH_PARAMS >
-struct graph_mutability_traits< LABELED_GRAPH >
-{
- typedef typename graph_detail::determine_mutability<
- typename LABELED_GRAPH::graph_type >::type category;
-};
-
-#undef LABELED_GRAPH_PARAMS
-#undef LABELED_GRAPH
-
-} // namespace boost
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/list_base.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/list_base.hpp
deleted file mode 100644
index bd1fc17119..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/list_base.hpp
+++ /dev/null
@@ -1,206 +0,0 @@
-//=======================================================================
-// Copyright 2002 Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_LIST_BASE_HPP
-#define BOOST_LIST_BASE_HPP
-
-#include <boost/iterator_adaptors.hpp>
-
-// Perhaps this should go through formal review, and move to <boost/>.
-
-/*
- An alternate interface idea:
- Extend the std::list functionality by creating remove/insert
- functions that do not require the container object!
- */
-
-namespace boost
-{
-namespace detail
-{
-
- //=========================================================================
- // Linked-List Generic Implementation Functions
-
- template < class Node, class Next >
- inline Node slist_insert_after(Node pos, Node x, Next next)
- {
- next(x) = next(pos);
- next(pos) = x;
- return x;
- }
-
- // return next(pos) or next(next(pos)) ?
- template < class Node, class Next >
- inline Node slist_remove_after(Node pos, Next next)
- {
- Node n = next(pos);
- next(pos) = next(n);
- return n;
- }
-
- template < class Node, class Next >
- inline Node slist_remove_range(Node before_first, Node last, Next next)
- {
- next(before_first) = last;
- return last;
- }
-
- template < class Node, class Next >
- inline Node slist_previous(Node head, Node x, Node empty, Next next)
- {
- while (head != empty && next(head) != x)
- head = next(head);
- return head;
- }
-
- template < class Node, class Next >
- inline void slist_splice_after(
- Node pos, Node before_first, Node before_last, Next next)
- {
- if (pos != before_first && pos != before_last)
- {
- Node first = next(before_first);
- Node after = next(pos);
- next(before_first) = next(before_last);
- next(pos) = first;
- next(before_last) = after;
- }
- }
-
- template < class Node, class Next >
- inline Node slist_reverse(Node node, Node empty, Next next)
- {
- Node result = node;
- node = next(node);
- next(result) = empty;
- while (node)
- {
- Node next = next(node);
- next(node) = result;
- result = node;
- node = next;
- }
- return result;
- }
-
- template < class Node, class Next >
- inline std::size_t slist_size(Node head, Node empty, Next next)
- {
- std::size_t s = 0;
- for (; head != empty; head = next(head))
- ++s;
- return s;
- }
-
- template < class Next, class Data > class slist_iterator_policies
- {
- public:
- explicit slist_iterator_policies(const Next& n, const Data& d)
- : m_next(n), m_data(d)
- {
- }
-
- template < class Reference, class Node >
- Reference dereference(type< Reference >, const Node& x) const
- {
- return m_data(x);
- }
-
- template < class Node > void increment(Node& x) const { x = m_next(x); }
-
- template < class Node > bool equal(Node& x, Node& y) const
- {
- return x == y;
- }
-
- protected:
- Next m_next;
- Data m_data;
- };
-
- //===========================================================================
- // Doubly-Linked List Generic Implementation Functions
-
- template < class Node, class Next, class Prev >
- inline void dlist_insert_before(Node pos, Node x, Next next, Prev prev)
- {
- next(x) = pos;
- prev(x) = prev(pos);
- next(prev(pos)) = x;
- prev(pos) = x;
- }
-
- template < class Node, class Next, class Prev >
- void dlist_remove(Node pos, Next next, Prev prev)
- {
- Node next_node = next(pos);
- Node prev_node = prev(pos);
- next(prev_node) = next_node;
- prev(next_node) = prev_node;
- }
-
- // This deletes every node in the list except the
- // sentinel node.
- template < class Node, class Delete >
- inline void dlist_clear(Node sentinel, Delete del)
- {
- Node i, tmp;
- i = next(sentinel);
- while (i != sentinel)
- {
- tmp = i;
- i = next(i);
- del(tmp);
- }
- }
-
- template < class Node > inline bool dlist_empty(Node dummy)
- {
- return next(dummy) == dummy;
- }
-
- template < class Node, class Next, class Prev >
- void dlist_transfer(Node pos, Node first, Node last, Next next, Prev prev)
- {
- if (pos != last)
- {
- // Remove [first,last) from its old position
- next(prev(last)) = pos;
- next(prev(first)) = last;
- next(prev(pos)) = first;
-
- // Splice [first,last) into its new position
- Node tmp = prev(pos);
- prev(pos) = prev(last);
- prev(last) = prev(first);
- prev(first) = tmp;
- }
- }
-
- template < class Next, class Prev, class Data >
- class dlist_iterator_policies : public slist_iterator_policies< Next, Data >
- {
- typedef slist_iterator_policies< Next, Data > Base;
-
- public:
- template < class Node > void decrement(Node& x) const { x = m_prev(x); }
-
- dlist_iterator_policies(Next n, Prev p, Data d) : Base(n, d), m_prev(p)
- {
- }
-
- protected:
- Prev m_prev;
- };
-
-} // namespace detail
-} // namespace boost
-
-#endif // BOOST_LIST_BASE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/permutation.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/permutation.hpp
deleted file mode 100644
index 31ced8e79b..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/permutation.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-// (C) Copyright Jeremy Siek 2001.
-// 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_PERMUTATION_HPP
-#define BOOST_PERMUTATION_HPP
-
-#include <vector>
-#include <memory>
-#include <functional>
-#include <algorithm>
-#include <boost/graph/detail/shadow_iterator.hpp>
-
-namespace boost
-{
-
-template < class Iter1, class Iter2 >
-void permute_serial(Iter1 permuter, Iter1 last, Iter2 result)
-{
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- typedef std::ptrdiff_t D :
-#else
- typedef typename std::iterator_traits< Iter1 >::difference_type D;
-#endif
-
- D n
- = 0;
- while (permuter != last)
- {
- std::swap(result[n], result[*permuter]);
- ++n;
- ++permuter;
- }
-}
-
-template < class InIter, class RandIterP, class RandIterR >
-void permute_copy(InIter first, InIter last, RandIterP p, RandIterR result)
-{
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- typedef std::ptrdiff_t i = 0;
-#else
- typename std::iterator_traits< RandIterP >::difference_type i = 0;
-#endif
- for (; first != last; ++first, ++i)
- result[p[i]] = *first;
-}
-
-namespace detail
-{
-
- template < class RandIter, class RandIterPerm, class D, class T >
- void permute_helper(RandIter first, RandIter last, RandIterPerm p, D, T)
- {
- D i = 0, pi, n = last - first, cycle_start;
- T tmp;
- std::vector< int > visited(n, false);
-
- while (i != n)
- { // continue until all elements have been processed
- cycle_start = i;
- tmp = first[i];
- do
- { // walk around a cycle
- pi = p[i];
- visited[pi] = true;
- std::swap(tmp, first[pi]);
- i = pi;
- } while (i != cycle_start);
-
- // find the next cycle
- for (i = 0; i < n; ++i)
- if (visited[i] == false)
- break;
- }
- }
-
-} // namespace detail
-
-template < class RandIter, class RandIterPerm >
-void permute(RandIter first, RandIter last, RandIterPerm p)
-{
- detail::permute_helper(first, last, p, last - first, *first);
-}
-
-// Knuth 1.3.3, Vol. 1 p 176
-// modified for zero-based arrays
-// time complexity?
-//
-// WARNING: T must be a signed integer!
-template < class PermIter > void invert_permutation(PermIter X, PermIter Xend)
-{
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- typedef std::ptrdiff_t T :
-#else
- typedef typename std::iterator_traits< PermIter >::value_type T;
-#endif
- T n
- = Xend - X;
- T m = n;
- T j = -1;
-
- while (m > 0)
- {
- T i = X[m - 1] + 1;
- if (i > 0)
- {
- do
- {
- X[m - 1] = j - 1;
- j = -m;
- m = i;
- i = X[m - 1] + 1;
- } while (i > 0);
- i = j;
- }
- X[m - 1] = -i - 1;
- --m;
- }
-}
-
-// Takes a "normal" permutation array (and its inverse), and turns it
-// into a BLAS-style permutation array (which can be thought of as a
-// serialized permutation).
-template < class Iter1, class Iter2, class Iter3 >
-inline void serialize_permutation(Iter1 q, Iter1 q_end, Iter2 q_inv, Iter3 p)
-{
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- typedef std::ptrdiff_t P1;
- typedef std::ptrdiff_t P2;
- typedef std::ptrdiff_t D;
-#else
- typedef typename std::iterator_traits< Iter1 >::value_type P1;
- typedef typename std::iterator_traits< Iter2 >::value_type P2;
- typedef typename std::iterator_traits< Iter1 >::difference_type D;
-#endif
- D n = q_end - q;
- for (D i = 0; i < n; ++i)
- {
- P1 qi = q[i];
- P2 qii = q_inv[i];
- *p++ = qii;
- std::swap(q[i], q[qii]);
- std::swap(q_inv[i], q_inv[qi]);
- }
-}
-
-// Not used anymore, leaving it here for future reference.
-template < typename Iter, typename Compare >
-void merge_sort(Iter first, Iter last, Compare cmp)
-{
- if (first + 1 < last)
- {
- Iter mid = first + (last - first) / 2;
- merge_sort(first, mid, cmp);
- merge_sort(mid, last, cmp);
- std::inplace_merge(first, mid, last, cmp);
- }
-}
-
-// time: N log N + 3N + ?
-// space: 2N
-template < class Iter, class IterP, class Cmp, class Alloc >
-inline void sortp(Iter first, Iter last, IterP p, Cmp cmp, Alloc alloc)
-{
- typedef typename std::iterator_traits< IterP >::value_type P;
- typedef typename std::iterator_traits< IterP >::difference_type D;
- D n = last - first;
- std::vector< P, Alloc > q(n);
- for (D i = 0; i < n; ++i)
- q[i] = i;
- std::sort(make_shadow_iter(first, q.begin()),
- make_shadow_iter(last, q.end()), shadow_cmp< Cmp >(cmp));
- invert_permutation(q.begin(), q.end());
- std::copy(q.begin(), q.end(), p);
-}
-
-template < class Iter, class IterP, class Cmp >
-inline void sortp(Iter first, Iter last, IterP p, Cmp cmp)
-{
- typedef typename std::iterator_traits< IterP >::value_type P;
- sortp(first, last, p, cmp, std::allocator< P >());
-}
-
-template < class Iter, class IterP >
-inline void sortp(Iter first, Iter last, IterP p)
-{
- typedef typename std::iterator_traits< Iter >::value_type T;
- typedef typename std::iterator_traits< IterP >::value_type P;
- sortp(first, last, p, std::less< T >(), std::allocator< P >());
-}
-
-template < class Iter, class IterP, class Cmp, class Alloc >
-inline void sortv(Iter first, Iter last, IterP p, Cmp cmp, Alloc alloc)
-{
- typedef typename std::iterator_traits< IterP >::value_type P;
- typedef typename std::iterator_traits< IterP >::difference_type D;
- D n = last - first;
- std::vector< P, Alloc > q(n), q_inv(n);
- for (D i = 0; i < n; ++i)
- q_inv[i] = i;
- std::sort(make_shadow_iter(first, q_inv.begin()),
- make_shadow_iter(last, q_inv.end()), shadow_cmp< Cmp >(cmp));
- std::copy(q_inv, q_inv.end(), q.begin());
- invert_permutation(q.begin(), q.end());
- serialize_permutation(q.begin(), q.end(), q_inv.end(), p);
-}
-
-} // namespace boost
-
-#endif // BOOST_PERMUTATION_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/self_avoiding_walk.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/self_avoiding_walk.hpp
deleted file mode 100644
index 52ad1cbb92..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/self_avoiding_walk.hpp
+++ /dev/null
@@ -1,483 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_SELF_AVOIDING_WALK_HPP
-#define BOOST_SELF_AVOIDING_WALK_HPP
-
-/*
- This file defines necessary components for SAW.
-
- mesh language: (defined by myself to clearify what is what)
- A triangle in mesh is called an triangle.
- An edge in mesh is called an line.
- A vertex in mesh is called a point.
-
- A triangular mesh corresponds to a graph in which a vertex is a
- triangle and an edge(u, v) stands for triangle u and triangle v
- share an line.
-
- After this point, a vertex always refers to vertex in graph,
- therefore it is a traingle in mesh.
-
- */
-
-#include <utility>
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-
-#define SAW_SENTINAL -1
-
-namespace boost
-{
-
-template < class T1, class T2, class T3 > struct triple
-{
- T1 first;
- T2 second;
- T3 third;
- triple(const T1& a, const T2& b, const T3& c)
- : first(a), second(b), third(c)
- {
- }
- triple() : first(SAW_SENTINAL), second(SAW_SENTINAL), third(SAW_SENTINAL) {}
-};
-
-typedef triple< int, int, int > Triple;
-
-/* Define a vertex property which has a triangle inside. Triangle is
- represented by a triple. */
-struct triangle_tag
-{
- enum
- {
- num = 100
- };
-};
-typedef property< triangle_tag, Triple > triangle_property;
-
-/* Define an edge property with a line. A line is represented by a
- pair. This is not required for SAW though.
-*/
-struct line_tag
-{
- enum
- {
- num = 101
- };
-};
-template < class T >
-struct line_property : public property< line_tag, std::pair< T, T > >
-{
-};
-
-/*Precondition: Points in a Triangle are in order */
-template < class Triangle, class Line >
-inline void get_sharing(const Triangle& a, const Triangle& b, Line& l)
-{
- l.first = SAW_SENTINAL;
- l.second = SAW_SENTINAL;
-
- if (a.first == b.first)
- {
- l.first = a.first;
- if (a.second == b.second || a.second == b.third)
- l.second = a.second;
- else if (a.third == b.second || a.third == b.third)
- l.second = a.third;
- }
- else if (a.first == b.second)
- {
- l.first = a.first;
- if (a.second == b.third)
- l.second = a.second;
- else if (a.third == b.third)
- l.second = a.third;
- }
- else if (a.first == b.third)
- {
- l.first = a.first;
- }
- else if (a.second == b.first)
- {
- l.first = a.second;
- if (a.third == b.second || a.third == b.third)
- l.second = a.third;
- }
- else if (a.second == b.second)
- {
- l.first = a.second;
- if (a.third == b.third)
- l.second = a.third;
- }
- else if (a.second == b.third)
- {
- l.first = a.second;
- }
- else if (a.third == b.first || a.third == b.second || a.third == b.third)
- l.first = a.third;
-
- /*Make it in order*/
- if (l.first > l.second)
- {
- typename Line::first_type i = l.first;
- l.first = l.second;
- l.second = i;
- }
-}
-
-template < class TriangleDecorator, class Vertex, class Line >
-struct get_vertex_sharing
-{
- typedef std::pair< Vertex, Line > Pair;
- get_vertex_sharing(const TriangleDecorator& _td) : td(_td) {}
- inline Line operator()(const Vertex& u, const Vertex& v) const
- {
- Line l;
- get_sharing(td[u], td[v], l);
- return l;
- }
- inline Line operator()(const Pair& u, const Vertex& v) const
- {
- Line l;
- get_sharing(td[u.first], td[v], l);
- return l;
- }
- inline Line operator()(const Pair& u, const Pair& v) const
- {
- Line l;
- get_sharing(td[u.first], td[v.first], l);
- return l;
- }
- TriangleDecorator td;
-};
-
-/* HList has to be a handle of data holder so that pass-by-value is
- * in right logic.
- *
- * The element of HList is a pair of vertex and line. (remember a
- * line is a pair of two ints.). That indicates the walk w from
- * current vertex is across line. (If the first of line is -1, it is
- * a point though.
- */
-template < class TriangleDecorator, class HList, class IteratorD >
-class SAW_visitor : public bfs_visitor<>, public dfs_visitor<>
-{
- typedef typename boost::property_traits< IteratorD >::value_type iter;
- /*use boost shared_ptr*/
- typedef typename HList::element_type::value_type::second_type Line;
-
-public:
- typedef tree_edge_tag category;
-
- inline SAW_visitor(TriangleDecorator _td, HList _hlist, IteratorD ia)
- : td(_td), hlist(_hlist), iter_d(ia)
- {
- }
-
- template < class Vertex, class Graph >
- inline void start_vertex(Vertex v, Graph&)
- {
- Line l1;
- l1.first = SAW_SENTINAL;
- l1.second = SAW_SENTINAL;
- hlist->push_front(std::make_pair(v, l1));
- iter_d[v] = hlist->begin();
- }
-
- /*Several symbols:
- w(i): i-th triangle in walk w
- w(i) |- w(i+1): w enter w(i+1) from w(i) over a line
- w(i) ~> w(i+1): w enter w(i+1) from w(i) over a point
- w(i) -> w(i+1): w enter w(i+1) from w(i)
- w(i) ^ w(i+1): the line or point w go over from w(i) to w(i+1)
- */
- template < class Edge, class Graph > bool tree_edge(Edge e, Graph& G)
- {
- using std::make_pair;
- typedef typename boost::graph_traits< Graph >::vertex_descriptor Vertex;
- Vertex tau = target(e, G);
- Vertex i = source(e, G);
-
- get_vertex_sharing< TriangleDecorator, Vertex, Line > get_sharing_line(
- td);
-
- Line tau_i = get_sharing_line(tau, i);
-
- iter w_end = hlist->end();
-
- iter w_i = iter_d[i];
-
- iter w_i_m_1 = w_i;
- iter w_i_p_1 = w_i;
-
- /*----------------------------------------------------------
- * true false
- *==========================================================
- *a w(i-1) |- w(i) w(i-1) ~> w(i) or w(i-1) is null
- *----------------------------------------------------------
- *b w(i) |- w(i+1) w(i) ~> w(i+1) or no w(i+1) yet
- *----------------------------------------------------------
- */
-
- bool a = false, b = false;
-
- --w_i_m_1;
- ++w_i_p_1;
- b = (w_i->second.first != SAW_SENTINAL);
-
- if (w_i_m_1 != w_end)
- {
- a = (w_i_m_1->second.first != SAW_SENTINAL);
- }
-
- if (a)
- {
-
- if (b)
- {
- /*Case 1:
-
- w(i-1) |- w(i) |- w(i+1)
- */
- Line l1 = get_sharing_line(*w_i_m_1, tau);
-
- iter w_i_m_2 = w_i_m_1;
- --w_i_m_2;
-
- bool c = true;
-
- if (w_i_m_2 != w_end)
- {
- c = w_i_m_2->second != l1;
- }
-
- if (c)
- { /* w(i-1) ^ tau != w(i-2) ^ w(i-1) */
- /*extension: w(i-1) -> tau |- w(i) */
- w_i_m_1->second = l1;
- /*insert(pos, const T&) is to insert before pos*/
- iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
- }
- else
- { /* w(i-1) ^ tau == w(i-2) ^ w(i-1) */
- /*must be w(i-2) ~> w(i-1) */
-
- bool d = true;
- // need to handle the case when w_i_p_1 is null
- Line l3 = get_sharing_line(*w_i_p_1, tau);
- if (w_i_p_1 != w_end)
- d = w_i_p_1->second != l3;
- if (d)
- { /* w(i+1) ^ tau != w(i+1) ^ w(i+2) */
- /*extension: w(i) |- tau -> w(i+1) */
- w_i->second = tau_i;
- iter_d[tau]
- = hlist->insert(w_i_p_1, make_pair(tau, l3));
- }
- else
- { /* w(i+1) ^ tau == w(i+1) ^ w(i+2) */
- /*must be w(1+1) ~> w(i+2) */
- Line l5 = get_sharing_line(*w_i_m_1, *w_i_p_1);
- if (l5 != w_i_p_1->second)
- { /* w(i-1) ^ w(i+1) != w(i+1) ^ w(i+2) */
- /*extension: w(i-2) -> tau |- w(i) |- w(i-1) ->
- * w(i+1) */
- w_i_m_2->second = get_sharing_line(*w_i_m_2, tau);
- iter_d[tau]
- = hlist->insert(w_i, make_pair(tau, tau_i));
- w_i->second = w_i_m_1->second;
- w_i_m_1->second = l5;
- iter_d[w_i_m_1->first]
- = hlist->insert(w_i_p_1, *w_i_m_1);
- hlist->erase(w_i_m_1);
- }
- else
- {
- /*mesh is tetrahedral*/
- // dont know what that means.
- ;
- }
- }
- }
- }
- else
- {
- /*Case 2:
-
- w(i-1) |- w(i) ~> w(1+1)
- */
-
- if (w_i->second.second == tau_i.first
- || w_i->second.second == tau_i.second)
- { /*w(i) ^ w(i+1) < w(i) ^ tau*/
- /*extension: w(i) |- tau -> w(i+1) */
- w_i->second = tau_i;
- Line l1 = get_sharing_line(*w_i_p_1, tau);
- iter_d[tau] = hlist->insert(w_i_p_1, make_pair(tau, l1));
- }
- else
- { /*w(i) ^ w(i+1) !< w(i) ^ tau*/
- Line l1 = get_sharing_line(*w_i_m_1, tau);
- bool c = true;
- iter w_i_m_2 = w_i_m_1;
- --w_i_m_2;
- if (w_i_m_2 != w_end)
- c = l1 != w_i_m_2->second;
- if (c)
- { /*w(i-1) ^ tau != w(i-2) ^ w(i-1)*/
- /*extension: w(i-1) -> tau |- w(i)*/
- w_i_m_1->second = l1;
- iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
- }
- else
- { /*w(i-1) ^ tau == w(i-2) ^ w(i-1)*/
- /*must be w(i-2)~>w(i-1)*/
- /*extension: w(i-2) -> tau |- w(i) |- w(i-1) -> w(i+1)*/
- w_i_m_2->second = get_sharing_line(*w_i_m_2, tau);
- iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
- w_i->second = w_i_m_1->second;
- w_i_m_1->second = get_sharing_line(*w_i_m_1, *w_i_p_1);
- iter_d[w_i_m_1->first]
- = hlist->insert(w_i_p_1, *w_i_m_1);
- hlist->erase(w_i_m_1);
- }
- }
- }
- }
- else
- {
-
- if (b)
- {
- /*Case 3:
-
- w(i-1) ~> w(i) |- w(i+1)
- */
- bool c = false;
- if (w_i_m_1 != w_end)
- c = (w_i_m_1->second.second == tau_i.first)
- || (w_i_m_1->second.second == tau_i.second);
-
- if (c)
- { /*w(i-1) ^ w(i) < w(i) ^ tau*/
- /* extension: w(i-1) -> tau |- w(i) */
- if (w_i_m_1 != w_end)
- w_i_m_1->second = get_sharing_line(*w_i_m_1, tau);
- iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
- }
- else
- {
- bool d = true;
- Line l1;
- l1.first = SAW_SENTINAL;
- l1.second = SAW_SENTINAL;
- if (w_i_p_1 != w_end)
- {
- l1 = get_sharing_line(*w_i_p_1, tau);
- d = l1 != w_i_p_1->second;
- }
- if (d)
- { /*w(i+1) ^ tau != w(i+1) ^ w(i+2)*/
- /*extension: w(i) |- tau -> w(i+1) */
- w_i->second = tau_i;
- iter_d[tau]
- = hlist->insert(w_i_p_1, make_pair(tau, l1));
- }
- else
- {
- /*must be w(i+1) ~> w(i+2)*/
- /*extension: w(i-1) -> w(i+1) |- w(i) |- tau -> w(i+2)
- */
- iter w_i_p_2 = w_i_p_1;
- ++w_i_p_2;
-
- w_i_p_1->second = w_i->second;
- iter_d[i] = hlist->insert(w_i_p_2, make_pair(i, tau_i));
- hlist->erase(w_i);
- Line l2 = get_sharing_line(*w_i_p_2, tau);
- iter_d[tau]
- = hlist->insert(w_i_p_2, make_pair(tau, l2));
- }
- }
- }
- else
- {
- /*Case 4:
-
- w(i-1) ~> w(i) ~> w(i+1)
-
- */
- bool c = false;
- if (w_i_m_1 != w_end)
- {
- c = (w_i_m_1->second.second == tau_i.first)
- || (w_i_m_1->second.second == tau_i.second);
- }
- if (c)
- { /*w(i-1) ^ w(i) < w(i) ^ tau */
- /*extension: w(i-1) -> tau |- w(i) */
- if (w_i_m_1 != w_end)
- w_i_m_1->second = get_sharing_line(*w_i_m_1, tau);
- iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
- }
- else
- {
- /*extension: w(i) |- tau -> w(i+1) */
- w_i->second = tau_i;
- Line l1;
- l1.first = SAW_SENTINAL;
- l1.second = SAW_SENTINAL;
- if (w_i_p_1 != w_end)
- l1 = get_sharing_line(*w_i_p_1, tau);
- iter_d[tau] = hlist->insert(w_i_p_1, make_pair(tau, l1));
- }
- }
- }
-
- return true;
- }
-
-protected:
- TriangleDecorator td; /*a decorator for vertex*/
- HList hlist;
- /*This must be a handle of list to record the SAW
- The element type of the list is pair<Vertex, Line>
- */
-
- IteratorD iter_d;
- /*Problem statement: Need a fast access to w for triangle i.
- *Possible solution: mantain an array to record.
- iter_d[i] will return an iterator
- which points to w(i), where i is a vertex
- representing triangle i.
- */
-};
-
-template < class Triangle, class HList, class Iterator >
-inline SAW_visitor< Triangle, HList, Iterator > visit_SAW(
- Triangle t, HList hl, Iterator i)
-{
- return SAW_visitor< Triangle, HList, Iterator >(t, hl, i);
-}
-
-template < class Tri, class HList, class Iter >
-inline SAW_visitor< random_access_iterator_property_map< Tri*, Tri, Tri& >,
- HList, random_access_iterator_property_map< Iter*, Iter, Iter& > >
-visit_SAW_ptr(Tri* t, HList hl, Iter* i)
-{
- typedef random_access_iterator_property_map< Tri*, Tri, Tri& > TriD;
- typedef random_access_iterator_property_map< Iter*, Iter, Iter& > IterD;
- return SAW_visitor< TriD, HList, IterD >(t, hl, i);
-}
-
-// should also have combo's of pointers, and also const :(
-
-}
-
-#endif /*BOOST_SAW_H*/
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/shadow_iterator.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/shadow_iterator.hpp
deleted file mode 100644
index 060d13fcc9..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/shadow_iterator.hpp
+++ /dev/null
@@ -1,183 +0,0 @@
-// (C) Copyright Jeremy Siek 2001.
-// 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_SHADOW_ITERATOR_HPP
-#define BOOST_SHADOW_ITERATOR_HPP
-
-#include <boost/iterator_adaptors.hpp>
-#include <boost/operators.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < class A, class B, class D >
- class shadow_proxy : boost::operators< shadow_proxy< A, B, D > >
- {
- typedef shadow_proxy self;
-
- public:
- inline shadow_proxy(A aa, B bb) : a(aa), b(bb) {}
- inline shadow_proxy(const self& x) : a(x.a), b(x.b) {}
- template < class Self > inline shadow_proxy(Self x) : a(x.a), b(x.b) {}
- inline self& operator=(const self& x)
- {
- a = x.a;
- b = x.b;
- return *this;
- }
- inline self& operator++()
- {
- ++a;
- return *this;
- }
- inline self& operator--()
- {
- --a;
- return *this;
- }
- inline self& operator+=(const self& x)
- {
- a += x.a;
- return *this;
- }
- inline self& operator-=(const self& x)
- {
- a -= x.a;
- return *this;
- }
- inline self& operator*=(const self& x)
- {
- a *= x.a;
- return *this;
- }
- inline self& operator/=(const self& x)
- {
- a /= x.a;
- return *this;
- }
- inline self& operator%=(const self& x) { return *this; } // JGS
- inline self& operator&=(const self& x) { return *this; } // JGS
- inline self& operator|=(const self& x) { return *this; } // JGS
- inline self& operator^=(const self& x) { return *this; } // JGS
- inline friend D operator-(const self& x, const self& y)
- {
- return x.a - y.a;
- }
- inline bool operator==(const self& x) const { return a == x.a; }
- inline bool operator<(const self& x) const { return a < x.a; }
- // protected:
- A a;
- B b;
- };
-
- struct shadow_iterator_policies
- {
- template < typename iter_pair > void initialize(const iter_pair&) {}
-
- template < typename Iter >
- typename Iter::reference dereference(const Iter& i) const
- {
- typedef typename Iter::reference R;
- return R(*i.base().first, *i.base().second);
- }
- template < typename Iter >
- bool equal(const Iter& p1, const Iter& p2) const
- {
- return p1.base().first == p2.base().first;
- }
- template < typename Iter > void increment(Iter& i)
- {
- ++i.base().first;
- ++i.base().second;
- }
-
- template < typename Iter > void decrement(Iter& i)
- {
- --i.base().first;
- --i.base().second;
- }
-
- template < typename Iter > bool less(const Iter& x, const Iter& y) const
- {
- return x.base().first < y.base().first;
- }
- template < typename Iter >
- typename Iter::difference_type distance(
- const Iter& x, const Iter& y) const
- {
- return y.base().first - x.base().first;
- }
- template < typename D, typename Iter > void advance(Iter& p, D n)
- {
- p.base().first += n;
- p.base().second += n;
- }
- };
-
-} // namespace detail
-
-template < typename IterA, typename IterB > struct shadow_iterator_generator
-{
-
- // To use the iterator_adaptor we can't derive from
- // random_access_iterator because we don't have a real reference.
- // However, we want the STL algorithms to treat the shadow
- // iterator like a random access iterator.
- struct shadow_iterator_tag : public std::input_iterator_tag
- {
- operator std::random_access_iterator_tag()
- {
- return std::random_access_iterator_tag();
- };
- };
- typedef typename std::iterator_traits< IterA >::value_type Aval;
- typedef typename std::iterator_traits< IterB >::value_type Bval;
- typedef typename std::iterator_traits< IterA >::reference Aref;
- typedef typename std::iterator_traits< IterB >::reference Bref;
- typedef typename std::iterator_traits< IterA >::difference_type D;
- typedef detail::shadow_proxy< Aval, Bval, Aval > V;
- typedef detail::shadow_proxy< Aref, Bref, Aval > R;
- typedef iterator_adaptor< std::pair< IterA, IterB >,
- detail::shadow_iterator_policies, V, R, V*, shadow_iterator_tag, D >
- type;
-};
-
-// short cut for creating a shadow iterator
-template < class IterA, class IterB >
-inline typename shadow_iterator_generator< IterA, IterB >::type
-make_shadow_iter(IterA a, IterB b)
-{
- typedef typename shadow_iterator_generator< IterA, IterB >::type Iter;
- return Iter(std::make_pair(a, b));
-}
-
-template < class Cmp > struct shadow_cmp
-{
- inline shadow_cmp(const Cmp& c) : cmp(c) {}
- template < class ShadowProxy1, class ShadowProxy2 >
- inline bool operator()(const ShadowProxy1& x, const ShadowProxy2& y) const
- {
- return cmp(x.a, y.a);
- }
- Cmp cmp;
-};
-
-} // namespace boost
-
-namespace std
-{
-template < class A1, class B1, class D1, class A2, class B2, class D2 >
-void swap(boost::detail::shadow_proxy< A1&, B1&, D1 > x,
- boost::detail::shadow_proxy< A2&, B2&, D2 > y)
-{
- std::swap(x.a, y.a);
- std::swap(x.b, y.b);
-}
-}
-
-#endif // BOOST_SHADOW_ITERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/detail/sparse_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/detail/sparse_ordering.hpp
deleted file mode 100644
index b7bf470db0..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/detail/sparse_ordering.hpp
+++ /dev/null
@@ -1,210 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2004, 2005 Trustees of Indiana University
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
-// Doug Gregor, D. Kevin McGrath
-//
-// 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_SPARSE_ORDERING_HPP
-#define BOOST_GRAPH_DETAIL_SPARSE_ORDERING_HPP
-
-#include <boost/config.hpp>
-#include <vector>
-#include <queue>
-#include <boost/pending/queue.hpp>
-#include <boost/pending/mutable_queue.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/indirect_cmp.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/depth_first_search.hpp>
-
-namespace boost
-{
-
-namespace sparse
-{
-
- // rcm_queue
- //
- // This is a custom queue type used in the
- // *_ordering algorithms.
- // In addition to the normal queue operations, the
- // rcm_queue provides:
- //
- // int eccentricity() const;
- // value_type spouse() const;
- //
-
- // yes, it's a bad name...but it works, so use it
- template < class Vertex, class DegreeMap,
- class Container = std::deque< Vertex > >
- class rcm_queue : public std::queue< Vertex, Container >
- {
- typedef std::queue< Vertex > base;
-
- public:
- typedef typename base::value_type value_type;
- typedef typename base::size_type size_type;
-
- /* SGI queue has not had a contructor queue(const Container&) */
- inline rcm_queue(DegreeMap deg)
- : _size(0), Qsize(1), eccen(-1), degree(deg)
- {
- }
-
- inline void pop()
- {
- if (!_size)
- Qsize = base::size();
-
- base::pop();
- if (_size == Qsize - 1)
- {
- _size = 0;
- ++eccen;
- }
- else
- ++_size;
- }
-
- inline value_type& front()
- {
- value_type& u = base::front();
- if (_size == 0)
- w = u;
- else if (get(degree, u) < get(degree, w))
- w = u;
- return u;
- }
-
- inline const value_type& front() const
- {
- const value_type& u = base::front();
- if (_size == 0)
- w = u;
- else if (get(degree, u) < get(degree, w))
- w = u;
- return u;
- }
-
- inline value_type& top() { return front(); }
- inline const value_type& top() const { return front(); }
-
- inline size_type size() const { return base::size(); }
-
- inline size_type eccentricity() const { return eccen; }
- inline value_type spouse() const { return w; }
-
- protected:
- size_type _size;
- size_type Qsize;
- int eccen;
- mutable value_type w;
- DegreeMap degree;
- };
-
- template < typename Tp, typename Sequence = std::deque< Tp > >
- class sparse_ordering_queue : public boost::queue< Tp, Sequence >
- {
- public:
- typedef typename Sequence::iterator iterator;
- typedef typename Sequence::reverse_iterator reverse_iterator;
- typedef queue< Tp, Sequence > base;
- typedef typename Sequence::size_type size_type;
-
- inline iterator begin() { return this->c.begin(); }
- inline reverse_iterator rbegin() { return this->c.rbegin(); }
- inline iterator end() { return this->c.end(); }
- inline reverse_iterator rend() { return this->c.rend(); }
- inline Tp& operator[](int n) { return this->c[n]; }
- inline size_type size() { return this->c.size(); }
-
- protected:
- // nothing
- };
-
-} // namespace sparse
-
-// Compute Pseudo peripheral
-//
-// To compute an approximated peripheral for a given vertex.
-// Used in <tt>king_ordering</tt> algorithm.
-//
-template < class Graph, class Vertex, class ColorMap, class DegreeMap >
-Vertex pseudo_peripheral_pair(
- Graph const& G, const Vertex& u, int& ecc, ColorMap color, DegreeMap degree)
-{
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- sparse::rcm_queue< Vertex, DegreeMap > Q(degree);
-
- typename boost::graph_traits< Graph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
- if (get(color, *ui) != Color::red())
- put(color, *ui, Color::white());
- breadth_first_visit(G, u, buffer(Q).color_map(color));
-
- ecc = Q.eccentricity();
- return Q.spouse();
-}
-
-// Find a good starting node
-//
-// This is to find a good starting node for the
-// king_ordering algorithm. "good" is in the sense
-// of the ordering generated by RCM.
-//
-template < class Graph, class Vertex, class Color, class Degree >
-Vertex find_starting_node(Graph const& G, Vertex r, Color color, Degree degree)
-{
- Vertex x, y;
- int eccen_r, eccen_x;
-
- x = pseudo_peripheral_pair(G, r, eccen_r, color, degree);
- y = pseudo_peripheral_pair(G, x, eccen_x, color, degree);
-
- while (eccen_x > eccen_r)
- {
- r = x;
- eccen_r = eccen_x;
- x = y;
- y = pseudo_peripheral_pair(G, x, eccen_x, color, degree);
- }
- return x;
-}
-
-template < typename Graph >
-class out_degree_property_map
-: public put_get_helper< typename graph_traits< Graph >::degree_size_type,
- out_degree_property_map< Graph > >
-{
-public:
- typedef typename graph_traits< Graph >::vertex_descriptor key_type;
- typedef typename graph_traits< Graph >::degree_size_type value_type;
- typedef value_type reference;
- typedef readable_property_map_tag category;
- out_degree_property_map(const Graph& g) : m_g(g) {}
- value_type operator[](const key_type& v) const
- {
- return out_degree(v, m_g);
- }
-
-private:
- const Graph& m_g;
-};
-template < typename Graph >
-inline out_degree_property_map< Graph > make_out_degree_map(const Graph& g)
-{
- return out_degree_property_map< Graph >(g);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_KING_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/dijkstra_shortest_paths_no_color_map.hpp b/contrib/restricted/boost/graph/include/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
deleted file mode 100644
index 09607c49a3..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/dijkstra_shortest_paths_no_color_map.hpp
+++ /dev/null
@@ -1,235 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2009 Trustees of Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Michael Hansen
-//
-// 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_DIJKSTRA_NO_COLOR_MAP_HPP
-#define BOOST_GRAPH_DIJKSTRA_NO_COLOR_MAP_HPP
-
-#include <boost/pending/indirect_cmp.hpp>
-#include <boost/graph/relax.hpp>
-#include <boost/graph/detail/d_ary_heap.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-#include <boost/graph/iteration_macros.hpp>
-
-namespace boost
-{
-
-// No init version
-template < typename Graph, typename DijkstraVisitor, typename PredecessorMap,
- typename DistanceMap, typename WeightMap, typename VertexIndexMap,
- typename DistanceCompare, typename DistanceWeightCombine,
- typename DistanceInfinity, typename DistanceZero >
-void dijkstra_shortest_paths_no_color_map_no_init(const Graph& graph,
- typename graph_traits< Graph >::vertex_descriptor start_vertex,
- PredecessorMap predecessor_map, DistanceMap distance_map,
- WeightMap weight_map, VertexIndexMap index_map,
- DistanceCompare distance_compare,
- DistanceWeightCombine distance_weight_combine,
- DistanceInfinity distance_infinity, DistanceZero distance_zero,
- DijkstraVisitor visitor)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename property_traits< DistanceMap >::value_type Distance;
-
- typedef indirect_cmp< DistanceMap, DistanceCompare >
- DistanceIndirectCompare;
- DistanceIndirectCompare distance_indirect_compare(
- distance_map, distance_compare);
-
- // Default - use d-ary heap (d = 4)
- typedef detail::vertex_property_map_generator< Graph, VertexIndexMap,
- std::size_t >
- IndexInHeapMapHelper;
- typedef typename IndexInHeapMapHelper::type IndexInHeapMap;
- typedef d_ary_heap_indirect< Vertex, 4, IndexInHeapMap, DistanceMap,
- DistanceCompare >
- VertexQueue;
-
- boost::scoped_array< std::size_t > index_in_heap_map_holder;
- IndexInHeapMap index_in_heap = IndexInHeapMapHelper::build(
- graph, index_map, index_in_heap_map_holder);
- VertexQueue vertex_queue(distance_map, index_in_heap, distance_compare);
-
- // Add vertex to the queue
- vertex_queue.push(start_vertex);
-
- // Starting vertex will always be the first discovered vertex
- visitor.discover_vertex(start_vertex, graph);
-
- while (!vertex_queue.empty())
- {
- Vertex min_vertex = vertex_queue.top();
- vertex_queue.pop();
-
- visitor.examine_vertex(min_vertex, graph);
-
- // Check if any other vertices can be reached
- Distance min_vertex_distance = get(distance_map, min_vertex);
-
- if (!distance_compare(min_vertex_distance, distance_infinity))
- {
- // This is the minimum vertex, so all other vertices are unreachable
- return;
- }
-
- // Examine neighbors of min_vertex
- BGL_FORALL_OUTEDGES_T(min_vertex, current_edge, graph, Graph)
- {
- visitor.examine_edge(current_edge, graph);
-
- // Check if the edge has a negative weight
- if (distance_compare(get(weight_map, current_edge), distance_zero))
- {
- boost::throw_exception(negative_edge());
- }
-
- // Extract the neighboring vertex and get its distance
- Vertex neighbor_vertex = target(current_edge, graph);
- Distance neighbor_vertex_distance
- = get(distance_map, neighbor_vertex);
- bool is_neighbor_undiscovered = !distance_compare(
- neighbor_vertex_distance, distance_infinity);
-
- // Attempt to relax the edge
- bool was_edge_relaxed
- = relax_target(current_edge, graph, weight_map, predecessor_map,
- distance_map, distance_weight_combine, distance_compare);
-
- if (was_edge_relaxed)
- {
- visitor.edge_relaxed(current_edge, graph);
- if (is_neighbor_undiscovered)
- {
- visitor.discover_vertex(neighbor_vertex, graph);
- vertex_queue.push(neighbor_vertex);
- }
- else
- {
- vertex_queue.update(neighbor_vertex);
- }
- }
- else
- {
- visitor.edge_not_relaxed(current_edge, graph);
- }
-
- } // end out edge iteration
-
- visitor.finish_vertex(min_vertex, graph);
- } // end while queue not empty
-}
-
-// Full init version
-template < typename Graph, typename DijkstraVisitor, typename PredecessorMap,
- typename DistanceMap, typename WeightMap, typename VertexIndexMap,
- typename DistanceCompare, typename DistanceWeightCombine,
- typename DistanceInfinity, typename DistanceZero >
-void dijkstra_shortest_paths_no_color_map(const Graph& graph,
- typename graph_traits< Graph >::vertex_descriptor start_vertex,
- PredecessorMap predecessor_map, DistanceMap distance_map,
- WeightMap weight_map, VertexIndexMap index_map,
- DistanceCompare distance_compare,
- DistanceWeightCombine distance_weight_combine,
- DistanceInfinity distance_infinity, DistanceZero distance_zero,
- DijkstraVisitor visitor)
-{
- // Initialize vertices
- BGL_FORALL_VERTICES_T(current_vertex, graph, Graph)
- {
- visitor.initialize_vertex(current_vertex, graph);
-
- // Default all distances to infinity
- put(distance_map, current_vertex, distance_infinity);
-
- // Default all vertex predecessors to the vertex itself
- put(predecessor_map, current_vertex, current_vertex);
- }
-
- // Set distance for start_vertex to zero
- put(distance_map, start_vertex, distance_zero);
-
- // Pass everything on to the no_init version
- dijkstra_shortest_paths_no_color_map_no_init(graph, start_vertex,
- predecessor_map, distance_map, weight_map, index_map, distance_compare,
- distance_weight_combine, distance_infinity, distance_zero, visitor);
-}
-
-namespace detail
-{
-
- // Handle defaults for PredecessorMap, DistanceCompare,
- // DistanceWeightCombine, DistanceInfinity and DistanceZero
- template < typename Graph, typename DistanceMap, typename WeightMap,
- typename VertexIndexMap, typename Params >
- inline void dijkstra_no_color_map_dispatch2(const Graph& graph,
- typename graph_traits< Graph >::vertex_descriptor start_vertex,
- DistanceMap distance_map, WeightMap weight_map,
- VertexIndexMap index_map, const Params& params)
- {
- // Default for predecessor map
- dummy_property_map predecessor_map;
-
- typedef
- typename property_traits< DistanceMap >::value_type DistanceType;
- DistanceType inf = choose_param(get_param(params, distance_inf_t()),
- (std::numeric_limits< DistanceType >::max)());
- dijkstra_shortest_paths_no_color_map(graph, start_vertex,
- choose_param(
- get_param(params, vertex_predecessor), predecessor_map),
- distance_map, weight_map, index_map,
- choose_param(get_param(params, distance_compare_t()),
- std::less< DistanceType >()),
- choose_param(get_param(params, distance_combine_t()),
- std::plus< DistanceType >()),
- inf,
- choose_param(get_param(params, distance_zero_t()), DistanceType()),
- choose_param(get_param(params, graph_visitor),
- make_dijkstra_visitor(null_visitor())));
- }
-
- template < typename Graph, typename DistanceMap, typename WeightMap,
- typename IndexMap, typename Params >
- inline void dijkstra_no_color_map_dispatch1(const Graph& graph,
- typename graph_traits< Graph >::vertex_descriptor start_vertex,
- DistanceMap distance_map, WeightMap weight_map, IndexMap index_map,
- const Params& params)
- {
- // Default for distance map
- typedef typename property_traits< WeightMap >::value_type DistanceType;
- typename std::vector< DistanceType >::size_type vertex_count
- = is_default_param(distance_map) ? num_vertices(graph) : 1;
-
- std::vector< DistanceType > default_distance_map(vertex_count);
-
- detail::dijkstra_no_color_map_dispatch2(graph, start_vertex,
- choose_param(distance_map,
- make_iterator_property_map(default_distance_map.begin(),
- index_map, default_distance_map[0])),
- weight_map, index_map, params);
- }
-} // namespace detail
-
-// Named parameter version
-template < typename Graph, typename Param, typename Tag, typename Rest >
-inline void dijkstra_shortest_paths_no_color_map(const Graph& graph,
- typename graph_traits< Graph >::vertex_descriptor start_vertex,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
- // Default for edge weight and vertex index map is to ask for them
- // from the graph. Default for the visitor is null_visitor.
- detail::dijkstra_no_color_map_dispatch1(graph, start_vertex,
- get_param(params, vertex_distance),
- choose_const_pmap(get_param(params, edge_weight), graph, edge_weight),
- choose_const_pmap(get_param(params, vertex_index), graph, vertex_index),
- params);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_DIJKSTRA_NO_COLOR_MAP_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/dimacs.hpp b/contrib/restricted/boost/graph/include/boost/graph/dimacs.hpp
deleted file mode 100644
index 584e3056b4..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/dimacs.hpp
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Alex Breuer
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_DIMACS_HPP
-#define BOOST_GRAPH_DIMACS_HPP
-
-#include <string>
-#include <sstream>
-#include <iostream>
-#include <fstream>
-#include <iterator>
-#include <exception>
-#include <vector>
-#include <queue>
-#include <boost/assert.hpp>
-
-namespace boost
-{
-namespace graph
-{
-
- class BOOST_SYMBOL_VISIBLE dimacs_exception : public std::exception
- {
- };
-
- class dimacs_basic_reader
- {
- public:
- typedef std::size_t vertices_size_type;
- typedef std::size_t edges_size_type;
- typedef double vertex_weight_type;
- typedef double edge_weight_type;
- typedef std::pair< vertices_size_type, vertices_size_type > edge_type;
- enum incr_mode
- {
- edge,
- edge_weight
- };
-
- dimacs_basic_reader(std::istream& in, bool want_weights = true)
- : inpt(in), seen_edges(0), want_weights(want_weights)
- {
- while (getline(inpt, buf) && !buf.empty() && buf[0] == 'c')
- ;
-
- if (buf[0] != 'p')
- {
- boost::throw_exception(dimacs_exception());
- }
-
- std::stringstream instr(buf);
- std::string junk;
-
- instr >> junk >> junk >> num_vertices >> num_edges;
- read_edge_weights.push(-1);
- incr(edge_weight);
- }
-
- // for a past the end iterator
- dimacs_basic_reader()
- : inpt(std::cin)
- , num_vertices(0)
- , num_edges(0)
- , seen_edges(0)
- , want_weights(false)
- {
- }
-
- edge_type edge_deref()
- {
- BOOST_ASSERT(!read_edges.empty());
- return read_edges.front();
- }
-
- inline edge_type* edge_ref()
- {
- BOOST_ASSERT(!read_edges.empty());
- return &read_edges.front();
- }
-
- inline edge_weight_type edge_weight_deref()
- {
- BOOST_ASSERT(!read_edge_weights.empty());
- return read_edge_weights.front();
- }
-
- inline dimacs_basic_reader incr(incr_mode mode)
- {
- if (mode == edge)
- {
- BOOST_ASSERT(!read_edges.empty());
- read_edges.pop();
- }
- else if (mode == edge_weight)
- {
- BOOST_ASSERT(!read_edge_weights.empty());
- read_edge_weights.pop();
- }
-
- if ((mode == edge && read_edges.empty())
- || (mode == edge_weight && read_edge_weights.empty()))
- {
-
- if (seen_edges > num_edges)
- {
- boost::throw_exception(dimacs_exception());
- }
-
- while (getline(inpt, buf) && !buf.empty() && buf[0] == 'c')
- ;
-
- if (!inpt.eof())
- {
- int source, dest, weight;
- read_edge_line((char*)buf.c_str(), source, dest, weight);
-
- seen_edges++;
- source--;
- dest--;
-
- read_edges.push(edge_type(source, dest));
- if (want_weights)
- {
- read_edge_weights.push(weight);
- }
- }
- BOOST_ASSERT(read_edges.size() < 100);
- BOOST_ASSERT(read_edge_weights.size() < 100);
- }
-
- // the 1000000 just happens to be about how many edges can be read
- // in 10s
- // if( !(seen_edges % 1000000) && !process_id( pg ) && mode ==
- // edge ) {
- // std::cout << "read " << seen_edges << " edges" <<
- // std::endl;
- // }
- return *this;
- }
-
- inline bool done_edges()
- {
- return inpt.eof() && read_edges.size() == 0;
- }
-
- inline bool done_edge_weights()
- {
- return inpt.eof() && read_edge_weights.size() == 0;
- }
-
- inline vertices_size_type n_vertices() { return num_vertices; }
-
- inline vertices_size_type processed_edges()
- {
- return seen_edges - read_edges.size();
- }
-
- inline vertices_size_type processed_edge_weights()
- {
- return seen_edges - read_edge_weights.size();
- }
-
- inline vertices_size_type n_edges() { return num_edges; }
-
- protected:
- bool read_edge_line(char* linebuf, int& from, int& to, int& weight)
- {
- char *fs = NULL, *ts = NULL, *ws = NULL;
- char* tmp = linebuf + 2;
-
- fs = tmp;
- if ('e' == linebuf[0])
- {
- while (*tmp != '\n' && *tmp != '\0')
- {
- if (*tmp == ' ')
- {
- *tmp = '\0';
- ts = ++tmp;
- break;
- }
- tmp++;
- }
- *tmp = '\0';
- if (NULL == fs || NULL == ts)
- return false;
- from = atoi(fs);
- to = atoi(ts);
- weight = 0;
- }
- else if ('a' == linebuf[0])
- {
- while (*tmp != '\n' && *tmp != '\0')
- {
- if (*tmp == ' ')
- {
- *tmp = '\0';
- ts = ++tmp;
- break;
- }
- tmp++;
- }
- while (*tmp != '\n' && *tmp != '\0')
- {
- if (*tmp == ' ')
- {
- *tmp = '\0';
- ws = ++tmp;
- break;
- }
- tmp++;
- }
- while (*tmp != '\n' && *tmp != '\0')
- tmp++;
- *tmp = '\0';
- if (fs == NULL || ts == NULL || ws == NULL)
- return false;
- from = atoi(fs);
- to = atoi(ts);
- if (want_weights)
- weight = atoi(ws);
- else
- weight = 0;
- }
- else
- {
- return false;
- }
-
- return true;
- }
-
- std::queue< edge_type > read_edges;
- std::queue< edge_weight_type > read_edge_weights;
-
- std::istream& inpt;
- std::string buf;
- vertices_size_type num_vertices, num_edges, seen_edges;
- bool want_weights;
- };
-
- template < typename T > class dimacs_edge_iterator
- {
- public:
- typedef dimacs_basic_reader::edge_type edge_type;
- typedef dimacs_basic_reader::incr_mode incr_mode;
-
- typedef std::input_iterator_tag iterator_category;
- typedef edge_type value_type;
- typedef value_type reference;
- typedef edge_type* pointer;
- typedef std::ptrdiff_t difference_type;
-
- dimacs_edge_iterator(T& reader) : reader(reader) {}
-
- inline dimacs_edge_iterator& operator++()
- {
- reader.incr(dimacs_basic_reader::edge);
- return *this;
- }
-
- inline edge_type operator*() { return reader.edge_deref(); }
-
- inline edge_type* operator->() { return reader.edge_ref(); }
-
- // don't expect this to do the right thing if you're not comparing
- // against a general past-the-end-iterator made with the default
- // constructor for dimacs_basic_reader
- inline bool operator==(dimacs_edge_iterator arg)
- {
- if (reader.n_vertices() == 0)
- {
- return arg.reader.done_edges();
- }
- else if (arg.reader.n_vertices() == 0)
- {
- return reader.done_edges();
- }
- else
- {
- return false;
- }
- return false;
- }
-
- inline bool operator!=(dimacs_edge_iterator arg)
- {
- if (reader.n_vertices() == 0)
- {
- return !arg.reader.done_edges();
- }
- else if (arg.reader.n_vertices() == 0)
- {
- return !reader.done_edges();
- }
- else
- {
- return true;
- }
- return true;
- }
-
- private:
- T& reader;
- };
-
- template < typename T > class dimacs_edge_weight_iterator
- {
- public:
- typedef dimacs_basic_reader::edge_weight_type edge_weight_type;
- typedef dimacs_basic_reader::incr_mode incr_mode;
-
- dimacs_edge_weight_iterator(T& reader) : reader(reader) {}
-
- inline dimacs_edge_weight_iterator& operator++()
- {
- reader.incr(dimacs_basic_reader::edge_weight);
- return *this;
- }
-
- inline edge_weight_type operator*()
- {
- return reader.edge_weight_deref();
- }
-
- // don't expect this to do the right thing if you're not comparing
- // against a general past-the-end-iterator made with the default
- // constructor for dimacs_basic_reader
- inline bool operator==(dimacs_edge_weight_iterator arg)
- {
- if (reader.n_vertices() == 0)
- {
- return arg.reader.done_edge_weights();
- }
- else if (arg.reader.n_vertices() == 0)
- {
- return reader.done_edge_weights();
- }
- else
- {
- return false;
- }
- return false;
- }
-
- inline bool operator!=(dimacs_edge_weight_iterator arg)
- {
- if (reader.n_vertices() == 0)
- {
- return !arg.reader.done_edge_weights();
- }
- else if (arg.reader.n_vertices() == 0)
- {
- return !reader.done_edge_weights();
- }
- else
- {
- return true;
- }
- return true;
- }
-
- private:
- T& reader;
- };
-
-}
-} // end namespace boost::graph
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/directed_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/directed_graph.hpp
deleted file mode 100644
index f40c1beb1b..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/directed_graph.hpp
+++ /dev/null
@@ -1,795 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_DIRECTED_GRAPH_HPP
-#define BOOST_GRAPH_DIRECTED_GRAPH_HPP
-
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/property.hpp>
-#include <boost/property_map/transform_value_property_map.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/mpl/if.hpp>
-
-namespace boost
-{
-struct directed_graph_tag
-{
-};
-
-/**
- * The directed_graph class template is a simplified version of the BGL
- * adjacency list. This class is provided for ease of use, but may not
- * perform as well as custom-defined adjacency list classes. Instances of
- * this template model the BidirectionalGraph, VertexIndexGraph, and
- * EdgeIndexGraph concepts. The graph is also fully mutable, supporting
- * both insertions and removals of vertices and edges.
- *
- * @note Special care must be taken when removing vertices or edges since
- * those operations can invalidate the numbering of vertices.
- */
-template < typename VertexProp = no_property, typename EdgeProp = no_property,
- typename GraphProp = no_property >
-class directed_graph
-{
-public:
- typedef GraphProp graph_property_type;
- typedef VertexProp vertex_property_type;
- typedef EdgeProp edge_property_type;
- typedef typename lookup_one_property< GraphProp, graph_bundle_t >::type
- graph_bundled;
- typedef typename lookup_one_property< VertexProp, vertex_bundle_t >::type
- vertex_bundled;
- typedef typename lookup_one_property< EdgeProp, edge_bundle_t >::type
- edge_bundled;
-
-public:
- // Embed indices into the vertex type.
- typedef property< vertex_index_t, unsigned, vertex_property_type >
- internal_vertex_property;
- typedef property< edge_index_t, unsigned, edge_property_type >
- internal_edge_property;
-
-public:
- typedef adjacency_list< listS, listS, bidirectionalS,
- internal_vertex_property, internal_edge_property, GraphProp, listS >
- graph_type;
-
-private:
- // storage selectors
- typedef typename graph_type::vertex_list_selector vertex_list_selector;
- typedef typename graph_type::edge_list_selector edge_list_selector;
- typedef typename graph_type::out_edge_list_selector out_edge_list_selector;
- typedef typename graph_type::directed_selector directed_selector;
-
-public:
- // more commonly used graph types
- typedef typename graph_type::stored_vertex stored_vertex;
- typedef typename graph_type::vertices_size_type vertices_size_type;
- typedef typename graph_type::edges_size_type edges_size_type;
- typedef typename graph_type::degree_size_type degree_size_type;
- typedef typename graph_type::vertex_descriptor vertex_descriptor;
- typedef typename graph_type::edge_descriptor edge_descriptor;
-
- // iterator types
- typedef typename graph_type::vertex_iterator vertex_iterator;
- typedef typename graph_type::edge_iterator edge_iterator;
- typedef typename graph_type::out_edge_iterator out_edge_iterator;
- typedef typename graph_type::in_edge_iterator in_edge_iterator;
- typedef typename graph_type::adjacency_iterator adjacency_iterator;
-
- // miscellaneous types
- typedef directed_graph_tag graph_tag;
- typedef typename graph_type::directed_category directed_category;
- typedef typename graph_type::edge_parallel_category edge_parallel_category;
- typedef typename graph_type::traversal_category traversal_category;
-
- typedef std::size_t vertex_index_type;
- typedef std::size_t edge_index_type;
-
- directed_graph(GraphProp const& p = GraphProp())
- : m_graph(p)
- , m_num_vertices(0)
- , m_num_edges(0)
- , m_max_vertex_index(0)
- , m_max_edge_index(0)
- {
- }
-
- directed_graph(directed_graph const& x)
- : m_graph(x.m_graph)
- , m_num_vertices(x.m_num_vertices)
- , m_num_edges(x.m_num_edges)
- , m_max_vertex_index(x.m_max_vertex_index)
- , m_max_edge_index(x.m_max_edge_index)
- {
- }
-
- directed_graph(vertices_size_type n, GraphProp const& p = GraphProp())
- : m_graph(n, p)
- , m_num_vertices(n)
- , m_num_edges(0)
- , m_max_vertex_index(n)
- , m_max_edge_index(0)
- {
- renumber_vertex_indices();
- }
-
- template < typename EdgeIterator >
- directed_graph(EdgeIterator f, EdgeIterator l, vertices_size_type n,
- edges_size_type m = 0, GraphProp const& p = GraphProp())
- : m_graph(f, l, n, m, p)
- , m_num_vertices(n)
- , m_num_edges(0)
- , m_max_vertex_index(n)
- , m_max_edge_index(0)
- {
- // Unfortunately, we have to renumber the entire graph.
- renumber_indices();
-
- // Can't always guarantee that the number of edges is actually
- // m if distance(f, l) != m (or is undefined).
- m_num_edges = m_max_edge_index = boost::num_edges(m_graph);
- }
-
- directed_graph& operator=(directed_graph const& g)
- {
- if (&g != this)
- {
- m_graph = g.m_graph;
- m_num_vertices = g.m_num_vertices;
- m_num_edges = g.m_num_edges;
- m_max_vertex_index = g.m_max_vertex_index;
- m_max_edge_index = g.m_max_edge_index;
- }
- return *this;
- }
-
- // The impl_() methods are not part of the public interface.
- graph_type& impl() { return m_graph; }
-
- graph_type const& impl() const { return m_graph; }
-
- // The following methods are not part of the public interface
- vertices_size_type num_vertices() const { return m_num_vertices; }
-
-private:
- // This helper function manages the attribution of vertex indices.
- vertex_descriptor make_index(vertex_descriptor v)
- {
- boost::put(vertex_index, m_graph, v, m_max_vertex_index);
- m_num_vertices++;
- m_max_vertex_index++;
- return v;
- }
-
-public:
- vertex_descriptor add_vertex()
- {
- return make_index(boost::add_vertex(m_graph));
- }
-
- vertex_descriptor add_vertex(vertex_property_type const& p)
- {
- return make_index(
- boost::add_vertex(internal_vertex_property(0u, p), m_graph));
- }
-
- void clear_vertex(vertex_descriptor v)
- {
- m_num_edges -= boost::degree(v, m_graph);
- boost::clear_vertex(v, m_graph);
- }
-
- void remove_vertex(vertex_descriptor v)
- {
- boost::remove_vertex(v, m_graph);
- --m_num_vertices;
- }
-
- edges_size_type num_edges() const { return m_num_edges; }
-
-private:
- // A helper function for managing edge index attributes.
- std::pair< edge_descriptor, bool > const& make_index(
- std::pair< edge_descriptor, bool > const& x)
- {
- if (x.second)
- {
- boost::put(edge_index, m_graph, x.first, m_max_edge_index);
- ++m_num_edges;
- ++m_max_edge_index;
- }
- return x;
- }
-
-public:
- std::pair< edge_descriptor, bool > add_edge(
- vertex_descriptor u, vertex_descriptor v)
- {
- return make_index(boost::add_edge(u, v, m_graph));
- }
-
- std::pair< edge_descriptor, bool > add_edge(
- vertex_descriptor u, vertex_descriptor v, edge_property_type const& p)
- {
- return make_index(
- boost::add_edge(u, v, internal_edge_property(0u, p), m_graph));
- }
-
- void remove_edge(vertex_descriptor u, vertex_descriptor v)
- {
- // find all edges, (u, v)
- std::vector< edge_descriptor > edges;
- out_edge_iterator i, i_end;
- for (boost::tie(i, i_end) = boost::out_edges(u, m_graph); i != i_end;
- ++i)
- {
- if (boost::target(*i, m_graph) == v)
- {
- edges.push_back(*i);
- }
- }
- // remove all edges, (u, v)
- typename std::vector< edge_descriptor >::iterator j = edges.begin(),
- j_end = edges.end();
- for (; j != j_end; ++j)
- {
- remove_edge(*j);
- }
- }
-
- void remove_edge(edge_iterator i) { remove_edge(*i); }
-
- void remove_edge(edge_descriptor e)
- {
- boost::remove_edge(e, m_graph);
- --m_num_edges;
- }
-
- vertex_index_type max_vertex_index() const { return m_max_vertex_index; }
-
- void renumber_vertex_indices()
- {
- vertex_iterator i, end;
- boost::tie(i, end) = vertices(m_graph);
- m_max_vertex_index = renumber_vertex_indices(i, end, 0);
- }
-
- void remove_vertex_and_renumber_indices(vertex_iterator i)
- {
- vertex_iterator j = next(i), end = vertices(m_graph).second;
- vertex_index_type n = get(vertex_index, m_graph, *i);
-
- // remove the offending vertex and renumber everything after
- remove_vertex(*i);
- m_max_vertex_index = renumber_vertex_indices(j, end, n);
- }
-
- edge_index_type max_edge_index() const { return m_max_edge_index; }
-
- void renumber_edge_indices()
- {
- edge_iterator i, end;
- boost::tie(i, end) = edges(m_graph);
- m_max_edge_index = renumber_edge_indices(i, end, 0);
- }
-
- void remove_edge_and_renumber_indices(edge_iterator i)
- {
- edge_iterator j = next(i), end = edges(m_graph).second;
- edge_index_type n = get(edge_index, m_graph, *i);
-
- // remove the offending edge and renumber everything after
- remove_edge(*i);
- m_max_edge_index = renumber_edge_indices(j, end, n);
- }
-
- void renumber_indices()
- {
- renumber_vertex_indices();
- renumber_edge_indices();
- }
-
- // bundled property support
-#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- vertex_bundled& operator[](vertex_descriptor v) { return m_graph[v]; }
-
- vertex_bundled const& operator[](vertex_descriptor v) const
- {
- return m_graph[v];
- }
-
- edge_bundled& operator[](edge_descriptor e) { return m_graph[e]; }
-
- edge_bundled const& operator[](edge_descriptor e) const
- {
- return m_graph[e];
- }
-
- graph_bundled& operator[](graph_bundle_t) { return get_property(*this); }
-
- graph_bundled const& operator[](graph_bundle_t) const
- {
- return get_property(*this);
- }
-#endif
-
- // Graph concepts
- static vertex_descriptor null_vertex() { return graph_type::null_vertex(); }
-
- void clear()
- {
- m_graph.clear();
- m_num_vertices = m_max_vertex_index = 0;
- m_num_edges = m_max_edge_index = 0;
- }
-
- void swap(directed_graph& g)
- {
- m_graph.swap(g.m_graph);
- std::swap(m_num_vertices, g.m_num_vertices);
- std::swap(m_max_vertex_index, g.m_max_vertex_index);
- std::swap(m_num_edges, g.m_num_edges);
- std::swap(m_max_edge_index, g.m_max_edge_index);
- }
-
-private:
- vertices_size_type renumber_vertex_indices(
- vertex_iterator i, vertex_iterator end, vertices_size_type n)
- {
- typedef
- typename property_map< graph_type, vertex_index_t >::type IndexMap;
- IndexMap indices = get(vertex_index, m_graph);
- for (; i != end; ++i)
- {
- indices[*i] = n++;
- }
- return n;
- }
-
- vertices_size_type renumber_edge_indices(
- edge_iterator i, edge_iterator end, vertices_size_type n)
- {
- typedef
- typename property_map< graph_type, edge_index_t >::type IndexMap;
- IndexMap indices = get(edge_index, m_graph);
- for (; i != end; ++i)
- {
- indices[*i] = n++;
- }
- return n;
- }
-
- graph_type m_graph;
- vertices_size_type m_num_vertices;
- edges_size_type m_num_edges;
- vertex_index_type m_max_vertex_index;
- edge_index_type m_max_edge_index;
-};
-
-#define DIRECTED_GRAPH_PARAMS typename VP, typename EP, typename GP
-#define DIRECTED_GRAPH directed_graph< VP, EP, GP >
-
-// IncidenceGraph concepts
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::vertex_descriptor source(
- typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH const& g)
-{
- return source(e, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::vertex_descriptor target(
- typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH const& g)
-{
- return target(e, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::degree_size_type out_degree(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return out_degree(v, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::out_edge_iterator,
- typename DIRECTED_GRAPH::out_edge_iterator >
-out_edges(typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return out_edges(v, g.impl());
-}
-
-// BidirectionalGraph concepts
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::degree_size_type in_degree(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return in_degree(v, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::in_edge_iterator,
- typename DIRECTED_GRAPH::in_edge_iterator >
-in_edges(typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return in_edges(v, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::degree_size_type degree(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return degree(v, g.impl());
-}
-
-// AdjacencyGraph concepts
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::adjacency_iterator,
- typename DIRECTED_GRAPH::adjacency_iterator >
-adjacent_vertices(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return adjacent_vertices(v, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-typename DIRECTED_GRAPH::vertex_descriptor vertex(
- typename DIRECTED_GRAPH::vertices_size_type n, DIRECTED_GRAPH const& g)
-{
- return vertex(n, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-std::pair< typename DIRECTED_GRAPH::edge_descriptor, bool > edge(
- typename DIRECTED_GRAPH::vertex_descriptor u,
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return edge(u, v, g.impl());
-}
-
-// VertexListGraph concepts
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::vertices_size_type num_vertices(
- DIRECTED_GRAPH const& g)
-{
- return g.num_vertices();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::vertex_iterator,
- typename DIRECTED_GRAPH::vertex_iterator >
-vertices(DIRECTED_GRAPH const& g)
-{
- return vertices(g.impl());
-}
-
-// EdgeListGraph concepts
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::edges_size_type num_edges(
- DIRECTED_GRAPH const& g)
-{
- return g.num_edges();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::edge_iterator,
- typename DIRECTED_GRAPH::edge_iterator >
-edges(DIRECTED_GRAPH const& g)
-{
- return edges(g.impl());
-}
-
-// MutableGraph concepts
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::vertex_descriptor add_vertex(DIRECTED_GRAPH& g)
-{
- return g.add_vertex();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::vertex_descriptor add_vertex(
- typename DIRECTED_GRAPH::vertex_property_type const& p, DIRECTED_GRAPH& g)
-{
- return g.add_vertex(p);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void clear_vertex(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH& g)
-{
- return g.clear_vertex(v);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void remove_vertex(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH& g)
-{
- return g.remove_vertex(v);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::edge_descriptor, bool > add_edge(
- typename DIRECTED_GRAPH::vertex_descriptor u,
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH& g)
-{
- return g.add_edge(u, v);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline std::pair< typename DIRECTED_GRAPH::edge_descriptor, bool > add_edge(
- typename DIRECTED_GRAPH::vertex_descriptor u,
- typename DIRECTED_GRAPH::vertex_descriptor v,
- typename DIRECTED_GRAPH::edge_property_type const& p, DIRECTED_GRAPH& g)
-{
- return g.add_edge(u, v, p);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void remove_edge(typename DIRECTED_GRAPH::vertex_descriptor u,
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH& g)
-{
- return g.remove_edge(u, v);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void remove_edge(
- typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH& g)
-{
- return g.remove_edge(e);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void remove_edge(
- typename DIRECTED_GRAPH::edge_iterator i, DIRECTED_GRAPH& g)
-{
- return g.remove_edge(i);
-}
-
-template < DIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_edge_if(Predicate pred, DIRECTED_GRAPH& g)
-{
- return remove_edge_if(pred, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_out_edge_if(typename DIRECTED_GRAPH::vertex_descriptor v,
- Predicate pred, DIRECTED_GRAPH& g)
-{
- return remove_out_edge_if(v, pred, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_in_edge_if(typename DIRECTED_GRAPH::vertex_descriptor v,
- Predicate pred, DIRECTED_GRAPH& g)
-{
- return remove_in_edge_if(v, pred, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Property >
-struct property_map< DIRECTED_GRAPH, Property >
-: property_map< typename DIRECTED_GRAPH::graph_type, Property >
-{
-};
-
-template < DIRECTED_GRAPH_PARAMS >
-struct property_map< DIRECTED_GRAPH, vertex_all_t >
-{
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename DIRECTED_GRAPH::graph_type,
- vertex_all_t >::const_type >
- const_type;
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename DIRECTED_GRAPH::graph_type,
- vertex_all_t >::type >
- type;
-};
-
-template < DIRECTED_GRAPH_PARAMS >
-struct property_map< DIRECTED_GRAPH, edge_all_t >
-{
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename DIRECTED_GRAPH::graph_type,
- edge_all_t >::const_type >
- const_type;
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename DIRECTED_GRAPH::graph_type,
- edge_all_t >::type >
- type;
-};
-
-// PropertyGraph concepts
-template < DIRECTED_GRAPH_PARAMS, typename Property >
-inline typename property_map< DIRECTED_GRAPH, Property >::type get(
- Property p, DIRECTED_GRAPH& g)
-{
- return get(p, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Property >
-inline typename property_map< DIRECTED_GRAPH, Property >::const_type get(
- Property p, DIRECTED_GRAPH const& g)
-{
- return get(p, g.impl());
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename property_map< DIRECTED_GRAPH, vertex_all_t >::type get(
- vertex_all_t, DIRECTED_GRAPH& g)
-{
- return typename property_map< DIRECTED_GRAPH, vertex_all_t >::type(
- detail::remove_first_property(), get(vertex_all, g.impl()));
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename property_map< DIRECTED_GRAPH, vertex_all_t >::const_type get(
- vertex_all_t, DIRECTED_GRAPH const& g)
-{
- return typename property_map< DIRECTED_GRAPH, vertex_all_t >::const_type(
- detail::remove_first_property(), get(vertex_all, g.impl()));
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename property_map< DIRECTED_GRAPH, edge_all_t >::type get(
- edge_all_t, DIRECTED_GRAPH& g)
-{
- return typename property_map< DIRECTED_GRAPH, edge_all_t >::type(
- detail::remove_first_property(), get(edge_all, g.impl()));
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename property_map< DIRECTED_GRAPH, edge_all_t >::const_type get(
- edge_all_t, DIRECTED_GRAPH const& g)
-{
- return typename property_map< DIRECTED_GRAPH, edge_all_t >::const_type(
- detail::remove_first_property(), get(edge_all, g.impl()));
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Property, typename Key >
-inline typename property_traits< typename property_map<
- typename DIRECTED_GRAPH::graph_type, Property >::const_type >::value_type
-get(Property p, DIRECTED_GRAPH const& g, Key const& k)
-{
- return get(p, g.impl(), k);
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Key >
-inline typename property_traits<
- typename property_map< typename DIRECTED_GRAPH::graph_type,
- vertex_all_t >::const_type >::value_type
-get(vertex_all_t, DIRECTED_GRAPH const& g, Key const& k)
-{
- return get(vertex_all, g.impl(), k).m_base;
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Key >
-inline typename property_traits< typename property_map<
- typename DIRECTED_GRAPH::graph_type, edge_all_t >::const_type >::value_type
-get(edge_all_t, DIRECTED_GRAPH const& g, Key const& k)
-{
- return get(edge_all, g.impl(), k).m_base;
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Property, typename Key,
- typename Value >
-inline void put(Property p, DIRECTED_GRAPH& g, Key const& k, Value const& v)
-{
- put(p, g.impl(), k, v);
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Key, typename Value >
-inline void put(vertex_all_t, DIRECTED_GRAPH& g, Key const& k, Value const& v)
-{
- put(vertex_all, g.impl(), k,
- typename DIRECTED_GRAPH::internal_vertex_property(
- get(vertex_index, g.impl(), k), v));
-}
-
-template < DIRECTED_GRAPH_PARAMS, typename Key, typename Value >
-inline void put(edge_all_t, DIRECTED_GRAPH& g, Key const& k, Value const& v)
-{
- put(edge_all, g.impl(), k,
- typename DIRECTED_GRAPH::internal_vertex_property(
- get(edge_index, g.impl(), k), v));
-}
-
-template < DIRECTED_GRAPH_PARAMS, class Property >
-typename graph_property< DIRECTED_GRAPH, Property >::type& get_property(
- DIRECTED_GRAPH& g, Property p)
-{
- return get_property(g.impl(), p);
-}
-
-template < DIRECTED_GRAPH_PARAMS, class Property >
-typename graph_property< DIRECTED_GRAPH, Property >::type const& get_property(
- DIRECTED_GRAPH const& g, Property p)
-{
- return get_property(g.impl(), p);
-}
-
-template < DIRECTED_GRAPH_PARAMS, class Property, class Value >
-void set_property(DIRECTED_GRAPH& g, Property p, Value v)
-{
- return set_property(g.impl(), p, v);
-}
-
-// Vertex index management
-
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::vertex_index_type get_vertex_index(
- typename DIRECTED_GRAPH::vertex_descriptor v, DIRECTED_GRAPH const& g)
-{
- return get(vertex_index, g, v);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-typename DIRECTED_GRAPH::vertex_index_type max_vertex_index(
- DIRECTED_GRAPH const& g)
-{
- return g.max_vertex_index();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void renumber_vertex_indices(DIRECTED_GRAPH& g)
-{
- g.renumber_vertex_indices();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void remove_vertex_and_renumber_indices(
- typename DIRECTED_GRAPH::vertex_iterator i, DIRECTED_GRAPH& g)
-{
- g.remove_vertex_and_renumber_indices(i);
-}
-
-// Edge index management
-template < DIRECTED_GRAPH_PARAMS >
-inline typename DIRECTED_GRAPH::edge_index_type get_edge_index(
- typename DIRECTED_GRAPH::edge_descriptor v, DIRECTED_GRAPH const& g)
-{
- return get(edge_index, g, v);
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-typename DIRECTED_GRAPH::edge_index_type max_edge_index(DIRECTED_GRAPH const& g)
-{
- return g.max_edge_index();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void renumber_edge_indices(DIRECTED_GRAPH& g)
-{
- g.renumber_edge_indices();
-}
-
-template < DIRECTED_GRAPH_PARAMS >
-inline void remove_edge_and_renumber_indices(
- typename DIRECTED_GRAPH::edge_iterator i, DIRECTED_GRAPH& g)
-{
- g.remove_edge_and_renumber_indices(i);
-}
-
-// Index management
-template < DIRECTED_GRAPH_PARAMS >
-inline void renumber_indices(DIRECTED_GRAPH& g)
-{
- g.renumber_indices();
-}
-
-// Mutability Traits
-template < DIRECTED_GRAPH_PARAMS >
-struct graph_mutability_traits< DIRECTED_GRAPH >
-{
- typedef mutable_property_graph_tag category;
-};
-
-#undef DIRECTED_GRAPH_PARAMS
-#undef DIRECTED_GRAPH
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/dominator_tree.hpp b/contrib/restricted/boost/graph/include/boost/graph/dominator_tree.hpp
deleted file mode 100644
index df9783b0b3..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/dominator_tree.hpp
+++ /dev/null
@@ -1,483 +0,0 @@
-//=======================================================================
-// Copyright (C) 2005-2009 Jongsoo Park <jongsoo.park -at- gmail.com>
-//
-// 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_DOMINATOR_HPP
-#define BOOST_GRAPH_DOMINATOR_HPP
-
-#include <boost/config.hpp>
-#include <deque>
-#include <set>
-#include <boost/graph/depth_first_search.hpp>
-#include <boost/concept/assert.hpp>
-
-// Dominator tree computation
-
-namespace boost
-{
-namespace detail
-{
- /**
- * An extended time_stamper which also records vertices for each dfs number
- */
- template < class TimeMap, class VertexVector, class TimeT, class Tag >
- class time_stamper_with_vertex_vector
- : public base_visitor<
- time_stamper_with_vertex_vector< TimeMap, VertexVector, TimeT, Tag > >
- {
- public:
- typedef Tag event_filter;
- time_stamper_with_vertex_vector(
- TimeMap timeMap, VertexVector& v, TimeT& t)
- : timeStamper_(timeMap, t), v_(v)
- {
- }
-
- template < class Graph >
- void operator()(const typename property_traits< TimeMap >::key_type& v,
- const Graph& g)
- {
- timeStamper_(v, g);
- v_[timeStamper_.m_time] = v;
- }
-
- private:
- time_stamper< TimeMap, TimeT, Tag > timeStamper_;
- VertexVector& v_;
- };
-
- /**
- * A convenient way to create a time_stamper_with_vertex_vector
- */
- template < class TimeMap, class VertexVector, class TimeT, class Tag >
- time_stamper_with_vertex_vector< TimeMap, VertexVector, TimeT, Tag >
- stamp_times_with_vertex_vector(
- TimeMap timeMap, VertexVector& v, TimeT& t, Tag)
- {
- return time_stamper_with_vertex_vector< TimeMap, VertexVector, TimeT,
- Tag >(timeMap, v, t);
- }
-
- template < class Graph, class IndexMap, class TimeMap, class PredMap,
- class DomTreePredMap >
- class dominator_visitor
- {
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef
- typename graph_traits< Graph >::vertices_size_type VerticesSizeType;
-
- public:
- /**
- * @param g [in] the target graph of the dominator tree
- * @param entry [in] the entry node of g
- * @param indexMap [in] the vertex index map for g
- * @param domTreePredMap [out] the immediate dominator map
- * (parent map in dominator tree)
- */
- dominator_visitor(const Graph& g, const Vertex& entry,
- const IndexMap& indexMap, DomTreePredMap domTreePredMap)
- : semi_(num_vertices(g))
- , ancestor_(num_vertices(g), graph_traits< Graph >::null_vertex())
- , samedom_(ancestor_)
- , best_(semi_)
- , semiMap_(make_iterator_property_map(semi_.begin(), indexMap))
- , ancestorMap_(make_iterator_property_map(ancestor_.begin(), indexMap))
- , bestMap_(make_iterator_property_map(best_.begin(), indexMap))
- , buckets_(num_vertices(g))
- , bucketMap_(make_iterator_property_map(buckets_.begin(), indexMap))
- , entry_(entry)
- , domTreePredMap_(domTreePredMap)
- , numOfVertices_(num_vertices(g))
- , samedomMap(make_iterator_property_map(samedom_.begin(), indexMap))
- {
- }
-
- void operator()(const Vertex& n, const TimeMap& dfnumMap,
- const PredMap& parentMap, const Graph& g)
- {
- if (n == entry_)
- return;
-
- const Vertex p(get(parentMap, n));
- Vertex s(p);
-
- // 1. Calculate the semidominator of n,
- // based on the semidominator thm.
- // * Semidominator thm. : To find the semidominator of a node n,
- // consider all predecessors v of n in the CFG (Control Flow
- // Graph).
- // - If v is a proper ancestor of n in the spanning tree
- // (so dfnum(v) < dfnum(n)), then v is a candidate for semi(n)
- // - If v is a non-ancestor of n (so dfnum(v) > dfnum(n))
- // then for each u that is an ancestor of v (or u = v),
- // Let semi(u) be a candidate for semi(n)
- // of all these candidates, the one with lowest dfnum is
- // the semidominator of n.
-
- // For each predecessor of n
- typename graph_traits< Graph >::in_edge_iterator inItr, inEnd;
- for (boost::tie(inItr, inEnd) = in_edges(n, g); inItr != inEnd;
- ++inItr)
- {
- const Vertex v = source(*inItr, g);
- // To deal with unreachable nodes
- if (get(dfnumMap, v) < 0 || get(dfnumMap, v) >= numOfVertices_)
- continue;
-
- Vertex s2;
- if (get(dfnumMap, v) <= get(dfnumMap, n))
- s2 = v;
- else
- s2 = get(semiMap_, ancestor_with_lowest_semi_(v, dfnumMap));
-
- if (get(dfnumMap, s2) < get(dfnumMap, s))
- s = s2;
- }
- put(semiMap_, n, s);
-
- // 2. Calculation of n's dominator is deferred until
- // the path from s to n has been linked into the forest
- get(bucketMap_, s).push_back(n);
- get(ancestorMap_, n) = p;
- get(bestMap_, n) = n;
-
- // 3. Now that the path from p to v has been linked into
- // the spanning forest, these lines calculate the dominator of v,
- // based on the dominator thm., or else defer the calculation
- // until y's dominator is known
- // * Dominator thm. : On the spanning-tree path below semi(n) and
- // above or including n, let y be the node
- // with the smallest-numbered semidominator. Then,
- //
- // idom(n) = semi(n) if semi(y)=semi(n) or
- // idom(y) if semi(y) != semi(n)
- typename std::deque< Vertex >::iterator buckItr;
- for (buckItr = get(bucketMap_, p).begin();
- buckItr != get(bucketMap_, p).end(); ++buckItr)
- {
- const Vertex v(*buckItr);
- const Vertex y(ancestor_with_lowest_semi_(v, dfnumMap));
- if (get(semiMap_, y) == get(semiMap_, v))
- put(domTreePredMap_, v, p);
- else
- put(samedomMap, v, y);
- }
-
- get(bucketMap_, p).clear();
- }
-
- protected:
- /**
- * Evaluate function in Tarjan's path compression
- */
- const Vertex ancestor_with_lowest_semi_(
- const Vertex& v, const TimeMap& dfnumMap)
- {
- const Vertex a(get(ancestorMap_, v));
-
- if (get(ancestorMap_, a) != graph_traits< Graph >::null_vertex())
- {
- const Vertex b(ancestor_with_lowest_semi_(a, dfnumMap));
-
- put(ancestorMap_, v, get(ancestorMap_, a));
-
- if (get(dfnumMap, get(semiMap_, b))
- < get(dfnumMap, get(semiMap_, get(bestMap_, v))))
- put(bestMap_, v, b);
- }
-
- return get(bestMap_, v);
- }
-
- std::vector< Vertex > semi_, ancestor_, samedom_, best_;
- PredMap semiMap_, ancestorMap_, bestMap_;
- std::vector< std::deque< Vertex > > buckets_;
-
- iterator_property_map<
- typename std::vector< std::deque< Vertex > >::iterator, IndexMap >
- bucketMap_;
-
- const Vertex& entry_;
- DomTreePredMap domTreePredMap_;
- const VerticesSizeType numOfVertices_;
-
- public:
- PredMap samedomMap;
- };
-
-} // namespace detail
-
-/**
- * @brief Build dominator tree using Lengauer-Tarjan algorithm.
- * It takes O((V+E)log(V+E)) time.
- *
- * @pre dfnumMap, parentMap and verticesByDFNum have dfs results corresponding
- * indexMap.
- * If dfs has already run before,
- * this function would be good for saving computations.
- * @pre Unreachable nodes must be masked as
- * graph_traits<Graph>::null_vertex in parentMap.
- * @pre Unreachable nodes must be masked as
- * (std::numeric_limits<VerticesSizeType>::max)() in dfnumMap.
- *
- * @param domTreePredMap [out] : immediate dominator map (parent map
- * in dom. tree)
- *
- * @note reference Appel. p. 452~453. algorithm 19.9, 19.10.
- *
- * @todo : Optimization in Finding Dominators in Practice, Loukas Georgiadis
- */
-template < class Graph, class IndexMap, class TimeMap, class PredMap,
- class VertexVector, class DomTreePredMap >
-void lengauer_tarjan_dominator_tree_without_dfs(const Graph& g,
- const typename graph_traits< Graph >::vertex_descriptor& entry,
- const IndexMap& indexMap, TimeMap dfnumMap, PredMap parentMap,
- VertexVector& verticesByDFNum, DomTreePredMap domTreePredMap)
-{
- // Typedefs and concept check
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertices_size_type VerticesSizeType;
-
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
-
- const VerticesSizeType numOfVertices = num_vertices(g);
- if (numOfVertices == 0)
- return;
-
- // 1. Visit each vertex in reverse post order and calculate sdom.
- detail::dominator_visitor< Graph, IndexMap, TimeMap, PredMap,
- DomTreePredMap >
- visitor(g, entry, indexMap, domTreePredMap);
-
- VerticesSizeType i;
- for (i = 0; i < numOfVertices; ++i)
- {
- const Vertex u(verticesByDFNum[numOfVertices - 1 - i]);
- if (u != graph_traits< Graph >::null_vertex())
- visitor(u, dfnumMap, parentMap, g);
- }
-
- // 2. Now all the deferred dominator calculations,
- // based on the second clause of the dominator thm., are performed
- for (i = 0; i < numOfVertices; ++i)
- {
- const Vertex n(verticesByDFNum[i]);
-
- if (n == entry || n == graph_traits< Graph >::null_vertex())
- continue;
-
- Vertex u = get(visitor.samedomMap, n);
- if (u != graph_traits< Graph >::null_vertex())
- {
- put(domTreePredMap, n, get(domTreePredMap, u));
- }
- }
-}
-
-/**
- * Unlike lengauer_tarjan_dominator_tree_without_dfs,
- * dfs is run in this function and
- * the result is written to dfnumMap, parentMap, vertices.
- *
- * If the result of dfs required after this algorithm,
- * this function can eliminate the need of rerunning dfs.
- */
-template < class Graph, class IndexMap, class TimeMap, class PredMap,
- class VertexVector, class DomTreePredMap >
-void lengauer_tarjan_dominator_tree(const Graph& g,
- const typename graph_traits< Graph >::vertex_descriptor& entry,
- const IndexMap& indexMap, TimeMap dfnumMap, PredMap parentMap,
- VertexVector& verticesByDFNum, DomTreePredMap domTreePredMap)
-{
- // Typedefs and concept check
- typedef typename graph_traits< Graph >::vertices_size_type VerticesSizeType;
-
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
-
- // 1. Depth first visit
- const VerticesSizeType numOfVertices = num_vertices(g);
- if (numOfVertices == 0)
- return;
-
- VerticesSizeType time = (std::numeric_limits< VerticesSizeType >::max)();
- std::vector< default_color_type > colors(
- numOfVertices, color_traits< default_color_type >::white());
- depth_first_visit(g, entry,
- make_dfs_visitor(
- make_pair(record_predecessors(parentMap, on_tree_edge()),
- detail::stamp_times_with_vertex_vector(
- dfnumMap, verticesByDFNum, time, on_discover_vertex()))),
- make_iterator_property_map(colors.begin(), indexMap));
-
- // 2. Run main algorithm.
- lengauer_tarjan_dominator_tree_without_dfs(g, entry, indexMap, dfnumMap,
- parentMap, verticesByDFNum, domTreePredMap);
-}
-
-/**
- * Use vertex_index as IndexMap and make dfnumMap, parentMap, verticesByDFNum
- * internally.
- * If we don't need the result of dfs (dfnumMap, parentMap, verticesByDFNum),
- * this function would be more convenient one.
- */
-template < class Graph, class DomTreePredMap >
-void lengauer_tarjan_dominator_tree(const Graph& g,
- const typename graph_traits< Graph >::vertex_descriptor& entry,
- DomTreePredMap domTreePredMap)
-{
- // typedefs
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertices_size_type VerticesSizeType;
- typedef typename property_map< Graph, vertex_index_t >::const_type IndexMap;
- typedef iterator_property_map<
- typename std::vector< VerticesSizeType >::iterator, IndexMap >
- TimeMap;
- typedef iterator_property_map< typename std::vector< Vertex >::iterator,
- IndexMap >
- PredMap;
-
- // Make property maps
- const VerticesSizeType numOfVertices = num_vertices(g);
- if (numOfVertices == 0)
- return;
-
- const IndexMap indexMap = get(vertex_index, g);
-
- std::vector< VerticesSizeType > dfnum(numOfVertices, 0);
- TimeMap dfnumMap(make_iterator_property_map(dfnum.begin(), indexMap));
-
- std::vector< Vertex > parent(
- numOfVertices, graph_traits< Graph >::null_vertex());
- PredMap parentMap(make_iterator_property_map(parent.begin(), indexMap));
-
- std::vector< Vertex > verticesByDFNum(parent);
-
- // Run main algorithm
- lengauer_tarjan_dominator_tree(g, entry, indexMap, dfnumMap, parentMap,
- verticesByDFNum, domTreePredMap);
-}
-
-/**
- * Muchnick. p. 182, 184
- *
- * using iterative bit vector analysis
- */
-template < class Graph, class IndexMap, class DomTreePredMap >
-void iterative_bit_vector_dominator_tree(const Graph& g,
- const typename graph_traits< Graph >::vertex_descriptor& entry,
- const IndexMap& indexMap, DomTreePredMap domTreePredMap)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator vertexItr;
- typedef typename graph_traits< Graph >::vertices_size_type VerticesSizeType;
- typedef iterator_property_map<
- typename std::vector< std::set< Vertex > >::iterator, IndexMap >
- vertexSetMap;
-
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph >));
-
- // 1. Finding dominator
- // 1.1. Initialize
- const VerticesSizeType numOfVertices = num_vertices(g);
- if (numOfVertices == 0)
- return;
-
- vertexItr vi, viend;
- boost::tie(vi, viend) = vertices(g);
- const std::set< Vertex > N(vi, viend);
-
- bool change = true;
-
- std::vector< std::set< Vertex > > dom(numOfVertices, N);
- vertexSetMap domMap(make_iterator_property_map(dom.begin(), indexMap));
- get(domMap, entry).clear();
- get(domMap, entry).insert(entry);
-
- while (change)
- {
- change = false;
- for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
- {
- if (*vi == entry)
- continue;
-
- std::set< Vertex > T(N);
-
- typename graph_traits< Graph >::in_edge_iterator inItr, inEnd;
- for (boost::tie(inItr, inEnd) = in_edges(*vi, g); inItr != inEnd;
- ++inItr)
- {
- const Vertex p = source(*inItr, g);
-
- std::set< Vertex > tempSet;
- std::set_intersection(T.begin(), T.end(),
- get(domMap, p).begin(), get(domMap, p).end(),
- std::inserter(tempSet, tempSet.begin()));
- T.swap(tempSet);
- }
-
- T.insert(*vi);
- if (T != get(domMap, *vi))
- {
- change = true;
- get(domMap, *vi).swap(T);
- }
- } // end of for (boost::tie(vi, viend) = vertices(g)
- } // end of while(change)
-
- // 2. Build dominator tree
- for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
- get(domMap, *vi).erase(*vi);
-
- Graph domTree(numOfVertices);
-
- for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
- {
- if (*vi == entry)
- continue;
-
- // We have to iterate through copied dominator set
- const std::set< Vertex > tempSet(get(domMap, *vi));
- typename std::set< Vertex >::const_iterator s;
- for (s = tempSet.begin(); s != tempSet.end(); ++s)
- {
- typename std::set< Vertex >::iterator t;
- for (t = get(domMap, *vi).begin(); t != get(domMap, *vi).end();)
- {
- typename std::set< Vertex >::iterator old_t = t;
- ++t; // Done early because t may become invalid
- if (*old_t == *s)
- continue;
- if (get(domMap, *s).find(*old_t) != get(domMap, *s).end())
- get(domMap, *vi).erase(old_t);
- }
- }
- }
-
- for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
- {
- if (*vi != entry && get(domMap, *vi).size() == 1)
- {
- Vertex temp = *get(domMap, *vi).begin();
- put(domTreePredMap, *vi, temp);
- }
- }
-}
-
-template < class Graph, class DomTreePredMap >
-void iterative_bit_vector_dominator_tree(const Graph& g,
- const typename graph_traits< Graph >::vertex_descriptor& entry,
- DomTreePredMap domTreePredMap)
-{
- typename property_map< Graph, vertex_index_t >::const_type indexMap
- = get(vertex_index, g);
-
- iterative_bit_vector_dominator_tree(g, entry, indexMap, domTreePredMap);
-}
-} // namespace boost
-
-#endif // BOOST_GRAPH_DOMINATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/eccentricity.hpp b/contrib/restricted/boost/graph/include/boost/graph/eccentricity.hpp
deleted file mode 100644
index 26480ced0e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/eccentricity.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_ECCENTRICITY_HPP
-#define BOOST_GRAPH_ECCENTRICITY_HPP
-
-#include <boost/next_prior.hpp>
-#include <boost/config.hpp>
-#include <boost/graph/detail/geodesic.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-template < typename Graph, typename DistanceMap, typename Combinator >
-inline typename property_traits< DistanceMap >::value_type eccentricity(
- const Graph& g, DistanceMap dist, Combinator combine)
-{
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< DistanceMap, Vertex >));
- typedef typename property_traits< DistanceMap >::value_type Distance;
-
- return detail::combine_distances(g, dist, combine, Distance(0));
-}
-
-template < typename Graph, typename DistanceMap >
-inline typename property_traits< DistanceMap >::value_type eccentricity(
- const Graph& g, DistanceMap dist)
-{
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< DistanceMap, Vertex >));
- typedef typename property_traits< DistanceMap >::value_type Distance;
-
- return eccentricity(g, dist, detail::maximize< Distance >());
-}
-
-template < typename Graph, typename DistanceMatrix, typename EccentricityMap >
-inline std::pair< typename property_traits< EccentricityMap >::value_type,
- typename property_traits< EccentricityMap >::value_type >
-all_eccentricities(
- const Graph& g, const DistanceMatrix& dist, EccentricityMap ecc)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< DistanceMatrix, Vertex >));
- typedef typename property_traits< DistanceMatrix >::value_type DistanceMap;
- BOOST_CONCEPT_ASSERT(
- (WritablePropertyMapConcept< EccentricityMap, Vertex >));
- typedef
- typename property_traits< EccentricityMap >::value_type Eccentricity;
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
-
- Eccentricity r = numeric_values< Eccentricity >::infinity(),
- d = numeric_values< Eccentricity >::zero();
- VertexIterator i, end;
- boost::tie(i, end) = vertices(g);
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- DistanceMap dm = get(dist, *i);
- Eccentricity e = eccentricity(g, dm);
- put(ecc, *i, e);
-
- // track the radius and diameter at the same time
- r = min BOOST_PREVENT_MACRO_SUBSTITUTION(r, e);
- d = max BOOST_PREVENT_MACRO_SUBSTITUTION(d, e);
- }
- return std::make_pair(r, d);
-}
-
-template < typename Graph, typename EccentricityMap >
-inline std::pair< typename property_traits< EccentricityMap >::value_type,
- typename property_traits< EccentricityMap >::value_type >
-radius_and_diameter(const Graph& g, EccentricityMap ecc)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< EccentricityMap, Vertex >));
- typedef
- typename property_traits< EccentricityMap >::value_type Eccentricity;
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
-
- VertexIterator i, end;
- boost::tie(i, end) = vertices(g);
- Eccentricity radius = get(ecc, *i);
- Eccentricity diameter = get(ecc, *i);
- for (i = boost::next(i); i != end; ++i)
- {
- Eccentricity cur = get(ecc, *i);
- radius = min BOOST_PREVENT_MACRO_SUBSTITUTION(radius, cur);
- diameter = max BOOST_PREVENT_MACRO_SUBSTITUTION(diameter, cur);
- }
- return std::make_pair(radius, diameter);
-}
-
-template < typename Graph, typename EccentricityMap >
-inline typename property_traits< EccentricityMap >::value_type radius(
- const Graph& g, EccentricityMap ecc)
-{
- return radius_and_diameter(g, ecc).first;
-}
-
-template < typename Graph, typename EccentricityMap >
-inline typename property_traits< EccentricityMap >::value_type diameter(
- const Graph& g, EccentricityMap ecc)
-{
- return radius_and_diameter(g, ecc).second;
-}
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/edge_coloring.hpp b/contrib/restricted/boost/graph/include/boost/graph/edge_coloring.hpp
deleted file mode 100644
index 9de277658e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/edge_coloring.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-//=======================================================================
-// Copyright 2013 Maciej Piechotka
-// Authors: Maciej Piechotka
-//
-// 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_EDGE_COLORING_HPP
-#define BOOST_GRAPH_EDGE_COLORING_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/properties.hpp>
-#include <algorithm>
-#include <limits>
-#include <vector>
-
-/* This algorithm is to find coloring of an edges
-
- Reference:
-
- Misra, J., & Gries, D. (1992). A constructive proof of Vizing's
- theorem. In Information Processing Letters.
-*/
-
-namespace boost
-{
-namespace detail
-{
- template < typename Graph, typename ColorMap >
- bool is_free(const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::vertex_descriptor u,
- typename boost::property_traits< ColorMap >::value_type free_color)
- {
- typedef typename boost::property_traits< ColorMap >::value_type color_t;
- if (free_color == (std::numeric_limits< color_t >::max)())
- return false;
- BGL_FORALL_OUTEDGES_T(u, e, g, Graph)
- {
- if (get(color, e) == free_color)
- {
- return false;
- }
- }
- return true;
- }
-
- template < typename Graph, typename ColorMap >
- std::vector< typename boost::graph_traits< Graph >::vertex_descriptor >
- maximal_fan(const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::vertex_descriptor x,
- typename boost::graph_traits< Graph >::vertex_descriptor y)
- {
- typedef
- typename boost::graph_traits< Graph >::vertex_descriptor vertex_t;
- std::vector< vertex_t > fan;
- fan.push_back(y);
- bool extended;
- do
- {
- extended = false;
- BGL_FORALL_OUTEDGES_T(x, e, g, Graph)
- {
- vertex_t v = target(e, g);
- if (is_free(g, color, fan.back(), get(color, e))
- && std::find(fan.begin(), fan.end(), v) == fan.end())
- {
- fan.push_back(v);
- extended = true;
- }
- }
- } while (extended);
- return fan;
- }
- template < typename Graph, typename ColorMap >
- typename boost::property_traits< ColorMap >::value_type find_free_color(
- const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::vertex_descriptor u)
- {
- typename boost::property_traits< ColorMap >::value_type c = 0;
- while (!is_free(g, color, u, c))
- c++;
- return c;
- }
-
- template < typename Graph, typename ColorMap >
- void invert_cd_path(const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::vertex_descriptor x,
- typename boost::graph_traits< Graph >::edge_descriptor eold,
- typename boost::property_traits< ColorMap >::value_type c,
- typename boost::property_traits< ColorMap >::value_type d)
- {
- put(color, eold, d);
- BGL_FORALL_OUTEDGES_T(x, e, g, Graph)
- {
- if (get(color, e) == d && e != eold)
- {
- invert_cd_path(g, color, target(e, g), e, d, c);
- return;
- }
- }
- }
-
- template < typename Graph, typename ColorMap >
- void invert_cd_path(const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::vertex_descriptor x,
- typename boost::property_traits< ColorMap >::value_type c,
- typename boost::property_traits< ColorMap >::value_type d)
- {
- BGL_FORALL_OUTEDGES_T(x, e, g, Graph)
- {
- if (get(color, e) == d)
- {
- invert_cd_path(g, color, target(e, g), e, d, c);
- return;
- }
- }
- }
-
- template < typename Graph, typename ColorMap, typename ForwardIterator >
- void rotate_fan(const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::vertex_descriptor x,
- ForwardIterator begin, ForwardIterator end)
- {
- typedef typename boost::graph_traits< Graph >::edge_descriptor edge_t;
- if (begin == end)
- {
- return;
- }
- edge_t previous = edge(x, *begin, g).first;
- for (begin++; begin != end; begin++)
- {
- edge_t current = edge(x, *begin, g).first;
- put(color, previous, get(color, current));
- previous = current;
- }
- }
-
- template < typename Graph, typename ColorMap > class find_free_in_fan
- {
- public:
- find_free_in_fan(const Graph& graph, const ColorMap color,
- typename boost::property_traits< ColorMap >::value_type d)
- : graph(graph), color(color), d(d)
- {
- }
- bool operator()(
- const typename boost::graph_traits< Graph >::vertex_descriptor u)
- const
- {
- return is_free(graph, color, u, d);
- }
-
- private:
- const Graph& graph;
- const ColorMap color;
- const typename boost::property_traits< ColorMap >::value_type d;
- };
-}
-
-template < typename Graph, typename ColorMap >
-typename boost::property_traits< ColorMap >::value_type color_edge(
- const Graph& g, ColorMap color,
- typename boost::graph_traits< Graph >::edge_descriptor e)
-{
- typedef typename boost::graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename boost::property_traits< ColorMap >::value_type color_t;
- typedef typename std::vector< vertex_t >::iterator fan_iterator;
- using namespace detail;
- vertex_t x = source(e, g), y = target(e, g);
- std::vector< vertex_t > fan = maximal_fan(g, color, x, y);
- color_t c = find_free_color(g, color, x);
- color_t d = find_free_color(g, color, fan.back());
- invert_cd_path(g, color, x, c, d);
- fan_iterator w = std::find_if(fan.begin(), fan.end(),
- find_free_in_fan< Graph, ColorMap >(g, color, d));
- rotate_fan(g, color, x, fan.begin(), w + 1);
- put(color, edge(x, *w, g).first, d);
- return (std::max)(c, d);
-}
-
-template < typename Graph, typename ColorMap >
-typename boost::property_traits< ColorMap >::value_type edge_coloring(
- const Graph& g, ColorMap color)
-{
- typedef typename boost::property_traits< ColorMap >::value_type color_t;
- BGL_FORALL_EDGES_T(e, g, Graph)
- {
- put(color, e, (std::numeric_limits< color_t >::max)());
- }
- color_t colors = 0;
- BGL_FORALL_EDGES_T(e, g, Graph)
- {
- colors = (std::max)(colors, color_edge(g, color, e) + 1);
- }
- return colors;
-}
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/edge_connectivity.hpp b/contrib/restricted/boost/graph/include/boost/graph/edge_connectivity.hpp
deleted file mode 100644
index 975d329f55..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/edge_connectivity.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-//=======================================================================
-// Copyright 2000 University of Notre Dame.
-// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
-//
-// 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_EDGE_CONNECTIVITY
-#define BOOST_EDGE_CONNECTIVITY
-
-// WARNING: not-yet fully tested!
-
-#include <boost/config.hpp>
-#include <vector>
-#include <set>
-#include <algorithm>
-#include <boost/graph/edmonds_karp_max_flow.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < class Graph >
- inline std::pair< typename graph_traits< Graph >::vertex_descriptor,
- typename graph_traits< Graph >::degree_size_type >
- min_degree_vertex(Graph& g)
- {
- typedef graph_traits< Graph > Traits;
- typename Traits::vertex_descriptor p;
- typedef typename Traits::degree_size_type size_type;
- size_type delta = (std::numeric_limits< size_type >::max)();
-
- typename Traits::vertex_iterator i, iend;
- for (boost::tie(i, iend) = vertices(g); i != iend; ++i)
- if (degree(*i, g) < delta)
- {
- delta = degree(*i, g);
- p = *i;
- }
- return std::make_pair(p, delta);
- }
-
- template < class Graph, class OutputIterator >
- void neighbors(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor u,
- OutputIterator result)
- {
- typename graph_traits< Graph >::adjacency_iterator ai, aend;
- for (boost::tie(ai, aend) = adjacent_vertices(u, g); ai != aend; ++ai)
- *result++ = *ai;
- }
-
- template < class Graph, class VertexIterator, class OutputIterator >
- void neighbors(const Graph& g, VertexIterator first, VertexIterator last,
- OutputIterator result)
- {
- for (; first != last; ++first)
- neighbors(g, *first, result);
- }
-
-} // namespace detail
-
-// O(m n)
-template < class VertexListGraph, class OutputIterator >
-typename graph_traits< VertexListGraph >::degree_size_type edge_connectivity(
- VertexListGraph& g, OutputIterator disconnecting_set)
-{
- //-------------------------------------------------------------------------
- // Type Definitions
- typedef graph_traits< VertexListGraph > Traits;
- typedef typename Traits::vertex_iterator vertex_iterator;
- typedef typename Traits::edge_iterator edge_iterator;
- typedef typename Traits::out_edge_iterator out_edge_iterator;
- typedef typename Traits::vertex_descriptor vertex_descriptor;
- typedef typename Traits::degree_size_type degree_size_type;
- typedef color_traits< default_color_type > Color;
-
- typedef adjacency_list_traits< vecS, vecS, directedS > Tr;
- typedef typename Tr::edge_descriptor Tr_edge_desc;
- typedef adjacency_list< vecS, vecS, directedS, no_property,
- property< edge_capacity_t, degree_size_type,
- property< edge_residual_capacity_t, degree_size_type,
- property< edge_reverse_t, Tr_edge_desc > > > >
- FlowGraph;
- typedef typename graph_traits< FlowGraph >::edge_descriptor edge_descriptor;
-
- //-------------------------------------------------------------------------
- // Variable Declarations
- vertex_descriptor u, v, p, k;
- edge_descriptor e1, e2;
- bool inserted;
- vertex_iterator vi, vi_end;
- edge_iterator ei, ei_end;
- degree_size_type delta, alpha_star, alpha_S_k;
- std::set< vertex_descriptor > S, neighbor_S;
- std::vector< vertex_descriptor > S_star, non_neighbor_S;
- std::vector< default_color_type > color(num_vertices(g));
- std::vector< edge_descriptor > pred(num_vertices(g));
-
- //-------------------------------------------------------------------------
- // Create a network flow graph out of the undirected graph
- FlowGraph flow_g(num_vertices(g));
-
- typename property_map< FlowGraph, edge_capacity_t >::type cap
- = get(edge_capacity, flow_g);
- typename property_map< FlowGraph, edge_residual_capacity_t >::type res_cap
- = get(edge_residual_capacity, flow_g);
- typename property_map< FlowGraph, edge_reverse_t >::type rev_edge
- = get(edge_reverse, flow_g);
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- u = source(*ei, g), v = target(*ei, g);
- boost::tie(e1, inserted) = add_edge(u, v, flow_g);
- cap[e1] = 1;
- boost::tie(e2, inserted) = add_edge(v, u, flow_g);
- cap[e2] = 1; // not sure about this
- rev_edge[e1] = e2;
- rev_edge[e2] = e1;
- }
-
- //-------------------------------------------------------------------------
- // The Algorithm
-
- boost::tie(p, delta) = detail::min_degree_vertex(g);
- S_star.push_back(p);
- alpha_star = delta;
- S.insert(p);
- neighbor_S.insert(p);
- detail::neighbors(
- g, S.begin(), S.end(), std::inserter(neighbor_S, neighbor_S.begin()));
-
- boost::tie(vi, vi_end) = vertices(g);
- std::set_difference(vi, vi_end, neighbor_S.begin(), neighbor_S.end(),
- std::back_inserter(non_neighbor_S));
-
- while (!non_neighbor_S.empty())
- { // at most n - 1 times
- k = non_neighbor_S.front();
-
- alpha_S_k = edmonds_karp_max_flow(
- flow_g, p, k, cap, res_cap, rev_edge, &color[0], &pred[0]);
-
- if (alpha_S_k < alpha_star)
- {
- alpha_star = alpha_S_k;
- S_star.clear();
- for (boost::tie(vi, vi_end) = vertices(flow_g); vi != vi_end; ++vi)
- if (color[*vi] != Color::white())
- S_star.push_back(*vi);
- }
- S.insert(k);
- neighbor_S.insert(k);
- detail::neighbors(g, k, std::inserter(neighbor_S, neighbor_S.begin()));
- non_neighbor_S.clear();
- boost::tie(vi, vi_end) = vertices(g);
- std::set_difference(vi, vi_end, neighbor_S.begin(), neighbor_S.end(),
- std::back_inserter(non_neighbor_S));
- }
- //-------------------------------------------------------------------------
- // Compute edges of the cut [S*, ~S*]
- std::vector< bool > in_S_star(num_vertices(g), false);
- typename std::vector< vertex_descriptor >::iterator si;
- for (si = S_star.begin(); si != S_star.end(); ++si)
- in_S_star[*si] = true;
-
- degree_size_type c = 0;
- for (si = S_star.begin(); si != S_star.end(); ++si)
- {
- out_edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(*si, g); ei != ei_end; ++ei)
- if (!in_S_star[target(*ei, g)])
- {
- *disconnecting_set++ = *ei;
- ++c;
- }
- }
- return c;
-}
-
-} // namespace boost
-
-#endif // BOOST_EDGE_CONNECTIVITY
diff --git a/contrib/restricted/boost/graph/include/boost/graph/edge_list.hpp b/contrib/restricted/boost/graph/include/boost/graph/edge_list.hpp
deleted file mode 100644
index 77c0c01ea4..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/edge_list.hpp
+++ /dev/null
@@ -1,330 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_EDGE_LIST_HPP
-#define BOOST_GRAPH_EDGE_LIST_HPP
-
-#include <iterator>
-#include <boost/config.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/range/irange.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-
-namespace boost
-{
-
-//
-// The edge_list class is an EdgeListGraph module that is constructed
-// from a pair of iterators whose value type is a pair of vertex
-// descriptors.
-//
-// For example:
-//
-// typedef std::pair<int,int> E;
-// list<E> elist;
-// ...
-// typedef edge_list<list<E>::iterator> Graph;
-// Graph g(elist.begin(), elist.end());
-//
-// If the iterators are random access, then Graph::edge_descriptor
-// is of Integral type, otherwise it is a struct, though it is
-// convertible to an Integral type.
-//
-
-struct edge_list_tag
-{
-};
-
-// The implementation class for edge_list.
-template < class G, class EdgeIter, class T, class D > class edge_list_impl
-{
-public:
- typedef D edge_id;
- typedef T Vpair;
- typedef typename Vpair::first_type V;
- typedef V vertex_descriptor;
- typedef edge_list_tag graph_tag;
- typedef void edge_property_type;
-
- struct edge_descriptor
- {
- edge_descriptor() {}
- edge_descriptor(EdgeIter p, edge_id id) : _ptr(p), _id(id) {}
- operator edge_id() { return _id; }
- EdgeIter _ptr;
- edge_id _id;
- };
- typedef edge_descriptor E;
-
- struct edge_iterator
- {
- typedef edge_iterator self;
- typedef E value_type;
- typedef E& reference;
- typedef E* pointer;
- typedef std::ptrdiff_t difference_type;
- typedef std::input_iterator_tag iterator_category;
- edge_iterator() {}
- edge_iterator(EdgeIter iter) : _iter(iter), _i(0) {}
- E operator*() { return E(_iter, _i); }
- self& operator++()
- {
- ++_iter;
- ++_i;
- return *this;
- }
- self operator++(int)
- {
- self t = *this;
- ++(*this);
- return t;
- }
- bool operator==(const self& x) { return _iter == x._iter; }
- bool operator!=(const self& x) { return _iter != x._iter; }
- EdgeIter _iter;
- edge_id _i;
- };
- typedef void out_edge_iterator;
- typedef void in_edge_iterator;
- typedef void adjacency_iterator;
- typedef void vertex_iterator;
-};
-
-template < class G, class EI, class T, class D >
-std::pair< typename edge_list_impl< G, EI, T, D >::edge_iterator,
- typename edge_list_impl< G, EI, T, D >::edge_iterator >
-edges(const edge_list_impl< G, EI, T, D >& g_)
-{
- const G& g = static_cast< const G& >(g_);
- typedef typename edge_list_impl< G, EI, T, D >::edge_iterator edge_iterator;
- return std::make_pair(edge_iterator(g._first), edge_iterator(g._last));
-}
-template < class G, class EI, class T, class D >
-typename edge_list_impl< G, EI, T, D >::vertex_descriptor source(
- typename edge_list_impl< G, EI, T, D >::edge_descriptor e,
- const edge_list_impl< G, EI, T, D >&)
-{
- return (*e._ptr).first;
-}
-template < class G, class EI, class T, class D >
-typename edge_list_impl< G, EI, T, D >::vertex_descriptor target(
- typename edge_list_impl< G, EI, T, D >::edge_descriptor e,
- const edge_list_impl< G, EI, T, D >&)
-{
- return (*e._ptr).second;
-}
-
-template < class D, class E >
-class el_edge_property_map
-: public put_get_helper< D, el_edge_property_map< D, E > >
-{
-public:
- typedef E key_type;
- typedef D value_type;
- typedef D reference;
- typedef readable_property_map_tag category;
-
- value_type operator[](key_type e) const { return e._i; }
-};
-struct edge_list_edge_property_selector
-{
- template < class Graph, class Property, class Tag > struct bind_
- {
- typedef el_edge_property_map< typename Graph::edge_id,
- typename Graph::edge_descriptor >
- type;
- typedef type const_type;
- };
-};
-template <> struct edge_property_selector< edge_list_tag >
-{
- typedef edge_list_edge_property_selector type;
-};
-
-template < class G, class EI, class T, class D >
-typename property_map< edge_list_impl< G, EI, T, D >, edge_index_t >::type get(
- edge_index_t, const edge_list_impl< G, EI, T, D >&)
-{
- typedef typename property_map< edge_list_impl< G, EI, T, D >,
- edge_index_t >::type EdgeIndexMap;
- return EdgeIndexMap();
-}
-
-template < class G, class EI, class T, class D >
-inline D get(edge_index_t, const edge_list_impl< G, EI, T, D >&,
- typename edge_list_impl< G, EI, T, D >::edge_descriptor e)
-{
- return e._i;
-}
-
-// A specialized implementation for when the iterators are random access.
-
-struct edge_list_ra_tag
-{
-};
-
-template < class G, class EdgeIter, class T, class D > class edge_list_impl_ra
-{
-public:
- typedef D edge_id;
- typedef T Vpair;
- typedef typename Vpair::first_type V;
- typedef edge_list_ra_tag graph_tag;
- typedef void edge_property_type;
-
- typedef edge_id edge_descriptor;
- typedef V vertex_descriptor;
- typedef typename boost::integer_range< edge_id >::iterator edge_iterator;
- typedef void out_edge_iterator;
- typedef void in_edge_iterator;
- typedef void adjacency_iterator;
- typedef void vertex_iterator;
-};
-
-template < class G, class EI, class T, class D >
-std::pair< typename edge_list_impl_ra< G, EI, T, D >::edge_iterator,
- typename edge_list_impl_ra< G, EI, T, D >::edge_iterator >
-edges(const edge_list_impl_ra< G, EI, T, D >& g_)
-{
- const G& g = static_cast< const G& >(g_);
- typedef
- typename edge_list_impl_ra< G, EI, T, D >::edge_iterator edge_iterator;
- return std::make_pair(edge_iterator(0), edge_iterator(g._last - g._first));
-}
-template < class G, class EI, class T, class D >
-typename edge_list_impl_ra< G, EI, T, D >::vertex_descriptor source(
- typename edge_list_impl_ra< G, EI, T, D >::edge_descriptor e,
- const edge_list_impl_ra< G, EI, T, D >& g_)
-{
- const G& g = static_cast< const G& >(g_);
- return g._first[e].first;
-}
-template < class G, class EI, class T, class D >
-typename edge_list_impl_ra< G, EI, T, D >::vertex_descriptor target(
- typename edge_list_impl_ra< G, EI, T, D >::edge_descriptor e,
- const edge_list_impl_ra< G, EI, T, D >& g_)
-{
- const G& g = static_cast< const G& >(g_);
- return g._first[e].second;
-}
-template < class E >
-class el_ra_edge_property_map
-: public put_get_helper< E, el_ra_edge_property_map< E > >
-{
-public:
- typedef E key_type;
- typedef E value_type;
- typedef E reference;
- typedef readable_property_map_tag category;
-
- value_type operator[](key_type e) const { return e; }
-};
-struct edge_list_ra_edge_property_selector
-{
- template < class Graph, class Property, class Tag > struct bind_
- {
- typedef el_ra_edge_property_map< typename Graph::edge_descriptor > type;
- typedef type const_type;
- };
-};
-template <> struct edge_property_selector< edge_list_ra_tag >
-{
- typedef edge_list_ra_edge_property_selector type;
-};
-template < class G, class EI, class T, class D >
-inline typename property_map< edge_list_impl_ra< G, EI, T, D >,
- edge_index_t >::type
-get(edge_index_t, const edge_list_impl_ra< G, EI, T, D >&)
-{
- typedef typename property_map< edge_list_impl_ra< G, EI, T, D >,
- edge_index_t >::type EdgeIndexMap;
- return EdgeIndexMap();
-}
-
-template < class G, class EI, class T, class D >
-inline D get(edge_index_t, const edge_list_impl_ra< G, EI, T, D >&,
- typename edge_list_impl_ra< G, EI, T, D >::edge_descriptor e)
-{
- return e;
-}
-
-// Some helper classes for determining if the iterators are random access
-template < class Cat > struct is_random
-{
- enum
- {
- RET = false
- };
- typedef mpl::false_ type;
-};
-template <> struct is_random< std::random_access_iterator_tag >
-{
- enum
- {
- RET = true
- };
- typedef mpl::true_ type;
-};
-
-// The edge_list class conditionally inherits from one of the
-// above two classes.
-
-template < class EdgeIter,
-#if !defined BOOST_NO_STD_ITERATOR_TRAITS
- class T = typename std::iterator_traits< EdgeIter >::value_type,
- class D = typename std::iterator_traits< EdgeIter >::difference_type,
- class Cat = typename std::iterator_traits< EdgeIter >::iterator_category >
-#else
- class T, class D, class Cat >
-#endif
-class edge_list
-: public mpl::if_< typename is_random< Cat >::type,
- edge_list_impl_ra< edge_list< EdgeIter, T, D, Cat >, EdgeIter, T, D >,
- edge_list_impl< edge_list< EdgeIter, T, D, Cat >, EdgeIter, T, D > >::type
-{
-public:
- typedef directed_tag directed_category;
- typedef allow_parallel_edge_tag edge_parallel_category;
- typedef edge_list_graph_tag traversal_category;
- typedef std::size_t edges_size_type;
- typedef std::size_t vertices_size_type;
- typedef std::size_t degree_size_type;
- edge_list(EdgeIter first, EdgeIter last) : _first(first), _last(last)
- {
- m_num_edges = std::distance(first, last);
- }
- edge_list(EdgeIter first, EdgeIter last, edges_size_type E)
- : _first(first), _last(last), m_num_edges(E)
- {
- }
-
- EdgeIter _first, _last;
- edges_size_type m_num_edges;
-};
-
-template < class EdgeIter, class T, class D, class Cat >
-std::size_t num_edges(const edge_list< EdgeIter, T, D, Cat >& el)
-{
- return el.m_num_edges;
-}
-
-#ifndef BOOST_NO_STD_ITERATOR_TRAITS
-template < class EdgeIter >
-inline edge_list< EdgeIter > make_edge_list(EdgeIter first, EdgeIter last)
-{
- return edge_list< EdgeIter >(first, last);
-}
-#endif
-
-} /* namespace boost */
-
-#endif /* BOOST_GRAPH_EDGE_LIST_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/edmonds_karp_max_flow.hpp b/contrib/restricted/boost/graph/include/boost/graph/edmonds_karp_max_flow.hpp
deleted file mode 100644
index cd8aa99f63..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/edmonds_karp_max_flow.hpp
+++ /dev/null
@@ -1,245 +0,0 @@
-//=======================================================================
-// Copyright 2000 University of Notre Dame.
-// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
-//
-// 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_EDMONDS_KARP_MAX_FLOW_HPP
-#define BOOST_GRAPH_EDMONDS_KARP_MAX_FLOW_HPP
-
-#include <boost/config.hpp>
-#include <vector>
-#include <algorithm> // for std::min and std::max
-#include <boost/config.hpp>
-#include <boost/pending/queue.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/filtered_graph.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-
-namespace boost
-{
-
-// The "labeling" algorithm from "Network Flows" by Ahuja, Magnanti,
-// Orlin. I think this is the same as or very similar to the original
-// Edmonds-Karp algorithm. This solves the maximum flow problem.
-
-namespace detail
-{
-
- template < class Graph, class ResCapMap >
- filtered_graph< Graph, is_residual_edge< ResCapMap > > residual_graph(
- Graph& g, ResCapMap residual_capacity)
- {
- return filtered_graph< Graph, is_residual_edge< ResCapMap > >(
- g, is_residual_edge< ResCapMap >(residual_capacity));
- }
-
- template < class Graph, class PredEdgeMap, class ResCapMap,
- class RevEdgeMap >
- inline void augment(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink, PredEdgeMap p,
- ResCapMap residual_capacity, RevEdgeMap reverse_edge)
- {
- typename graph_traits< Graph >::edge_descriptor e;
- typename graph_traits< Graph >::vertex_descriptor u;
- typedef typename property_traits< ResCapMap >::value_type FlowValue;
-
- // find minimum residual capacity along the augmenting path
- FlowValue delta = (std::numeric_limits< FlowValue >::max)();
- e = get(p, sink);
- do
- {
- BOOST_USING_STD_MIN();
- delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- delta, get(residual_capacity, e));
- u = source(e, g);
- e = get(p, u);
- } while (u != src);
-
- // push delta units of flow along the augmenting path
- e = get(p, sink);
- do
- {
- put(residual_capacity, e, get(residual_capacity, e) - delta);
- put(residual_capacity, get(reverse_edge, e),
- get(residual_capacity, get(reverse_edge, e)) + delta);
- u = source(e, g);
- e = get(p, u);
- } while (u != src);
- }
-
-} // namespace detail
-
-template < class Graph, class CapacityEdgeMap, class ResidualCapacityEdgeMap,
- class ReverseEdgeMap, class ColorMap, class PredEdgeMap >
-typename property_traits< CapacityEdgeMap >::value_type edmonds_karp_max_flow(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink, CapacityEdgeMap cap,
- ResidualCapacityEdgeMap res, ReverseEdgeMap rev, ColorMap color,
- PredEdgeMap pred)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- typename graph_traits< Graph >::vertex_iterator u_iter, u_end;
- typename graph_traits< Graph >::out_edge_iterator ei, e_end;
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
- for (boost::tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
- put(res, *ei, get(cap, *ei));
-
- put(color, sink, Color::gray());
- while (get(color, sink) != Color::white())
- {
- boost::queue< vertex_t > Q;
- breadth_first_search(detail::residual_graph(g, res), src, Q,
- make_bfs_visitor(record_edge_predecessors(pred, on_tree_edge())),
- color);
- if (get(color, sink) != Color::white())
- detail::augment(g, src, sink, pred, res, rev);
- } // while
-
- typename property_traits< CapacityEdgeMap >::value_type flow = 0;
- for (boost::tie(ei, e_end) = out_edges(src, g); ei != e_end; ++ei)
- flow += (get(cap, *ei) - get(res, *ei));
- return flow;
-} // edmonds_karp_max_flow()
-
-namespace detail
-{
- //-------------------------------------------------------------------------
- // Handle default for color property map
-
- // use of class here is a VC++ workaround
- template < class ColorMap > struct edmonds_karp_dispatch2
- {
- template < class Graph, class PredMap, class P, class T, class R >
- static typename edge_capacity_value< Graph, P, T, R >::type apply(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink,
- PredMap pred, const bgl_named_params< P, T, R >& params,
- ColorMap color)
- {
- return edmonds_karp_max_flow(g, src, sink,
- choose_const_pmap(
- get_param(params, edge_capacity), g, edge_capacity),
- choose_pmap(get_param(params, edge_residual_capacity), g,
- edge_residual_capacity),
- choose_const_pmap(
- get_param(params, edge_reverse), g, edge_reverse),
- color, pred);
- }
- };
- template <> struct edmonds_karp_dispatch2< param_not_found >
- {
- template < class Graph, class PredMap, class P, class T, class R >
- static typename edge_capacity_value< Graph, P, T, R >::type apply(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink,
- PredMap pred, const bgl_named_params< P, T, R >& params,
- param_not_found)
- {
- typedef
- typename graph_traits< Graph >::vertices_size_type size_type;
- size_type n = is_default_param(get_param(params, vertex_color))
- ? num_vertices(g)
- : 1;
- std::vector< default_color_type > color_vec(n);
- return edmonds_karp_max_flow(g, src, sink,
- choose_const_pmap(
- get_param(params, edge_capacity), g, edge_capacity),
- choose_pmap(get_param(params, edge_residual_capacity), g,
- edge_residual_capacity),
- choose_const_pmap(
- get_param(params, edge_reverse), g, edge_reverse),
- make_iterator_property_map(color_vec.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index),
- color_vec[0]),
- pred);
- }
- };
-
- //-------------------------------------------------------------------------
- // Handle default for predecessor property map
-
- // use of class here is a VC++ workaround
- template < class PredMap > struct edmonds_karp_dispatch1
- {
- template < class Graph, class P, class T, class R >
- static typename edge_capacity_value< Graph, P, T, R >::type apply(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink,
- const bgl_named_params< P, T, R >& params, PredMap pred)
- {
- typedef typename get_param_type< vertex_color_t,
- bgl_named_params< P, T, R > >::type C;
- return edmonds_karp_dispatch2< C >::apply(
- g, src, sink, pred, params, get_param(params, vertex_color));
- }
- };
- template <> struct edmonds_karp_dispatch1< param_not_found >
- {
-
- template < class Graph, class P, class T, class R >
- static typename edge_capacity_value< Graph, P, T, R >::type apply(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink,
- const bgl_named_params< P, T, R >& params, param_not_found)
- {
- typedef
- typename graph_traits< Graph >::edge_descriptor edge_descriptor;
- typedef
- typename graph_traits< Graph >::vertices_size_type size_type;
- size_type n
- = is_default_param(get_param(params, vertex_predecessor))
- ? num_vertices(g)
- : 1;
- std::vector< edge_descriptor > pred_vec(n);
-
- typedef typename get_param_type< vertex_color_t,
- bgl_named_params< P, T, R > >::type C;
- return edmonds_karp_dispatch2< C >::apply(g, src, sink,
- make_iterator_property_map(pred_vec.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index),
- pred_vec[0]),
- params, get_param(params, vertex_color));
- }
- };
-
-} // namespace detail
-
-template < class Graph, class P, class T, class R >
-typename detail::edge_capacity_value< Graph, P, T, R >::type
-edmonds_karp_max_flow(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink,
- const bgl_named_params< P, T, R >& params)
-{
- typedef typename get_param_type< vertex_predecessor_t,
- bgl_named_params< P, T, R > >::type Pred;
- return detail::edmonds_karp_dispatch1< Pred >::apply(
- g, src, sink, params, get_param(params, vertex_predecessor));
-}
-
-template < class Graph >
-typename property_traits<
- typename property_map< Graph, edge_capacity_t >::const_type >::value_type
-edmonds_karp_max_flow(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink)
-{
- bgl_named_params< int, buffer_param_t > params(0);
- return edmonds_karp_max_flow(g, src, sink, params);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_EDMONDS_KARP_MAX_FLOW_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/edmunds_karp_max_flow.hpp b/contrib/restricted/boost/graph/include/boost/graph/edmunds_karp_max_flow.hpp
deleted file mode 100644
index aee587acd9..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/edmunds_karp_max_flow.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-//=======================================================================
-// (c) Copyright Juergen Hunold 2008
-// Use, modification and distribution is subject to 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_DEPRECATED_INCLUDE_EDMONDS_KARP_MAX_FLOW_HPP
-#define BOOST_DEPRECATED_INCLUDE_EDMONDS_KARP_MAX_FLOW_HPP
-
-#if defined(_MSC_VER) || defined(__BORLANDC__) && !defined(__clang__) || defined(__DMC__)
-#pragma message( \
- "Warning: This header is deprecated. Please use: boost/graph/edmonds_karp_max_flow.hpp")
-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) \
- || defined(__IBMCPP__) || defined(__BORLANDC__)
-#warning \
- "This header is deprecated. Please use: boost/graph/edmonds_karp_max_flow.hpp"
-#endif
-
-#include <boost/graph/edmonds_karp_max_flow.hpp>
-
-#endif // BOOST_DEPRECATED_INCLUDE_EDMONDS_KARP_MAX_FLOW_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/erdos_renyi_generator.hpp b/contrib/restricted/boost/graph/include/boost/graph/erdos_renyi_generator.hpp
deleted file mode 100644
index f5e33c9632..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/erdos_renyi_generator.hpp
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2004, 2005 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jeremiah Willcock
-// Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_ERDOS_RENYI_GENERATOR_HPP
-#define BOOST_GRAPH_ERDOS_RENYI_GENERATOR_HPP
-
-#include <boost/assert.hpp>
-#include <iterator>
-#include <utility>
-#include <boost/shared_ptr.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/random/geometric_distribution.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-
-namespace boost
-{
-
-template < typename RandomGenerator, typename Graph >
-class erdos_renyi_iterator
-: public iterator_facade< erdos_renyi_iterator< RandomGenerator, Graph >,
- std::pair< typename graph_traits< Graph >::vertices_size_type,
- typename graph_traits< Graph >::vertices_size_type >,
- std::input_iterator_tag,
- const std::pair< typename graph_traits< Graph >::vertices_size_type,
- typename graph_traits< Graph >::vertices_size_type >& >
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- typedef typename graph_traits< Graph >::edges_size_type edges_size_type;
-
- BOOST_STATIC_CONSTANT(bool,
- is_undirected
- = (is_base_of< undirected_tag, directed_category >::value));
-
-public:
- erdos_renyi_iterator() : gen(), n(0), edges(0), allow_self_loops(false) {}
- erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
- double fraction = 0.0, bool allow_self_loops = false)
- : gen(&gen)
- , n(n)
- , edges(edges_size_type(fraction * n * n))
- , allow_self_loops(allow_self_loops)
- {
- if (is_undirected)
- edges = edges / 2;
- next();
- }
-
- erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
- edges_size_type m, bool allow_self_loops = false)
- : gen(&gen), n(n), edges(m), allow_self_loops(allow_self_loops)
- {
- next();
- }
-
- const std::pair< vertices_size_type, vertices_size_type >&
- dereference() const
- {
- return current;
- }
-
- void increment()
- {
- --edges;
- next();
- }
-
- bool equal(const erdos_renyi_iterator& other) const
- {
- return edges == other.edges;
- }
-
-private:
- void next()
- {
- uniform_int< vertices_size_type > rand_vertex(0, n - 1);
- current.first = rand_vertex(*gen);
- do
- {
- current.second = rand_vertex(*gen);
- } while (current.first == current.second && !allow_self_loops);
- }
-
- RandomGenerator* gen;
- vertices_size_type n;
- edges_size_type edges;
- bool allow_self_loops;
- std::pair< vertices_size_type, vertices_size_type > current;
-};
-
-template < typename RandomGenerator, typename Graph >
-class sorted_erdos_renyi_iterator
-: public iterator_facade< sorted_erdos_renyi_iterator< RandomGenerator, Graph >,
- std::pair< typename graph_traits< Graph >::vertices_size_type,
- typename graph_traits< Graph >::vertices_size_type >,
- std::input_iterator_tag,
- const std::pair< typename graph_traits< Graph >::vertices_size_type,
- typename graph_traits< Graph >::vertices_size_type >& >
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- typedef typename graph_traits< Graph >::edges_size_type edges_size_type;
-
- BOOST_STATIC_CONSTANT(bool,
- is_undirected
- = (is_base_of< undirected_tag, directed_category >::value));
-
-public:
- sorted_erdos_renyi_iterator()
- : gen()
- , rand_vertex(0.5)
- , n(0)
- , allow_self_loops(false)
- , src((std::numeric_limits< vertices_size_type >::max)())
- , tgt_index(vertices_size_type(-1))
- , prob(.5)
- {
- }
-
- // NOTE: The default probability has been changed to be the same as that
- // used by the geometic distribution. It was previously 0.0, which would
- // cause an assertion.
- sorted_erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
- double prob = 0.5, bool loops = false)
- : gen()
- , rand_vertex(1. - prob)
- , n(n)
- , allow_self_loops(loops)
- , src(0)
- , tgt_index(vertices_size_type(-1))
- , prob(prob)
- {
- this->gen.reset(new uniform_01< RandomGenerator* >(&gen));
-
- if (prob == 0.0)
- {
- src = (std::numeric_limits< vertices_size_type >::max)();
- return;
- }
- next();
- }
-
- const std::pair< vertices_size_type, vertices_size_type >&
- dereference() const
- {
- return current;
- }
-
- bool equal(const sorted_erdos_renyi_iterator& o) const
- {
- return src == o.src && tgt_index == o.tgt_index;
- }
-
- void increment() { next(); }
-
-private:
- void next()
- {
- // In order to get the edges from the generator in sorted order, one
- // effective (but slow) procedure would be to use a
- // bernoulli_distribution for each legal (src, tgt_index) pair. Because
- // of the O(|V|^2) cost of that, a geometric distribution is used. The
- // geometric distribution tells how many times the
- // bernoulli_distribution would need to be run until it returns true.
- // Thus, this distribution can be used to step through the edges
- // which are actually present.
- BOOST_ASSERT(src != (std::numeric_limits< vertices_size_type >::max)()
- && src != n);
- while (src != n)
- {
- vertices_size_type increment = rand_vertex(*gen);
- size_t tgt_index_limit
- = (is_undirected ? src + 1 : n) + (allow_self_loops ? 0 : -1);
- if (tgt_index + increment >= tgt_index_limit)
- {
- // Overflowed this source; go to the next one and try again.
- ++src;
- // This bias is because the geometric distribution always
- // returns values >=1, and we want to allow 0 as a valid target.
- tgt_index = vertices_size_type(-1);
- continue;
- }
- else
- {
- tgt_index += increment;
- current.first = src;
- current.second = tgt_index
- + (!allow_self_loops && !is_undirected && tgt_index >= src
- ? 1
- : 0);
- break;
- }
- }
- if (src == n)
- src = (std::numeric_limits< vertices_size_type >::max)();
- }
-
- shared_ptr< uniform_01< RandomGenerator* > > gen;
- geometric_distribution< vertices_size_type > rand_vertex;
- vertices_size_type n;
- bool allow_self_loops;
- vertices_size_type src, tgt_index;
- std::pair< vertices_size_type, vertices_size_type > current;
- double prob;
-};
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_ERDOS_RENYI_GENERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/exterior_property.hpp b/contrib/restricted/boost/graph/include/boost/graph/exterior_property.hpp
deleted file mode 100644
index 281b7bb2a9..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/exterior_property.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_EXTERIOR_PROPERTY_HPP
-#define BOOST_GRAPH_EXTERIOR_PROPERTY_HPP
-
-#include <vector>
-#include <boost/graph/property_maps/container_property_map.hpp>
-#include <boost/graph/property_maps/matrix_property_map.hpp>
-
-namespace boost
-{
-namespace detail
-{
- // The vector matrix provides a little abstraction over vector
- // types that makes matrices easier to work with.
- template < typename Value > struct vector_matrix
- {
- typedef std::vector< Value > container_type;
- typedef std::vector< container_type > matrix_type;
-
- typedef container_type value_type;
- typedef container_type& reference;
- typedef const container_type const_reference;
- typedef container_type* pointer;
- typedef typename matrix_type::size_type size_type;
-
- // Instantiate the matrix over n elements (creates an n by n matrix).
- // The graph has to be passed in order to ensure the index maps
- // are constructed correctly when returning indexible elements.
- inline vector_matrix(size_type n) : m_matrix(n, container_type(n)) {}
-
- inline reference operator[](size_type n) { return m_matrix[n]; }
-
- inline const_reference operator[](size_type n) const
- {
- return m_matrix[n];
- }
-
- matrix_type m_matrix;
- };
-} /* namespace detail */
-
-/**
- * The exterior_property metafunction defines an appropriate set of types for
- * creating an exterior property. An exterior property is comprised of a both
- * a container and a property map that acts as its abstraction. An extension
- * of this metafunction will select an appropriate "matrix" property that
- * records values for pairs of vertices.
- *
- * @todo This does not currently support the ability to define exterior
- * properties for graph types that do not model the IndexGraph concepts. A
- * solution should not be especially difficult, but will require an extension
- * of type traits to affect the type selection.
- */
-template < typename Graph, typename Key, typename Value >
-struct exterior_property
-{
- typedef Key key_type;
- typedef Value value_type;
-
- typedef std::vector< Value > container_type;
- typedef container_property_map< Graph, Key, container_type > map_type;
-
- typedef detail::vector_matrix< Value > matrix_type;
- typedef matrix_property_map< Graph, Key, matrix_type > matrix_map_type;
-
-private:
- exterior_property() {}
- exterior_property(const exterior_property&) {}
-};
-
-/**
- * Define a the container and property map types requried to create an exterior
- * vertex property for the given value type. The Graph parameter is required to
- * model the VertexIndexGraph concept.
- */
-template < typename Graph, typename Value > struct exterior_vertex_property
-{
- typedef exterior_property< Graph,
- typename graph_traits< Graph >::vertex_descriptor, Value >
- property_type;
- typedef typename property_type::key_type key_type;
- typedef typename property_type::value_type value_type;
- typedef typename property_type::container_type container_type;
- typedef typename property_type::map_type map_type;
- typedef typename property_type::matrix_type matrix_type;
- typedef typename property_type::matrix_map_type matrix_map_type;
-};
-
-/**
- * Define a the container and property map types requried to create an exterior
- * edge property for the given value type. The Graph parameter is required to
- * model the EdgeIndexGraph concept.
- */
-template < typename Graph, typename Value > struct exterior_edge_property
-{
- typedef exterior_property< Graph,
- typename graph_traits< Graph >::edge_descriptor, Value >
- property_type;
- typedef typename property_type::key_type key_type;
- typedef typename property_type::value_type value_type;
- typedef typename property_type::container_type container_type;
- typedef typename property_type::map_type map_type;
- typedef typename property_type::matrix_type matrix_type;
- typedef typename property_type::matrix_map_type matrix_map_type;
-};
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/find_flow_cost.hpp b/contrib/restricted/boost/graph/include/boost/graph/find_flow_cost.hpp
deleted file mode 100644
index 78fd955d83..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/find_flow_cost.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//=======================================================================
-// Copyright 2013 University of Warsaw.
-// Authors: Piotr Wygocki
-//
-// 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_FIND_FLOW_COST_HPP
-#define BOOST_GRAPH_FIND_FLOW_COST_HPP
-
-#include <boost/graph/iteration_macros.hpp>
-
-namespace boost
-{
-
-template < class Graph, class Capacity, class ResidualCapacity, class Weight >
-typename property_traits< Weight >::value_type find_flow_cost(const Graph& g,
- Capacity capacity, ResidualCapacity residual_capacity, Weight weight)
-{
- typedef typename property_traits< Weight >::value_type Cost;
-
- Cost cost = 0;
- BGL_FORALL_EDGES_T(e, g, Graph)
- {
- if (get(capacity, e) > Cost(0))
- {
- cost += (get(capacity, e) - get(residual_capacity, e))
- * get(weight, e);
- }
- }
- return cost;
-}
-
-template < class Graph, class P, class T, class R >
-typename detail::edge_weight_value< Graph, P, T, R >::type find_flow_cost(
- const Graph& g, const bgl_named_params< P, T, R >& params)
-{
- return find_flow_cost(g,
- choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
- choose_const_pmap(get_param(params, edge_residual_capacity), g,
- edge_residual_capacity),
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight));
-}
-
-template < class Graph >
-typename property_traits<
- typename property_map< Graph, edge_capacity_t >::type >::value_type
-find_flow_cost(const Graph& g)
-{
- bgl_named_params< int, buffer_param_t > params(0);
- return find_flow_cost(g, params);
-}
-
-} // boost
-
-#endif /* BOOST_GRAPH_FIND_FLOW_COST_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/floyd_warshall_shortest.hpp b/contrib/restricted/boost/graph/include/boost/graph/floyd_warshall_shortest.hpp
deleted file mode 100644
index e8eeae5472..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/floyd_warshall_shortest.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2002 Rensselaer Polytechnic Institute
-
-// 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)
-
-// Authors: Lauren Foutz
-// Scott Hill
-
-/*
- This file implements the functions
-
- template <class VertexListGraph, class DistanceMatrix,
- class P, class T, class R>
- bool floyd_warshall_initialized_all_pairs_shortest_paths(
- const VertexListGraph& g, DistanceMatrix& d,
- const bgl_named_params<P, T, R>& params)
-
- AND
-
- template <class VertexAndEdgeListGraph, class DistanceMatrix,
- class P, class T, class R>
- bool floyd_warshall_all_pairs_shortest_paths(
- const VertexAndEdgeListGraph& g, DistanceMatrix& d,
- const bgl_named_params<P, T, R>& params)
-*/
-
-#ifndef BOOST_GRAPH_FLOYD_WARSHALL_HPP
-#define BOOST_GRAPH_FLOYD_WARSHALL_HPP
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/relax.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-namespace detail
-{
- template < typename T, typename BinaryPredicate >
- T min_with_compare(const T& x, const T& y, const BinaryPredicate& compare)
- {
- if (compare(x, y))
- return x;
- else
- return y;
- }
-
- template < typename VertexListGraph, typename DistanceMatrix,
- typename BinaryPredicate, typename BinaryFunction, typename Infinity,
- typename Zero >
- bool floyd_warshall_dispatch(const VertexListGraph& g, DistanceMatrix& d,
- const BinaryPredicate& compare, const BinaryFunction& combine,
- const Infinity& inf, const Zero& zero)
- {
- typename graph_traits< VertexListGraph >::vertex_iterator i, lasti, j,
- lastj, k, lastk;
-
- for (boost::tie(k, lastk) = vertices(g); k != lastk; k++)
- for (boost::tie(i, lasti) = vertices(g); i != lasti; i++)
- if (d[*i][*k] != inf)
- for (boost::tie(j, lastj) = vertices(g); j != lastj; j++)
- if (d[*k][*j] != inf)
- d[*i][*j] = detail::min_with_compare(d[*i][*j],
- combine(d[*i][*k], d[*k][*j]), compare);
-
- for (boost::tie(i, lasti) = vertices(g); i != lasti; i++)
- if (compare(d[*i][*i], zero))
- return false;
- return true;
- }
-}
-
-template < typename VertexListGraph, typename DistanceMatrix,
- typename BinaryPredicate, typename BinaryFunction, typename Infinity,
- typename Zero >
-bool floyd_warshall_initialized_all_pairs_shortest_paths(
- const VertexListGraph& g, DistanceMatrix& d, const BinaryPredicate& compare,
- const BinaryFunction& combine, const Infinity& inf, const Zero& zero)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< VertexListGraph >));
-
- return detail::floyd_warshall_dispatch(g, d, compare, combine, inf, zero);
-}
-
-template < typename VertexAndEdgeListGraph, typename DistanceMatrix,
- typename WeightMap, typename BinaryPredicate, typename BinaryFunction,
- typename Infinity, typename Zero >
-bool floyd_warshall_all_pairs_shortest_paths(const VertexAndEdgeListGraph& g,
- DistanceMatrix& d, const WeightMap& w, const BinaryPredicate& compare,
- const BinaryFunction& combine, const Infinity& inf, const Zero& zero)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< VertexAndEdgeListGraph >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< VertexAndEdgeListGraph >));
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< VertexAndEdgeListGraph >));
-
- typename graph_traits< VertexAndEdgeListGraph >::vertex_iterator firstv,
- lastv, firstv2, lastv2;
- typename graph_traits< VertexAndEdgeListGraph >::edge_iterator first, last;
-
- for (boost::tie(firstv, lastv) = vertices(g); firstv != lastv; firstv++)
- for (boost::tie(firstv2, lastv2) = vertices(g); firstv2 != lastv2;
- firstv2++)
- d[*firstv][*firstv2] = inf;
-
- for (boost::tie(firstv, lastv) = vertices(g); firstv != lastv; firstv++)
- d[*firstv][*firstv] = zero;
-
- for (boost::tie(first, last) = edges(g); first != last; first++)
- {
- if (d[source(*first, g)][target(*first, g)] != inf)
- {
- d[source(*first, g)][target(*first, g)]
- = detail::min_with_compare(get(w, *first),
- d[source(*first, g)][target(*first, g)], compare);
- }
- else
- d[source(*first, g)][target(*first, g)] = get(w, *first);
- }
-
- bool is_undirected = is_same<
- typename graph_traits< VertexAndEdgeListGraph >::directed_category,
- undirected_tag >::value;
- if (is_undirected)
- {
- for (boost::tie(first, last) = edges(g); first != last; first++)
- {
- if (d[target(*first, g)][source(*first, g)] != inf)
- d[target(*first, g)][source(*first, g)]
- = detail::min_with_compare(get(w, *first),
- d[target(*first, g)][source(*first, g)], compare);
- else
- d[target(*first, g)][source(*first, g)] = get(w, *first);
- }
- }
-
- return detail::floyd_warshall_dispatch(g, d, compare, combine, inf, zero);
-}
-
-namespace detail
-{
- template < class VertexListGraph, class DistanceMatrix, class WeightMap,
- class P, class T, class R >
- bool floyd_warshall_init_dispatch(const VertexListGraph& g,
- DistanceMatrix& d, WeightMap /*w*/,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename property_traits< WeightMap >::value_type WM;
- WM inf = choose_param(get_param(params, distance_inf_t()),
- std::numeric_limits< WM >::max BOOST_PREVENT_MACRO_SUBSTITUTION());
-
- return floyd_warshall_initialized_all_pairs_shortest_paths(g, d,
- choose_param(
- get_param(params, distance_compare_t()), std::less< WM >()),
- choose_param(get_param(params, distance_combine_t()),
- closed_plus< WM >(inf)),
- inf, choose_param(get_param(params, distance_zero_t()), WM()));
- }
-
- template < class VertexAndEdgeListGraph, class DistanceMatrix,
- class WeightMap, class P, class T, class R >
- bool floyd_warshall_noninit_dispatch(const VertexAndEdgeListGraph& g,
- DistanceMatrix& d, WeightMap w,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename property_traits< WeightMap >::value_type WM;
-
- WM inf = choose_param(get_param(params, distance_inf_t()),
- std::numeric_limits< WM >::max BOOST_PREVENT_MACRO_SUBSTITUTION());
- return floyd_warshall_all_pairs_shortest_paths(g, d, w,
- choose_param(
- get_param(params, distance_compare_t()), std::less< WM >()),
- choose_param(get_param(params, distance_combine_t()),
- closed_plus< WM >(inf)),
- inf, choose_param(get_param(params, distance_zero_t()), WM()));
- }
-
-} // namespace detail
-
-template < class VertexListGraph, class DistanceMatrix, class P, class T,
- class R >
-bool floyd_warshall_initialized_all_pairs_shortest_paths(
- const VertexListGraph& g, DistanceMatrix& d,
- const bgl_named_params< P, T, R >& params)
-{
- return detail::floyd_warshall_init_dispatch(g, d,
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- params);
-}
-
-template < class VertexListGraph, class DistanceMatrix >
-bool floyd_warshall_initialized_all_pairs_shortest_paths(
- const VertexListGraph& g, DistanceMatrix& d)
-{
- bgl_named_params< int, int > params(0);
- return detail::floyd_warshall_init_dispatch(
- g, d, get(edge_weight, g), params);
-}
-
-template < class VertexAndEdgeListGraph, class DistanceMatrix, class P, class T,
- class R >
-bool floyd_warshall_all_pairs_shortest_paths(const VertexAndEdgeListGraph& g,
- DistanceMatrix& d, const bgl_named_params< P, T, R >& params)
-{
- return detail::floyd_warshall_noninit_dispatch(g, d,
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- params);
-}
-
-template < class VertexAndEdgeListGraph, class DistanceMatrix >
-bool floyd_warshall_all_pairs_shortest_paths(
- const VertexAndEdgeListGraph& g, DistanceMatrix& d)
-{
- bgl_named_params< int, int > params(0);
- return detail::floyd_warshall_noninit_dispatch(
- g, d, get(edge_weight, g), params);
-}
-
-} // namespace boost
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/fruchterman_reingold.hpp b/contrib/restricted/boost/graph/include/boost/graph/fruchterman_reingold.hpp
deleted file mode 100644
index d2a443427d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/fruchterman_reingold.hpp
+++ /dev/null
@@ -1,460 +0,0 @@
-// Copyright 2004, 2005 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
-#define BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
-
-#include <boost/config/no_tr1/cmath.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/topology.hpp> // For topology concepts
-#include <boost/graph/detail/mpi_include.hpp>
-#include <vector>
-#include <list>
-#include <algorithm> // for std::min and std::max
-#include <numeric> // for std::accumulate
-#include <cmath> // for std::sqrt and std::fabs
-#include <functional>
-
-namespace boost
-{
-
-struct square_distance_attractive_force
-{
- template < typename Graph, typename T >
- T operator()(typename graph_traits< Graph >::edge_descriptor, T k, T d,
- const Graph&) const
- {
- return d * d / k;
- }
-};
-
-struct square_distance_repulsive_force
-{
- template < typename Graph, typename T >
- T operator()(typename graph_traits< Graph >::vertex_descriptor,
- typename graph_traits< Graph >::vertex_descriptor, T k, T d,
- const Graph&) const
- {
- return k * k / d;
- }
-};
-
-template < typename T > struct linear_cooling
-{
- typedef T result_type;
-
- linear_cooling(std::size_t iterations)
- : temp(T(iterations) / T(10)), step(0.1)
- {
- }
-
- linear_cooling(std::size_t iterations, T temp)
- : temp(temp), step(temp / T(iterations))
- {
- }
-
- T operator()()
- {
- T old_temp = temp;
- temp -= step;
- if (temp < T(0))
- temp = T(0);
- return old_temp;
- }
-
-private:
- T temp;
- T step;
-};
-
-struct all_force_pairs
-{
- template < typename Graph, typename ApplyForce >
- void operator()(const Graph& g, ApplyForce apply_force)
- {
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- vertex_iterator v, end;
- for (boost::tie(v, end) = vertices(g); v != end; ++v)
- {
- vertex_iterator u = v;
- for (++u; u != end; ++u)
- {
- apply_force(*u, *v);
- apply_force(*v, *u);
- }
- }
- }
-};
-
-template < typename Topology, typename PositionMap > struct grid_force_pairs
-{
- typedef typename property_traits< PositionMap >::value_type Point;
- BOOST_STATIC_ASSERT(Point::dimensions == 2);
- typedef typename Topology::point_difference_type point_difference_type;
-
- template < typename Graph >
- explicit grid_force_pairs(
- const Topology& topology, PositionMap position, const Graph& g)
- : topology(topology), position(position)
- {
- two_k = 2. * this->topology.volume(this->topology.extent())
- / std::sqrt((double)num_vertices(g));
- }
-
- template < typename Graph, typename ApplyForce >
- void operator()(const Graph& g, ApplyForce apply_force)
- {
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
- typedef std::list< vertex_descriptor > bucket_t;
- typedef std::vector< bucket_t > buckets_t;
-
- std::size_t columns = std::size_t(topology.extent()[0] / two_k + 1.);
- std::size_t rows = std::size_t(topology.extent()[1] / two_k + 1.);
- buckets_t buckets(rows * columns);
- vertex_iterator v, v_end;
- for (boost::tie(v, v_end) = vertices(g); v != v_end; ++v)
- {
- std::size_t column = std::size_t(
- (get(position, *v)[0] + topology.extent()[0] / 2) / two_k);
- std::size_t row = std::size_t(
- (get(position, *v)[1] + topology.extent()[1] / 2) / two_k);
-
- if (column >= columns)
- column = columns - 1;
- if (row >= rows)
- row = rows - 1;
- buckets[row * columns + column].push_back(*v);
- }
-
- for (std::size_t row = 0; row < rows; ++row)
- for (std::size_t column = 0; column < columns; ++column)
- {
- bucket_t& bucket = buckets[row * columns + column];
- typedef typename bucket_t::iterator bucket_iterator;
- for (bucket_iterator u = bucket.begin(); u != bucket.end(); ++u)
- {
- // Repulse vertices in this bucket
- bucket_iterator v = u;
- for (++v; v != bucket.end(); ++v)
- {
- apply_force(*u, *v);
- apply_force(*v, *u);
- }
-
- std::size_t adj_start_row = row == 0 ? 0 : row - 1;
- std::size_t adj_end_row = row == rows - 1 ? row : row + 1;
- std::size_t adj_start_column = column == 0 ? 0 : column - 1;
- std::size_t adj_end_column
- = column == columns - 1 ? column : column + 1;
- for (std::size_t other_row = adj_start_row;
- other_row <= adj_end_row; ++other_row)
- for (std::size_t other_column = adj_start_column;
- other_column <= adj_end_column; ++other_column)
- if (other_row != row || other_column != column)
- {
- // Repulse vertices in this bucket
- bucket_t& other_bucket
- = buckets[other_row * columns
- + other_column];
- for (v = other_bucket.begin();
- v != other_bucket.end(); ++v)
- {
- double dist = topology.distance(
- get(position, *u), get(position, *v));
- if (dist < two_k)
- apply_force(*u, *v);
- }
- }
- }
- }
- }
-
-private:
- const Topology& topology;
- PositionMap position;
- double two_k;
-};
-
-template < typename PositionMap, typename Topology, typename Graph >
-inline grid_force_pairs< Topology, PositionMap > make_grid_force_pairs(
- const Topology& topology, const PositionMap& position, const Graph& g)
-{
- return grid_force_pairs< Topology, PositionMap >(topology, position, g);
-}
-
-template < typename Graph, typename PositionMap, typename Topology >
-void scale_graph(const Graph& g, PositionMap position, const Topology& topology,
- typename Topology::point_type upper_left,
- typename Topology::point_type lower_right)
-{
- if (num_vertices(g) == 0)
- return;
-
- typedef typename Topology::point_type Point;
- typedef typename Topology::point_difference_type point_difference_type;
-
- // Find min/max ranges
- Point min_point = get(position, *vertices(g).first), max_point = min_point;
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- min_point = topology.pointwise_min(min_point, get(position, v));
- max_point = topology.pointwise_max(max_point, get(position, v));
- }
-
- Point old_origin = topology.move_position_toward(min_point, 0.5, max_point);
- Point new_origin
- = topology.move_position_toward(upper_left, 0.5, lower_right);
- point_difference_type old_size = topology.difference(max_point, min_point);
- point_difference_type new_size
- = topology.difference(lower_right, upper_left);
-
- // Scale to bounding box provided
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- point_difference_type relative_loc
- = topology.difference(get(position, v), old_origin);
- relative_loc = (relative_loc / old_size) * new_size;
- put(position, v, topology.adjust(new_origin, relative_loc));
- }
-}
-
-namespace detail
-{
- template < typename Topology, typename PropMap, typename Vertex >
- void maybe_jitter_point(const Topology& topology, const PropMap& pm,
- Vertex v, const typename Topology::point_type& p2)
- {
- double too_close = topology.norm(topology.extent()) / 10000.;
- if (topology.distance(get(pm, v), p2) < too_close)
- {
- put(pm, v,
- topology.move_position_toward(
- get(pm, v), 1. / 200, topology.random_point()));
- }
- }
-
- template < typename Topology, typename PositionMap,
- typename DisplacementMap, typename RepulsiveForce, typename Graph >
- struct fr_apply_force
- {
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
- typedef typename Topology::point_type Point;
- typedef typename Topology::point_difference_type PointDiff;
-
- fr_apply_force(const Topology& topology, const PositionMap& position,
- const DisplacementMap& displacement, RepulsiveForce repulsive_force,
- double k, const Graph& g)
- : topology(topology)
- , position(position)
- , displacement(displacement)
- , repulsive_force(repulsive_force)
- , k(k)
- , g(g)
- {
- }
-
- void operator()(vertex_descriptor u, vertex_descriptor v)
- {
- if (u != v)
- {
- // When the vertices land on top of each other, move the
- // first vertex away from the boundaries.
- maybe_jitter_point(topology, position, u, get(position, v));
-
- double dist
- = topology.distance(get(position, u), get(position, v));
- typename Topology::point_difference_type dispv
- = get(displacement, v);
- if (dist == 0.)
- {
- for (std::size_t i = 0; i < Point::dimensions; ++i)
- {
- dispv[i] += 0.01;
- }
- }
- else
- {
- double fr = repulsive_force(u, v, k, dist, g);
- dispv += (fr / dist)
- * topology.difference(
- get(position, v), get(position, u));
- }
- put(displacement, v, dispv);
- }
- }
-
- private:
- const Topology& topology;
- PositionMap position;
- DisplacementMap displacement;
- RepulsiveForce repulsive_force;
- double k;
- const Graph& g;
- };
-
-} // end namespace detail
-
-template < typename Topology, typename Graph, typename PositionMap,
- typename AttractiveForce, typename RepulsiveForce, typename ForcePairs,
- typename Cooling, typename DisplacementMap >
-void fruchterman_reingold_force_directed_layout(const Graph& g,
- PositionMap position, const Topology& topology,
- AttractiveForce attractive_force, RepulsiveForce repulsive_force,
- ForcePairs force_pairs, Cooling cool, DisplacementMap displacement)
-{
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator;
-
- double volume = topology.volume(topology.extent());
-
- // assume positions are initialized randomly
- double k = pow(volume / num_vertices(g),
- 1. / (double)(Topology::point_difference_type::dimensions));
-
- detail::fr_apply_force< Topology, PositionMap, DisplacementMap,
- RepulsiveForce, Graph >
- apply_force(topology, position, displacement, repulsive_force, k, g);
-
- do
- {
- // Calculate repulsive forces
- vertex_iterator v, v_end;
- for (boost::tie(v, v_end) = vertices(g); v != v_end; ++v)
- put(displacement, *v, typename Topology::point_difference_type());
- force_pairs(g, apply_force);
-
- // Calculate attractive forces
- edge_iterator e, e_end;
- for (boost::tie(e, e_end) = edges(g); e != e_end; ++e)
- {
- vertex_descriptor v = source(*e, g);
- vertex_descriptor u = target(*e, g);
-
- // When the vertices land on top of each other, move the
- // first vertex away from the boundaries.
- ::boost::detail::maybe_jitter_point(
- topology, position, u, get(position, v));
-
- typename Topology::point_difference_type delta
- = topology.difference(get(position, v), get(position, u));
- double dist = topology.distance(get(position, u), get(position, v));
- double fa = attractive_force(*e, k, dist, g);
-
- put(displacement, v, get(displacement, v) - (fa / dist) * delta);
- put(displacement, u, get(displacement, u) + (fa / dist) * delta);
- }
-
- if (double temp = cool())
- {
- // Update positions
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- double disp_size = topology.norm(get(displacement, v));
- put(position, v,
- topology.adjust(get(position, v),
- get(displacement, v)
- * (min BOOST_PREVENT_MACRO_SUBSTITUTION(
- disp_size, temp)
- / disp_size)));
- put(position, v, topology.bound(get(position, v)));
- }
- }
- else
- {
- break;
- }
- } while (true);
-}
-
-namespace detail
-{
- template < typename DisplacementMap > struct fr_force_directed_layout
- {
- template < typename Topology, typename Graph, typename PositionMap,
- typename AttractiveForce, typename RepulsiveForce,
- typename ForcePairs, typename Cooling, typename Param, typename Tag,
- typename Rest >
- static void run(const Graph& g, PositionMap position,
- const Topology& topology, AttractiveForce attractive_force,
- RepulsiveForce repulsive_force, ForcePairs force_pairs,
- Cooling cool, DisplacementMap displacement,
- const bgl_named_params< Param, Tag, Rest >&)
- {
- fruchterman_reingold_force_directed_layout(g, position, topology,
- attractive_force, repulsive_force, force_pairs, cool,
- displacement);
- }
- };
-
- template <> struct fr_force_directed_layout< param_not_found >
- {
- template < typename Topology, typename Graph, typename PositionMap,
- typename AttractiveForce, typename RepulsiveForce,
- typename ForcePairs, typename Cooling, typename Param, typename Tag,
- typename Rest >
- static void run(const Graph& g, PositionMap position,
- const Topology& topology, AttractiveForce attractive_force,
- RepulsiveForce repulsive_force, ForcePairs force_pairs,
- Cooling cool, param_not_found,
- const bgl_named_params< Param, Tag, Rest >& params)
- {
- typedef typename Topology::point_difference_type PointDiff;
- std::vector< PointDiff > displacements(num_vertices(g));
- fruchterman_reingold_force_directed_layout(g, position, topology,
- attractive_force, repulsive_force, force_pairs, cool,
- make_iterator_property_map(displacements.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index),
- PointDiff()));
- }
- };
-
-} // end namespace detail
-
-template < typename Topology, typename Graph, typename PositionMap,
- typename Param, typename Tag, typename Rest >
-void fruchterman_reingold_force_directed_layout(const Graph& g,
- PositionMap position, const Topology& topology,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
- typedef typename get_param_type< vertex_displacement_t,
- bgl_named_params< Param, Tag, Rest > >::type D;
-
- detail::fr_force_directed_layout< D >::run(g, position, topology,
- choose_param(get_param(params, attractive_force_t()),
- square_distance_attractive_force()),
- choose_param(get_param(params, repulsive_force_t()),
- square_distance_repulsive_force()),
- choose_param(get_param(params, force_pairs_t()),
- make_grid_force_pairs(topology, position, g)),
- choose_param(
- get_param(params, cooling_t()), linear_cooling< double >(100)),
- get_param(params, vertex_displacement_t()), params);
-}
-
-template < typename Topology, typename Graph, typename PositionMap >
-void fruchterman_reingold_force_directed_layout(
- const Graph& g, PositionMap position, const Topology& topology)
-{
- fruchterman_reingold_force_directed_layout(g, position, topology,
- attractive_force(square_distance_attractive_force()));
-}
-
-} // end namespace boost
-
-
-
-#endif // BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/geodesic_distance.hpp b/contrib/restricted/boost/graph/include/boost/graph/geodesic_distance.hpp
deleted file mode 100644
index 5675406a08..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/geodesic_distance.hpp
+++ /dev/null
@@ -1,217 +0,0 @@
-// (C) Copyright Andrew Sutton 2007
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_GEODESIC_DISTANCE_HPP
-#define BOOST_GRAPH_GEODESIC_DISTANCE_HPP
-
-#include <boost/graph/detail/geodesic.hpp>
-#include <boost/graph/exterior_property.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-template < typename Graph, typename DistanceType, typename ResultType,
- typename Divides = std::divides< ResultType > >
-struct mean_geodesic_measure
-: public geodesic_measure< Graph, DistanceType, ResultType >
-{
- typedef geodesic_measure< Graph, DistanceType, ResultType > base_type;
- typedef typename base_type::distance_type distance_type;
- typedef typename base_type::result_type result_type;
-
- result_type operator()(distance_type d, const Graph& g)
- {
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((NumericValueConcept< DistanceType >));
- BOOST_CONCEPT_ASSERT((NumericValueConcept< ResultType >));
-// NOTE: Disabled until this concept assert is fixed in Boost.ConceptCheck.
-// BOOST_CONCEPT_ASSERT((AdaptableBinaryFunctionConcept< Divides,
-// ResultType, ResultType, ResultType >));
-
- return (d == base_type::infinite_distance())
- ? base_type::infinite_result()
- : div(result_type(d), result_type(num_vertices(g) - 1));
- }
- Divides div;
-};
-
-template < typename Graph, typename DistanceMap >
-inline mean_geodesic_measure< Graph,
- typename property_traits< DistanceMap >::value_type, double >
-measure_mean_geodesic(const Graph&, DistanceMap)
-{
- return mean_geodesic_measure< Graph,
- typename property_traits< DistanceMap >::value_type, double >();
-}
-
-template < typename T, typename Graph, typename DistanceMap >
-inline mean_geodesic_measure< Graph,
- typename property_traits< DistanceMap >::value_type, T >
-measure_mean_geodesic(const Graph&, DistanceMap)
-{
- return mean_geodesic_measure< Graph,
- typename property_traits< DistanceMap >::value_type, T >();
-}
-
-// This is a little different because it's expected that the result type
-// should (must?) be the same as the distance type. There's a type of
-// transitivity in this thinking... If the average of distances has type
-// X then the average of x's should also be type X. Is there a case where this
-// is not true?
-//
-// This type is a little under-genericized... It needs generic parameters
-// for addition and division.
-template < typename Graph, typename DistanceType >
-struct mean_graph_distance_measure
-: public geodesic_measure< Graph, DistanceType, DistanceType >
-{
- typedef geodesic_measure< Graph, DistanceType, DistanceType > base_type;
- typedef typename base_type::distance_type distance_type;
- typedef typename base_type::result_type result_type;
-
- inline result_type operator()(distance_type d, const Graph& g)
- {
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((NumericValueConcept< DistanceType >));
-
- if (d == base_type::infinite_distance())
- {
- return base_type::infinite_result();
- }
- else
- {
- return d / result_type(num_vertices(g));
- }
- }
-};
-
-template < typename Graph, typename DistanceMap >
-inline mean_graph_distance_measure< Graph,
- typename property_traits< DistanceMap >::value_type >
-measure_graph_mean_geodesic(const Graph&, DistanceMap)
-{
- typedef typename property_traits< DistanceMap >::value_type T;
- return mean_graph_distance_measure< Graph, T >();
-}
-
-template < typename Graph, typename DistanceMap, typename Measure,
- typename Combinator >
-inline typename Measure::result_type mean_geodesic(
- const Graph& g, DistanceMap dist, Measure measure, Combinator combine)
-{
- BOOST_CONCEPT_ASSERT((DistanceMeasureConcept< Measure, Graph >));
- typedef typename Measure::distance_type Distance;
-
- Distance n = detail::combine_distances(g, dist, combine, Distance(0));
- return measure(n, g);
-}
-
-template < typename Graph, typename DistanceMap, typename Measure >
-inline typename Measure::result_type mean_geodesic(
- const Graph& g, DistanceMap dist, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((DistanceMeasureConcept< Measure, Graph >));
- typedef typename Measure::distance_type Distance;
-
- return mean_geodesic(g, dist, measure, std::plus< Distance >());
-}
-
-template < typename Graph, typename DistanceMap >
-inline double mean_geodesic(const Graph& g, DistanceMap dist)
-{
- return mean_geodesic(g, dist, measure_mean_geodesic(g, dist));
-}
-
-template < typename T, typename Graph, typename DistanceMap >
-inline T mean_geodesic(const Graph& g, DistanceMap dist)
-{
- return mean_geodesic(g, dist, measure_mean_geodesic< T >(g, dist));
-}
-
-template < typename Graph, typename DistanceMatrixMap, typename GeodesicMap,
- typename Measure >
-inline typename property_traits< GeodesicMap >::value_type all_mean_geodesics(
- const Graph& g, DistanceMatrixMap dist, GeodesicMap geo, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< DistanceMatrixMap, Vertex >));
- typedef
- typename property_traits< DistanceMatrixMap >::value_type DistanceMap;
- BOOST_CONCEPT_ASSERT((DistanceMeasureConcept< Measure, Graph >));
- typedef typename Measure::result_type Result;
- BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept< GeodesicMap, Vertex >));
- BOOST_CONCEPT_ASSERT((NumericValueConcept< Result >));
-
- // NOTE: We could compute the mean geodesic here by performing additional
- // computations (i.e., adding and dividing). However, I don't really feel
- // like fully genericizing the entire operation yet so I'm not going to.
-
- Result inf = numeric_values< Result >::infinity();
- Result sum = numeric_values< Result >::zero();
- VertexIterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- DistanceMap dm = get(dist, *i);
- Result r = mean_geodesic(g, dm, measure);
- put(geo, *i, r);
-
- // compute the sum along with geodesics
- if (r == inf)
- {
- sum = inf;
- }
- else if (sum != inf)
- {
- sum += r;
- }
- }
-
- // return the average of averages.
- return sum / Result(num_vertices(g));
-}
-
-template < typename Graph, typename DistanceMatrixMap, typename GeodesicMap >
-inline typename property_traits< GeodesicMap >::value_type all_mean_geodesics(
- const Graph& g, DistanceMatrixMap dist, GeodesicMap geo)
-{
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< DistanceMatrixMap, Vertex >));
- typedef
- typename property_traits< DistanceMatrixMap >::value_type DistanceMap;
- BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept< GeodesicMap, Vertex >));
- typedef typename property_traits< GeodesicMap >::value_type Result;
-
- return all_mean_geodesics(
- g, dist, geo, measure_mean_geodesic< Result >(g, DistanceMap()));
-}
-
-template < typename Graph, typename GeodesicMap, typename Measure >
-inline typename Measure::result_type small_world_distance(
- const Graph& g, GeodesicMap geo, Measure measure)
-{
- BOOST_CONCEPT_ASSERT((DistanceMeasureConcept< Measure, Graph >));
- typedef typename Measure::result_type Result;
-
- Result sum
- = detail::combine_distances(g, geo, std::plus< Result >(), Result(0));
- return measure(sum, g);
-}
-
-template < typename Graph, typename GeodesicMap >
-inline typename property_traits< GeodesicMap >::value_type small_world_distance(
- const Graph& g, GeodesicMap geo)
-{
- return small_world_distance(g, geo, measure_graph_mean_geodesic(g, geo));
-}
-
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/graph_archetypes.hpp b/contrib/restricted/boost/graph/include/boost/graph/graph_archetypes.hpp
deleted file mode 100644
index 428c3c5afd..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/graph_archetypes.hpp
+++ /dev/null
@@ -1,326 +0,0 @@
-//=======================================================================
-// Copyright 2002 Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_ARCHETYPES_HPP
-#define BOOST_GRAPH_ARCHETYPES_HPP
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/concept_archetype.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-
-namespace boost
-{ // should use a different namespace for this
-
-namespace detail
-{
- struct null_graph_archetype : public null_archetype<>
- {
- struct traversal_category
- {
- };
- };
-}
-
-//===========================================================================
-template < typename Vertex, typename Directed, typename ParallelCategory,
- typename Base = detail::null_graph_archetype >
-struct incidence_graph_archetype : public Base
-{
- typedef typename Base::traversal_category base_trav_cat;
- struct traversal_category : public incidence_graph_tag, public base_trav_cat
- {
- };
-#if 0
- typedef immutable_graph_tag mutability_category;
-#endif
- typedef Vertex vertex_descriptor;
- typedef unsigned int degree_size_type;
- typedef unsigned int vertices_size_type;
- typedef unsigned int edges_size_type;
- struct edge_descriptor
- {
- edge_descriptor() {}
- edge_descriptor(const detail::dummy_constructor&) {}
- bool operator==(const edge_descriptor&) const { return false; }
- bool operator!=(const edge_descriptor&) const { return false; }
- };
- typedef input_iterator_archetype< edge_descriptor > out_edge_iterator;
-
- typedef Directed directed_category;
- typedef ParallelCategory edge_parallel_category;
-
- typedef void adjacency_iterator;
- typedef void in_edge_iterator;
- typedef void vertex_iterator;
- typedef void edge_iterator;
-
- static vertex_descriptor null_vertex() { return vertex_descriptor(); }
-};
-template < typename V, typename D, typename P, typename B >
-V source(
- const typename incidence_graph_archetype< V, D, P, B >::edge_descriptor&,
- const incidence_graph_archetype< V, D, P, B >&)
-{
- return V(static_object< detail::dummy_constructor >::get());
-}
-template < typename V, typename D, typename P, typename B >
-V target(
- const typename incidence_graph_archetype< V, D, P, B >::edge_descriptor&,
- const incidence_graph_archetype< V, D, P, B >&)
-{
- return V(static_object< detail::dummy_constructor >::get());
-}
-
-template < typename V, typename D, typename P, typename B >
-std::pair< typename incidence_graph_archetype< V, D, P, B >::out_edge_iterator,
- typename incidence_graph_archetype< V, D, P, B >::out_edge_iterator >
-out_edges(const V&, const incidence_graph_archetype< V, D, P, B >&)
-{
- typedef typename incidence_graph_archetype< V, D, P, B >::out_edge_iterator
- Iter;
- return std::make_pair(Iter(), Iter());
-}
-
-template < typename V, typename D, typename P, typename B >
-typename incidence_graph_archetype< V, D, P, B >::degree_size_type out_degree(
- const V&, const incidence_graph_archetype< V, D, P, B >&)
-{
- return 0;
-}
-
-//===========================================================================
-template < typename Vertex, typename Directed, typename ParallelCategory,
- typename Base = detail::null_graph_archetype >
-struct adjacency_graph_archetype : public Base
-{
- typedef typename Base::traversal_category base_trav_cat;
- struct traversal_category : public adjacency_graph_tag, public base_trav_cat
- {
- };
- typedef Vertex vertex_descriptor;
- typedef unsigned int degree_size_type;
- typedef unsigned int vertices_size_type;
- typedef unsigned int edges_size_type;
- typedef void edge_descriptor;
- typedef input_iterator_archetype< Vertex > adjacency_iterator;
-
- typedef Directed directed_category;
- typedef ParallelCategory edge_parallel_category;
-
- typedef void in_edge_iterator;
- typedef void out_edge_iterator;
- typedef void vertex_iterator;
- typedef void edge_iterator;
-
- static vertex_descriptor null_vertex() { return vertex_descriptor(); }
-};
-
-template < typename V, typename D, typename P, typename B >
-std::pair< typename adjacency_graph_archetype< V, D, P, B >::adjacency_iterator,
- typename adjacency_graph_archetype< V, D, P, B >::adjacency_iterator >
-adjacent_vertices(const V&, const adjacency_graph_archetype< V, D, P, B >&)
-{
- typedef typename adjacency_graph_archetype< V, D, P, B >::adjacency_iterator
- Iter;
- return std::make_pair(Iter(), Iter());
-}
-
-template < typename V, typename D, typename P, typename B >
-typename adjacency_graph_archetype< V, D, P, B >::degree_size_type out_degree(
- const V&, const adjacency_graph_archetype< V, D, P, B >&)
-{
- return 0;
-}
-
-//===========================================================================
-template < typename Vertex, typename Directed, typename ParallelCategory,
- typename Base = detail::null_graph_archetype >
-struct vertex_list_graph_archetype : public Base
-{
- typedef incidence_graph_archetype< Vertex, Directed, ParallelCategory >
- Incidence;
- typedef adjacency_graph_archetype< Vertex, Directed, ParallelCategory >
- Adjacency;
-
- typedef typename Base::traversal_category base_trav_cat;
- struct traversal_category : public vertex_list_graph_tag,
- public base_trav_cat
- {
- };
-#if 0
- typedef immutable_graph_tag mutability_category;
-#endif
- typedef Vertex vertex_descriptor;
- typedef unsigned int degree_size_type;
- typedef typename Incidence::edge_descriptor edge_descriptor;
- typedef typename Incidence::out_edge_iterator out_edge_iterator;
- typedef typename Adjacency::adjacency_iterator adjacency_iterator;
-
- typedef input_iterator_archetype< Vertex > vertex_iterator;
- typedef unsigned int vertices_size_type;
- typedef unsigned int edges_size_type;
-
- typedef Directed directed_category;
- typedef ParallelCategory edge_parallel_category;
-
- typedef void in_edge_iterator;
- typedef void edge_iterator;
-
- static vertex_descriptor null_vertex() { return vertex_descriptor(); }
-};
-
-template < typename V, typename D, typename P, typename B >
-std::pair< typename vertex_list_graph_archetype< V, D, P, B >::vertex_iterator,
- typename vertex_list_graph_archetype< V, D, P, B >::vertex_iterator >
-vertices(const vertex_list_graph_archetype< V, D, P, B >&)
-{
- typedef typename vertex_list_graph_archetype< V, D, P, B >::vertex_iterator
- Iter;
- return std::make_pair(Iter(), Iter());
-}
-
-template < typename V, typename D, typename P, typename B >
-typename vertex_list_graph_archetype< V, D, P, B >::vertices_size_type
-num_vertices(const vertex_list_graph_archetype< V, D, P, B >&)
-{
- return 0;
-}
-
-// ambiguously inherited from incidence graph and adjacency graph
-template < typename V, typename D, typename P, typename B >
-typename vertex_list_graph_archetype< V, D, P, B >::degree_size_type out_degree(
- const V&, const vertex_list_graph_archetype< V, D, P, B >&)
-{
- return 0;
-}
-
-//===========================================================================
-
-struct property_graph_archetype_tag
-{
-};
-
-template < typename GraphArchetype, typename Property, typename ValueArch >
-struct property_graph_archetype : public GraphArchetype
-{
- typedef property_graph_archetype_tag graph_tag;
- typedef ValueArch vertex_property_type;
- typedef ValueArch edge_property_type;
-};
-
-struct choose_edge_property_map_archetype
-{
- template < typename Graph, typename Property, typename Tag > struct bind_
- {
- typedef mutable_lvalue_property_map_archetype<
- typename Graph::edge_descriptor, Property >
- type;
- typedef lvalue_property_map_archetype< typename Graph::edge_descriptor,
- Property >
- const_type;
- };
-};
-template <> struct edge_property_selector< property_graph_archetype_tag >
-{
- typedef choose_edge_property_map_archetype type;
-};
-
-struct choose_vertex_property_map_archetype
-{
- template < typename Graph, typename Property, typename Tag > struct bind_
- {
- typedef mutable_lvalue_property_map_archetype<
- typename Graph::vertex_descriptor, Property >
- type;
- typedef lvalue_property_map_archetype<
- typename Graph::vertex_descriptor, Property >
- const_type;
- };
-};
-
-template <> struct vertex_property_selector< property_graph_archetype_tag >
-{
- typedef choose_vertex_property_map_archetype type;
-};
-
-template < typename G, typename P, typename V >
-typename property_map< property_graph_archetype< G, P, V >, P >::type get(
- P, property_graph_archetype< G, P, V >&)
-{
- typename property_map< property_graph_archetype< G, P, V >, P >::type pmap;
- return pmap;
-}
-
-template < typename G, typename P, typename V >
-typename property_map< property_graph_archetype< G, P, V >, P >::const_type get(
- P, const property_graph_archetype< G, P, V >&)
-{
- typename property_map< property_graph_archetype< G, P, V >, P >::const_type
- pmap;
- return pmap;
-}
-
-template < typename G, typename P, typename K, typename V >
-typename property_traits< typename property_map<
- property_graph_archetype< G, P, V >, P >::const_type >::value_type
-get(P p, const property_graph_archetype< G, P, V >& g, K k)
-{
- return get(get(p, g), k);
-}
-
-template < typename G, typename P, typename V, typename Key >
-void put(
- P p, property_graph_archetype< G, P, V >& g, const Key& key, const V& value)
-{
- typedef typename boost::property_map< property_graph_archetype< G, P, V >,
- P >::type Map;
- Map pmap = get(p, g);
- put(pmap, key, value);
-}
-
-struct color_value_archetype
-{
- color_value_archetype() {}
- color_value_archetype(detail::dummy_constructor) {}
- bool operator==(const color_value_archetype&) const { return true; }
- bool operator!=(const color_value_archetype&) const { return true; }
-};
-template <> struct color_traits< color_value_archetype >
-{
- static color_value_archetype white()
- {
- return color_value_archetype(
- static_object< detail::dummy_constructor >::get());
- }
- static color_value_archetype gray()
- {
- return color_value_archetype(
- static_object< detail::dummy_constructor >::get());
- }
- static color_value_archetype black()
- {
- return color_value_archetype(
- static_object< detail::dummy_constructor >::get());
- }
-};
-
-template < typename T > class buffer_archetype
-{
-public:
- void push(const T&) {}
- void pop() {}
- T& top() { return static_object< T >::get(); }
- const T& top() const { return static_object< T >::get(); }
- bool empty() const { return true; }
-};
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_ARCHETYPES_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/graph_as_tree.hpp b/contrib/restricted/boost/graph/include/boost/graph/graph_as_tree.hpp
deleted file mode 100644
index ce6057c981..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/graph_as_tree.hpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_GRAPH_AS_TREE_HPP
-#define BOOST_GRAPH_GRAPH_AS_TREE_HPP
-
-#include <vector>
-#include <boost/config.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/tree_traits.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/graph/visitors.hpp>
-
-namespace boost
-{
-
-template < class Graph, class Node, class ChIt, class Derived >
-class graph_as_tree_base
-{
- typedef Derived Tree;
-
-public:
- typedef Node node_descriptor;
- typedef ChIt children_iterator;
-
- graph_as_tree_base(Graph& g, Node root) : _g(g), _root(root) {}
-
- friend Node root(const Tree& t) { return t._root; }
-
- template < class N >
- friend std::pair< ChIt, ChIt > children(N n, const Tree& t)
- {
- return adjacent_vertices(n, t._g);
- }
-
- template < class N > friend Node parent(N n, const Tree& t)
- {
- return boost::get(t.parent_pa(), n);
- }
-
- Graph& _g;
- Node _root;
-};
-
-struct graph_as_tree_tag
-{
-};
-
-template < class Graph, class ParentMap,
- class Node = typename graph_traits< Graph >::vertex_descriptor,
- class ChIt = typename graph_traits< Graph >::adjacency_iterator >
-class graph_as_tree : public graph_as_tree_base< Graph, Node, ChIt,
- graph_as_tree< Graph, ParentMap, Node, ChIt > >
-{
- typedef graph_as_tree self;
- typedef graph_as_tree_base< Graph, Node, ChIt, self > super;
-
-public:
- graph_as_tree(Graph& g, Node root) : super(g, root) {}
-
- graph_as_tree(Graph& g, Node root, ParentMap p) : super(g, root), _p(p)
- {
- breadth_first_search(g, root,
- visitor(make_bfs_visitor(
- record_predecessors(p, boost::on_tree_edge()))));
- }
- ParentMap parent_pa() const { return _p; }
- typedef graph_as_tree_tag graph_tag; // for property_map
-protected:
- ParentMap _p;
-};
-
-namespace detail
-{
-
- struct graph_as_tree_vertex_property_selector
- {
- template < typename GraphAsTree, typename Property, typename Tag >
- struct bind_
- {
- typedef typename GraphAsTree::base_type Graph;
- typedef property_map< Graph, Tag > PMap;
- typedef typename PMap::type type;
- typedef typename PMap::const_type const_type;
- };
- };
-
- struct graph_as_tree_edge_property_selector
- {
- template < typename GraphAsTree, typename Property, typename Tag >
- struct bind_
- {
- typedef typename GraphAsTree::base_type Graph;
- typedef property_map< Graph, Tag > PMap;
- typedef typename PMap::type type;
- typedef typename PMap::const_type const_type;
- };
- };
-
-} // namespace detail
-
-template <> struct vertex_property_selector< graph_as_tree_tag >
-{
- typedef detail::graph_as_tree_vertex_property_selector type;
-};
-
-template <> struct edge_property_selector< graph_as_tree_tag >
-{
- typedef detail::graph_as_tree_edge_property_selector type;
-};
-
-template < typename Graph, typename P, typename N, typename C,
- typename Property >
-typename property_map< Graph, Property >::type get(
- Property p, graph_as_tree< Graph, P, N, C >& g)
-{
- return get(p, g._g);
-}
-
-template < typename Graph, typename P, typename N, typename C,
- typename Property >
-typename property_map< Graph, Property >::const_type get(
- Property p, const graph_as_tree< Graph, P, N, C >& g)
-{
- const Graph& gref = g._g; // in case GRef is non-const
- return get(p, gref);
-}
-
-template < typename Graph, typename P, typename N, typename C,
- typename Property, typename Key >
-typename property_traits<
- typename property_map< Graph, Property >::const_type >::value_type
-get(Property p, const graph_as_tree< Graph, P, N, C >& g, const Key& k)
-{
- return get(p, g._g, k);
-}
-
-template < typename Graph, typename P, typename N, typename C,
- typename Property, typename Key, typename Value >
-void put(Property p, const graph_as_tree< Graph, P, N, C >& g, const Key& k,
- const Value& val)
-{
- put(p, g._g, k, val);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_GRAPH_AS_TREE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/graph_stats.hpp b/contrib/restricted/boost/graph/include/boost/graph/graph_stats.hpp
deleted file mode 100644
index 00c84dd865..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/graph_stats.hpp
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Alex Breuer
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_GRAPH_STATS_HPP
-#define BOOST_GRAPH_GRAPH_STATS_HPP
-
-#include <map>
-#include <list>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/assert.hpp>
-
-namespace boost
-{
-namespace graph
-{
-
- template < typename Graph > struct sort_edge_by_origin
- {
- public:
- typedef typename graph_traits< Graph >::edge_descriptor edge_type;
-
- explicit sort_edge_by_origin(Graph& g) : g(g) {}
-
- inline bool operator()(edge_type a, edge_type b)
- {
- return source(a, g) == source(b, g) ? target(a, g) < target(b, g)
- : source(a, g) < source(b, g);
- }
-
- private:
- Graph& g;
- };
-
- template < typename Graph > struct equal_edge
- {
- public:
- typedef typename graph_traits< Graph >::edge_descriptor edge_type;
-
- explicit equal_edge(Graph& g) : g(g) {}
-
- inline bool operator()(edge_type a, edge_type b)
- {
- return source(a, g) == source(b, g) && target(a, g) == target(b, g);
- }
-
- private:
- Graph& g;
- };
-
- template < typename Graph > unsigned long num_dup_edges(Graph& g)
- {
- typedef typename graph_traits< Graph >::edge_iterator e_iterator_type;
- typedef typename graph_traits< Graph >::edge_descriptor edge_type;
-
- std::list< edge_type > all_edges;
-
- BGL_FORALL_EDGES_T(e, g, Graph) { all_edges.push_back(e); }
-
- sort_edge_by_origin< Graph > cmp1(g);
- all_edges.sort(cmp1);
- equal_edge< Graph > cmp2(g);
- all_edges.unique(cmp2);
-
- return num_edges(g) - all_edges.size();
- }
-
- template < typename Graph >
- std::map< unsigned long, unsigned long > dup_edge_dist(Graph& g)
- {
- std::map< unsigned long, unsigned long > dist;
- typedef
- typename graph_traits< Graph >::adjacency_iterator a_iterator_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_type;
-
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- std::list< vertex_type > front_neighbors;
- a_iterator_type a_iter, a_end;
- for (boost::tie(a_iter, a_end) = adjacent_vertices(v, g);
- a_iter != a_end; ++a_iter)
- {
- front_neighbors.push_back(*a_iter);
- }
-
- front_neighbors.sort();
- front_neighbors.unique();
- dist[out_degree(v, g) - front_neighbors.size()] += 1;
- }
- return dist;
- }
-
- template < typename Graph >
- std::map< unsigned long, unsigned long > degree_dist(Graph& g)
- {
- std::map< unsigned long, unsigned long > dist;
- typedef
- typename graph_traits< Graph >::adjacency_iterator a_iterator_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_type;
-
- BGL_FORALL_VERTICES_T(v, g, Graph) { dist[out_degree(v, g)] += 1; }
-
- return dist;
- }
-
- template < typename Graph >
- std::map< unsigned long, double > weight_degree_dist(Graph& g)
- {
- std::map< unsigned long, double > dist, n;
- typedef
- typename graph_traits< Graph >::adjacency_iterator a_iterator_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_type;
- typedef typename property_map< Graph, edge_weight_t >::const_type
- edge_map_type;
- typedef typename property_traits< edge_map_type >::value_type
- edge_weight_type;
-
- typename property_map< Graph, edge_weight_t >::type em
- = get(edge_weight, g);
-
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- edge_weight_type tmp = 0;
- BGL_FORALL_OUTEDGES_T(v, e, g, Graph) { tmp += em[e]; }
- n[out_degree(v, g)] += 1.;
- dist[out_degree(v, g)] += tmp;
- }
-
- for (std::map< unsigned long, double >::iterator iter = dist.begin();
- iter != dist.end(); ++iter)
- {
- BOOST_ASSERT(n[iter->first] != 0);
- dist[iter->first] /= n[iter->first];
- }
-
- return dist;
- }
-
-}
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/graph_utility.hpp b/contrib/restricted/boost/graph/include/boost/graph/graph_utility.hpp
deleted file mode 100644
index 4082dbf98a..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/graph_utility.hpp
+++ /dev/null
@@ -1,489 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_UTILITY_HPP
-#define BOOST_GRAPH_UTILITY_HPP
-
-#include <stdlib.h>
-#include <iostream>
-#include <algorithm>
-#include <assert.h>
-#include <boost/config.hpp>
-#include <boost/tuple/tuple.hpp>
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/container_traits.hpp>
-#include <boost/graph/depth_first_search.hpp>
-// iota moved to detail/algorithm.hpp
-#include <boost/detail/algorithm.hpp>
-
-namespace boost
-{
-
-// Provide an undirected graph interface alternative to the
-// the source() and target() edge functions.
-template < class UndirectedGraph >
-inline std::pair< typename graph_traits< UndirectedGraph >::vertex_descriptor,
- typename graph_traits< UndirectedGraph >::vertex_descriptor >
-incident(typename graph_traits< UndirectedGraph >::edge_descriptor e,
- UndirectedGraph& g)
-{
- return std::make_pair(source(e, g), target(e, g));
-}
-
-// Provide an undirected graph interface alternative
-// to the out_edges() function.
-template < class Graph >
-inline std::pair< typename graph_traits< Graph >::out_edge_iterator,
- typename graph_traits< Graph >::out_edge_iterator >
-incident_edges(typename graph_traits< Graph >::vertex_descriptor u, Graph& g)
-{
- return out_edges(u, g);
-}
-
-template < class Graph >
-inline typename graph_traits< Graph >::vertex_descriptor opposite(
- typename graph_traits< Graph >::edge_descriptor e,
- typename graph_traits< Graph >::vertex_descriptor v, const Graph& g)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
- if (v == source(e, g))
- return target(e, g);
- else if (v == target(e, g))
- return source(e, g);
- else
- return vertex_descriptor();
-}
-
-//===========================================================================
-// Some handy predicates
-
-template < typename Vertex, typename Graph > struct incident_from_predicate
-{
- incident_from_predicate(Vertex u, const Graph& g) : m_u(u), m_g(g) {}
- template < class Edge > bool operator()(const Edge& e) const
- {
- return source(e, m_g) == m_u;
- }
- Vertex m_u;
- const Graph& m_g;
-};
-template < typename Vertex, typename Graph >
-inline incident_from_predicate< Vertex, Graph > incident_from(
- Vertex u, const Graph& g)
-{
- return incident_from_predicate< Vertex, Graph >(u, g);
-}
-
-template < typename Vertex, typename Graph > struct incident_to_predicate
-{
- incident_to_predicate(Vertex u, const Graph& g) : m_u(u), m_g(g) {}
- template < class Edge > bool operator()(const Edge& e) const
- {
- return target(e, m_g) == m_u;
- }
- Vertex m_u;
- const Graph& m_g;
-};
-template < typename Vertex, typename Graph >
-inline incident_to_predicate< Vertex, Graph > incident_to(
- Vertex u, const Graph& g)
-{
- return incident_to_predicate< Vertex, Graph >(u, g);
-}
-
-template < typename Vertex, typename Graph > struct incident_on_predicate
-{
- incident_on_predicate(Vertex u, const Graph& g) : m_u(u), m_g(g) {}
- template < class Edge > bool operator()(const Edge& e) const
- {
- return source(e, m_g) == m_u || target(e, m_g) == m_u;
- }
- Vertex m_u;
- const Graph& m_g;
-};
-template < typename Vertex, typename Graph >
-inline incident_on_predicate< Vertex, Graph > incident_on(
- Vertex u, const Graph& g)
-{
- return incident_on_predicate< Vertex, Graph >(u, g);
-}
-
-template < typename Vertex, typename Graph > struct connects_predicate
-{
- connects_predicate(Vertex u, Vertex v, const Graph& g)
- : m_u(u), m_v(v), m_g(g)
- {
- }
- template < class Edge > bool operator()(const Edge& e) const
- {
- if (is_directed(m_g))
- return source(e, m_g) == m_u && target(e, m_g) == m_v;
- else
- return (source(e, m_g) == m_u && target(e, m_g) == m_v)
- || (source(e, m_g) == m_v && target(e, m_g) == m_u);
- }
- Vertex m_u, m_v;
- const Graph& m_g;
-};
-template < typename Vertex, typename Graph >
-inline connects_predicate< Vertex, Graph > connects(
- Vertex u, Vertex v, const Graph& g)
-{
- return connects_predicate< Vertex, Graph >(u, v, g);
-}
-
-// Need to convert all of these printing functions to take an ostream object
-// -JGS
-
-template < class IncidenceGraph, class Name >
-void print_in_edges(
- const IncidenceGraph& G, Name name, std::ostream& os = std::cout)
-{
- typename graph_traits< IncidenceGraph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
- {
- os << get(name, *ui) << " <-- ";
- typename graph_traits< IncidenceGraph >::in_edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = in_edges(*ui, G); ei != ei_end; ++ei)
- os << get(name, source(*ei, G)) << " ";
- os << '\n';
- }
-}
-
-template < class IncidenceGraph, class Name >
-void print_graph_dispatch(const IncidenceGraph& G, Name name, directed_tag,
- std::ostream& os = std::cout)
-{
- typename graph_traits< IncidenceGraph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
- {
- os << get(name, *ui) << " --> ";
- typename graph_traits< IncidenceGraph >::out_edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(*ui, G); ei != ei_end; ++ei)
- os << get(name, target(*ei, G)) << " ";
- os << '\n';
- }
-}
-template < class IncidenceGraph, class Name >
-void print_graph_dispatch(const IncidenceGraph& G, Name name, undirected_tag,
- std::ostream& os = std::cout)
-{
- typename graph_traits< IncidenceGraph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
- {
- os << get(name, *ui) << " <--> ";
- typename graph_traits< IncidenceGraph >::out_edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(*ui, G); ei != ei_end; ++ei)
- os << get(name, target(*ei, G)) << " ";
- os << '\n';
- }
-}
-template < class IncidenceGraph, class Name >
-void print_graph(
- const IncidenceGraph& G, Name name, std::ostream& os = std::cout)
-{
- typedef typename graph_traits< IncidenceGraph >::directed_category Cat;
- print_graph_dispatch(G, name, Cat(), os);
-}
-template < class IncidenceGraph >
-void print_graph(const IncidenceGraph& G, std::ostream& os = std::cout)
-{
- print_graph(G, get(vertex_index, G), os);
-}
-
-template < class EdgeListGraph, class Name >
-void print_edges(
- const EdgeListGraph& G, Name name, std::ostream& os = std::cout)
-{
- typename graph_traits< EdgeListGraph >::edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(G); ei != ei_end; ++ei)
- os << "(" << get(name, source(*ei, G)) << ","
- << get(name, target(*ei, G)) << ") ";
- os << '\n';
-}
-
-template < class EdgeListGraph, class VertexName, class EdgeName >
-void print_edges2(const EdgeListGraph& G, VertexName vname, EdgeName ename,
- std::ostream& os = std::cout)
-{
- typename graph_traits< EdgeListGraph >::edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(G); ei != ei_end; ++ei)
- os << get(ename, *ei) << "(" << get(vname, source(*ei, G)) << ","
- << get(vname, target(*ei, G)) << ") ";
- os << '\n';
-}
-
-template < class VertexListGraph, class Name >
-void print_vertices(
- const VertexListGraph& G, Name name, std::ostream& os = std::cout)
-{
- typename graph_traits< VertexListGraph >::vertex_iterator vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(G); vi != vi_end; ++vi)
- os << get(name, *vi) << " ";
- os << '\n';
-}
-
-template < class Graph, class Vertex >
-bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, bidirectional_tag)
-{
- typename graph_traits< Graph >::adjacency_iterator vi, viend, adj_found;
- boost::tie(vi, viend) = adjacent_vertices(a, g);
- adj_found = std::find(vi, viend, b);
- if (adj_found == viend)
- return false;
-
- typename graph_traits< Graph >::out_edge_iterator oi, oiend, out_found;
- boost::tie(oi, oiend) = out_edges(a, g);
- out_found = std::find_if(oi, oiend, incident_to(b, g));
- if (out_found == oiend)
- return false;
-
- typename graph_traits< Graph >::in_edge_iterator ii, iiend, in_found;
- boost::tie(ii, iiend) = in_edges(b, g);
- in_found = std::find_if(ii, iiend, incident_from(a, g));
- if (in_found == iiend)
- return false;
-
- return true;
-}
-template < class Graph, class Vertex >
-bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, directed_tag)
-{
- typename graph_traits< Graph >::adjacency_iterator vi, viend, found;
- boost::tie(vi, viend) = adjacent_vertices(a, g);
- found = std::find(vi, viend, b);
- if (found == viend)
- return false;
-
- typename graph_traits< Graph >::out_edge_iterator oi, oiend, out_found;
- boost::tie(oi, oiend) = out_edges(a, g);
-
- out_found = std::find_if(oi, oiend, incident_to(b, g));
- if (out_found == oiend)
- return false;
- return true;
-}
-template < class Graph, class Vertex >
-bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, undirected_tag)
-{
- return is_adj_dispatch(g, a, b, directed_tag());
-}
-
-template < class Graph, class Vertex >
-bool is_adjacent(Graph& g, Vertex a, Vertex b)
-{
- typedef typename graph_traits< Graph >::directed_category Cat;
- return is_adj_dispatch(g, a, b, Cat());
-}
-
-template < class Graph, class Edge > bool in_edge_set(Graph& g, Edge e)
-{
- typename Graph::edge_iterator ei, ei_end, found;
- boost::tie(ei, ei_end) = edges(g);
- found = std::find(ei, ei_end, e);
- return found != ei_end;
-}
-
-template < class Graph, class Vertex > bool in_vertex_set(Graph& g, Vertex v)
-{
- typename Graph::vertex_iterator vi, vi_end, found;
- boost::tie(vi, vi_end) = vertices(g);
- found = std::find(vi, vi_end, v);
- return found != vi_end;
-}
-
-template < class Graph, class Vertex >
-bool in_edge_set(Graph& g, Vertex u, Vertex v)
-{
- typename Graph::edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- if (source(*ei, g) == u && target(*ei, g) == v)
- return true;
- return false;
-}
-
-// is x a descendant of y?
-template < typename ParentMap >
-inline bool is_descendant(typename property_traits< ParentMap >::value_type x,
- typename property_traits< ParentMap >::value_type y, ParentMap parent)
-{
- if (get(parent, x) == x) // x is the root of the tree
- return false;
- else if (get(parent, x) == y)
- return true;
- else
- return is_descendant(get(parent, x), y, parent);
-}
-
-// is y reachable from x?
-template < typename IncidenceGraph, typename VertexColorMap >
-inline bool is_reachable(
- typename graph_traits< IncidenceGraph >::vertex_descriptor x,
- typename graph_traits< IncidenceGraph >::vertex_descriptor y,
- const IncidenceGraph& g,
- VertexColorMap color) // should start out white for every vertex
-{
- typedef typename property_traits< VertexColorMap >::value_type ColorValue;
- dfs_visitor<> vis;
- depth_first_visit(g, x, vis, color);
- return get(color, y) != color_traits< ColorValue >::white();
-}
-
-// Is the undirected graph connected?
-// Is the directed graph strongly connected?
-template < typename VertexListGraph, typename VertexColorMap >
-inline bool is_connected(const VertexListGraph& g, VertexColorMap color)
-{
- typedef typename property_traits< VertexColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
- typename graph_traits< VertexListGraph >::vertex_iterator ui, ui_end, vi,
- vi_end, ci, ci_end;
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- if (*ui != *vi)
- {
- for (boost::tie(ci, ci_end) = vertices(g); ci != ci_end; ++ci)
- put(color, *ci, Color::white());
- if (!is_reachable(*ui, *vi, g, color))
- return false;
- }
- return true;
-}
-
-template < typename Graph >
-bool is_self_loop(
- typename graph_traits< Graph >::edge_descriptor e, const Graph& g)
-{
- return source(e, g) == target(e, g);
-}
-
-template < class T1, class T2 >
-std::pair< T1, T2 > make_list(const T1& t1, const T2& t2)
-{
- return std::make_pair(t1, t2);
-}
-
-template < class T1, class T2, class T3 >
-std::pair< T1, std::pair< T2, T3 > > make_list(
- const T1& t1, const T2& t2, const T3& t3)
-{
- return std::make_pair(t1, std::make_pair(t2, t3));
-}
-
-template < class T1, class T2, class T3, class T4 >
-std::pair< T1, std::pair< T2, std::pair< T3, T4 > > > make_list(
- const T1& t1, const T2& t2, const T3& t3, const T4& t4)
-{
- return std::make_pair(t1, std::make_pair(t2, std::make_pair(t3, t4)));
-}
-
-template < class T1, class T2, class T3, class T4, class T5 >
-std::pair< T1, std::pair< T2, std::pair< T3, std::pair< T4, T5 > > > >
-make_list(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5)
-{
- return std::make_pair(
- t1, std::make_pair(t2, std::make_pair(t3, std::make_pair(t4, t5))));
-}
-
-namespace graph
-{
-
- // Functor for remove_parallel_edges: edge property of the removed edge is
- // added to the remaining
- template < typename EdgeProperty > struct add_removed_edge_property
- {
- add_removed_edge_property(EdgeProperty ep) : ep(ep) {}
-
- template < typename Edge > void operator()(Edge stay, Edge away)
- {
- put(ep, stay, get(ep, stay) + get(ep, away));
- }
- EdgeProperty ep;
- };
-
- // Same as above: edge property is capacity here
- template < typename Graph >
- struct add_removed_edge_capacity
- : add_removed_edge_property<
- typename property_map< Graph, edge_capacity_t >::type >
- {
- typedef add_removed_edge_property<
- typename property_map< Graph, edge_capacity_t >::type >
- base;
- add_removed_edge_capacity(Graph& g) : base(get(edge_capacity, g)) {}
- };
-
- template < typename Graph > bool has_no_vertices(const Graph& g)
- {
- typedef typename boost::graph_traits< Graph >::vertex_iterator vi;
- std::pair< vi, vi > p = vertices(g);
- return (p.first == p.second);
- }
-
- template < typename Graph > bool has_no_edges(const Graph& g)
- {
- typedef typename boost::graph_traits< Graph >::edge_iterator ei;
- std::pair< ei, ei > p = edges(g);
- return (p.first == p.second);
- }
-
- template < typename Graph >
- bool has_no_out_edges(
- const typename boost::graph_traits< Graph >::vertex_descriptor& v,
- const Graph& g)
- {
- typedef typename boost::graph_traits< Graph >::out_edge_iterator ei;
- std::pair< ei, ei > p = out_edges(v, g);
- return (p.first == p.second);
- }
-
-} // namespace graph
-
-#include <boost/graph/iteration_macros.hpp>
-
-template < class PropertyIn, class PropertyOut, class Graph >
-void copy_vertex_property(PropertyIn p_in, PropertyOut p_out, Graph& g)
-{
- BGL_FORALL_VERTICES_T(u, g, Graph)
- put(p_out, u, get(p_in, g));
-}
-
-template < class PropertyIn, class PropertyOut, class Graph >
-void copy_edge_property(PropertyIn p_in, PropertyOut p_out, Graph& g)
-{
- BGL_FORALL_EDGES_T(e, g, Graph)
- put(p_out, e, get(p_in, g));
-}
-
-// Return true if property_map1 and property_map2 differ
-// for any of the vertices in graph.
-template < typename PropertyMapFirst, typename PropertyMapSecond,
- typename Graph >
-bool are_property_maps_different(const PropertyMapFirst property_map1,
- const PropertyMapSecond property_map2, const Graph& graph)
-{
-
- BGL_FORALL_VERTICES_T(vertex, graph, Graph)
- {
- if (get(property_map1, vertex) != get(property_map2, vertex))
- {
-
- return (true);
- }
- }
-
- return (false);
-}
-
-} /* namespace boost */
-
-#endif /* BOOST_GRAPH_UTILITY_HPP*/
diff --git a/contrib/restricted/boost/graph/include/boost/graph/grid_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/grid_graph.hpp
deleted file mode 100644
index bdcbc6f4d1..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/grid_graph.hpp
+++ /dev/null
@@ -1,1059 +0,0 @@
-//=======================================================================
-// Copyright 2009 Trustees of Indiana University.
-// Authors: Michael Hansen, Andrew Lumsdaine
-//
-// 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_GRID_GRAPH_HPP
-#define BOOST_GRAPH_GRID_GRAPH_HPP
-
-#include <cmath>
-#include <functional>
-#include <numeric>
-
-#include <boost/array.hpp>
-#include <boost/limits.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/iterator/counting_iterator.hpp>
-#include <boost/iterator/transform_iterator.hpp>
-#include <boost/property_map/property_map.hpp>
-
-#define BOOST_GRID_GRAPH_TEMPLATE_PARAMS \
- std::size_t DimensionsT, typename VertexIndexT, typename EdgeIndexT
-
-#define BOOST_GRID_GRAPH_TYPE \
- grid_graph< DimensionsT, VertexIndexT, EdgeIndexT >
-
-#define BOOST_GRID_GRAPH_TRAITS_T typename graph_traits< BOOST_GRID_GRAPH_TYPE >
-
-namespace boost
-{
-
-// Class prototype for grid_graph
-template < BOOST_GRID_GRAPH_TEMPLATE_PARAMS > class grid_graph;
-
-//===================
-// Index Property Map
-//===================
-
-template < typename Graph, typename Descriptor, typename Index >
-struct grid_graph_index_map
-{
-public:
- typedef Index value_type;
- typedef Index reference_type;
- typedef reference_type reference;
- typedef Descriptor key_type;
- typedef readable_property_map_tag category;
-
- grid_graph_index_map() {}
-
- grid_graph_index_map(const Graph& graph) : m_graph(&graph) {}
-
- value_type operator[](key_type key) const
- {
- return (m_graph->index_of(key));
- }
-
- friend inline Index get(
- const grid_graph_index_map< Graph, Descriptor, Index >& index_map,
- const typename grid_graph_index_map< Graph, Descriptor,
- Index >::key_type& key)
- {
- return (index_map[key]);
- }
-
-protected:
- const Graph* m_graph;
-};
-
-template < BOOST_GRID_GRAPH_TEMPLATE_PARAMS >
-struct property_map< BOOST_GRID_GRAPH_TYPE, vertex_index_t >
-{
- typedef grid_graph_index_map< BOOST_GRID_GRAPH_TYPE,
- BOOST_GRID_GRAPH_TRAITS_T::vertex_descriptor,
- BOOST_GRID_GRAPH_TRAITS_T::vertices_size_type >
- type;
- typedef type const_type;
-};
-
-template < BOOST_GRID_GRAPH_TEMPLATE_PARAMS >
-struct property_map< BOOST_GRID_GRAPH_TYPE, edge_index_t >
-{
- typedef grid_graph_index_map< BOOST_GRID_GRAPH_TYPE,
- BOOST_GRID_GRAPH_TRAITS_T::edge_descriptor,
- BOOST_GRID_GRAPH_TRAITS_T::edges_size_type >
- type;
- typedef type const_type;
-};
-
-//==========================
-// Reverse Edge Property Map
-//==========================
-
-template < typename Descriptor > struct grid_graph_reverse_edge_map
-{
-public:
- typedef Descriptor value_type;
- typedef Descriptor reference_type;
- typedef reference_type reference;
- typedef Descriptor key_type;
- typedef readable_property_map_tag category;
-
- grid_graph_reverse_edge_map() {}
-
- value_type operator[](const key_type& key) const
- {
- return (value_type(key.second, key.first));
- }
-
- friend inline Descriptor get(
- const grid_graph_reverse_edge_map< Descriptor >& rev_map,
- const typename grid_graph_reverse_edge_map< Descriptor >::key_type& key)
- {
- return (rev_map[key]);
- }
-};
-
-template < BOOST_GRID_GRAPH_TEMPLATE_PARAMS >
-struct property_map< BOOST_GRID_GRAPH_TYPE, edge_reverse_t >
-{
- typedef grid_graph_reverse_edge_map<
- BOOST_GRID_GRAPH_TRAITS_T::edge_descriptor >
- type;
- typedef type const_type;
-};
-
-//=================
-// Function Objects
-//=================
-
-namespace detail
-{
-
- // vertex_at
- template < typename Graph > struct grid_graph_vertex_at
- {
-
- typedef typename graph_traits< Graph >::vertex_descriptor result_type;
-
- grid_graph_vertex_at() : m_graph(0) {}
-
- grid_graph_vertex_at(const Graph* graph) : m_graph(graph) {}
-
- result_type operator()(
- typename graph_traits< Graph >::vertices_size_type vertex_index)
- const
- {
- return (vertex(vertex_index, *m_graph));
- }
-
- private:
- const Graph* m_graph;
- };
-
- // out_edge_at
- template < typename Graph > struct grid_graph_out_edge_at
- {
-
- private:
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
-
- public:
- typedef typename graph_traits< Graph >::edge_descriptor result_type;
-
- grid_graph_out_edge_at() : m_vertex(), m_graph(0) {}
-
- grid_graph_out_edge_at(
- vertex_descriptor source_vertex, const Graph* graph)
- : m_vertex(source_vertex), m_graph(graph)
- {
- }
-
- result_type operator()(
- typename graph_traits< Graph >::degree_size_type out_edge_index)
- const
- {
- return (out_edge_at(m_vertex, out_edge_index, *m_graph));
- }
-
- private:
- vertex_descriptor m_vertex;
- const Graph* m_graph;
- };
-
- // in_edge_at
- template < typename Graph > struct grid_graph_in_edge_at
- {
-
- private:
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
-
- public:
- typedef typename graph_traits< Graph >::edge_descriptor result_type;
-
- grid_graph_in_edge_at() : m_vertex(), m_graph(0) {}
-
- grid_graph_in_edge_at(
- vertex_descriptor target_vertex, const Graph* graph)
- : m_vertex(target_vertex), m_graph(graph)
- {
- }
-
- result_type operator()(
- typename graph_traits< Graph >::degree_size_type in_edge_index)
- const
- {
- return (in_edge_at(m_vertex, in_edge_index, *m_graph));
- }
-
- private:
- vertex_descriptor m_vertex;
- const Graph* m_graph;
- };
-
- // edge_at
- template < typename Graph > struct grid_graph_edge_at
- {
-
- typedef typename graph_traits< Graph >::edge_descriptor result_type;
-
- grid_graph_edge_at() : m_graph(0) {}
-
- grid_graph_edge_at(const Graph* graph) : m_graph(graph) {}
-
- result_type operator()(
- typename graph_traits< Graph >::edges_size_type edge_index) const
- {
- return (edge_at(edge_index, *m_graph));
- }
-
- private:
- const Graph* m_graph;
- };
-
- // adjacent_vertex_at
- template < typename Graph > struct grid_graph_adjacent_vertex_at
- {
-
- public:
- typedef typename graph_traits< Graph >::vertex_descriptor result_type;
-
- grid_graph_adjacent_vertex_at(
- result_type source_vertex, const Graph* graph)
- : m_vertex(source_vertex), m_graph(graph)
- {
- }
-
- result_type operator()(
- typename graph_traits< Graph >::degree_size_type adjacent_index)
- const
- {
- return (target(
- out_edge_at(m_vertex, adjacent_index, *m_graph), *m_graph));
- }
-
- private:
- result_type m_vertex;
- const Graph* m_graph;
- };
-
-} // namespace detail
-
-//===========
-// Grid Graph
-//===========
-
-template < std::size_t Dimensions, typename VertexIndex = std::size_t,
- typename EdgeIndex = VertexIndex >
-class grid_graph
-{
-
-private:
- typedef boost::array< bool, Dimensions > WrapDimensionArray;
- grid_graph() {};
-
-public:
- typedef grid_graph< Dimensions, VertexIndex, EdgeIndex > type;
-
- // sizes
- typedef VertexIndex vertices_size_type;
- typedef EdgeIndex edges_size_type;
- typedef EdgeIndex degree_size_type;
-
- // descriptors
- typedef boost::array< VertexIndex, Dimensions > vertex_descriptor;
- typedef std::pair< vertex_descriptor, vertex_descriptor > edge_descriptor;
-
- // vertex_iterator
- typedef counting_iterator< vertices_size_type > vertex_index_iterator;
- typedef detail::grid_graph_vertex_at< type > vertex_function;
- typedef transform_iterator< vertex_function, vertex_index_iterator >
- vertex_iterator;
-
- // edge_iterator
- typedef counting_iterator< edges_size_type > edge_index_iterator;
- typedef detail::grid_graph_edge_at< type > edge_function;
- typedef transform_iterator< edge_function, edge_index_iterator >
- edge_iterator;
-
- // out_edge_iterator
- typedef counting_iterator< degree_size_type > degree_iterator;
- typedef detail::grid_graph_out_edge_at< type > out_edge_function;
- typedef transform_iterator< out_edge_function, degree_iterator >
- out_edge_iterator;
-
- // in_edge_iterator
- typedef detail::grid_graph_in_edge_at< type > in_edge_function;
- typedef transform_iterator< in_edge_function, degree_iterator >
- in_edge_iterator;
-
- // adjacency_iterator
- typedef detail::grid_graph_adjacent_vertex_at< type >
- adjacent_vertex_function;
- typedef transform_iterator< adjacent_vertex_function, degree_iterator >
- adjacency_iterator;
-
- // categories
- typedef directed_tag directed_category;
- typedef disallow_parallel_edge_tag edge_parallel_category;
- struct traversal_category : virtual public incidence_graph_tag,
- virtual public adjacency_graph_tag,
- virtual public vertex_list_graph_tag,
- virtual public edge_list_graph_tag,
- virtual public bidirectional_graph_tag,
- virtual public adjacency_matrix_tag
- {
- };
-
- static inline vertex_descriptor null_vertex()
- {
- vertex_descriptor maxed_out_vertex;
- std::fill(maxed_out_vertex.begin(), maxed_out_vertex.end(),
- (std::numeric_limits< vertices_size_type >::max)());
-
- return (maxed_out_vertex);
- }
-
- // Constructor that defaults to no wrapping for all dimensions.
- grid_graph(vertex_descriptor dimension_lengths)
- : m_dimension_lengths(dimension_lengths)
- {
-
- std::fill(m_wrap_dimension.begin(), m_wrap_dimension.end(), false);
-
- precalculate();
- }
-
- // Constructor that allows for wrapping to be specified for all
- // dimensions at once.
- grid_graph(vertex_descriptor dimension_lengths, bool wrap_all_dimensions)
- : m_dimension_lengths(dimension_lengths)
- {
-
- std::fill(m_wrap_dimension.begin(), m_wrap_dimension.end(),
- wrap_all_dimensions);
-
- precalculate();
- }
-
- // Constructor that allows for individual dimension wrapping to be
- // specified.
- grid_graph(
- vertex_descriptor dimension_lengths, WrapDimensionArray wrap_dimension)
- : m_dimension_lengths(dimension_lengths), m_wrap_dimension(wrap_dimension)
- {
-
- precalculate();
- }
-
- // Returns the number of dimensions in the graph
- inline std::size_t dimensions() const { return (Dimensions); }
-
- // Returns the length of dimension [dimension_index]
- inline vertices_size_type length(std::size_t dimension) const
- {
- return (m_dimension_lengths[dimension]);
- }
-
- // Returns a value indicating if dimension [dimension_index] wraps
- inline bool wrapped(std::size_t dimension) const
- {
- return (m_wrap_dimension[dimension]);
- }
-
- // Gets the vertex that is [distance] units ahead of [vertex] in
- // dimension [dimension_index].
- vertex_descriptor next(vertex_descriptor vertex,
- std::size_t dimension_index, vertices_size_type distance = 1) const
- {
-
- vertices_size_type new_position = vertex[dimension_index] + distance;
-
- if (wrapped(dimension_index))
- {
- new_position %= length(dimension_index);
- }
- else
- {
- // Stop at the end of this dimension if necessary.
- new_position = (std::min)(
- new_position, vertices_size_type(length(dimension_index) - 1));
- }
-
- vertex[dimension_index] = new_position;
-
- return (vertex);
- }
-
- // Gets the vertex that is [distance] units behind [vertex] in
- // dimension [dimension_index].
- vertex_descriptor previous(vertex_descriptor vertex,
- std::size_t dimension_index, vertices_size_type distance = 1) const
- {
-
- // We're assuming that vertices_size_type is unsigned, so we
- // need to be careful about the math.
- vertex[dimension_index] = (distance > vertex[dimension_index])
- ? (wrapped(dimension_index) ? (length(dimension_index)
- - (distance % length(dimension_index)))
- : 0)
- : vertex[dimension_index] - distance;
-
- return (vertex);
- }
-
-protected:
- // Returns the number of vertices in the graph
- inline vertices_size_type num_vertices() const { return (m_num_vertices); }
-
- // Returns the number of edges in the graph
- inline edges_size_type num_edges() const { return (m_num_edges); }
-
- // Returns the number of edges in dimension [dimension_index]
- inline edges_size_type num_edges(std::size_t dimension_index) const
- {
- return (m_edge_count[dimension_index]);
- }
-
- // Returns the index of [vertex] (See also vertex_at)
- vertices_size_type index_of(vertex_descriptor vertex) const
- {
-
- vertices_size_type vertex_index = 0;
- vertices_size_type index_multiplier = 1;
-
- for (std::size_t dimension_index = 0; dimension_index < Dimensions;
- ++dimension_index)
- {
-
- vertex_index += (vertex[dimension_index] * index_multiplier);
- index_multiplier *= length(dimension_index);
- }
-
- return (vertex_index);
- }
-
- // Returns the vertex whose index is [vertex_index] (See also
- // index_of(vertex_descriptor))
- vertex_descriptor vertex_at(vertices_size_type vertex_index) const
- {
-
- boost::array< vertices_size_type, Dimensions > vertex;
- vertices_size_type index_divider = 1;
-
- for (std::size_t dimension_index = 0; dimension_index < Dimensions;
- ++dimension_index)
- {
-
- vertex[dimension_index]
- = (vertex_index / index_divider) % length(dimension_index);
-
- index_divider *= length(dimension_index);
- }
-
- return (vertex);
- }
-
- // Returns the edge whose index is [edge_index] (See also
- // index_of(edge_descriptor)). NOTE: The index mapping is
- // dependent upon dimension wrapping.
- edge_descriptor edge_at(edges_size_type edge_index) const
- {
-
- // Edge indices are sorted into bins by dimension
- std::size_t dimension_index = 0;
- edges_size_type dimension_edges = num_edges(0);
-
- while (edge_index >= dimension_edges)
- {
- edge_index -= dimension_edges;
- ++dimension_index;
- dimension_edges = num_edges(dimension_index);
- }
-
- vertex_descriptor vertex_source, vertex_target;
- bool is_forward
- = ((edge_index / (num_edges(dimension_index) / 2)) == 0);
-
- if (wrapped(dimension_index))
- {
- vertex_source = vertex_at(edge_index % num_vertices());
- vertex_target = is_forward
- ? next(vertex_source, dimension_index)
- : previous(vertex_source, dimension_index);
- }
- else
- {
-
- // Dimensions can wrap arbitrarily, so an index needs to be
- // computed in a more complex manner. This is done by
- // grouping the edges for each dimension together into "bins"
- // and considering [edge_index] as an offset into the bin.
- // Each bin consists of two parts: the "forward" looking edges
- // and the "backward" looking edges for the dimension.
-
- edges_size_type vertex_offset
- = edge_index % num_edges(dimension_index);
-
- // Consider vertex_offset an index into the graph's vertex
- // space but with the dimension [dimension_index] reduced in
- // size by one.
- vertices_size_type index_divider = 1;
-
- for (std::size_t dimension_index_iter = 0;
- dimension_index_iter < Dimensions; ++dimension_index_iter)
- {
-
- std::size_t dimension_length
- = (dimension_index_iter == dimension_index)
- ? length(dimension_index_iter) - 1
- : length(dimension_index_iter);
-
- vertex_source[dimension_index_iter]
- = (vertex_offset / index_divider) % dimension_length;
-
- index_divider *= dimension_length;
- }
-
- if (is_forward)
- {
- vertex_target = next(vertex_source, dimension_index);
- }
- else
- {
- // Shift forward one more unit in the dimension for backward
- // edges since the algorithm above will leave us one behind.
- vertex_target = vertex_source;
- ++vertex_source[dimension_index];
- }
-
- } // if (wrapped(dimension_index))
-
- return (std::make_pair(vertex_source, vertex_target));
- }
-
- // Returns the index for [edge] (See also edge_at)
- edges_size_type index_of(edge_descriptor edge) const
- {
- vertex_descriptor source_vertex = source(edge, *this);
- vertex_descriptor target_vertex = target(edge, *this);
-
- BOOST_ASSERT(source_vertex != target_vertex);
-
- // Determine the dimension where the source and target vertices
- // differ (should only be one if this is a valid edge).
- std::size_t different_dimension_index = 0;
-
- while (source_vertex[different_dimension_index]
- == target_vertex[different_dimension_index])
- {
-
- ++different_dimension_index;
- }
-
- edges_size_type edge_index = 0;
-
- // Offset the edge index into the appropriate "bin" (see edge_at
- // for a more in-depth description).
- for (std::size_t dimension_index = 0;
- dimension_index < different_dimension_index; ++dimension_index)
- {
-
- edge_index += num_edges(dimension_index);
- }
-
- // Get the position of both vertices in the differing dimension.
- vertices_size_type source_position
- = source_vertex[different_dimension_index];
- vertices_size_type target_position
- = target_vertex[different_dimension_index];
-
- // Determine if edge is forward or backward
- bool is_forward = true;
-
- if (wrapped(different_dimension_index))
- {
-
- // If the dimension is wrapped, an edge is going backward if
- // either A: its target precedes the source in the differing
- // dimension and the vertices are adjacent or B: its source
- // precedes the target and they're not adjacent.
- if (((target_position < source_position)
- && ((source_position - target_position) == 1))
- || ((source_position < target_position)
- && ((target_position - source_position) > 1)))
- {
-
- is_forward = false;
- }
- }
- else if (target_position < source_position)
- {
- is_forward = false;
- }
-
- // "Backward" edges are in the second half of the bin.
- if (!is_forward)
- {
- edge_index += (num_edges(different_dimension_index) / 2);
- }
-
- // Finally, apply the vertex offset
- if (wrapped(different_dimension_index))
- {
- edge_index += index_of(source_vertex);
- }
- else
- {
- vertices_size_type index_multiplier = 1;
-
- if (!is_forward)
- {
- --source_vertex[different_dimension_index];
- }
-
- for (std::size_t dimension_index = 0; dimension_index < Dimensions;
- ++dimension_index)
- {
-
- edge_index
- += (source_vertex[dimension_index] * index_multiplier);
- index_multiplier
- *= (dimension_index == different_dimension_index)
- ? length(dimension_index) - 1
- : length(dimension_index);
- }
- }
-
- return (edge_index);
- }
-
- // Returns the number of out-edges for [vertex]
- degree_size_type out_degree(vertex_descriptor vertex) const
- {
-
- degree_size_type out_edge_count = 0;
-
- for (std::size_t dimension_index = 0; dimension_index < Dimensions;
- ++dimension_index)
- {
-
- // If the vertex is on the edge of this dimension, then its
- // number of out edges is dependent upon whether the dimension
- // wraps or not.
- if ((vertex[dimension_index] == 0)
- || (vertex[dimension_index] == (length(dimension_index) - 1)))
- {
- out_edge_count += (wrapped(dimension_index) ? 2 : 1);
- }
- else
- {
- // Next and previous edges, regardless or wrapping
- out_edge_count += 2;
- }
- }
-
- return (out_edge_count);
- }
-
- // Returns an out-edge for [vertex] by index. Indices are in the
- // range [0, out_degree(vertex)).
- edge_descriptor out_edge_at(
- vertex_descriptor vertex, degree_size_type out_edge_index) const
- {
-
- edges_size_type edges_left = out_edge_index + 1;
- std::size_t dimension_index = 0;
- bool is_forward = false;
-
- // Walks the out edges of [vertex] and accommodates for dimension
- // wrapping.
- while (edges_left > 0)
- {
-
- if (!wrapped(dimension_index))
- {
- if (!is_forward && (vertex[dimension_index] == 0))
- {
- is_forward = true;
- continue;
- }
- else if (is_forward
- && (vertex[dimension_index]
- == (length(dimension_index) - 1)))
- {
- is_forward = false;
- ++dimension_index;
- continue;
- }
- }
-
- --edges_left;
-
- if (edges_left > 0)
- {
- is_forward = !is_forward;
-
- if (!is_forward)
- {
- ++dimension_index;
- }
- }
- }
-
- return (std::make_pair(vertex,
- is_forward ? next(vertex, dimension_index)
- : previous(vertex, dimension_index)));
- }
-
- // Returns the number of in-edges for [vertex]
- inline degree_size_type in_degree(vertex_descriptor vertex) const
- {
- return (out_degree(vertex));
- }
-
- // Returns an in-edge for [vertex] by index. Indices are in the
- // range [0, in_degree(vertex)).
- edge_descriptor in_edge_at(
- vertex_descriptor vertex, edges_size_type in_edge_index) const
- {
-
- edge_descriptor out_edge = out_edge_at(vertex, in_edge_index);
- return (
- std::make_pair(target(out_edge, *this), source(out_edge, *this)));
- }
-
- // Pre-computes the number of vertices and edges
- void precalculate()
- {
- m_num_vertices = std::accumulate(m_dimension_lengths.begin(),
- m_dimension_lengths.end(), vertices_size_type(1),
- std::multiplies< vertices_size_type >());
-
- // Calculate number of edges in each dimension
- m_num_edges = 0;
-
- for (std::size_t dimension_index = 0; dimension_index < Dimensions;
- ++dimension_index)
- {
-
- if (wrapped(dimension_index))
- {
- m_edge_count[dimension_index] = num_vertices() * 2;
- }
- else
- {
- m_edge_count[dimension_index]
- = (num_vertices()
- - (num_vertices() / length(dimension_index)))
- * 2;
- }
-
- m_num_edges += num_edges(dimension_index);
- }
- }
-
- const vertex_descriptor m_dimension_lengths;
- WrapDimensionArray m_wrap_dimension;
- vertices_size_type m_num_vertices;
-
- boost::array< edges_size_type, Dimensions > m_edge_count;
- edges_size_type m_num_edges;
-
-public:
- //================
- // VertexListGraph
- //================
-
- friend inline std::pair< typename type::vertex_iterator,
- typename type::vertex_iterator >
- vertices(const type& graph)
- {
- typedef typename type::vertex_iterator vertex_iterator;
- typedef typename type::vertex_function vertex_function;
- typedef typename type::vertex_index_iterator vertex_index_iterator;
-
- return (std::make_pair(
- vertex_iterator(vertex_index_iterator(0), vertex_function(&graph)),
- vertex_iterator(vertex_index_iterator(graph.num_vertices()),
- vertex_function(&graph))));
- }
-
- friend inline typename type::vertices_size_type num_vertices(
- const type& graph)
- {
- return (graph.num_vertices());
- }
-
- friend inline typename type::vertex_descriptor vertex(
- typename type::vertices_size_type vertex_index, const type& graph)
- {
-
- return (graph.vertex_at(vertex_index));
- }
-
- //===============
- // IncidenceGraph
- //===============
-
- friend inline std::pair< typename type::out_edge_iterator,
- typename type::out_edge_iterator >
- out_edges(typename type::vertex_descriptor vertex, const type& graph)
- {
- typedef typename type::degree_iterator degree_iterator;
- typedef typename type::out_edge_function out_edge_function;
- typedef typename type::out_edge_iterator out_edge_iterator;
-
- return (std::make_pair(out_edge_iterator(degree_iterator(0),
- out_edge_function(vertex, &graph)),
- out_edge_iterator(degree_iterator(graph.out_degree(vertex)),
- out_edge_function(vertex, &graph))));
- }
-
- friend inline typename type::degree_size_type out_degree(
- typename type::vertex_descriptor vertex, const type& graph)
- {
- return (graph.out_degree(vertex));
- }
-
- friend inline typename type::edge_descriptor out_edge_at(
- typename type::vertex_descriptor vertex,
- typename type::degree_size_type out_edge_index, const type& graph)
- {
- return (graph.out_edge_at(vertex, out_edge_index));
- }
-
- //===============
- // AdjacencyGraph
- //===============
-
- friend typename std::pair< typename type::adjacency_iterator,
- typename type::adjacency_iterator >
- adjacent_vertices(
- typename type::vertex_descriptor vertex, const type& graph)
- {
- typedef typename type::degree_iterator degree_iterator;
- typedef
- typename type::adjacent_vertex_function adjacent_vertex_function;
- typedef typename type::adjacency_iterator adjacency_iterator;
-
- return (std::make_pair(adjacency_iterator(degree_iterator(0),
- adjacent_vertex_function(vertex, &graph)),
- adjacency_iterator(degree_iterator(graph.out_degree(vertex)),
- adjacent_vertex_function(vertex, &graph))));
- }
-
- //==============
- // EdgeListGraph
- //==============
-
- friend inline typename type::edges_size_type num_edges(const type& graph)
- {
- return (graph.num_edges());
- }
-
- friend inline typename type::edge_descriptor edge_at(
- typename type::edges_size_type edge_index, const type& graph)
- {
- return (graph.edge_at(edge_index));
- }
-
- friend inline std::pair< typename type::edge_iterator,
- typename type::edge_iterator >
- edges(const type& graph)
- {
- typedef typename type::edge_index_iterator edge_index_iterator;
- typedef typename type::edge_function edge_function;
- typedef typename type::edge_iterator edge_iterator;
-
- return (std::make_pair(
- edge_iterator(edge_index_iterator(0), edge_function(&graph)),
- edge_iterator(edge_index_iterator(graph.num_edges()),
- edge_function(&graph))));
- }
-
- //===================
- // BiDirectionalGraph
- //===================
-
- friend inline std::pair< typename type::in_edge_iterator,
- typename type::in_edge_iterator >
- in_edges(typename type::vertex_descriptor vertex, const type& graph)
- {
- typedef typename type::in_edge_function in_edge_function;
- typedef typename type::degree_iterator degree_iterator;
- typedef typename type::in_edge_iterator in_edge_iterator;
-
- return (std::make_pair(in_edge_iterator(degree_iterator(0),
- in_edge_function(vertex, &graph)),
- in_edge_iterator(degree_iterator(graph.in_degree(vertex)),
- in_edge_function(vertex, &graph))));
- }
-
- friend inline typename type::degree_size_type in_degree(
- typename type::vertex_descriptor vertex, const type& graph)
- {
- return (graph.in_degree(vertex));
- }
-
- friend inline typename type::degree_size_type degree(
- typename type::vertex_descriptor vertex, const type& graph)
- {
- return (graph.out_degree(vertex) * 2);
- }
-
- friend inline typename type::edge_descriptor in_edge_at(
- typename type::vertex_descriptor vertex,
- typename type::degree_size_type in_edge_index, const type& graph)
- {
- return (graph.in_edge_at(vertex, in_edge_index));
- }
-
- //==================
- // Adjacency Matrix
- //==================
-
- friend std::pair< typename type::edge_descriptor, bool > edge(
- typename type::vertex_descriptor source_vertex,
- typename type::vertex_descriptor destination_vertex, const type& graph)
- {
-
- std::pair< typename type::edge_descriptor, bool > edge_exists
- = std::make_pair(
- std::make_pair(source_vertex, destination_vertex), false);
-
- for (std::size_t dimension_index = 0; dimension_index < Dimensions;
- ++dimension_index)
- {
-
- typename type::vertices_size_type dim_difference = 0;
- typename type::vertices_size_type source_dim
- = source_vertex[dimension_index],
- dest_dim = destination_vertex[dimension_index];
-
- dim_difference = (source_dim > dest_dim) ? (source_dim - dest_dim)
- : (dest_dim - source_dim);
-
- if (dim_difference > 0)
- {
-
- // If we've already found a valid edge, this would mean that
- // the vertices are really diagonal across dimensions and
- // therefore not connected.
- if (edge_exists.second)
- {
- edge_exists.second = false;
- break;
- }
-
- // If the difference is one, the vertices are right next to
- // each other and the edge is valid. The edge is still
- // valid, though, if the dimension wraps and the vertices
- // are on opposite ends.
- if ((dim_difference == 1)
- || (graph.wrapped(dimension_index)
- && (((source_dim == 0)
- && (dest_dim
- == (graph.length(dimension_index) - 1)))
- || ((dest_dim == 0)
- && (source_dim
- == (graph.length(dimension_index) - 1))))))
- {
-
- edge_exists.second = true;
- // Stay in the loop to check for diagonal vertices.
- }
- else
- {
-
- // Stop checking - the vertices are too far apart.
- edge_exists.second = false;
- break;
- }
- }
-
- } // for dimension_index
-
- return (edge_exists);
- }
-
- //=============================
- // Index Property Map Functions
- //=============================
-
- friend inline typename type::vertices_size_type get(vertex_index_t,
- const type& graph, typename type::vertex_descriptor vertex)
- {
- return (graph.index_of(vertex));
- }
-
- friend inline typename type::edges_size_type get(
- edge_index_t, const type& graph, typename type::edge_descriptor edge)
- {
- return (graph.index_of(edge));
- }
-
- friend inline grid_graph_index_map< type, typename type::vertex_descriptor,
- typename type::vertices_size_type >
- get(vertex_index_t, const type& graph)
- {
- return (grid_graph_index_map< type, typename type::vertex_descriptor,
- typename type::vertices_size_type >(graph));
- }
-
- friend inline grid_graph_index_map< type, typename type::edge_descriptor,
- typename type::edges_size_type >
- get(edge_index_t, const type& graph)
- {
- return (grid_graph_index_map< type, typename type::edge_descriptor,
- typename type::edges_size_type >(graph));
- }
-
- friend inline grid_graph_reverse_edge_map< typename type::edge_descriptor >
- get(edge_reverse_t, const type& graph)
- {
- return (
- grid_graph_reverse_edge_map< typename type::edge_descriptor >());
- }
-
- template < typename Graph, typename Descriptor, typename Index >
- friend struct grid_graph_index_map;
-
- template < typename Descriptor > friend struct grid_graph_reverse_edge_map;
-
-}; // grid_graph
-
-} // namespace boost
-
-#undef BOOST_GRID_GRAPH_TYPE
-#undef BOOST_GRID_GRAPH_TEMPLATE_PARAMS
-#undef BOOST_GRID_GRAPH_TRAITS_T
-
-#endif // BOOST_GRAPH_GRID_GRAPH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/gursoy_atun_layout.hpp b/contrib/restricted/boost/graph/include/boost/graph/gursoy_atun_layout.hpp
deleted file mode 100644
index 1a8709b178..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/gursoy_atun_layout.hpp
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jeremiah Willcock
-// Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
-#define BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
-
-// Gürsoy-Atun graph layout, based on:
-// "Neighbourhood Preserving Load Balancing: A Self-Organizing Approach"
-// in 6th International Euro-Par Conference Munich, Germany, August 29 –
-// September 1, 2000 Proceedings, pp 234-241
-// https://doi.org/10.1007/3-540-44520-X_32
-
-#include <boost/config/no_tr1/cmath.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/assert.hpp>
-#include <vector>
-#include <exception>
-#include <algorithm>
-
-#include <boost/graph/visitors.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/random/uniform_01.hpp>
-#include <boost/random/linear_congruential.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/topology.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- struct over_distance_limit : public std::exception
- {
- };
-
- template < typename PositionMap, typename NodeDistanceMap,
- typename Topology, typename Graph >
- struct update_position_visitor
- {
- typedef typename Topology::point_type Point;
- PositionMap position_map;
- NodeDistanceMap node_distance;
- const Topology& space;
- Point input_vector;
- double distance_limit;
- double learning_constant;
- double falloff_ratio;
-
- typedef boost::on_examine_vertex event_filter;
-
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
-
- update_position_visitor(PositionMap position_map,
- NodeDistanceMap node_distance, const Topology& space,
- const Point& input_vector, double distance_limit,
- double learning_constant, double falloff_ratio)
- : position_map(position_map)
- , node_distance(node_distance)
- , space(space)
- , input_vector(input_vector)
- , distance_limit(distance_limit)
- , learning_constant(learning_constant)
- , falloff_ratio(falloff_ratio)
- {
- }
-
- void operator()(vertex_descriptor v, const Graph&) const
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::pow;
-#endif
-
- if (get(node_distance, v) > distance_limit)
- BOOST_THROW_EXCEPTION(over_distance_limit());
- Point old_position = get(position_map, v);
- double distance = get(node_distance, v);
- double fraction
- = learning_constant * pow(falloff_ratio, distance * distance);
- put(position_map, v,
- space.move_position_toward(
- old_position, fraction, input_vector));
- }
- };
-
- template < typename EdgeWeightMap > struct gursoy_shortest
- {
- template < typename Graph, typename NodeDistanceMap,
- typename UpdatePosition >
- static inline void run(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- NodeDistanceMap node_distance, UpdatePosition& update_position,
- EdgeWeightMap weight)
- {
- boost::dijkstra_shortest_paths(g, s,
- weight_map(weight).visitor(boost::make_dijkstra_visitor(
- std::make_pair(boost::record_distances(
- node_distance, boost::on_edge_relaxed()),
- update_position))));
- }
- };
-
- template <> struct gursoy_shortest< dummy_property_map >
- {
- template < typename Graph, typename NodeDistanceMap,
- typename UpdatePosition >
- static inline void run(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- NodeDistanceMap node_distance, UpdatePosition& update_position,
- dummy_property_map)
- {
- boost::breadth_first_search(g, s,
- visitor(boost::make_bfs_visitor(
- std::make_pair(boost::record_distances(
- node_distance, boost::on_tree_edge()),
- update_position))));
- }
- };
-
-} // namespace detail
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap, typename Diameter, typename VertexIndexMap,
- typename EdgeWeightMap >
-void gursoy_atun_step(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position, Diameter diameter,
- double learning_constant, VertexIndexMap vertex_index_map,
- EdgeWeightMap weight)
-{
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::exp;
- using std::pow;
-#endif
-
- typedef
- typename graph_traits< VertexListAndIncidenceGraph >::vertex_iterator
- vertex_iterator;
- typedef
- typename graph_traits< VertexListAndIncidenceGraph >::vertex_descriptor
- vertex_descriptor;
- typedef typename Topology::point_type point_type;
- vertex_iterator i, iend;
- std::vector< double > distance_from_input_vector(num_vertices(graph));
- typedef boost::iterator_property_map< std::vector< double >::iterator,
- VertexIndexMap, double, double& >
- DistanceFromInputMap;
- DistanceFromInputMap distance_from_input(
- distance_from_input_vector.begin(), vertex_index_map);
- std::vector< double > node_distance_map_vector(num_vertices(graph));
- typedef boost::iterator_property_map< std::vector< double >::iterator,
- VertexIndexMap, double, double& >
- NodeDistanceMap;
- NodeDistanceMap node_distance(
- node_distance_map_vector.begin(), vertex_index_map);
- point_type input_vector = space.random_point();
- vertex_descriptor min_distance_loc
- = graph_traits< VertexListAndIncidenceGraph >::null_vertex();
- double min_distance = 0.0;
- bool min_distance_unset = true;
- for (boost::tie(i, iend) = vertices(graph); i != iend; ++i)
- {
- double this_distance = space.distance(get(position, *i), input_vector);
- put(distance_from_input, *i, this_distance);
- if (min_distance_unset || this_distance < min_distance)
- {
- min_distance = this_distance;
- min_distance_loc = *i;
- }
- min_distance_unset = false;
- }
- BOOST_ASSERT(!min_distance_unset); // Graph must have at least one vertex
- boost::detail::update_position_visitor< PositionMap, NodeDistanceMap,
- Topology, VertexListAndIncidenceGraph >
- update_position(position, node_distance, space, input_vector, diameter,
- learning_constant, exp(-1. / (2 * diameter * diameter)));
- std::fill(
- node_distance_map_vector.begin(), node_distance_map_vector.end(), 0);
- try
- {
- typedef detail::gursoy_shortest< EdgeWeightMap > shortest;
- shortest::run(
- graph, min_distance_loc, node_distance, update_position, weight);
- }
- catch (const detail::over_distance_limit&)
- {
- /* Thrown to break out of BFS or Dijkstra early */
- }
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap, typename VertexIndexMap, typename EdgeWeightMap >
-void gursoy_atun_refine(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position, int nsteps,
- double diameter_initial, double diameter_final,
- double learning_constant_initial, double learning_constant_final,
- VertexIndexMap vertex_index_map, EdgeWeightMap weight)
-{
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::exp;
- using std::pow;
-#endif
-
- typedef
- typename graph_traits< VertexListAndIncidenceGraph >::vertex_iterator
- vertex_iterator;
- vertex_iterator i, iend;
- double diameter_ratio = (double)diameter_final / diameter_initial;
- double learning_constant_ratio
- = learning_constant_final / learning_constant_initial;
- std::vector< double > distance_from_input_vector(num_vertices(graph));
- typedef boost::iterator_property_map< std::vector< double >::iterator,
- VertexIndexMap, double, double& >
- DistanceFromInputMap;
- DistanceFromInputMap distance_from_input(
- distance_from_input_vector.begin(), vertex_index_map);
- std::vector< int > node_distance_map_vector(num_vertices(graph));
- typedef boost::iterator_property_map< std::vector< int >::iterator,
- VertexIndexMap, double, double& >
- NodeDistanceMap;
- NodeDistanceMap node_distance(
- node_distance_map_vector.begin(), vertex_index_map);
- for (int round = 0; round < nsteps; ++round)
- {
- double part_done = (double)round / (nsteps - 1);
- // fprintf(stderr, "%2d%% done\n", int(rint(part_done * 100.)));
- int diameter = (int)(diameter_initial * pow(diameter_ratio, part_done));
- double learning_constant = learning_constant_initial
- * pow(learning_constant_ratio, part_done);
- gursoy_atun_step(graph, space, position, diameter, learning_constant,
- vertex_index_map, weight);
- }
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap, typename VertexIndexMap, typename EdgeWeightMap >
-void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position, int nsteps,
- double diameter_initial, double diameter_final,
- double learning_constant_initial, double learning_constant_final,
- VertexIndexMap vertex_index_map, EdgeWeightMap weight)
-{
- typedef
- typename graph_traits< VertexListAndIncidenceGraph >::vertex_iterator
- vertex_iterator;
- vertex_iterator i, iend;
- for (boost::tie(i, iend) = vertices(graph); i != iend; ++i)
- {
- put(position, *i, space.random_point());
- }
- gursoy_atun_refine(graph, space, position, nsteps, diameter_initial,
- diameter_final, learning_constant_initial, learning_constant_final,
- vertex_index_map, weight);
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap, typename VertexIndexMap >
-void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position, int nsteps,
- double diameter_initial, double diameter_final,
- double learning_constant_initial, double learning_constant_final,
- VertexIndexMap vertex_index_map)
-{
- gursoy_atun_layout(graph, space, position, nsteps, diameter_initial,
- diameter_final, learning_constant_initial, learning_constant_final,
- vertex_index_map, dummy_property_map());
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap >
-void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position, int nsteps,
- double diameter_initial, double diameter_final = 1.0,
- double learning_constant_initial = 0.8,
- double learning_constant_final = 0.2)
-{
- gursoy_atun_layout(graph, space, position, nsteps, diameter_initial,
- diameter_final, learning_constant_initial, learning_constant_final,
- get(vertex_index, graph));
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap >
-void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position, int nsteps)
-{
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif
-
- gursoy_atun_layout(
- graph, space, position, nsteps, sqrt((double)num_vertices(graph)));
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap >
-void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position)
-{
- gursoy_atun_layout(graph, space, position, num_vertices(graph));
-}
-
-template < typename VertexListAndIncidenceGraph, typename Topology,
- typename PositionMap, typename P, typename T, typename R >
-void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
- const Topology& space, PositionMap position,
- const bgl_named_params< P, T, R >& params)
-{
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif
-
- std::pair< double, double > diam(sqrt(double(num_vertices(graph))), 1.0);
- std::pair< double, double > learn(0.8, 0.2);
- gursoy_atun_layout(graph, space, position,
- choose_param(get_param(params, iterations_t()), num_vertices(graph)),
- choose_param(get_param(params, diameter_range_t()), diam).first,
- choose_param(get_param(params, diameter_range_t()), diam).second,
- choose_param(get_param(params, learning_constant_range_t()), learn)
- .first,
- choose_param(get_param(params, learning_constant_range_t()), learn)
- .second,
- choose_const_pmap(get_param(params, vertex_index), graph, vertex_index),
- choose_param(get_param(params, edge_weight), dummy_property_map()));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/hawick_circuits.hpp b/contrib/restricted/boost/graph/include/boost/graph/hawick_circuits.hpp
deleted file mode 100644
index ba4065492b..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/hawick_circuits.hpp
+++ /dev/null
@@ -1,387 +0,0 @@
-// Copyright Louis Dionne 2013
-
-// Use, modification and distribution is subject to 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_HAWICK_CIRCUITS_HPP
-#define BOOST_GRAPH_HAWICK_CIRCUITS_HPP
-
-#include <algorithm>
-#include <boost/assert.hpp>
-#include <boost/foreach.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/one_bit_color_map.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/move/utility.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/tuple/tuple.hpp> // for boost::tie
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/utility/result_of.hpp>
-#include <set>
-#include <utility> // for std::pair
-#include <vector>
-
-namespace boost
-{
-namespace hawick_circuits_detail
-{
- //! @internal Functor returning all the vertices adjacent to a vertex.
- struct get_all_adjacent_vertices
- {
- template < typename Sig > struct result;
-
- template < typename This, typename Vertex, typename Graph >
- struct result< This(Vertex, Graph) >
- {
- private:
- typedef typename remove_reference< Graph >::type RawGraph;
- typedef graph_traits< RawGraph > Traits;
- typedef typename Traits::adjacency_iterator AdjacencyIterator;
-
- public:
- typedef std::pair< AdjacencyIterator, AdjacencyIterator > type;
- };
-
- template < typename Vertex, typename Graph >
- typename result< get_all_adjacent_vertices(
- BOOST_FWD_REF(Vertex), BOOST_FWD_REF(Graph)) >::type
- operator()(BOOST_FWD_REF(Vertex) v, BOOST_FWD_REF(Graph) g) const
- {
- return adjacent_vertices(
- boost::forward< Vertex >(v), boost::forward< Graph >(g));
- }
- };
-
- //! @internal Functor returning a set of the vertices adjacent to a vertex.
- struct get_unique_adjacent_vertices
- {
- template < typename Sig > struct result;
-
- template < typename This, typename Vertex, typename Graph >
- struct result< This(Vertex, Graph) >
- {
- typedef std::set< typename remove_reference< Vertex >::type > type;
- };
-
- template < typename Vertex, typename Graph >
- typename result< get_unique_adjacent_vertices(
- Vertex, Graph const&) >::type
- operator()(Vertex v, Graph const& g) const
- {
- typedef typename result< get_unique_adjacent_vertices(
- Vertex, Graph const&) >::type Set;
- return Set(
- adjacent_vertices(v, g).first, adjacent_vertices(v, g).second);
- }
- };
-
- //! @internal
- //! Return whether a container contains a given value.
- //! This is not meant as a general purpose membership testing function; it
- //! would have to be more clever about possible optimizations.
- template < typename Container, typename Value >
- bool contains(Container const& c, Value const& v)
- {
- return std::find(boost::begin(c), boost::end(c), v) != boost::end(c);
- }
-
- /*!
- * @internal
- * Algorithm finding all the cycles starting from a given vertex.
- *
- * The search is only done in the subgraph induced by the starting vertex
- * and the vertices with an index higher than the starting vertex.
- */
- template < typename Graph, typename Visitor, typename VertexIndexMap,
- typename Stack, typename ClosedMatrix, typename GetAdjacentVertices >
- struct hawick_circuits_from
- {
- private:
- typedef graph_traits< Graph > Traits;
- typedef typename Traits::vertex_descriptor Vertex;
- typedef typename Traits::edge_descriptor Edge;
- typedef typename Traits::vertices_size_type VerticesSize;
- typedef
- typename property_traits< VertexIndexMap >::value_type VertexIndex;
-
- typedef typename result_of< GetAdjacentVertices(
- Vertex, Graph const&) >::type AdjacentVertices;
- typedef typename range_iterator< AdjacentVertices const >::type
- AdjacencyIterator;
-
- // The one_bit_color_map starts all white, i.e. not blocked.
- // Since we make that assumption (I looked at the implementation, but
- // I can't find anything that documents this behavior), we're gonna
- // assert it in the constructor.
- typedef one_bit_color_map< VertexIndexMap > BlockedMap;
- typedef typename property_traits< BlockedMap >::value_type BlockedColor;
-
- static BlockedColor blocked_false_color()
- {
- return color_traits< BlockedColor >::white();
- }
-
- static BlockedColor blocked_true_color()
- {
- return color_traits< BlockedColor >::black();
- }
-
- // This is used by the constructor to secure the assumption
- // documented above.
- bool blocked_map_starts_all_unblocked() const
- {
- BOOST_FOREACH (Vertex v, vertices(graph_))
- if (is_blocked(v))
- return false;
- return true;
- }
-
- // This is only used in the constructor to make sure the optimization of
- // sharing data structures between iterations does not break the code.
- bool all_closed_rows_are_empty() const
- {
- BOOST_FOREACH (typename ClosedMatrix::reference row, closed_)
- if (!row.empty())
- return false;
- return true;
- }
-
- public:
- hawick_circuits_from(Graph const& graph, Visitor& visitor,
- VertexIndexMap const& vim, Stack& stack, ClosedMatrix& closed,
- VerticesSize n_vertices)
- : graph_(graph)
- , visitor_(visitor)
- , vim_(vim)
- , stack_(stack)
- , closed_(closed)
- , blocked_(n_vertices, vim_)
- {
- BOOST_ASSERT(blocked_map_starts_all_unblocked());
-
- // Since sharing the data structures between iterations is
- // just an optimization, it must always be equivalent to
- // constructing new ones in this constructor.
- BOOST_ASSERT(stack_.empty());
- BOOST_ASSERT(closed_.size() == n_vertices);
- BOOST_ASSERT(all_closed_rows_are_empty());
- }
-
- private:
- //! @internal Return the index of a given vertex.
- VertexIndex index_of(Vertex v) const { return get(vim_, v); }
-
- //! @internal Return whether a vertex `v` is closed to a vertex `u`.
- bool is_closed_to(Vertex u, Vertex v) const
- {
- typedef typename ClosedMatrix::const_reference VertexList;
- VertexList closed_to_u = closed_[index_of(u)];
- return contains(closed_to_u, v);
- }
-
- //! @internal Close a vertex `v` to a vertex `u`.
- void close_to(Vertex u, Vertex v)
- {
- BOOST_ASSERT(!is_closed_to(u, v));
- closed_[index_of(u)].push_back(v);
- }
-
- //! @internal Return whether a given vertex is blocked.
- bool is_blocked(Vertex v) const
- {
- return get(blocked_, v) == blocked_true_color();
- }
-
- //! @internal Block a given vertex.
- void block(Vertex v) { put(blocked_, v, blocked_true_color()); }
-
- //! @internal Unblock a given vertex.
- void unblock(Vertex u)
- {
- typedef typename ClosedMatrix::reference VertexList;
-
- put(blocked_, u, blocked_false_color());
- VertexList closed_to_u = closed_[index_of(u)];
-
- while (!closed_to_u.empty())
- {
- Vertex const w = closed_to_u.back();
- closed_to_u.pop_back();
- if (is_blocked(w))
- unblock(w);
- }
- BOOST_ASSERT(closed_to_u.empty());
- }
-
- //! @internal Main procedure as described in the paper.
- bool circuit(Vertex start, Vertex v)
- {
- bool found_circuit = false;
- stack_.push_back(v);
- block(v);
-
- // Cache some values that are used more than once in the function.
- VertexIndex const index_of_start = index_of(start);
- AdjacentVertices const adj_vertices
- = GetAdjacentVertices()(v, graph_);
- AdjacencyIterator const w_end = boost::end(adj_vertices);
-
- for (AdjacencyIterator w_it = boost::begin(adj_vertices);
- w_it != w_end; ++w_it)
- {
- Vertex const w = *w_it;
- // Since we're only looking in the subgraph induced by `start`
- // and the vertices with an index higher than `start`, we skip
- // any vertex that does not satisfy that.
- if (index_of(w) < index_of_start)
- continue;
-
- // If the last vertex is equal to `start`, we have a circuit.
- else if (w == start)
- {
- // const_cast to ensure the visitor does not modify the
- // stack
- visitor_.cycle(const_cast< Stack const& >(stack_), graph_);
- found_circuit = true;
- }
-
- // If `w` is not blocked, we continue searching further down the
- // same path for a cycle with `w` in it.
- else if (!is_blocked(w) && circuit(start, w))
- found_circuit = true;
- }
-
- if (found_circuit)
- unblock(v);
- else
- for (AdjacencyIterator w_it = boost::begin(adj_vertices);
- w_it != w_end; ++w_it)
- {
- Vertex const w = *w_it;
- // Like above, we skip vertices that are not in the subgraph
- // we're considering.
- if (index_of(w) < index_of_start)
- continue;
-
- // If `v` is not closed to `w`, we make it so.
- if (!is_closed_to(w, v))
- close_to(w, v);
- }
-
- BOOST_ASSERT(v == stack_.back());
- stack_.pop_back();
- return found_circuit;
- }
-
- public:
- void operator()(Vertex start) { circuit(start, start); }
-
- private:
- Graph const& graph_;
- Visitor& visitor_;
- VertexIndexMap const& vim_;
- Stack& stack_;
- ClosedMatrix& closed_;
- BlockedMap blocked_;
- };
-
- template < typename GetAdjacentVertices, typename Graph, typename Visitor,
- typename VertexIndexMap >
- void call_hawick_circuits(Graph const& graph,
- Visitor /* by value */ visitor, VertexIndexMap const& vertex_index_map)
- {
- typedef graph_traits< Graph > Traits;
- typedef typename Traits::vertex_descriptor Vertex;
- typedef typename Traits::vertices_size_type VerticesSize;
- typedef typename Traits::vertex_iterator VertexIterator;
-
- typedef std::vector< Vertex > Stack;
- typedef std::vector< std::vector< Vertex > > ClosedMatrix;
-
- typedef hawick_circuits_from< Graph, Visitor, VertexIndexMap, Stack,
- ClosedMatrix, GetAdjacentVertices >
- SubAlgorithm;
-
- VerticesSize const n_vertices = num_vertices(graph);
- Stack stack;
- stack.reserve(n_vertices);
- ClosedMatrix closed(n_vertices);
-
- VertexIterator start, last;
- for (boost::tie(start, last) = vertices(graph); start != last; ++start)
- {
- // Note1: The sub algorithm may NOT be reused once it has been
- // called.
-
- // Note2: We reuse the Stack and the ClosedMatrix (after clearing
- // them) in each iteration to avoid redundant destruction and
- // construction. It would be strictly equivalent to have these as
- // member variables of the sub algorithm.
- SubAlgorithm sub_algo(
- graph, visitor, vertex_index_map, stack, closed, n_vertices);
- sub_algo(*start);
- stack.clear();
- typename ClosedMatrix::iterator row, last_row = closed.end();
- for (row = closed.begin(); row != last_row; ++row)
- row->clear();
- }
- }
-
- template < typename GetAdjacentVertices, typename Graph, typename Visitor >
- void call_hawick_circuits(
- Graph const& graph, BOOST_FWD_REF(Visitor) visitor)
- {
- call_hawick_circuits< GetAdjacentVertices >(graph,
- boost::forward< Visitor >(visitor), get(vertex_index, graph));
- }
-} // end namespace hawick_circuits_detail
-
-//! Enumerate all the elementary circuits in a directed multigraph.
-template < typename Graph, typename Visitor, typename VertexIndexMap >
-void hawick_circuits(BOOST_FWD_REF(Graph) graph, BOOST_FWD_REF(Visitor) visitor,
- BOOST_FWD_REF(VertexIndexMap) vertex_index_map)
-{
- hawick_circuits_detail::call_hawick_circuits<
- hawick_circuits_detail::get_all_adjacent_vertices >(
- boost::forward< Graph >(graph), boost::forward< Visitor >(visitor),
- boost::forward< VertexIndexMap >(vertex_index_map));
-}
-
-template < typename Graph, typename Visitor >
-void hawick_circuits(BOOST_FWD_REF(Graph) graph, BOOST_FWD_REF(Visitor) visitor)
-{
- hawick_circuits_detail::call_hawick_circuits<
- hawick_circuits_detail::get_all_adjacent_vertices >(
- boost::forward< Graph >(graph), boost::forward< Visitor >(visitor));
-}
-
-/*!
- * Same as `boost::hawick_circuits`, but duplicate circuits caused by parallel
- * edges will not be considered. Each circuit will be considered only once.
- */
-template < typename Graph, typename Visitor, typename VertexIndexMap >
-void hawick_unique_circuits(BOOST_FWD_REF(Graph) graph,
- BOOST_FWD_REF(Visitor) visitor,
- BOOST_FWD_REF(VertexIndexMap) vertex_index_map)
-{
- hawick_circuits_detail::call_hawick_circuits<
- hawick_circuits_detail::get_unique_adjacent_vertices >(
- boost::forward< Graph >(graph), boost::forward< Visitor >(visitor),
- boost::forward< VertexIndexMap >(vertex_index_map));
-}
-
-template < typename Graph, typename Visitor >
-void hawick_unique_circuits(
- BOOST_FWD_REF(Graph) graph, BOOST_FWD_REF(Visitor) visitor)
-{
- hawick_circuits_detail::call_hawick_circuits<
- hawick_circuits_detail::get_unique_adjacent_vertices >(
- boost::forward< Graph >(graph), boost::forward< Visitor >(visitor));
-}
-} // end namespace boost
-
-#endif // !BOOST_GRAPH_HAWICK_CIRCUITS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/howard_cycle_ratio.hpp b/contrib/restricted/boost/graph/include/boost/graph/howard_cycle_ratio.hpp
deleted file mode 100644
index fe6c5bd94d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/howard_cycle_ratio.hpp
+++ /dev/null
@@ -1,643 +0,0 @@
-// Copyright (C) 2006-2009 Dmitry Bufistov and Andrey Parfenov
-
-// Use, modification and distribution is subject to 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_CYCLE_RATIO_HOWARD_HPP
-#define BOOST_GRAPH_CYCLE_RATIO_HOWARD_HPP
-
-#include <vector>
-#include <list>
-#include <algorithm>
-#include <functional>
-#include <limits>
-
-#include <boost/bind/bind.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/pending/queue.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/concept/assert.hpp>
-#include <boost/algorithm/minmax_element.hpp>
-
-/** @file howard_cycle_ratio.hpp
- * @brief The implementation of the maximum/minimum cycle ratio/mean algorithm.
- * @author Dmitry Bufistov
- * @author Andrey Parfenov
- */
-
-namespace boost
-{
-
-/**
- * The mcr_float is like numeric_limits, but only for floating point types
- * and only defines infinity() and epsilon(). This class is primarily used
- * to encapsulate a less-precise epsilon than natively supported by the
- * floating point type.
- */
-template < typename Float = double > struct mcr_float
-{
- typedef Float value_type;
-
- static Float infinity()
- {
- return std::numeric_limits< value_type >::infinity();
- }
-
- static Float epsilon() { return Float(-0.005); }
-};
-
-namespace detail
-{
-
- template < typename FloatTraits > struct min_comparator_props
- {
- typedef std::greater< typename FloatTraits::value_type > comparator;
- static const int multiplier = 1;
- };
-
- template < typename FloatTraits > struct max_comparator_props
- {
- typedef std::less< typename FloatTraits::value_type > comparator;
- static const int multiplier = -1;
- };
-
- template < typename FloatTraits, typename ComparatorProps >
- struct float_wrapper
- {
- typedef typename FloatTraits::value_type value_type;
- typedef ComparatorProps comparator_props_t;
- typedef typename ComparatorProps::comparator comparator;
-
- static value_type infinity()
- {
- return FloatTraits::infinity() * ComparatorProps::multiplier;
- }
-
- static value_type epsilon()
- {
- return FloatTraits::epsilon() * ComparatorProps::multiplier;
- }
- };
-
- /*! @class mcr_howard
- * @brief Calculates optimum (maximum/minimum) cycle ratio of a directed
- * graph. Uses Howard's iteration policy algorithm. </br>(It is described
- * in the paper "Experimental Analysis of the Fastest Optimum Cycle Ratio
- * and Mean Algorithm" by Ali Dasdan).
- */
- template < typename FloatTraits, typename Graph, typename VertexIndexMap,
- typename EdgeWeight1, typename EdgeWeight2 >
- class mcr_howard
- {
- public:
- typedef typename FloatTraits::value_type float_t;
- typedef typename FloatTraits::comparator_props_t cmp_props_t;
- typedef typename FloatTraits::comparator comparator_t;
- typedef enum
- {
- my_white = 0,
- my_black
- } my_color_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::vertices_size_type vn_t;
- typedef std::vector< float_t > vp_t;
- typedef typename boost::iterator_property_map< typename vp_t::iterator,
- VertexIndexMap >
- distance_map_t; // V -> float_t
-
- typedef typename std::vector< edge_t > ve_t;
- typedef std::vector< my_color_type > vcol_t;
- typedef
- typename ::boost::iterator_property_map< typename ve_t::iterator,
- VertexIndexMap >
- policy_t; // Vertex -> Edge
- typedef
- typename ::boost::iterator_property_map< typename vcol_t::iterator,
- VertexIndexMap >
- color_map_t;
-
- typedef typename std::list< vertex_t >
- pinel_t; // The in_edges list of the policy graph
- typedef typename std::vector< pinel_t > inedges1_t;
- typedef typename ::boost::iterator_property_map<
- typename inedges1_t::iterator, VertexIndexMap >
- inedges_t;
- typedef typename std::vector< edge_t > critical_cycle_t;
-
- // Bad vertex flag. If true, then the vertex is "bad".
- // Vertex is "bad" if its out_degree is equal to zero.
- typedef
- typename boost::iterator_property_map< std::vector< int >::iterator,
- VertexIndexMap >
- badv_t;
-
- /*!
- * Constructor
- * \param g = (V, E) - a directed multigraph.
- * \param vim Vertex Index Map. Read property Map: V -> [0,
- * num_vertices(g)). \param ewm edge weight map. Read property map: E
- * -> R \param ew2m edge weight map. Read property map: E -> R+ \param
- * infty A big enough value to guaranty that there exist a cycle with
- * better ratio.
- * \param cmp The compare operator for float_ts.
- */
- mcr_howard(const Graph& g, VertexIndexMap vim, EdgeWeight1 ewm,
- EdgeWeight2 ew2m)
- : m_g(g)
- , m_vim(vim)
- , m_ew1m(ewm)
- , m_ew2m(ew2m)
- , m_bound(mcr_bound())
- , m_cr(m_bound)
- , m_V(num_vertices(m_g))
- , m_dis(m_V, 0)
- , m_dm(m_dis.begin(), m_vim)
- , m_policyc(m_V)
- , m_policy(m_policyc.begin(), m_vim)
- , m_inelc(m_V)
- , m_inel(m_inelc.begin(), m_vim)
- , m_badvc(m_V, false)
- , m_badv(m_badvc.begin(), m_vim)
- , m_colcv(m_V)
- , m_col_bfs(m_V)
- {
- }
-
- /*!
- * \return maximum/minimum_{for all cycles C}
- * [sum_{e in C} w1(e)] / [sum_{e in C} w2(e)],
- * or FloatTraits::infinity() if graph has no cycles.
- */
- float_t ocr_howard()
- {
- construct_policy_graph();
- int k = 0;
- float_t mcr = 0;
- do
- {
- mcr = policy_mcr();
- ++k;
- } while (
- try_improve_policy(mcr) && k < 100); // To avoid infinite loop
-
- const float_t eps_ = -0.00000001 * cmp_props_t::multiplier;
- if (m_cmp(mcr, m_bound + eps_))
- {
- return FloatTraits::infinity();
- }
- else
- {
- return mcr;
- }
- }
- virtual ~mcr_howard() {}
-
- protected:
- virtual void store_critical_edge(edge_t, critical_cycle_t&) {}
- virtual void store_critical_cycle(critical_cycle_t&) {}
-
- private:
- /*!
- * \return lower/upper bound for the maximal/minimal cycle ratio
- */
- float_t mcr_bound()
- {
- typename graph_traits< Graph >::vertex_iterator vi, vie;
- typename graph_traits< Graph >::out_edge_iterator oei, oeie;
- float_t cz = (std::numeric_limits< float_t >::max)(); // Closest to
- // zero value
- float_t s = 0;
- const float_t eps_ = std::numeric_limits< float_t >::epsilon();
- for (boost::tie(vi, vie) = vertices(m_g); vi != vie; ++vi)
- {
- for (boost::tie(oei, oeie) = out_edges(*vi, m_g); oei != oeie;
- ++oei)
- {
- s += std::abs(m_ew1m[*oei]);
- float_t a = std::abs(m_ew2m[*oei]);
- if (a > eps_ && a < cz)
- {
- cz = a;
- }
- }
- }
- return cmp_props_t::multiplier * (s / cz);
- }
-
- /*!
- * Constructs an arbitrary policy graph.
- */
- void construct_policy_graph()
- {
- m_sink = graph_traits< Graph >().null_vertex();
- typename graph_traits< Graph >::vertex_iterator vi, vie;
- typename graph_traits< Graph >::out_edge_iterator oei, oeie;
- for (boost::tie(vi, vie) = vertices(m_g); vi != vie; ++vi)
- {
- using namespace boost::placeholders;
-
- boost::tie(oei, oeie) = out_edges(*vi, m_g);
- typename graph_traits< Graph >::out_edge_iterator mei
- = boost::first_max_element(oei, oeie,
- boost::bind(m_cmp,
- boost::bind(&EdgeWeight1::operator[], m_ew1m, _1),
- boost::bind(&EdgeWeight1::operator[], m_ew1m, _2)));
- if (mei == oeie)
- {
- if (m_sink == graph_traits< Graph >().null_vertex())
- {
- m_sink = *vi;
- }
- m_badv[*vi] = true;
- m_inel[m_sink].push_back(*vi);
- }
- else
- {
- m_inel[target(*mei, m_g)].push_back(*vi);
- m_policy[*vi] = *mei;
- }
- }
- }
- /*! Sets the distance value for all vertices "v" such that there is
- * a path from "v" to "sv". It does "inverse" breadth first visit of the
- * policy graph, starting from the vertex "sv".
- */
- void mcr_bfv(vertex_t sv, float_t cr, color_map_t c)
- {
- boost::queue< vertex_t > Q;
- c[sv] = my_black;
- Q.push(sv);
- while (!Q.empty())
- {
- vertex_t v = Q.top();
- Q.pop();
- for (typename pinel_t::const_iterator itr = m_inel[v].begin();
- itr != m_inel[v].end(); ++itr)
- // For all in_edges of the policy graph
- {
- if (*itr != sv)
- {
- if (m_badv[*itr])
- {
- m_dm[*itr] = m_dm[v] + m_bound - cr;
- }
- else
- {
- m_dm[*itr] = m_dm[v] + m_ew1m[m_policy[*itr]]
- - m_ew2m[m_policy[*itr]] * cr;
- }
- c[*itr] = my_black;
- Q.push(*itr);
- }
- }
- }
- }
-
- /*!
- * \param sv an arbitrary (undiscovered) vertex of the policy graph.
- * \return a vertex in the policy graph that belongs to a cycle.
- * Performs a depth first visit until a cycle edge is found.
- */
- vertex_t find_cycle_vertex(vertex_t sv)
- {
- vertex_t gv = sv;
- std::fill(m_colcv.begin(), m_colcv.end(), my_white);
- color_map_t cm(m_colcv.begin(), m_vim);
- do
- {
- cm[gv] = my_black;
- if (!m_badv[gv])
- {
- gv = target(m_policy[gv], m_g);
- }
- else
- {
- gv = m_sink;
- }
- } while (cm[gv] != my_black);
- return gv;
- }
-
- /*!
- * \param sv - vertex that belongs to a cycle in the policy graph.
- */
- float_t cycle_ratio(vertex_t sv)
- {
- if (sv == m_sink)
- return m_bound;
- std::pair< float_t, float_t > sums_(float_t(0), float_t(0));
- vertex_t v = sv;
- critical_cycle_t cc;
- do
- {
- store_critical_edge(m_policy[v], cc);
- sums_.first += m_ew1m[m_policy[v]];
- sums_.second += m_ew2m[m_policy[v]];
- v = target(m_policy[v], m_g);
- } while (v != sv);
- float_t cr = sums_.first / sums_.second;
- if (m_cmp(m_cr, cr))
- {
- m_cr = cr;
- store_critical_cycle(cc);
- }
- return cr;
- }
-
- /*!
- * Finds the optimal cycle ratio of the policy graph
- */
- float_t policy_mcr()
- {
- using namespace boost::placeholders;
-
- std::fill(m_col_bfs.begin(), m_col_bfs.end(), my_white);
- color_map_t vcm_ = color_map_t(m_col_bfs.begin(), m_vim);
- typename graph_traits< Graph >::vertex_iterator uv_itr, vie;
- boost::tie(uv_itr, vie) = vertices(m_g);
- float_t mcr = m_bound;
- while ((uv_itr = std::find_if(uv_itr, vie,
- boost::bind(std::equal_to< my_color_type >(), my_white,
- boost::bind(&color_map_t::operator[], vcm_, _1))))
- != vie)
- /// While there are undiscovered vertices
- {
- vertex_t gv = find_cycle_vertex(*uv_itr);
- float_t cr = cycle_ratio(gv);
- mcr_bfv(gv, cr, vcm_);
- if (m_cmp(mcr, cr))
- mcr = cr;
- ++uv_itr;
- }
- return mcr;
- }
-
- /*!
- * Changes the edge m_policy[s] to the new_edge.
- */
- void improve_policy(vertex_t s, edge_t new_edge)
- {
- vertex_t t = target(m_policy[s], m_g);
- typename property_traits< VertexIndexMap >::value_type ti
- = m_vim[t];
- m_inelc[ti].erase(
- std::find(m_inelc[ti].begin(), m_inelc[ti].end(), s));
- m_policy[s] = new_edge;
- t = target(new_edge, m_g);
- m_inel[t].push_back(s); /// Maintain in_edge list
- }
-
- /*!
- * A negative cycle detector.
- */
- bool try_improve_policy(float_t cr)
- {
- bool improved = false;
- typename graph_traits< Graph >::vertex_iterator vi, vie;
- typename graph_traits< Graph >::out_edge_iterator oei, oeie;
- const float_t eps_ = FloatTraits::epsilon();
- for (boost::tie(vi, vie) = vertices(m_g); vi != vie; ++vi)
- {
- if (!m_badv[*vi])
- {
- for (boost::tie(oei, oeie) = out_edges(*vi, m_g);
- oei != oeie; ++oei)
- {
- vertex_t t = target(*oei, m_g);
- // Current distance from *vi to some vertex
- float_t dis_
- = m_ew1m[*oei] - m_ew2m[*oei] * cr + m_dm[t];
- if (m_cmp(m_dm[*vi] + eps_, dis_))
- {
- improve_policy(*vi, *oei);
- m_dm[*vi] = dis_;
- improved = true;
- }
- }
- }
- else
- {
- float_t dis_ = m_bound - cr + m_dm[m_sink];
- if (m_cmp(m_dm[*vi] + eps_, dis_))
- {
- m_dm[*vi] = dis_;
- }
- }
- }
- return improved;
- }
-
- private:
- const Graph& m_g;
- VertexIndexMap m_vim;
- EdgeWeight1 m_ew1m;
- EdgeWeight2 m_ew2m;
- comparator_t m_cmp;
- float_t m_bound; //> The lower/upper bound to the maximal/minimal cycle
- // ratio
- float_t m_cr; //>The best cycle ratio that has been found so far
-
- vn_t m_V; //>The number of the vertices in the graph
- vp_t m_dis; //>Container for the distance map
- distance_map_t m_dm; //>Distance map
-
- ve_t m_policyc; //>Container for the policy graph
- policy_t m_policy; //>The interface for the policy graph
-
- inedges1_t m_inelc; //>Container fot in edges list
- inedges_t m_inel; //>Policy graph, input edges list
-
- std::vector< int > m_badvc;
- badv_t m_badv; // Marks "bad" vertices
-
- vcol_t m_colcv, m_col_bfs; // Color maps
- vertex_t m_sink; // To convert any graph to "good"
- };
-
- /*! \class mcr_howard1
- * \brief Finds optimum cycle raio and a critical cycle
- */
- template < typename FloatTraits, typename Graph, typename VertexIndexMap,
- typename EdgeWeight1, typename EdgeWeight2 >
- class mcr_howard1 : public mcr_howard< FloatTraits, Graph, VertexIndexMap,
- EdgeWeight1, EdgeWeight2 >
- {
- public:
- typedef mcr_howard< FloatTraits, Graph, VertexIndexMap, EdgeWeight1,
- EdgeWeight2 >
- inhr_t;
- mcr_howard1(const Graph& g, VertexIndexMap vim, EdgeWeight1 ewm,
- EdgeWeight2 ew2m)
- : inhr_t(g, vim, ewm, ew2m)
- {
- }
-
- void get_critical_cycle(typename inhr_t::critical_cycle_t& cc)
- {
- return cc.swap(m_cc);
- }
-
- protected:
- void store_critical_edge(
- typename inhr_t::edge_t ed, typename inhr_t::critical_cycle_t& cc)
- {
- cc.push_back(ed);
- }
-
- void store_critical_cycle(typename inhr_t::critical_cycle_t& cc)
- {
- m_cc.swap(cc);
- }
-
- private:
- typename inhr_t::critical_cycle_t m_cc; // Critical cycle
- };
-
- /*!
- * \param g a directed multigraph.
- * \param vim Vertex Index Map. A map V->[0, num_vertices(g))
- * \param ewm Edge weight1 map.
- * \param ew2m Edge weight2 map.
- * \param pcc pointer to the critical edges list.
- * \return Optimum cycle ratio of g or FloatTraits::infinity() if g has no
- * cycles.
- */
- template < typename FT, typename TG, typename TVIM, typename TEW1,
- typename TEW2, typename EV >
- typename FT::value_type optimum_cycle_ratio(
- const TG& g, TVIM vim, TEW1 ewm, TEW2 ew2m, EV* pcc)
- {
- typedef typename graph_traits< TG >::directed_category DirCat;
- BOOST_STATIC_ASSERT(
- (is_convertible< DirCat*, directed_tag* >::value == true));
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< TG >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< TG >));
- typedef typename graph_traits< TG >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< TVIM, Vertex >));
- typedef typename graph_traits< TG >::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< TEW1, Edge >));
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< TEW2, Edge >));
-
- if (pcc == 0)
- {
- return detail::mcr_howard< FT, TG, TVIM, TEW1, TEW2 >(
- g, vim, ewm, ew2m)
- .ocr_howard();
- }
-
- detail::mcr_howard1< FT, TG, TVIM, TEW1, TEW2 > obj(g, vim, ewm, ew2m);
- double ocr = obj.ocr_howard();
- obj.get_critical_cycle(*pcc);
- return ocr;
- }
-} // namespace detail
-
-// Algorithms
-// Maximum Cycle Ratio
-
-template < typename FloatTraits, typename Graph, typename VertexIndexMap,
- typename EdgeWeight1Map, typename EdgeWeight2Map >
-inline typename FloatTraits::value_type maximum_cycle_ratio(const Graph& g,
- VertexIndexMap vim, EdgeWeight1Map ew1m, EdgeWeight2Map ew2m,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0,
- FloatTraits = FloatTraits())
-{
- typedef detail::float_wrapper< FloatTraits,
- detail::max_comparator_props< FloatTraits > >
- Traits;
- return detail::optimum_cycle_ratio< Traits >(g, vim, ew1m, ew2m, pcc);
-}
-
-template < typename Graph, typename VertexIndexMap, typename EdgeWeight1Map,
- typename EdgeWeight2Map >
-inline double maximum_cycle_ratio(const Graph& g, VertexIndexMap vim,
- EdgeWeight1Map ew1m, EdgeWeight2Map ew2m,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0)
-{
- return maximum_cycle_ratio(g, vim, ew1m, ew2m, pcc, mcr_float<>());
-}
-
-// Minimum Cycle Ratio
-
-template < typename FloatTraits, typename Graph, typename VertexIndexMap,
- typename EdgeWeight1Map, typename EdgeWeight2Map >
-typename FloatTraits::value_type minimum_cycle_ratio(const Graph& g,
- VertexIndexMap vim, EdgeWeight1Map ew1m, EdgeWeight2Map ew2m,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0,
- FloatTraits = FloatTraits())
-{
- typedef detail::float_wrapper< FloatTraits,
- detail::min_comparator_props< FloatTraits > >
- Traits;
- return detail::optimum_cycle_ratio< Traits >(g, vim, ew1m, ew2m, pcc);
-}
-
-template < typename Graph, typename VertexIndexMap, typename EdgeWeight1Map,
- typename EdgeWeight2Map >
-inline double minimum_cycle_ratio(const Graph& g, VertexIndexMap vim,
- EdgeWeight1Map ew1m, EdgeWeight2Map ew2m,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0)
-{
- return minimum_cycle_ratio(g, vim, ew1m, ew2m, pcc, mcr_float<>());
-}
-
-// Maximum Cycle Mean
-
-template < typename FloatTraits, typename Graph, typename VertexIndexMap,
- typename EdgeWeightMap, typename EdgeIndexMap >
-inline typename FloatTraits::value_type maximum_cycle_mean(const Graph& g,
- VertexIndexMap vim, EdgeWeightMap ewm, EdgeIndexMap eim,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0,
- FloatTraits ft = FloatTraits())
-{
- typedef typename remove_const<
- typename property_traits< EdgeWeightMap >::value_type >::type Weight;
- typename std::vector< Weight > ed_w2(boost::num_edges(g), 1);
- return maximum_cycle_ratio(
- g, vim, ewm, make_iterator_property_map(ed_w2.begin(), eim), pcc, ft);
-}
-
-template < typename Graph, typename VertexIndexMap, typename EdgeWeightMap,
- typename EdgeIndexMap >
-inline double maximum_cycle_mean(const Graph& g, VertexIndexMap vim,
- EdgeWeightMap ewm, EdgeIndexMap eim,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0)
-{
- return maximum_cycle_mean(g, vim, ewm, eim, pcc, mcr_float<>());
-}
-
-// Minimum Cycle Mean
-
-template < typename FloatTraits, typename Graph, typename VertexIndexMap,
- typename EdgeWeightMap, typename EdgeIndexMap >
-inline typename FloatTraits::value_type minimum_cycle_mean(const Graph& g,
- VertexIndexMap vim, EdgeWeightMap ewm, EdgeIndexMap eim,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0,
- FloatTraits ft = FloatTraits())
-{
- typedef typename remove_const<
- typename property_traits< EdgeWeightMap >::value_type >::type Weight;
- typename std::vector< Weight > ed_w2(boost::num_edges(g), 1);
- return minimum_cycle_ratio(
- g, vim, ewm, make_iterator_property_map(ed_w2.begin(), eim), pcc, ft);
-}
-
-template < typename Graph, typename VertexIndexMap, typename EdgeWeightMap,
- typename EdgeIndexMap >
-inline double minimum_cycle_mean(const Graph& g, VertexIndexMap vim,
- EdgeWeightMap ewm, EdgeIndexMap eim,
- std::vector< typename graph_traits< Graph >::edge_descriptor >* pcc = 0)
-{
- return minimum_cycle_mean(g, vim, ewm, eim, pcc, mcr_float<>());
-}
-
-} // namespace boost
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/incremental_components.hpp b/contrib/restricted/boost/graph/include/boost/graph/incremental_components.hpp
deleted file mode 100644
index f16882e2a5..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/incremental_components.hpp
+++ /dev/null
@@ -1,234 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997-2001 University of Notre Dame.
-// Copyright 2009 Trustees of Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Michael Hansen
-//
-// 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_INCREMENTAL_COMPONENTS_HPP
-#define BOOST_INCREMENTAL_COMPONENTS_HPP
-
-#include <boost/tuple/tuple.hpp>
-#include <boost/graph/detail/incremental_components.hpp>
-#include <boost/iterator/counting_iterator.hpp>
-#include <boost/smart_ptr/make_shared.hpp>
-#include <boost/pending/disjoint_sets.hpp>
-#include <iterator>
-
-namespace boost
-{
-
-// A connected component algorithm for the case when dynamically
-// adding (but not removing) edges is common. The
-// incremental_components() function is a preparing operation. Call
-// same_component to check whether two vertices are in the same
-// component, or use disjoint_set::find_set to determine the
-// representative for a vertex.
-
-// This version of connected components does not require a full
-// Graph. Instead, it just needs an edge list, where the vertices of
-// each edge need to be of integer type. The edges are assumed to
-// be undirected. The other difference is that the result is stored in
-// a container, instead of just a decorator. The container should be
-// empty before the algorithm is called. It will grow during the
-// course of the algorithm. The container must be a model of
-// BackInsertionSequence and RandomAccessContainer
-// (std::vector is a good choice). After running the algorithm the
-// index container will map each vertex to the representative
-// vertex of the component to which it belongs.
-//
-// Adapted from an implementation by Alex Stepanov. The disjoint
-// sets data structure is from Tarjan's "Data Structures and Network
-// Algorithms", and the application to connected components is
-// similar to the algorithm described in Ch. 22 of "Intro to
-// Algorithms" by Cormen, et. all.
-//
-
-// An implementation of disjoint sets can be found in
-// boost/pending/disjoint_sets.hpp
-
-template < class EdgeListGraph, class DisjointSets >
-void incremental_components(EdgeListGraph& g, DisjointSets& ds)
-{
- typename graph_traits< EdgeListGraph >::edge_iterator e, end;
- for (boost::tie(e, end) = edges(g); e != end; ++e)
- ds.union_set(source(*e, g), target(*e, g));
-}
-
-template < class ParentIterator >
-void compress_components(ParentIterator first, ParentIterator last)
-{
- for (ParentIterator current = first; current != last; ++current)
- detail::find_representative_with_full_compression(
- first, current - first);
-}
-
-template < class ParentIterator >
-typename std::iterator_traits< ParentIterator >::difference_type
-component_count(ParentIterator first, ParentIterator last)
-{
- std::ptrdiff_t count = 0;
- for (ParentIterator current = first; current != last; ++current)
- if (*current == current - first)
- ++count;
- return count;
-}
-
-// This algorithm can be applied to the result container of the
-// connected_components algorithm to normalize
-// the components.
-template < class ParentIterator >
-void normalize_components(ParentIterator first, ParentIterator last)
-{
- for (ParentIterator current = first; current != last; ++current)
- detail::normalize_node(first, current - first);
-}
-
-template < class VertexListGraph, class DisjointSets >
-void initialize_incremental_components(VertexListGraph& G, DisjointSets& ds)
-{
- typename graph_traits< VertexListGraph >::vertex_iterator v, vend;
- for (boost::tie(v, vend) = vertices(G); v != vend; ++v)
- ds.make_set(*v);
-}
-
-template < class Vertex, class DisjointSet >
-inline bool same_component(Vertex u, Vertex v, DisjointSet& ds)
-{
- return ds.find_set(u) == ds.find_set(v);
-}
-
-// Class that builds a quick-access indexed linked list that allows
-// for fast iterating through a parent component's children.
-template < typename IndexType > class component_index
-{
-
-private:
- typedef std::vector< IndexType > IndexContainer;
-
-public:
- typedef counting_iterator< IndexType > iterator;
- typedef iterator const_iterator;
- typedef IndexType value_type;
- typedef IndexType size_type;
-
- typedef detail::component_index_iterator<
- typename IndexContainer::iterator >
- component_iterator;
-
-public:
- template < typename ParentIterator, typename ElementIndexMap >
- component_index(ParentIterator parent_start, ParentIterator parent_end,
- const ElementIndexMap& index_map)
- : m_num_elements(std::distance(parent_start, parent_end))
- , m_components(make_shared< IndexContainer >())
- , m_index_list(make_shared< IndexContainer >(m_num_elements))
- {
-
- build_index_lists(parent_start, index_map);
-
- } // component_index
-
- template < typename ParentIterator >
- component_index(ParentIterator parent_start, ParentIterator parent_end)
- : m_num_elements(std::distance(parent_start, parent_end))
- , m_components(make_shared< IndexContainer >())
- , m_index_list(make_shared< IndexContainer >(m_num_elements))
- {
-
- build_index_lists(parent_start, boost::identity_property_map());
-
- } // component_index
-
- // Returns the number of components
- inline std::size_t size() const { return (m_components->size()); }
-
- // Beginning iterator for component indices
- iterator begin() const { return (iterator(0)); }
-
- // End iterator for component indices
- iterator end() const { return (iterator(this->size())); }
-
- // Returns a pair of begin and end iterators for the child
- // elements of component [component_index].
- std::pair< component_iterator, component_iterator > operator[](
- IndexType component_index) const
- {
-
- IndexType first_index = (*m_components)[component_index];
-
- return (std::make_pair(
- component_iterator(m_index_list->begin(), first_index),
- component_iterator(m_num_elements)));
- }
-
-private:
- template < typename ParentIterator, typename ElementIndexMap >
- void build_index_lists(
- ParentIterator parent_start, const ElementIndexMap& index_map)
- {
-
- typedef
- typename std::iterator_traits< ParentIterator >::value_type Element;
- typename IndexContainer::iterator index_list = m_index_list->begin();
-
- // First pass - find root elements, construct index list
- for (IndexType element_index = 0; element_index < m_num_elements;
- ++element_index)
- {
-
- Element parent_element = parent_start[element_index];
- IndexType parent_index = get(index_map, parent_element);
-
- if (element_index != parent_index)
- {
- index_list[element_index] = parent_index;
- }
- else
- {
- m_components->push_back(element_index);
-
- // m_num_elements is the linked list terminator
- index_list[element_index] = m_num_elements;
- }
- }
-
- // Second pass - build linked list
- for (IndexType element_index = 0; element_index < m_num_elements;
- ++element_index)
- {
-
- Element parent_element = parent_start[element_index];
- IndexType parent_index = get(index_map, parent_element);
-
- if (element_index != parent_index)
- {
-
- // Follow list until a component parent is found
- while (index_list[parent_index] != m_num_elements)
- {
- parent_index = index_list[parent_index];
- }
-
- // Push element to the front of the linked list
- index_list[element_index] = index_list[parent_index];
- index_list[parent_index] = element_index;
- }
- }
-
- } // build_index_lists
-
-protected:
- IndexType m_num_elements;
- shared_ptr< IndexContainer > m_components, m_index_list;
-
-}; // class component_index
-
-} // namespace boost
-
-#endif // BOOST_INCREMENTAL_COMPONENTS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/is_kuratowski_subgraph.hpp b/contrib/restricted/boost/graph/include/boost/graph/is_kuratowski_subgraph.hpp
deleted file mode 100644
index 1624a96462..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/is_kuratowski_subgraph.hpp
+++ /dev/null
@@ -1,295 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __IS_KURATOWSKI_SUBGRAPH_HPP__
-#define __IS_KURATOWSKI_SUBGRAPH_HPP__
-
-#include <boost/config.hpp>
-#include <boost/tuple/tuple.hpp> //for tie
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/isomorphism.hpp>
-#include <boost/graph/adjacency_list.hpp>
-
-#include <algorithm>
-#include <vector>
-#include <set>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < typename Graph > Graph make_K_5()
- {
- typename graph_traits< Graph >::vertex_iterator vi, vi_end, inner_vi;
- Graph K_5(5);
- for (boost::tie(vi, vi_end) = vertices(K_5); vi != vi_end; ++vi)
- for (inner_vi = next(vi); inner_vi != vi_end; ++inner_vi)
- add_edge(*vi, *inner_vi, K_5);
- return K_5;
- }
-
- template < typename Graph > Graph make_K_3_3()
- {
- typename graph_traits< Graph >::vertex_iterator vi, vi_end,
- bipartition_start, inner_vi;
- Graph K_3_3(6);
- bipartition_start = next(next(next(vertices(K_3_3).first)));
- for (boost::tie(vi, vi_end) = vertices(K_3_3); vi != bipartition_start;
- ++vi)
- for (inner_vi = bipartition_start; inner_vi != vi_end; ++inner_vi)
- add_edge(*vi, *inner_vi, K_3_3);
- return K_3_3;
- }
-
- template < typename AdjacencyList, typename Vertex >
- void contract_edge(AdjacencyList& neighbors, Vertex u, Vertex v)
- {
- // Remove u from v's neighbor list
- neighbors[v].erase(
- std::remove(neighbors[v].begin(), neighbors[v].end(), u),
- neighbors[v].end());
-
- // Replace any references to u with references to v
- typedef
- typename AdjacencyList::value_type::iterator adjacency_iterator_t;
-
- adjacency_iterator_t u_neighbor_end = neighbors[u].end();
- for (adjacency_iterator_t u_neighbor_itr = neighbors[u].begin();
- u_neighbor_itr != u_neighbor_end; ++u_neighbor_itr)
- {
- Vertex u_neighbor(*u_neighbor_itr);
- std::replace(neighbors[u_neighbor].begin(),
- neighbors[u_neighbor].end(), u, v);
- }
-
- // Remove v from u's neighbor list
- neighbors[u].erase(
- std::remove(neighbors[u].begin(), neighbors[u].end(), v),
- neighbors[u].end());
-
- // Add everything in u's neighbor list to v's neighbor list
- std::copy(neighbors[u].begin(), neighbors[u].end(),
- std::back_inserter(neighbors[v]));
-
- // Clear u's neighbor list
- neighbors[u].clear();
- }
-
- enum target_graph_t
- {
- tg_k_3_3,
- tg_k_5
- };
-
-} // namespace detail
-
-template < typename Graph, typename ForwardIterator, typename VertexIndexMap >
-bool is_kuratowski_subgraph(const Graph& g, ForwardIterator begin,
- ForwardIterator end, VertexIndexMap vm)
-{
-
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::edges_size_type e_size_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef typename std::vector< vertex_t > v_list_t;
- typedef typename v_list_t::iterator v_list_iterator_t;
- typedef iterator_property_map< typename std::vector< v_list_t >::iterator,
- VertexIndexMap >
- vertex_to_v_list_map_t;
-
- typedef adjacency_list< vecS, vecS, undirectedS > small_graph_t;
-
- detail::target_graph_t target_graph
- = detail::tg_k_3_3; // unless we decide otherwise later
-
- static small_graph_t K_5(detail::make_K_5< small_graph_t >());
-
- static small_graph_t K_3_3(detail::make_K_3_3< small_graph_t >());
-
- v_size_t n_vertices(num_vertices(g));
- v_size_t max_num_edges(3 * n_vertices - 5);
-
- std::vector< v_list_t > neighbors_vector(n_vertices);
- vertex_to_v_list_map_t neighbors(neighbors_vector.begin(), vm);
-
- e_size_t count = 0;
- for (ForwardIterator itr = begin; itr != end; ++itr)
- {
-
- if (count++ > max_num_edges)
- return false;
-
- edge_t e(*itr);
- vertex_t u(source(e, g));
- vertex_t v(target(e, g));
-
- neighbors[u].push_back(v);
- neighbors[v].push_back(u);
- }
-
- for (v_size_t max_size = 2; max_size < 5; ++max_size)
- {
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_t v(*vi);
-
- // a hack to make sure we don't contract the middle edge of a path
- // of four degree-3 vertices
- if (max_size == 4 && neighbors[v].size() == 3)
- {
- if (neighbors[neighbors[v][0]].size()
- + neighbors[neighbors[v][1]].size()
- + neighbors[neighbors[v][2]].size()
- < 11 // so, it has two degree-3 neighbors
- )
- continue;
- }
-
- while (neighbors[v].size() > 0 && neighbors[v].size() < max_size)
- {
- // Find one of v's neighbors u such that v and u
- // have no neighbors in common. We'll look for such a
- // neighbor with a naive cubic-time algorithm since the
- // max size of any of the neighbor sets we'll consider
- // merging is 3
-
- bool neighbor_sets_intersect = false;
-
- vertex_t min_u = graph_traits< Graph >::null_vertex();
- vertex_t u;
- v_list_iterator_t v_neighbor_end = neighbors[v].end();
- for (v_list_iterator_t v_neighbor_itr = neighbors[v].begin();
- v_neighbor_itr != v_neighbor_end; ++v_neighbor_itr)
- {
- neighbor_sets_intersect = false;
- u = *v_neighbor_itr;
- v_list_iterator_t u_neighbor_end = neighbors[u].end();
- for (v_list_iterator_t u_neighbor_itr
- = neighbors[u].begin();
- u_neighbor_itr != u_neighbor_end
- && !neighbor_sets_intersect;
- ++u_neighbor_itr)
- {
- for (v_list_iterator_t inner_v_neighbor_itr
- = neighbors[v].begin();
- inner_v_neighbor_itr != v_neighbor_end;
- ++inner_v_neighbor_itr)
- {
- if (*u_neighbor_itr == *inner_v_neighbor_itr)
- {
- neighbor_sets_intersect = true;
- break;
- }
- }
- }
- if (!neighbor_sets_intersect
- && (min_u == graph_traits< Graph >::null_vertex()
- || neighbors[u].size() < neighbors[min_u].size()))
- {
- min_u = u;
- }
- }
-
- if (min_u == graph_traits< Graph >::null_vertex())
- // Exited the loop without finding an appropriate neighbor
- // of v, so v must be a lost cause. Move on to other
- // vertices.
- break;
- else
- u = min_u;
-
- detail::contract_edge(neighbors, u, v);
-
- } // end iteration over v's neighbors
-
- } // end iteration through vertices v
-
- if (max_size == 3)
- {
- // check to see whether we should go on to find a K_5
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- if (neighbors[*vi].size() == 4)
- {
- target_graph = detail::tg_k_5;
- break;
- }
-
- if (target_graph == detail::tg_k_3_3)
- break;
- }
-
- } // end iteration through max degree 2,3, and 4
-
- // Now, there should only be 5 or 6 vertices with any neighbors. Find them.
-
- v_list_t main_vertices;
- vertex_iterator_t vi, vi_end;
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- if (!neighbors[*vi].empty())
- main_vertices.push_back(*vi);
- }
-
- // create a graph isomorphic to the contracted graph to test
- // against K_5 and K_3_3
- small_graph_t contracted_graph(main_vertices.size());
- std::map< vertex_t,
- typename graph_traits< small_graph_t >::vertex_descriptor >
- contracted_vertex_map;
-
- typename v_list_t::iterator itr, itr_end;
- itr_end = main_vertices.end();
- typename graph_traits< small_graph_t >::vertex_iterator si
- = vertices(contracted_graph).first;
-
- for (itr = main_vertices.begin(); itr != itr_end; ++itr, ++si)
- {
- contracted_vertex_map[*itr] = *si;
- }
-
- typename v_list_t::iterator jtr, jtr_end;
- for (itr = main_vertices.begin(); itr != itr_end; ++itr)
- {
- jtr_end = neighbors[*itr].end();
- for (jtr = neighbors[*itr].begin(); jtr != jtr_end; ++jtr)
- {
- if (get(vm, *itr) < get(vm, *jtr))
- {
- add_edge(contracted_vertex_map[*itr],
- contracted_vertex_map[*jtr], contracted_graph);
- }
- }
- }
-
- if (target_graph == detail::tg_k_5)
- {
- return boost::isomorphism(K_5, contracted_graph);
- }
- else // target_graph == tg_k_3_3
- {
- return boost::isomorphism(K_3_3, contracted_graph);
- }
-}
-
-template < typename Graph, typename ForwardIterator >
-bool is_kuratowski_subgraph(
- const Graph& g, ForwardIterator begin, ForwardIterator end)
-{
- return is_kuratowski_subgraph(g, begin, end, get(vertex_index, g));
-}
-
-}
-
-#endif //__IS_KURATOWSKI_SUBGRAPH_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/is_straight_line_drawing.hpp b/contrib/restricted/boost/graph/include/boost/graph/is_straight_line_drawing.hpp
deleted file mode 100644
index 013f4b400a..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/is_straight_line_drawing.hpp
+++ /dev/null
@@ -1,209 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __IS_STRAIGHT_LINE_DRAWING_HPP__
-#define __IS_STRAIGHT_LINE_DRAWING_HPP__
-
-#include <boost/config.hpp>
-#include <boost/next_prior.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/tuple/tuple_comparison.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/planar_detail/bucket_sort.hpp>
-
-#include <algorithm>
-#include <vector>
-#include <set>
-#include <map>
-
-namespace boost
-{
-
-// Return true exactly when the line segments s1 = ((x1,y1), (x2,y2)) and
-// s2 = ((a1,b1), (a2,b2)) intersect in a point other than the endpoints of
-// the line segments. The one exception to this rule is when s1 = s2, in
-// which case false is returned - this is to accomodate multiple edges
-// between the same pair of vertices, which shouldn't invalidate the straight
-// line embedding. A tolerance variable epsilon can also be used, which
-// defines how far away from the endpoints of s1 and s2 we want to consider
-// an intersection.
-
-inline bool intersects(double x1, double y1, double x2, double y2, double a1,
- double b1, double a2, double b2, double epsilon = 0.000001)
-{
-
- if (x1 - x2 == 0)
- {
- std::swap(x1, a1);
- std::swap(y1, b1);
- std::swap(x2, a2);
- std::swap(y2, b2);
- }
-
- if (x1 - x2 == 0)
- {
- BOOST_USING_STD_MAX();
- BOOST_USING_STD_MIN();
-
- // two vertical line segments
- double min_y = min BOOST_PREVENT_MACRO_SUBSTITUTION(y1, y2);
- double max_y = max BOOST_PREVENT_MACRO_SUBSTITUTION(y1, y2);
- double min_b = min BOOST_PREVENT_MACRO_SUBSTITUTION(b1, b2);
- double max_b = max BOOST_PREVENT_MACRO_SUBSTITUTION(b1, b2);
- if ((max_y > max_b && max_b > min_y)
- || (max_b > max_y && max_y > min_b))
- return true;
- else
- return false;
- }
-
- double x_diff = x1 - x2;
- double y_diff = y1 - y2;
- double a_diff = a2 - a1;
- double b_diff = b2 - b1;
-
- double beta_denominator = b_diff - (y_diff / ((double)x_diff)) * a_diff;
-
- if (beta_denominator == 0)
- {
- // parallel lines
- return false;
- }
-
- double beta = (b2 - y2 - (y_diff / ((double)x_diff)) * (a2 - x2))
- / beta_denominator;
- double alpha = (a2 - x2 - beta * (a_diff)) / x_diff;
-
- double upper_bound = 1 - epsilon;
- double lower_bound = 0 + epsilon;
-
- return (beta < upper_bound && beta > lower_bound && alpha < upper_bound
- && alpha > lower_bound);
-}
-
-template < typename Graph, typename GridPositionMap, typename VertexIndexMap >
-bool is_straight_line_drawing(
- const Graph& g, GridPositionMap drawing, VertexIndexMap)
-{
-
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
-
- typedef std::size_t x_coord_t;
- typedef std::size_t y_coord_t;
- typedef boost::tuple< edge_t, x_coord_t, y_coord_t > edge_event_t;
- typedef typename std::vector< edge_event_t > edge_event_queue_t;
-
- typedef tuple< y_coord_t, y_coord_t, x_coord_t, x_coord_t >
- active_map_key_t;
- typedef edge_t active_map_value_t;
- typedef std::map< active_map_key_t, active_map_value_t > active_map_t;
- typedef typename active_map_t::iterator active_map_iterator_t;
-
- edge_event_queue_t edge_event_queue;
- active_map_t active_edges;
-
- edge_iterator_t ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- vertex_t s(source(e, g));
- vertex_t t(target(e, g));
- edge_event_queue.push_back(
- make_tuple(e, static_cast< std::size_t >(drawing[s].x),
- static_cast< std::size_t >(drawing[s].y)));
- edge_event_queue.push_back(
- make_tuple(e, static_cast< std::size_t >(drawing[t].x),
- static_cast< std::size_t >(drawing[t].y)));
- }
-
- // Order by edge_event_queue by first, then second coordinate
- // (bucket_sort is a stable sort.)
- bucket_sort(edge_event_queue.begin(), edge_event_queue.end(),
- property_map_tuple_adaptor< edge_event_t, 2 >());
-
- bucket_sort(edge_event_queue.begin(), edge_event_queue.end(),
- property_map_tuple_adaptor< edge_event_t, 1 >());
-
- typedef typename edge_event_queue_t::iterator event_queue_iterator_t;
- event_queue_iterator_t itr_end = edge_event_queue.end();
- for (event_queue_iterator_t itr = edge_event_queue.begin(); itr != itr_end;
- ++itr)
- {
- edge_t e(get< 0 >(*itr));
- vertex_t source_v(source(e, g));
- vertex_t target_v(target(e, g));
- if (drawing[source_v].y > drawing[target_v].y)
- std::swap(source_v, target_v);
-
- active_map_key_t key(get(drawing, source_v).y, get(drawing, target_v).y,
- get(drawing, source_v).x, get(drawing, target_v).x);
-
- active_map_iterator_t a_itr = active_edges.find(key);
- if (a_itr == active_edges.end())
- {
- active_edges[key] = e;
- }
- else
- {
- active_map_iterator_t before, after;
- if (a_itr == active_edges.begin())
- before = active_edges.end();
- else
- before = prior(a_itr);
- after = boost::next(a_itr);
-
- if (before != active_edges.end())
- {
-
- edge_t f = before->second;
- vertex_t e_source(source(e, g));
- vertex_t e_target(target(e, g));
- vertex_t f_source(source(f, g));
- vertex_t f_target(target(f, g));
-
- if (intersects(drawing[e_source].x, drawing[e_source].y,
- drawing[e_target].x, drawing[e_target].y,
- drawing[f_source].x, drawing[f_source].y,
- drawing[f_target].x, drawing[f_target].y))
- return false;
- }
-
- if (after != active_edges.end())
- {
-
- edge_t f = after->second;
- vertex_t e_source(source(e, g));
- vertex_t e_target(target(e, g));
- vertex_t f_source(source(f, g));
- vertex_t f_target(target(f, g));
-
- if (intersects(drawing[e_source].x, drawing[e_source].y,
- drawing[e_target].x, drawing[e_target].y,
- drawing[f_source].x, drawing[f_source].y,
- drawing[f_target].x, drawing[f_target].y))
- return false;
- }
-
- active_edges.erase(a_itr);
- }
- }
-
- return true;
-}
-
-template < typename Graph, typename GridPositionMap >
-bool is_straight_line_drawing(const Graph& g, GridPositionMap drawing)
-{
- return is_straight_line_drawing(g, drawing, get(vertex_index, g));
-}
-
-}
-
-#endif // __IS_STRAIGHT_LINE_DRAWING_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/isomorphism.hpp b/contrib/restricted/boost/graph/include/boost/graph/isomorphism.hpp
deleted file mode 100644
index 0deb6e080d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/isomorphism.hpp
+++ /dev/null
@@ -1,709 +0,0 @@
-// Copyright (C) 2001 Jeremy Siek, Douglas Gregor, Brian Osman
-//
-// 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_ISOMORPHISM_HPP
-#define BOOST_GRAPH_ISOMORPHISM_HPP
-
-#include <utility>
-#include <vector>
-#include <iterator>
-#include <algorithm>
-#include <boost/config.hpp>
-#include <boost/assert.hpp>
-#include <boost/smart_ptr.hpp>
-#include <boost/graph/depth_first_search.hpp>
-#include <boost/detail/algorithm.hpp>
-#include <boost/pending/indirect_cmp.hpp> // for make_indirect_pmap
-#include <boost/concept/assert.hpp>
-
-#ifndef BOOST_GRAPH_ITERATION_MACROS_HPP
-#define BOOST_ISO_INCLUDED_ITER_MACROS // local macro, see bottom of file
-#include <boost/graph/iteration_macros.hpp>
-#endif
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < typename Graph1, typename Graph2, typename IsoMapping,
- typename Invariant1, typename Invariant2, typename IndexMap1,
- typename IndexMap2 >
- class isomorphism_algo
- {
- typedef typename graph_traits< Graph1 >::vertex_descriptor vertex1_t;
- typedef typename graph_traits< Graph2 >::vertex_descriptor vertex2_t;
- typedef typename graph_traits< Graph1 >::edge_descriptor edge1_t;
- typedef typename graph_traits< Graph1 >::vertices_size_type size_type;
- typedef typename Invariant1::result_type invar1_value;
- typedef typename Invariant2::result_type invar2_value;
-
- const Graph1& G1;
- const Graph2& G2;
- IsoMapping f;
- Invariant1 invariant1;
- Invariant2 invariant2;
- std::size_t max_invariant;
- IndexMap1 index_map1;
- IndexMap2 index_map2;
-
- std::vector< vertex1_t > dfs_vertices;
- typedef typename std::vector< vertex1_t >::iterator vertex_iter;
- std::vector< int > dfs_num_vec;
- typedef safe_iterator_property_map<
- typename std::vector< int >::iterator, IndexMap1
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- int, int&
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- >
- DFSNumMap;
- DFSNumMap dfs_num;
- std::vector< edge1_t > ordered_edges;
- typedef typename std::vector< edge1_t >::iterator edge_iter;
-
- std::vector< char > in_S_vec;
- typedef safe_iterator_property_map<
- typename std::vector< char >::iterator, IndexMap2
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- char, char&
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- >
- InSMap;
- InSMap in_S;
-
- int num_edges_on_k;
-
- friend struct compare_multiplicity;
- struct compare_multiplicity
- {
- compare_multiplicity(Invariant1 invariant1, size_type* multiplicity)
- : invariant1(invariant1), multiplicity(multiplicity)
- {
- }
- bool operator()(const vertex1_t& x, const vertex1_t& y) const
- {
- return multiplicity[invariant1(x)]
- < multiplicity[invariant1(y)];
- }
- Invariant1 invariant1;
- size_type* multiplicity;
- };
-
- struct record_dfs_order : default_dfs_visitor
- {
- record_dfs_order(
- std::vector< vertex1_t >& v, std::vector< edge1_t >& e)
- : vertices(v), edges(e)
- {
- }
-
- void discover_vertex(vertex1_t v, const Graph1&) const
- {
- vertices.push_back(v);
- }
- void examine_edge(edge1_t e, const Graph1&) const
- {
- edges.push_back(e);
- }
- std::vector< vertex1_t >& vertices;
- std::vector< edge1_t >& edges;
- };
-
- struct edge_cmp
- {
- edge_cmp(const Graph1& G1, DFSNumMap dfs_num)
- : G1(G1), dfs_num(dfs_num)
- {
- }
- bool operator()(const edge1_t& e1, const edge1_t& e2) const
- {
- using namespace std;
- int u1 = dfs_num[source(e1, G1)], v1 = dfs_num[target(e1, G1)];
- int u2 = dfs_num[source(e2, G1)], v2 = dfs_num[target(e2, G1)];
- int m1 = (max)(u1, v1);
- int m2 = (max)(u2, v2);
- // lexicographical comparison
- return std::make_pair(m1, std::make_pair(u1, v1))
- < std::make_pair(m2, std::make_pair(u2, v2));
- }
- const Graph1& G1;
- DFSNumMap dfs_num;
- };
-
- public:
- isomorphism_algo(const Graph1& G1, const Graph2& G2, IsoMapping f,
- Invariant1 invariant1, Invariant2 invariant2,
- std::size_t max_invariant, IndexMap1 index_map1,
- IndexMap2 index_map2)
- : G1(G1)
- , G2(G2)
- , f(f)
- , invariant1(invariant1)
- , invariant2(invariant2)
- , max_invariant(max_invariant)
- , index_map1(index_map1)
- , index_map2(index_map2)
- {
- in_S_vec.resize(num_vertices(G1));
- in_S = make_safe_iterator_property_map(
- in_S_vec.begin(), in_S_vec.size(), index_map2
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- in_S_vec.front()
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- );
- }
-
- bool test_isomorphism()
- {
- // reset isomapping
- BGL_FORALL_VERTICES_T(v, G1, Graph1)
- f[v] = graph_traits< Graph2 >::null_vertex();
-
- {
- std::vector< invar1_value > invar1_array;
- BGL_FORALL_VERTICES_T(v, G1, Graph1)
- invar1_array.push_back(invariant1(v));
- sort(invar1_array);
-
- std::vector< invar2_value > invar2_array;
- BGL_FORALL_VERTICES_T(v, G2, Graph2)
- invar2_array.push_back(invariant2(v));
- sort(invar2_array);
- if (!equal(invar1_array, invar2_array))
- return false;
- }
-
- std::vector< vertex1_t > V_mult;
- BGL_FORALL_VERTICES_T(v, G1, Graph1)
- V_mult.push_back(v);
- {
- std::vector< size_type > multiplicity(max_invariant, 0);
- BGL_FORALL_VERTICES_T(v, G1, Graph1)
- ++multiplicity.at(invariant1(v));
- sort(
- V_mult, compare_multiplicity(invariant1, &multiplicity[0]));
- }
-
- std::vector< default_color_type > color_vec(num_vertices(G1));
- safe_iterator_property_map<
- std::vector< default_color_type >::iterator, IndexMap1
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- default_color_type, default_color_type&
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- >
- color_map(color_vec.begin(), color_vec.size(), index_map1);
- record_dfs_order dfs_visitor(dfs_vertices, ordered_edges);
- typedef color_traits< default_color_type > Color;
- for (vertex_iter u = V_mult.begin(); u != V_mult.end(); ++u)
- {
- if (color_map[*u] == Color::white())
- {
- dfs_visitor.start_vertex(*u, G1);
- depth_first_visit(G1, *u, dfs_visitor, color_map);
- }
- }
- // Create the dfs_num array and dfs_num_map
- dfs_num_vec.resize(num_vertices(G1));
- dfs_num = make_safe_iterator_property_map(
- dfs_num_vec.begin(), dfs_num_vec.size(), index_map1
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- dfs_num_vec.front()
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- );
- size_type n = 0;
- for (vertex_iter v = dfs_vertices.begin(); v != dfs_vertices.end();
- ++v)
- dfs_num[*v] = n++;
-
- sort(ordered_edges, edge_cmp(G1, dfs_num));
-
- int dfs_num_k = -1;
- return this->match(ordered_edges.begin(), dfs_num_k);
- }
-
- private:
- struct match_continuation
- {
- enum
- {
- pos_G2_vertex_loop,
- pos_fi_adj_loop,
- pos_dfs_num
- } position;
- typedef typename graph_traits< Graph2 >::vertex_iterator
- vertex_iterator;
- std::pair< vertex_iterator, vertex_iterator > G2_verts;
- typedef typename graph_traits< Graph2 >::adjacency_iterator
- adjacency_iterator;
- std::pair< adjacency_iterator, adjacency_iterator > fi_adj;
- edge_iter iter;
- int dfs_num_k;
- };
-
- bool match(edge_iter iter, int dfs_num_k)
- {
- std::vector< match_continuation > k;
- typedef typename graph_traits< Graph2 >::vertex_iterator
- vertex_iterator;
- std::pair< vertex_iterator, vertex_iterator > G2_verts(
- vertices(G2));
- typedef typename graph_traits< Graph2 >::adjacency_iterator
- adjacency_iterator;
- std::pair< adjacency_iterator, adjacency_iterator > fi_adj;
- vertex1_t i, j;
-
- recur:
- if (iter != ordered_edges.end())
- {
- i = source(*iter, G1);
- j = target(*iter, G1);
- if (dfs_num[i] > dfs_num_k)
- {
- G2_verts = vertices(G2);
- while (G2_verts.first != G2_verts.second)
- {
- {
- vertex2_t u = *G2_verts.first;
- vertex1_t kp1 = dfs_vertices[dfs_num_k + 1];
- if (invariant1(kp1) == invariant2(u)
- && in_S[u] == false)
- {
- {
- f[kp1] = u;
- in_S[u] = true;
- num_edges_on_k = 0;
-
- match_continuation new_k;
- new_k.position = match_continuation::
- pos_G2_vertex_loop;
- new_k.G2_verts = G2_verts;
- new_k.iter = iter;
- new_k.dfs_num_k = dfs_num_k;
- k.push_back(new_k);
- ++dfs_num_k;
- goto recur;
- }
- }
- }
- G2_loop_k:
- ++G2_verts.first;
- }
- }
- else if (dfs_num[j] > dfs_num_k)
- {
- {
- vertex1_t vk = dfs_vertices[dfs_num_k];
- num_edges_on_k -= count_if(adjacent_vertices(f[vk], G2),
- make_indirect_pmap(in_S));
-
- for (int jj = 0; jj < dfs_num_k; ++jj)
- {
- vertex1_t j = dfs_vertices[jj];
- num_edges_on_k
- -= count(adjacent_vertices(f[j], G2), f[vk]);
- }
- }
-
- if (num_edges_on_k != 0)
- goto return_point_false;
- fi_adj = adjacent_vertices(f[i], G2);
- while (fi_adj.first != fi_adj.second)
- {
- {
- vertex2_t v = *fi_adj.first;
- if (invariant2(v) == invariant1(j)
- && in_S[v] == false)
- {
- f[j] = v;
- in_S[v] = true;
- num_edges_on_k = 1;
- BOOST_USING_STD_MAX();
- int next_k
- = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- dfs_num_k,
- max BOOST_PREVENT_MACRO_SUBSTITUTION(
- dfs_num[i], dfs_num[j]));
- match_continuation new_k;
- new_k.position
- = match_continuation::pos_fi_adj_loop;
- new_k.fi_adj = fi_adj;
- new_k.iter = iter;
- new_k.dfs_num_k = dfs_num_k;
- ++iter;
- dfs_num_k = next_k;
- k.push_back(new_k);
- goto recur;
- }
- }
- fi_adj_loop_k:
- ++fi_adj.first;
- }
- }
- else
- {
- if (container_contains(adjacent_vertices(f[i], G2), f[j]))
- {
- ++num_edges_on_k;
- match_continuation new_k;
- new_k.position = match_continuation::pos_dfs_num;
- k.push_back(new_k);
- ++iter;
- goto recur;
- }
- }
- }
- else
- goto return_point_true;
- goto return_point_false;
-
- {
- return_point_true:
- return true;
-
- return_point_false:
- if (k.empty())
- return false;
- const match_continuation& this_k = k.back();
- switch (this_k.position)
- {
- case match_continuation::pos_G2_vertex_loop:
- {
- G2_verts = this_k.G2_verts;
- iter = this_k.iter;
- dfs_num_k = this_k.dfs_num_k;
- k.pop_back();
- in_S[*G2_verts.first] = false;
- i = source(*iter, G1);
- j = target(*iter, G1);
- goto G2_loop_k;
- }
- case match_continuation::pos_fi_adj_loop:
- {
- fi_adj = this_k.fi_adj;
- iter = this_k.iter;
- dfs_num_k = this_k.dfs_num_k;
- k.pop_back();
- in_S[*fi_adj.first] = false;
- i = source(*iter, G1);
- j = target(*iter, G1);
- goto fi_adj_loop_k;
- }
- case match_continuation::pos_dfs_num:
- {
- k.pop_back();
- goto return_point_false;
- }
- default:
- {
- BOOST_ASSERT(!"Bad position");
-#ifdef UNDER_CE
- exit(-1);
-#else
- abort();
-#endif
- }
- }
- }
- }
- };
-
- template < typename Graph, typename InDegreeMap >
- void compute_in_degree(const Graph& g, InDegreeMap in_degree_map)
- {
- BGL_FORALL_VERTICES_T(v, g, Graph)
- put(in_degree_map, v, 0);
-
- BGL_FORALL_VERTICES_T(u, g, Graph)
- BGL_FORALL_ADJ_T(u, v, g, Graph)
- put(in_degree_map, v, get(in_degree_map, v) + 1);
- }
-
-} // namespace detail
-
-template < typename InDegreeMap, typename Graph > class degree_vertex_invariant
-{
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::degree_size_type size_type;
-
-public:
- typedef vertex_t argument_type;
- typedef size_type result_type;
-
- degree_vertex_invariant(const InDegreeMap& in_degree_map, const Graph& g)
- : m_in_degree_map(in_degree_map)
- , m_max_vertex_in_degree(0)
- , m_max_vertex_out_degree(0)
- , m_g(g)
- {
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- m_max_vertex_in_degree
- = (std::max)(m_max_vertex_in_degree, get(m_in_degree_map, v));
- m_max_vertex_out_degree
- = (std::max)(m_max_vertex_out_degree, out_degree(v, g));
- }
- }
-
- size_type operator()(vertex_t v) const
- {
- return (m_max_vertex_in_degree + 1) * out_degree(v, m_g)
- + get(m_in_degree_map, v);
- }
- // The largest possible vertex invariant number
- size_type max BOOST_PREVENT_MACRO_SUBSTITUTION() const
- {
- return (m_max_vertex_in_degree + 1) * (m_max_vertex_out_degree + 1);
- }
-
-private:
- InDegreeMap m_in_degree_map;
- size_type m_max_vertex_in_degree;
- size_type m_max_vertex_out_degree;
- const Graph& m_g;
-};
-
-// Count actual number of vertices, even in filtered graphs.
-template < typename Graph > size_t count_vertices(const Graph& g)
-{
- size_t n = 0;
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- (void)v;
- ++n;
- }
- return n;
-}
-
-template < typename Graph1, typename Graph2, typename IsoMapping,
- typename Invariant1, typename Invariant2, typename IndexMap1,
- typename IndexMap2 >
-bool isomorphism(const Graph1& G1, const Graph2& G2, IsoMapping f,
- Invariant1 invariant1, Invariant2 invariant2, std::size_t max_invariant,
- IndexMap1 index_map1, IndexMap2 index_map2)
-
-{
- // Graph requirements
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph1 >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< Graph1 >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph2 >));
- // BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept<Graph2> ));
-
- typedef typename graph_traits< Graph1 >::vertex_descriptor vertex1_t;
- typedef typename graph_traits< Graph2 >::vertex_descriptor vertex2_t;
- typedef typename graph_traits< Graph1 >::vertices_size_type size_type;
-
- // Vertex invariant requirement
- BOOST_CONCEPT_ASSERT(
- (AdaptableUnaryFunctionConcept< Invariant1, size_type, vertex1_t >));
- BOOST_CONCEPT_ASSERT(
- (AdaptableUnaryFunctionConcept< Invariant2, size_type, vertex2_t >));
-
- // Property map requirements
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< IsoMapping, vertex1_t >));
- typedef typename property_traits< IsoMapping >::value_type IsoMappingValue;
- BOOST_STATIC_ASSERT((is_convertible< IsoMappingValue, vertex2_t >::value));
-
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< IndexMap1, vertex1_t >));
- typedef typename property_traits< IndexMap1 >::value_type IndexMap1Value;
- BOOST_STATIC_ASSERT((is_convertible< IndexMap1Value, size_type >::value));
-
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< IndexMap2, vertex2_t >));
- typedef typename property_traits< IndexMap2 >::value_type IndexMap2Value;
- BOOST_STATIC_ASSERT((is_convertible< IndexMap2Value, size_type >::value));
-
- if (count_vertices(G1) != count_vertices(G2))
- return false;
- if (count_vertices(G1) == 0 && count_vertices(G2) == 0)
- return true;
-
- detail::isomorphism_algo< Graph1, Graph2, IsoMapping, Invariant1,
- Invariant2, IndexMap1, IndexMap2 >
- algo(G1, G2, f, invariant1, invariant2, max_invariant, index_map1,
- index_map2);
- return algo.test_isomorphism();
-}
-
-namespace detail
-{
-
- template < typename Graph1, typename Graph2, typename IsoMapping,
- typename IndexMap1, typename IndexMap2, typename P, typename T,
- typename R >
- bool isomorphism_impl(const Graph1& G1, const Graph2& G2, IsoMapping f,
- IndexMap1 index_map1, IndexMap2 index_map2,
- const bgl_named_params< P, T, R >& params)
- {
- std::vector< std::size_t > in_degree1_vec(num_vertices(G1));
- typedef safe_iterator_property_map<
- std::vector< std::size_t >::iterator, IndexMap1
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- std::size_t, std::size_t&
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- >
- InDeg1;
- InDeg1 in_degree1(
- in_degree1_vec.begin(), in_degree1_vec.size(), index_map1);
- compute_in_degree(G1, in_degree1);
-
- std::vector< std::size_t > in_degree2_vec(num_vertices(G2));
- typedef safe_iterator_property_map<
- std::vector< std::size_t >::iterator, IndexMap2
-#ifdef BOOST_NO_STD_ITERATOR_TRAITS
- ,
- std::size_t, std::size_t&
-#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
- >
- InDeg2;
- InDeg2 in_degree2(
- in_degree2_vec.begin(), in_degree2_vec.size(), index_map2);
- compute_in_degree(G2, in_degree2);
-
- degree_vertex_invariant< InDeg1, Graph1 > invariant1(in_degree1, G1);
- degree_vertex_invariant< InDeg2, Graph2 > invariant2(in_degree2, G2);
-
- return isomorphism(G1, G2, f,
- choose_param(get_param(params, vertex_invariant1_t()), invariant1),
- choose_param(get_param(params, vertex_invariant2_t()), invariant2),
- choose_param(get_param(params, vertex_max_invariant_t()),
- (invariant2.max)()),
- index_map1, index_map2);
- }
-
- template < typename G, typename Index > struct make_degree_invariant
- {
- const G& g;
- const Index& index;
- make_degree_invariant(const G& g, const Index& index)
- : g(g), index(index)
- {
- }
- typedef typename boost::graph_traits< G >::degree_size_type
- degree_size_type;
- typedef shared_array_property_map< degree_size_type, Index >
- prop_map_type;
- typedef degree_vertex_invariant< prop_map_type, G > result_type;
- result_type operator()() const
- {
- prop_map_type pm = make_shared_array_property_map(
- num_vertices(g), degree_size_type(), index);
- compute_in_degree(g, pm);
- return result_type(pm, g);
- }
- };
-
-} // namespace detail
-
-namespace graph
-{
- namespace detail
- {
- template < typename Graph1, typename Graph2 > struct isomorphism_impl
- {
- typedef bool result_type;
- typedef result_type type;
- template < typename ArgPack >
- bool operator()(const Graph1& g1, const Graph2& g2,
- const ArgPack& arg_pack) const
- {
- using namespace boost::graph::keywords;
- typedef typename boost::detail::override_const_property_result<
- ArgPack, tag::vertex_index1_map, boost::vertex_index_t,
- Graph1 >::type index1_map_type;
- typedef typename boost::detail::override_const_property_result<
- ArgPack, tag::vertex_index2_map, boost::vertex_index_t,
- Graph2 >::type index2_map_type;
- index1_map_type index1_map
- = boost::detail::override_const_property(
- arg_pack, _vertex_index1_map, g1, boost::vertex_index);
- index2_map_type index2_map
- = boost::detail::override_const_property(
- arg_pack, _vertex_index2_map, g2, boost::vertex_index);
- typedef typename graph_traits< Graph2 >::vertex_descriptor
- vertex2_t;
- typename std::vector< vertex2_t >::size_type n
- = (typename std::vector< vertex2_t >::size_type)
- num_vertices(g1);
- std::vector< vertex2_t > f(n);
- typename boost::parameter::lazy_binding< ArgPack,
- tag::vertex_invariant1,
- boost::detail::make_degree_invariant< Graph1,
- index1_map_type > >::type invariant1
- = arg_pack[_vertex_invariant1
- || boost::detail::make_degree_invariant< Graph1,
- index1_map_type >(g1, index1_map)];
- typename boost::parameter::lazy_binding< ArgPack,
- tag::vertex_invariant2,
- boost::detail::make_degree_invariant< Graph2,
- index2_map_type > >::type invariant2
- = arg_pack[_vertex_invariant2
- || boost::detail::make_degree_invariant< Graph2,
- index2_map_type >(g2, index2_map)];
- return boost::isomorphism(g1, g2,
- choose_param(
- arg_pack[_isomorphism_map | boost::param_not_found()],
- make_shared_array_property_map(
- num_vertices(g1), vertex2_t(), index1_map)),
- invariant1, invariant2,
- arg_pack[_vertex_max_invariant | (invariant2.max)()],
- index1_map, index2_map);
- }
- };
- }
- BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(isomorphism, 2, 6)
-}
-
-// Named parameter interface
-BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(isomorphism, 2)
-
-// Verify that the given mapping iso_map from the vertices of g1 to the
-// vertices of g2 describes an isomorphism.
-// Note: this could be made much faster by specializing based on the graph
-// concepts modeled, but since we're verifying an O(n^(lg n)) algorithm,
-// O(n^4) won't hurt us.
-template < typename Graph1, typename Graph2, typename IsoMap >
-inline bool verify_isomorphism(
- const Graph1& g1, const Graph2& g2, IsoMap iso_map)
-{
-#if 0
- // problematic for filtered_graph!
- if (num_vertices(g1) != num_vertices(g2) || num_edges(g1) != num_edges(g2))
- return false;
-#endif
-
- BGL_FORALL_EDGES_T(e1, g1, Graph1)
- {
- bool found_edge = false;
- BGL_FORALL_EDGES_T(e2, g2, Graph2)
- {
- if (source(e2, g2) == get(iso_map, source(e1, g1))
- && target(e2, g2) == get(iso_map, target(e1, g1)))
- {
- found_edge = true;
- }
- }
-
- if (!found_edge)
- return false;
- }
-
- return true;
-}
-
-} // namespace boost
-
-#ifdef BOOST_ISO_INCLUDED_ITER_MACROS
-#undef BOOST_ISO_INCLUDED_ITER_MACROS
-#include <boost/graph/iteration_macros_undef.hpp>
-#endif
-
-#endif // BOOST_GRAPH_ISOMORPHISM_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/iteration_macros_undef.hpp b/contrib/restricted/boost/graph/include/boost/graph/iteration_macros_undef.hpp
deleted file mode 100644
index 0b3f4174df..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/iteration_macros_undef.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-//=======================================================================
-// Copyright 2002 Indiana University.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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)
-//=======================================================================
-
-#ifdef BOOST_GRAPH_ITERATION_MACROS_HPP
-
-#undef BOOST_GRAPH_ITERATION_MACROS_HPP
-#undef BGL_CAT
-#undef BGL_FIRST
-#undef BGL_LAST
-#undef BGL_FORALL_VERTICES
-#undef BGL_FORALL_EDGES
-#undef BGL_FORALL_ADJACENT
-#undef BGL_FORALL_OUTEDGES
-#undef BGL_FORALL_INEDGES
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/johnson_all_pairs_shortest.hpp b/contrib/restricted/boost/graph/include/boost/graph/johnson_all_pairs_shortest.hpp
deleted file mode 100644
index 2cc4697a11..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/johnson_all_pairs_shortest.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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)
-//=======================================================================
-
-/*
- This file implements the function
-
- template <class VertexAndEdgeListGraph, class DistanceMatrix,
- class P, class T, class R>
- bool
- johnson_all_pairs_shortest_paths
- (VertexAndEdgeListGraph& g,
- DistanceMatrix& D,
- const bgl_named_params<P, T, R>& params)
- */
-
-#ifndef BOOST_GRAPH_JOHNSON_HPP
-#define BOOST_GRAPH_JOHNSON_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/property_map/shared_array_property_map.hpp>
-#include <boost/graph/bellman_ford_shortest_paths.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/type_traits/same_traits.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-template < class VertexAndEdgeListGraph, class DistanceMatrix, class VertexID,
- class Weight, typename BinaryPredicate, typename BinaryFunction,
- typename Infinity, class DistanceZero >
-bool johnson_all_pairs_shortest_paths(VertexAndEdgeListGraph& g1,
- DistanceMatrix& D, VertexID id1, Weight w1, const BinaryPredicate& compare,
- const BinaryFunction& combine, const Infinity& inf, DistanceZero zero)
-{
- typedef graph_traits< VertexAndEdgeListGraph > Traits1;
- typedef typename property_traits< Weight >::value_type DT;
- BOOST_CONCEPT_ASSERT((BasicMatrixConcept< DistanceMatrix,
- typename Traits1::vertices_size_type, DT >));
-
- typedef typename Traits1::directed_category DirCat;
- bool is_undirected = is_same< DirCat, undirected_tag >::value;
-
- typedef adjacency_list< vecS, vecS, directedS,
- property< vertex_distance_t, DT >,
- property< edge_weight_t, DT, property< edge_weight2_t, DT > > >
- Graph2;
- typedef graph_traits< Graph2 > Traits2;
-
- Graph2 g2(num_vertices(g1) + 1);
- typename property_map< Graph2, edge_weight_t >::type w
- = get(edge_weight, g2);
- typename property_map< Graph2, edge_weight2_t >::type w_hat
- = get(edge_weight2, g2);
- typename property_map< Graph2, vertex_distance_t >::type d
- = get(vertex_distance, g2);
- typedef typename property_map< Graph2, vertex_index_t >::type VertexID2;
- VertexID2 id2 = get(vertex_index, g2);
-
- // Construct g2 where V[g2] = V[g1] U {s}
- // and E[g2] = E[g1] U {(s,v)| v in V[g1]}
- std::vector< typename Traits1::vertex_descriptor > verts1(
- num_vertices(g1) + 1);
- typename Traits2::vertex_descriptor s = *vertices(g2).first;
- {
- typename Traits1::vertex_iterator v, v_end;
- int i = 1;
- for (boost::tie(v, v_end) = vertices(g1); v != v_end; ++v, ++i)
- {
- typename Traits2::edge_descriptor e;
- bool z;
- boost::tie(e, z) = add_edge(s, get(id1, *v) + 1, g2);
- put(w, e, zero);
- verts1[i] = *v;
- }
- typename Traits1::edge_iterator e, e_end;
- for (boost::tie(e, e_end) = edges(g1); e != e_end; ++e)
- {
- typename Traits2::edge_descriptor e2;
- bool z;
- boost::tie(e2, z) = add_edge(
- get(id1, source(*e, g1)) + 1, get(id1, target(*e, g1)) + 1, g2);
- put(w, e2, get(w1, *e));
- if (is_undirected)
- {
- boost::tie(e2, z) = add_edge(get(id1, target(*e, g1)) + 1,
- get(id1, source(*e, g1)) + 1, g2);
- put(w, e2, get(w1, *e));
- }
- }
- }
- typename Traits2::vertex_iterator v, v_end, u, u_end;
- typename Traits2::edge_iterator e, e_end;
- shared_array_property_map< DT, VertexID2 > h(num_vertices(g2), id2);
-
- for (boost::tie(v, v_end) = vertices(g2); v != v_end; ++v)
- put(d, *v, inf);
-
- put(d, s, zero);
- // Using the non-named parameter versions of bellman_ford and
- // dijkstra for portability reasons.
- dummy_property_map pred;
- bellman_visitor<> bvis;
- if (bellman_ford_shortest_paths(
- g2, num_vertices(g2), w, pred, d, combine, compare, bvis))
- {
- for (boost::tie(v, v_end) = vertices(g2); v != v_end; ++v)
- put(h, *v, get(d, *v));
- // Reweight the edges to remove negatives
- for (boost::tie(e, e_end) = edges(g2); e != e_end; ++e)
- {
- typename Traits2::vertex_descriptor a = source(*e, g2),
- b = target(*e, g2);
- put(w_hat, *e, combine((get(h, a) - get(h, b)), get(w, *e)));
- }
- for (boost::tie(u, u_end) = vertices(g2); u != u_end; ++u)
- {
- dijkstra_visitor<> dvis;
- dijkstra_shortest_paths(
- g2, *u, pred, d, w_hat, id2, compare, combine, inf, zero, dvis);
- for (boost::tie(v, v_end) = vertices(g2); v != v_end; ++v)
- {
- if (*u != s && *v != s)
- {
- D[get(id2, *u) - 1][get(id2, *v) - 1]
- = combine((get(h, *v) - get(h, *u)), get(d, *v));
- }
- }
- }
- return true;
- }
- else
- return false;
-}
-
-template < class VertexAndEdgeListGraph, class DistanceMatrix, class VertexID,
- class Weight, class DistanceZero >
-bool johnson_all_pairs_shortest_paths(VertexAndEdgeListGraph& g1,
- DistanceMatrix& D, VertexID id1, Weight w1, DistanceZero zero)
-{
- typedef typename property_traits< Weight >::value_type WT;
- return johnson_all_pairs_shortest_paths(g1, D, id1, w1, std::less< WT >(),
- closed_plus< WT >(), (std::numeric_limits< WT >::max)(), zero);
-}
-
-namespace detail
-{
-
- template < class VertexAndEdgeListGraph, class DistanceMatrix, class P,
- class T, class R, class Weight, class VertexID >
- bool johnson_dispatch(VertexAndEdgeListGraph& g, DistanceMatrix& D,
- const bgl_named_params< P, T, R >& params, Weight w, VertexID id)
- {
- typedef typename property_traits< Weight >::value_type WT;
-
- return johnson_all_pairs_shortest_paths(g, D, id, w,
- choose_param(
- get_param(params, distance_compare_t()), std::less< WT >()),
- choose_param(
- get_param(params, distance_combine_t()), closed_plus< WT >()),
- choose_param(get_param(params, distance_inf_t()),
- std::numeric_limits< WT >::max
- BOOST_PREVENT_MACRO_SUBSTITUTION()),
- choose_param(get_param(params, distance_zero_t()), WT()));
- }
-
-} // namespace detail
-
-template < class VertexAndEdgeListGraph, class DistanceMatrix, class P, class T,
- class R >
-bool johnson_all_pairs_shortest_paths(VertexAndEdgeListGraph& g,
- DistanceMatrix& D, const bgl_named_params< P, T, R >& params)
-{
- return detail::johnson_dispatch(g, D, params,
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- choose_const_pmap(get_param(params, vertex_index), g, vertex_index));
-}
-
-template < class VertexAndEdgeListGraph, class DistanceMatrix >
-bool johnson_all_pairs_shortest_paths(
- VertexAndEdgeListGraph& g, DistanceMatrix& D)
-{
- bgl_named_params< int, int > params(1);
- return detail::johnson_dispatch(
- g, D, params, get(edge_weight, g), get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_JOHNSON_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/kamada_kawai_spring_layout.hpp b/contrib/restricted/boost/graph/include/boost/graph/kamada_kawai_spring_layout.hpp
deleted file mode 100644
index 148ebd9ee9..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/kamada_kawai_spring_layout.hpp
+++ /dev/null
@@ -1,688 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
-#define BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/topology.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/johnson_all_pairs_shortest.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <utility>
-#include <iterator>
-#include <vector>
-#include <iostream>
-#include <boost/limits.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-
-namespace boost
-{
-namespace detail
-{
- namespace graph
- {
- /**
- * Denotes an edge or display area side length used to scale a
- * Kamada-Kawai drawing.
- */
- template < bool Edge, typename T > struct edge_or_side
- {
- explicit edge_or_side(T value) : value(value) {}
-
- T value;
- };
-
- /**
- * Compute the edge length from an edge length. This is trivial.
- */
- template < typename Graph, typename DistanceMap, typename IndexMap,
- typename T >
- T compute_edge_length(
- const Graph&, DistanceMap, IndexMap, edge_or_side< true, T > length)
- {
- return length.value;
- }
-
- /**
- * Compute the edge length based on the display area side
- length. We do this by dividing the side length by the largest
- shortest distance between any two vertices in the graph.
- */
- template < typename Graph, typename DistanceMap, typename IndexMap,
- typename T >
- T compute_edge_length(const Graph& g, DistanceMap distance,
- IndexMap index, edge_or_side< false, T > length)
- {
- T result(0);
-
- typedef
- typename graph_traits< Graph >::vertex_iterator vertex_iterator;
-
- for (vertex_iterator ui = vertices(g).first,
- end = vertices(g).second;
- ui != end; ++ui)
- {
- vertex_iterator vi = ui;
- for (++vi; vi != end; ++vi)
- {
- T dij = distance[get(index, *ui)][get(index, *vi)];
- if (dij > result)
- result = dij;
- }
- }
- return length.value / result;
- }
-
- /**
- * Dense linear solver for fixed-size matrices.
- */
- template < std::size_t Size > struct linear_solver
- {
- // Indices in mat are (row, column)
- // template <typename Vec>
- // static Vec solve(double mat[Size][Size], Vec rhs);
- };
-
- template <> struct linear_solver< 1 >
- {
- template < typename Vec >
- static Vec solve(double mat[1][1], Vec rhs)
- {
- return rhs / mat[0][0];
- }
- };
-
- // These are from http://en.wikipedia.org/wiki/Cramer%27s_rule
- template <> struct linear_solver< 2 >
- {
- template < typename Vec >
- static Vec solve(double mat[2][2], Vec rhs)
- {
- double denom = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1];
- double x_num = rhs[0] * mat[1][1] - rhs[1] * mat[0][1];
- double y_num = mat[0][0] * rhs[1] - mat[1][0] * rhs[0];
- Vec result;
- result[0] = x_num / denom;
- result[1] = y_num / denom;
- return result;
- }
- };
-
- template <> struct linear_solver< 3 >
- {
- template < typename Vec >
- static Vec solve(double mat[3][3], Vec rhs)
- {
- double denom = mat[0][0]
- * (mat[1][1] * mat[2][2] - mat[2][1] * mat[1][2])
- - mat[1][0]
- * (mat[0][1] * mat[2][2] - mat[2][1] * mat[0][2])
- + mat[2][0]
- * (mat[0][1] * mat[1][2] - mat[1][1] * mat[0][2]);
- double x_num
- = rhs[0] * (mat[1][1] * mat[2][2] - mat[2][1] * mat[1][2])
- - rhs[1] * (mat[0][1] * mat[2][2] - mat[2][1] * mat[0][2])
- + rhs[2] * (mat[0][1] * mat[1][2] - mat[1][1] * mat[0][2]);
- double y_num
- = mat[0][0] * (rhs[1] * mat[2][2] - rhs[2] * mat[1][2])
- - mat[1][0] * (rhs[0] * mat[2][2] - rhs[2] * mat[0][2])
- + mat[2][0] * (rhs[0] * mat[1][2] - rhs[1] * mat[0][2]);
- double z_num
- = mat[0][0] * (mat[1][1] * rhs[2] - mat[2][1] * rhs[1])
- - mat[1][0] * (mat[0][1] * rhs[2] - mat[2][1] * rhs[0])
- + mat[2][0] * (mat[0][1] * rhs[1] - mat[1][1] * rhs[0]);
- Vec result;
- result[0] = x_num / denom;
- result[1] = y_num / denom;
- result[2] = z_num / denom;
- return result;
- }
- };
-
- /**
- * Implementation of the Kamada-Kawai spring layout algorithm.
- */
- template < typename Topology, typename Graph, typename PositionMap,
- typename WeightMap, typename EdgeOrSideLength, typename Done,
- typename VertexIndexMap, typename DistanceMatrix,
- typename SpringStrengthMatrix, typename PartialDerivativeMap >
- struct kamada_kawai_spring_layout_impl
- {
- typedef
- typename property_traits< WeightMap >::value_type weight_type;
- typedef typename Topology::point_type Point;
- typedef
- typename Topology::point_difference_type point_difference_type;
- typedef point_difference_type deriv_type;
- typedef
- typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef typename graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
-
- kamada_kawai_spring_layout_impl(const Topology& topology,
- const Graph& g, PositionMap position, WeightMap weight,
- EdgeOrSideLength edge_or_side_length, Done done,
- weight_type spring_constant, VertexIndexMap index,
- DistanceMatrix distance, SpringStrengthMatrix spring_strength,
- PartialDerivativeMap partial_derivatives)
- : topology(topology)
- , g(g)
- , position(position)
- , weight(weight)
- , edge_or_side_length(edge_or_side_length)
- , done(done)
- , spring_constant(spring_constant)
- , index(index)
- , distance(distance)
- , spring_strength(spring_strength)
- , partial_derivatives(partial_derivatives)
- {
- }
-
- // Compute contribution of vertex i to the first partial
- // derivatives (dE/dx_m, dE/dy_m) (for vertex m)
- deriv_type compute_partial_derivative(
- vertex_descriptor m, vertex_descriptor i)
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif // BOOST_NO_STDC_NAMESPACE
-
- deriv_type result;
- if (i != m)
- {
- point_difference_type diff
- = topology.difference(position[m], position[i]);
- weight_type dist = topology.norm(diff);
- result = spring_strength[get(index, m)][get(index, i)]
- * (diff
- - distance[get(index, m)][get(index, i)] / dist
- * diff);
- }
-
- return result;
- }
-
- // Compute partial derivatives dE/dx_m and dE/dy_m
- deriv_type compute_partial_derivatives(vertex_descriptor m)
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif // BOOST_NO_STDC_NAMESPACE
-
- deriv_type result;
-
- // TBD: looks like an accumulate to me
- BGL_FORALL_VERTICES_T(i, g, Graph)
- {
- deriv_type deriv = compute_partial_derivative(m, i);
- result += deriv;
- }
-
- return result;
- }
-
- // The actual Kamada-Kawai spring layout algorithm implementation
- bool run()
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::sqrt;
-#endif // BOOST_NO_STDC_NAMESPACE
-
- // Compute d_{ij} and place it in the distance matrix
- if (!johnson_all_pairs_shortest_paths(
- g, distance, index, weight, weight_type(0)))
- return false;
-
- // Compute L based on side length (if needed), or retrieve L
- weight_type edge_length = detail::graph::compute_edge_length(
- g, distance, index, edge_or_side_length);
-
- // std::cerr << "edge_length = " << edge_length << std::endl;
-
- // Compute l_{ij} and k_{ij}
- const weight_type K = spring_constant;
- vertex_iterator ui, end;
- for (ui = vertices(g).first, end = vertices(g).second;
- ui != end; ++ui)
- {
- vertex_iterator vi = ui;
- for (++vi; vi != end; ++vi)
- {
- weight_type dij
- = distance[get(index, *ui)][get(index, *vi)];
- if (dij == (std::numeric_limits< weight_type >::max)())
- return false;
- distance[get(index, *ui)][get(index, *vi)]
- = edge_length * dij;
- distance[get(index, *vi)][get(index, *ui)]
- = edge_length * dij;
- spring_strength[get(index, *ui)][get(index, *vi)]
- = K / (dij * dij);
- spring_strength[get(index, *vi)][get(index, *ui)]
- = K / (dij * dij);
- }
- }
-
- // Compute Delta_i and find max
- vertex_descriptor p = *vertices(g).first;
- weight_type delta_p(0);
-
- for (ui = vertices(g).first, end = vertices(g).second;
- ui != end; ++ui)
- {
- deriv_type deriv = compute_partial_derivatives(*ui);
- put(partial_derivatives, *ui, deriv);
-
- weight_type delta = topology.norm(deriv);
-
- if (delta > delta_p)
- {
- p = *ui;
- delta_p = delta;
- }
- }
-
- while (!done(delta_p, p, g, true))
- {
- // The contribution p makes to the partial derivatives of
- // each vertex. Computing this (at O(n) cost) allows us to
- // update the delta_i values in O(n) time instead of O(n^2)
- // time.
- std::vector< deriv_type > p_partials(num_vertices(g));
- for (ui = vertices(g).first, end = vertices(g).second;
- ui != end; ++ui)
- {
- vertex_descriptor i = *ui;
- p_partials[get(index, i)]
- = compute_partial_derivative(i, p);
- }
-
- do
- {
- // For debugging, compute the energy value E
- double E = 0.;
- for (ui = vertices(g).first, end = vertices(g).second;
- ui != end; ++ui)
- {
- vertex_iterator vi = ui;
- for (++vi; vi != end; ++vi)
- {
- double dist = topology.distance(
- position[*ui], position[*vi]);
- weight_type k_ij = spring_strength[get(
- index, *ui)][get(index, *vi)];
- weight_type l_ij = distance[get(index, *ui)]
- [get(index, *vi)];
- E += .5 * k_ij * (dist - l_ij) * (dist - l_ij);
- }
- }
- // std::cerr << "E = " << E << std::endl;
-
- // Compute the elements of the Jacobian
- // From
- // http://www.cs.panam.edu/~rfowler/papers/1994_kumar_fowler_A_Spring_UTPACSTR.pdf
- // with the bugs fixed in the off-diagonal case
- weight_type dE_d_d[Point::dimensions]
- [Point::dimensions];
- for (std::size_t i = 0; i < Point::dimensions; ++i)
- for (std::size_t j = 0; j < Point::dimensions; ++j)
- dE_d_d[i][j] = 0.;
- for (ui = vertices(g).first, end = vertices(g).second;
- ui != end; ++ui)
- {
- vertex_descriptor i = *ui;
- if (i != p)
- {
- point_difference_type diff
- = topology.difference(
- position[p], position[i]);
- weight_type dist = topology.norm(diff);
- weight_type dist_squared = dist * dist;
- weight_type inv_dist_cubed
- = 1. / (dist_squared * dist);
- weight_type k_mi = spring_strength[get(
- index, p)][get(index, i)];
- weight_type l_mi
- = distance[get(index, p)][get(index, i)];
- for (std::size_t i = 0; i < Point::dimensions;
- ++i)
- {
- for (std::size_t j = 0;
- j < Point::dimensions; ++j)
- {
- if (i == j)
- {
- dE_d_d[i][i] += k_mi
- * (1
- + (l_mi
- * (diff[i] * diff[i]
- - dist_squared)
- * inv_dist_cubed));
- }
- else
- {
- dE_d_d[i][j] += k_mi * l_mi
- * diff[i] * diff[j]
- * inv_dist_cubed;
- // dE_d_d[i][j] += k_mi * l_mi *
- // sqrt(hypot(diff[i], diff[j])) *
- // inv_dist_cubed;
- }
- }
- }
- }
- }
-
- deriv_type dE_d = get(partial_derivatives, p);
-
- // Solve dE_d_d * delta = -dE_d to get delta
- point_difference_type delta
- = -linear_solver< Point::dimensions >::solve(
- dE_d_d, dE_d);
-
- // Move p by delta
- position[p] = topology.adjust(position[p], delta);
-
- // Recompute partial derivatives and delta_p
- deriv_type deriv = compute_partial_derivatives(p);
- put(partial_derivatives, p, deriv);
-
- delta_p = topology.norm(deriv);
- } while (!done(delta_p, p, g, false));
-
- // Select new p by updating each partial derivative and
- // delta
- vertex_descriptor old_p = p;
- for (ui = vertices(g).first, end = vertices(g).second;
- ui != end; ++ui)
- {
- deriv_type old_deriv_p = p_partials[get(index, *ui)];
- deriv_type old_p_partial
- = compute_partial_derivative(*ui, old_p);
- deriv_type deriv = get(partial_derivatives, *ui);
-
- deriv += old_p_partial - old_deriv_p;
-
- put(partial_derivatives, *ui, deriv);
- weight_type delta = topology.norm(deriv);
-
- if (delta > delta_p)
- {
- p = *ui;
- delta_p = delta;
- }
- }
- }
-
- return true;
- }
-
- const Topology& topology;
- const Graph& g;
- PositionMap position;
- WeightMap weight;
- EdgeOrSideLength edge_or_side_length;
- Done done;
- weight_type spring_constant;
- VertexIndexMap index;
- DistanceMatrix distance;
- SpringStrengthMatrix spring_strength;
- PartialDerivativeMap partial_derivatives;
- };
- }
-} // end namespace detail::graph
-
-/// States that the given quantity is an edge length.
-template < typename T >
-inline detail::graph::edge_or_side< true, T > edge_length(T x)
-{
- return detail::graph::edge_or_side< true, T >(x);
-}
-
-/// States that the given quantity is a display area side length.
-template < typename T >
-inline detail::graph::edge_or_side< false, T > side_length(T x)
-{
- return detail::graph::edge_or_side< false, T >(x);
-}
-
-/**
- * \brief Determines when to terminate layout of a particular graph based
- * on a given relative tolerance.
- */
-template < typename T = double > struct layout_tolerance
-{
- layout_tolerance(const T& tolerance = T(0.001))
- : tolerance(tolerance)
- , last_energy((std::numeric_limits< T >::max)())
- , last_local_energy((std::numeric_limits< T >::max)())
- {
- }
-
- template < typename Graph >
- bool operator()(T delta_p,
- typename boost::graph_traits< Graph >::vertex_descriptor p,
- const Graph& g, bool global)
- {
- if (global)
- {
- if (last_energy == (std::numeric_limits< T >::max)())
- {
- last_energy = delta_p;
- return false;
- }
-
- T diff = last_energy - delta_p;
- if (diff < T(0))
- diff = -diff;
- bool done = (delta_p == T(0) || diff / last_energy < tolerance);
- last_energy = delta_p;
- return done;
- }
- else
- {
- if (last_local_energy == (std::numeric_limits< T >::max)())
- {
- last_local_energy = delta_p;
- return delta_p == T(0);
- }
-
- T diff = last_local_energy - delta_p;
- bool done
- = (delta_p == T(0) || (diff / last_local_energy) < tolerance);
- last_local_energy = delta_p;
- return done;
- }
- }
-
-private:
- T tolerance;
- T last_energy;
- T last_local_energy;
-};
-
-/** \brief Kamada-Kawai spring layout for undirected graphs.
- *
- * This algorithm performs graph layout (in two dimensions) for
- * connected, undirected graphs. It operates by relating the layout
- * of graphs to a dynamic spring system and minimizing the energy
- * within that system. The strength of a spring between two vertices
- * is inversely proportional to the square of the shortest distance
- * (in graph terms) between those two vertices. Essentially,
- * vertices that are closer in the graph-theoretic sense (i.e., by
- * following edges) will have stronger springs and will therefore be
- * placed closer together.
- *
- * Prior to invoking this algorithm, it is recommended that the
- * vertices be placed along the vertices of a regular n-sided
- * polygon.
- *
- * \param g (IN) must be a model of Vertex List Graph, Edge List
- * Graph, and Incidence Graph and must be undirected.
- *
- * \param position (OUT) must be a model of Lvalue Property Map,
- * where the value type is a class containing fields @c x and @c y
- * that will be set to the @c x and @c y coordinates of each vertex.
- *
- * \param weight (IN) must be a model of Readable Property Map,
- * which provides the weight of each edge in the graph @p g.
- *
- * \param topology (IN) must be a topology object (see topology.hpp),
- * which provides operations on points and differences between them.
- *
- * \param edge_or_side_length (IN) provides either the unit length
- * @c e of an edge in the layout or the length of a side @c s of the
- * display area, and must be either @c boost::edge_length(e) or @c
- * boost::side_length(s), respectively.
- *
- * \param done (IN) is a 4-argument function object that is passed
- * the current value of delta_p (i.e., the energy of vertex @p p),
- * the vertex @p p, the graph @p g, and a boolean flag indicating
- * whether @p delta_p is the maximum energy in the system (when @c
- * true) or the energy of the vertex being moved. Defaults to @c
- * layout_tolerance instantiated over the value type of the weight
- * map.
- *
- * \param spring_constant (IN) is the constant multiplied by each
- * spring's strength. Larger values create systems with more energy
- * that can take longer to stabilize; smaller values create systems
- * with less energy that stabilize quickly but do not necessarily
- * result in pleasing layouts. The default value is 1.
- *
- * \param index (IN) is a mapping from vertices to index values
- * between 0 and @c num_vertices(g). The default is @c
- * get(vertex_index,g).
- *
- * \param distance (UTIL/OUT) will be used to store the distance
- * from every vertex to every other vertex, which is computed in the
- * first stages of the algorithm. This value's type must be a model
- * of BasicMatrix with value type equal to the value type of the
- * weight map. The default is a vector of vectors.
- *
- * \param spring_strength (UTIL/OUT) will be used to store the
- * strength of the spring between every pair of vertices. This
- * value's type must be a model of BasicMatrix with value type equal
- * to the value type of the weight map. The default is a vector of
- * vectors.
- *
- * \param partial_derivatives (UTIL) will be used to store the
- * partial derivates of each vertex with respect to the @c x and @c
- * y coordinates. This must be a Read/Write Property Map whose value
- * type is a pair with both types equivalent to the value type of
- * the weight map. The default is an iterator property map.
- *
- * \returns @c true if layout was successful or @c false if a
- * negative weight cycle was detected.
- */
-template < typename Topology, typename Graph, typename PositionMap,
- typename WeightMap, typename T, bool EdgeOrSideLength, typename Done,
- typename VertexIndexMap, typename DistanceMatrix,
- typename SpringStrengthMatrix, typename PartialDerivativeMap >
-bool kamada_kawai_spring_layout(const Graph& g, PositionMap position,
- WeightMap weight, const Topology& topology,
- detail::graph::edge_or_side< EdgeOrSideLength, T > edge_or_side_length,
- Done done,
- typename property_traits< WeightMap >::value_type spring_constant,
- VertexIndexMap index, DistanceMatrix distance,
- SpringStrengthMatrix spring_strength,
- PartialDerivativeMap partial_derivatives)
-{
- BOOST_STATIC_ASSERT(
- (is_convertible< typename graph_traits< Graph >::directed_category*,
- undirected_tag* >::value));
-
- detail::graph::kamada_kawai_spring_layout_impl< Topology, Graph,
- PositionMap, WeightMap,
- detail::graph::edge_or_side< EdgeOrSideLength, T >, Done,
- VertexIndexMap, DistanceMatrix, SpringStrengthMatrix,
- PartialDerivativeMap >
- alg(topology, g, position, weight, edge_or_side_length, done,
- spring_constant, index, distance, spring_strength,
- partial_derivatives);
- return alg.run();
-}
-
-/**
- * \overload
- */
-template < typename Topology, typename Graph, typename PositionMap,
- typename WeightMap, typename T, bool EdgeOrSideLength, typename Done,
- typename VertexIndexMap >
-bool kamada_kawai_spring_layout(const Graph& g, PositionMap position,
- WeightMap weight, const Topology& topology,
- detail::graph::edge_or_side< EdgeOrSideLength, T > edge_or_side_length,
- Done done,
- typename property_traits< WeightMap >::value_type spring_constant,
- VertexIndexMap index)
-{
- typedef typename property_traits< WeightMap >::value_type weight_type;
-
- typename graph_traits< Graph >::vertices_size_type n = num_vertices(g);
- typedef std::vector< weight_type > weight_vec;
-
- std::vector< weight_vec > distance(n, weight_vec(n));
- std::vector< weight_vec > spring_strength(n, weight_vec(n));
- std::vector< typename Topology::point_difference_type > partial_derivatives(
- n);
-
- return kamada_kawai_spring_layout(g, position, weight, topology,
- edge_or_side_length, done, spring_constant, index, distance.begin(),
- spring_strength.begin(),
- make_iterator_property_map(partial_derivatives.begin(), index,
- typename Topology::point_difference_type()));
-}
-
-/**
- * \overload
- */
-template < typename Topology, typename Graph, typename PositionMap,
- typename WeightMap, typename T, bool EdgeOrSideLength, typename Done >
-bool kamada_kawai_spring_layout(const Graph& g, PositionMap position,
- WeightMap weight, const Topology& topology,
- detail::graph::edge_or_side< EdgeOrSideLength, T > edge_or_side_length,
- Done done,
- typename property_traits< WeightMap >::value_type spring_constant)
-{
- return kamada_kawai_spring_layout(g, position, weight, topology,
- edge_or_side_length, done, spring_constant, get(vertex_index, g));
-}
-
-/**
- * \overload
- */
-template < typename Topology, typename Graph, typename PositionMap,
- typename WeightMap, typename T, bool EdgeOrSideLength, typename Done >
-bool kamada_kawai_spring_layout(const Graph& g, PositionMap position,
- WeightMap weight, const Topology& topology,
- detail::graph::edge_or_side< EdgeOrSideLength, T > edge_or_side_length,
- Done done)
-{
- typedef typename property_traits< WeightMap >::value_type weight_type;
- return kamada_kawai_spring_layout(g, position, weight, topology,
- edge_or_side_length, done, weight_type(1));
-}
-
-/**
- * \overload
- */
-template < typename Topology, typename Graph, typename PositionMap,
- typename WeightMap, typename T, bool EdgeOrSideLength >
-bool kamada_kawai_spring_layout(const Graph& g, PositionMap position,
- WeightMap weight, const Topology& topology,
- detail::graph::edge_or_side< EdgeOrSideLength, T > edge_or_side_length)
-{
- typedef typename property_traits< WeightMap >::value_type weight_type;
- return kamada_kawai_spring_layout(g, position, weight, topology,
- edge_or_side_length, layout_tolerance< weight_type >(),
- weight_type(1.0), get(vertex_index, g));
-}
-} // end namespace boost
-
-#endif // BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/king_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/king_ordering.hpp
deleted file mode 100644
index 6a0bd93944..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/king_ordering.hpp
+++ /dev/null
@@ -1,346 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2004, 2005 Trustees of Indiana University
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
-// Doug Gregor, D. Kevin McGrath
-//
-// 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_KING_HPP
-#define BOOST_GRAPH_KING_HPP
-
-#include <deque>
-#include <vector>
-#include <algorithm>
-#include <boost/config.hpp>
-#include <boost/bind/bind.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/graph/detail/sparse_ordering.hpp>
-#include <boost/graph/graph_utility.hpp>
-
-/*
- King Algorithm for matrix reordering
-*/
-
-namespace boost
-{
-namespace detail
-{
- template < typename OutputIterator, typename Buffer, typename Compare,
- typename PseudoDegreeMap, typename VecMap, typename VertexIndexMap >
- class bfs_king_visitor : public default_bfs_visitor
- {
- public:
- bfs_king_visitor(OutputIterator* iter, Buffer* b, Compare compare,
- PseudoDegreeMap deg, std::vector< int > loc, VecMap color,
- VertexIndexMap vertices)
- : permutation(iter)
- , Qptr(b)
- , degree(deg)
- , comp(compare)
- , Qlocation(loc)
- , colors(color)
- , vertex_map(vertices)
- {
- }
-
- template < typename Vertex, typename Graph >
- void finish_vertex(Vertex, Graph& g)
- {
- using namespace boost::placeholders;
-
- typename graph_traits< Graph >::out_edge_iterator ei, ei_end;
- Vertex v, w;
-
- typedef typename std::deque< Vertex >::reverse_iterator
- reverse_iterator;
-
- reverse_iterator rend = Qptr->rend() - index_begin;
- reverse_iterator rbegin = Qptr->rbegin();
-
- // heap the vertices already there
- std::make_heap(rbegin, rend, boost::bind< bool >(comp, _2, _1));
-
- unsigned i = 0;
-
- for (i = index_begin; i != Qptr->size(); ++i)
- {
- colors[get(vertex_map, (*Qptr)[i])] = 1;
- Qlocation[get(vertex_map, (*Qptr)[i])] = i;
- }
-
- i = 0;
-
- for (; rbegin != rend; rend--)
- {
- percolate_down< Vertex >(i);
- w = (*Qptr)[index_begin + i];
- for (boost::tie(ei, ei_end) = out_edges(w, g); ei != ei_end;
- ++ei)
- {
- v = target(*ei, g);
- put(degree, v, get(degree, v) - 1);
-
- if (colors[get(vertex_map, v)] == 1)
- {
- percolate_up< Vertex >(get(vertex_map, v), i);
- }
- }
-
- colors[get(vertex_map, w)] = 0;
- i++;
- }
- }
-
- template < typename Vertex, typename Graph >
- void examine_vertex(Vertex u, const Graph&)
- {
-
- *(*permutation)++ = u;
- index_begin = Qptr->size();
- }
-
- protected:
- // this function replaces pop_heap, and tracks state information
- template < typename Vertex > void percolate_down(int offset)
- {
- int heap_last = index_begin + offset;
- int heap_first = Qptr->size() - 1;
-
- // pop_heap functionality:
- // swap first, last
- std::swap((*Qptr)[heap_last], (*Qptr)[heap_first]);
-
- // swap in the location queue
- std::swap(Qlocation[heap_first], Qlocation[heap_last]);
-
- // set drifter, children
- int drifter = heap_first;
- int drifter_heap = Qptr->size() - drifter;
-
- int right_child_heap = drifter_heap * 2 + 1;
- int right_child = Qptr->size() - right_child_heap;
-
- int left_child_heap = drifter_heap * 2;
- int left_child = Qptr->size() - left_child_heap;
-
- // check that we are staying in the heap
- bool valid = (right_child < heap_last) ? false : true;
-
- // pick smallest child of drifter, and keep in mind there might only
- // be left child
- int smallest_child = (valid
- && get(degree, (*Qptr)[left_child])
- > get(degree, (*Qptr)[right_child]))
- ? right_child
- : left_child;
-
- while (valid && smallest_child < heap_last
- && comp((*Qptr)[drifter], (*Qptr)[smallest_child]))
- {
-
- // if smallest child smaller than drifter, swap them
- std::swap((*Qptr)[smallest_child], (*Qptr)[drifter]);
- std::swap(Qlocation[drifter], Qlocation[smallest_child]);
-
- // update the values, run again, as necessary
- drifter = smallest_child;
- drifter_heap = Qptr->size() - drifter;
-
- right_child_heap = drifter_heap * 2 + 1;
- right_child = Qptr->size() - right_child_heap;
-
- left_child_heap = drifter_heap * 2;
- left_child = Qptr->size() - left_child_heap;
-
- valid = (right_child < heap_last) ? false : true;
-
- smallest_child = (valid
- && get(degree, (*Qptr)[left_child])
- > get(degree, (*Qptr)[right_child]))
- ? right_child
- : left_child;
- }
- }
-
- // this is like percolate down, but we always compare against the
- // parent, as there is only a single choice
- template < typename Vertex > void percolate_up(int vertex, int offset)
- {
-
- int child_location = Qlocation[vertex];
- int heap_child_location = Qptr->size() - child_location;
- int heap_parent_location = (int)(heap_child_location / 2);
- unsigned parent_location = Qptr->size() - heap_parent_location;
-
- bool valid = (heap_parent_location != 0
- && child_location > index_begin + offset
- && parent_location < Qptr->size());
-
- while (valid
- && comp((*Qptr)[child_location], (*Qptr)[parent_location]))
- {
-
- // swap in the heap
- std::swap((*Qptr)[child_location], (*Qptr)[parent_location]);
-
- // swap in the location queue
- std::swap(
- Qlocation[child_location], Qlocation[parent_location]);
-
- child_location = parent_location;
- heap_child_location = heap_parent_location;
- heap_parent_location = (int)(heap_child_location / 2);
- parent_location = Qptr->size() - heap_parent_location;
- valid = (heap_parent_location != 0
- && child_location > index_begin + offset);
- }
- }
-
- OutputIterator* permutation;
- int index_begin;
- Buffer* Qptr;
- PseudoDegreeMap degree;
- Compare comp;
- std::vector< int > Qlocation;
- VecMap colors;
- VertexIndexMap vertex_map;
- };
-
-} // namespace detail
-
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap,
- typename VertexIndexMap >
-OutputIterator king_ordering(const Graph& g,
- std::deque< typename graph_traits< Graph >::vertex_descriptor >
- vertex_queue,
- OutputIterator permutation, ColorMap color, DegreeMap degree,
- VertexIndexMap index_map)
-{
- typedef typename property_traits< DegreeMap >::value_type ds_type;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef iterator_property_map< typename std::vector< ds_type >::iterator,
- VertexIndexMap, ds_type, ds_type& >
- PseudoDegreeMap;
- typedef indirect_cmp< PseudoDegreeMap, std::less< ds_type > > Compare;
- typedef typename boost::sparse::sparse_ordering_queue< Vertex > queue;
- typedef typename detail::bfs_king_visitor< OutputIterator, queue, Compare,
- PseudoDegreeMap, std::vector< int >, VertexIndexMap >
- Visitor;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- std::vector< ds_type > pseudo_degree_vec(num_vertices(g));
- PseudoDegreeMap pseudo_degree(pseudo_degree_vec.begin(), index_map);
-
- typename graph_traits< Graph >::vertex_iterator ui, ui_end;
- queue Q;
- // Copy degree to pseudo_degree
- // initialize the color map
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- put(pseudo_degree, *ui, get(degree, *ui));
- put(color, *ui, Color::white());
- }
-
- Compare comp(pseudo_degree);
- std::vector< int > colors(num_vertices(g));
-
- for (vertices_size_type i = 0; i < num_vertices(g); i++)
- colors[i] = 0;
-
- std::vector< int > loc(num_vertices(g));
-
- // create the visitor
- Visitor vis(&permutation, &Q, comp, pseudo_degree, loc, colors, index_map);
-
- while (!vertex_queue.empty())
- {
- Vertex s = vertex_queue.front();
- vertex_queue.pop_front();
-
- // call BFS with visitor
- breadth_first_visit(g, s, Q, vis, color);
- }
-
- return permutation;
-}
-
-// This is the case where only a single starting vertex is supplied.
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap,
- typename VertexIndexMap >
-OutputIterator king_ordering(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- OutputIterator permutation, ColorMap color, DegreeMap degree,
- VertexIndexMap index_map)
-{
-
- std::deque< typename graph_traits< Graph >::vertex_descriptor >
- vertex_queue;
- vertex_queue.push_front(s);
- return king_ordering(
- g, vertex_queue, permutation, color, degree, index_map);
-}
-
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap,
- class VertexIndexMap >
-OutputIterator king_ordering(const Graph& G, OutputIterator permutation,
- ColorMap color, DegreeMap degree, VertexIndexMap index_map)
-{
- if (has_no_vertices(G))
- return permutation;
-
- typedef typename boost::graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- std::deque< Vertex > vertex_queue;
-
- // Mark everything white
- BGL_FORALL_VERTICES_T(v, G, Graph) put(color, v, Color::white());
-
- // Find one vertex from each connected component
- BGL_FORALL_VERTICES_T(v, G, Graph)
- {
- if (get(color, v) == Color::white())
- {
- depth_first_visit(G, v, dfs_visitor<>(), color);
- vertex_queue.push_back(v);
- }
- }
-
- // Find starting nodes for all vertices
- // TBD: How to do this with a directed graph?
- for (typename std::deque< Vertex >::iterator i = vertex_queue.begin();
- i != vertex_queue.end(); ++i)
- *i = find_starting_node(G, *i, color, degree);
-
- return king_ordering(
- G, vertex_queue, permutation, color, degree, index_map);
-}
-
-template < typename Graph, typename OutputIterator, typename VertexIndexMap >
-OutputIterator king_ordering(
- const Graph& G, OutputIterator permutation, VertexIndexMap index_map)
-{
- if (has_no_vertices(G))
- return permutation;
-
- std::vector< default_color_type > colors(num_vertices(G));
- return king_ordering(G, permutation,
- make_iterator_property_map(&colors[0], index_map, colors[0]),
- make_out_degree_map(G), index_map);
-}
-
-template < typename Graph, typename OutputIterator >
-inline OutputIterator king_ordering(const Graph& G, OutputIterator permutation)
-{
- return king_ordering(G, permutation, get(vertex_index, G));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_KING_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/kruskal_min_spanning_tree.hpp b/contrib/restricted/boost/graph/include/boost/graph/kruskal_min_spanning_tree.hpp
deleted file mode 100644
index 1e91feb49c..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/kruskal_min_spanning_tree.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_MST_KRUSKAL_HPP
-#define BOOST_GRAPH_MST_KRUSKAL_HPP
-
-/*
- *Minimum Spanning Tree
- * Kruskal Algorithm
- *
- *Requirement:
- * undirected graph
- */
-
-#include <vector>
-#include <queue>
-#include <functional>
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/pending/disjoint_sets.hpp>
-#include <boost/pending/indirect_cmp.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-// Kruskal's algorithm for Minimum Spanning Tree
-//
-// This is a greedy algorithm to calculate the Minimum Spanning Tree
-// for an undirected graph with weighted edges. The output will be a
-// set of edges.
-//
-
-namespace detail
-{
-
- template < class Graph, class OutputIterator, class Rank, class Parent,
- class Weight >
- void kruskal_mst_impl(const Graph& G, OutputIterator spanning_tree_edges,
- Rank rank, Parent parent, Weight weight)
- {
- if (num_vertices(G) == 0)
- return; // Nothing to do in this case
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((OutputIteratorConcept< OutputIterator, Edge >));
- BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept< Rank, Vertex >));
- BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept< Parent, Vertex >));
- BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept< Weight, Edge >));
- typedef typename property_traits< Weight >::value_type W_value;
- typedef typename property_traits< Rank >::value_type R_value;
- typedef typename property_traits< Parent >::value_type P_value;
- BOOST_CONCEPT_ASSERT((ComparableConcept< W_value >));
- BOOST_CONCEPT_ASSERT((ConvertibleConcept< P_value, Vertex >));
- BOOST_CONCEPT_ASSERT((IntegerConcept< R_value >));
-
- disjoint_sets< Rank, Parent > dset(rank, parent);
-
- typename graph_traits< Graph >::vertex_iterator ui, uiend;
- for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui)
- dset.make_set(*ui);
-
- typedef indirect_cmp< Weight, std::greater< W_value > > weight_greater;
- weight_greater wl(weight);
- std::priority_queue< Edge, std::vector< Edge >, weight_greater > Q(wl);
- /*push all edge into Q*/
- typename graph_traits< Graph >::edge_iterator ei, eiend;
- for (boost::tie(ei, eiend) = edges(G); ei != eiend; ++ei)
- Q.push(*ei);
-
- while (!Q.empty())
- {
- Edge e = Q.top();
- Q.pop();
- Vertex u = dset.find_set(source(e, G));
- Vertex v = dset.find_set(target(e, G));
- if (u != v)
- {
- *spanning_tree_edges++ = e;
- dset.link(u, v);
- }
- }
- }
-
-} // namespace detail
-
-// Named Parameters Variants
-
-template < class Graph, class OutputIterator >
-inline void kruskal_minimum_spanning_tree(
- const Graph& g, OutputIterator spanning_tree_edges)
-{
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- if (num_vertices(g) == 0)
- return; // Nothing to do in this case
- typename graph_traits< Graph >::vertices_size_type n = num_vertices(g);
- std::vector< size_type > rank_map(n);
- std::vector< vertex_t > pred_map(n);
-
- detail::kruskal_mst_impl(g, spanning_tree_edges,
- make_iterator_property_map(
- rank_map.begin(), get(vertex_index, g), rank_map[0]),
- make_iterator_property_map(
- pred_map.begin(), get(vertex_index, g), pred_map[0]),
- get(edge_weight, g));
-}
-
-template < class Graph, class OutputIterator, class P, class T, class R >
-inline void kruskal_minimum_spanning_tree(const Graph& g,
- OutputIterator spanning_tree_edges,
- const bgl_named_params< P, T, R >& params)
-{
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- if (num_vertices(g) == 0)
- return; // Nothing to do in this case
- typename graph_traits< Graph >::vertices_size_type n;
- n = is_default_param(get_param(params, vertex_rank)) ? num_vertices(g) : 1;
- std::vector< size_type > rank_map(n);
- n = is_default_param(get_param(params, vertex_predecessor))
- ? num_vertices(g)
- : 1;
- std::vector< vertex_t > pred_map(n);
-
- detail::kruskal_mst_impl(g, spanning_tree_edges,
- choose_param(get_param(params, vertex_rank),
- make_iterator_property_map(rank_map.begin(),
- choose_pmap(get_param(params, vertex_index), g, vertex_index),
- rank_map[0])),
- choose_param(get_param(params, vertex_predecessor),
- make_iterator_property_map(pred_map.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index),
- pred_map[0])),
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_MST_KRUSKAL_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/labeled_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/labeled_graph.hpp
deleted file mode 100644
index ec88436aa7..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/labeled_graph.hpp
+++ /dev/null
@@ -1,960 +0,0 @@
-// Copyright (C) 2009 Andrew Sutton
-
-// Use, modification and distribution is subject to 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_LABELED_GRAPH_HPP
-#define BOOST_GRAPH_LABELED_GRAPH_HPP
-
-#include <boost/config.hpp>
-#include <vector>
-#include <map>
-
-#include <boost/static_assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/unordered_map.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/is_unsigned.hpp>
-#include <boost/pending/container_traits.hpp>
-#include <boost/graph/graph_traits.hpp>
-
-// This file implements a utility for creating mappings from arbitrary
-// identifiers to the vertices of a graph.
-
-namespace boost
-{
-
-// A type selector that denotes the use of some default value.
-struct defaultS
-{
-};
-
-/** @internal */
-namespace graph_detail
-{
- /** Returns true if the selector is the default selector. */
- template < typename Selector >
- struct is_default : mpl::bool_< is_same< Selector, defaultS >::value >
- {
- };
-
- /**
- * Choose the default map instance. If Label is an unsigned integral type
- * the we can use a vector to store the information.
- */
- template < typename Label, typename Vertex > struct choose_default_map
- {
- typedef typename mpl::if_< is_unsigned< Label >, std::vector< Vertex >,
- std::map< Label, Vertex > // TODO: Should use unordered_map?
- >::type type;
- };
-
- /**
- * @name Generate Label Map
- * These type generators are responsible for instantiating an associative
- * container for the the labeled graph. Note that the Selector must be
- * select a pair associative container or a vecS, which is only valid if
- * Label is an integral type.
- */
- //@{
- template < typename Selector, typename Label, typename Vertex >
- struct generate_label_map
- {
- };
-
- template < typename Label, typename Vertex >
- struct generate_label_map< vecS, Label, Vertex >
- {
- typedef std::vector< Vertex > type;
- };
-
- template < typename Label, typename Vertex >
- struct generate_label_map< mapS, Label, Vertex >
- {
- typedef std::map< Label, Vertex > type;
- };
-
- template < typename Label, typename Vertex >
- struct generate_label_map< multimapS, Label, Vertex >
- {
- typedef std::multimap< Label, Vertex > type;
- };
-
- template < typename Label, typename Vertex >
- struct generate_label_map< hash_mapS, Label, Vertex >
- {
- typedef boost::unordered_map< Label, Vertex > type;
- };
-
- template < typename Label, typename Vertex >
- struct generate_label_map< hash_multimapS, Label, Vertex >
- {
- typedef boost::unordered_multimap< Label, Vertex > type;
- };
-
- template < typename Selector, typename Label, typename Vertex >
- struct choose_custom_map
- {
- typedef
- typename generate_label_map< Selector, Label, Vertex >::type type;
- };
- //@}
-
- /**
- * Choose and instantiate an "associative" container. Note that this can
- * also choose vector.
- */
- template < typename Selector, typename Label, typename Vertex >
- struct choose_map
- {
- typedef typename mpl::eval_if< is_default< Selector >,
- choose_default_map< Label, Vertex >,
- choose_custom_map< Selector, Label, Vertex > >::type type;
- };
-
- /** @name Insert Labeled Vertex */
- //@{
- // Tag dispatch on random access containers (i.e., vectors). This function
- // basically requires a) that Container is vector<Label> and that Label
- // is an unsigned integral value. Note that this will resize the vector
- // to accommodate indices.
- template < typename Container, typename Graph, typename Label,
- typename Prop >
- std::pair< typename graph_traits< Graph >::vertex_descriptor, bool >
- insert_labeled_vertex(Container& c, Graph& g, Label const& l, Prop const& p,
- random_access_container_tag)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- // If the label is out of bounds, resize the vector to accommodate.
- // Resize by 2x the index so we don't cause quadratic insertions over
- // time.
- if (l >= c.size())
- {
- c.resize((l + 1) * 2);
- }
- Vertex v = add_vertex(p, g);
- c[l] = v;
- return std::make_pair(c[l], true);
- }
-
- // Tag dispatch on multi associative containers (i.e. multimaps).
- template < typename Container, typename Graph, typename Label,
- typename Prop >
- std::pair< typename graph_traits< Graph >::vertex_descriptor, bool >
- insert_labeled_vertex(Container& c, Graph& g, Label const& l, Prop const& p,
- multiple_associative_container_tag const&)
- {
- // Note that insertion always succeeds so we can add the vertex first
- // and then the mapping to the label.
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- Vertex v = add_vertex(p, g);
- c.insert(std::make_pair(l, v));
- return std::make_pair(v, true);
- }
-
- // Tag dispatch on unique associative containers (i.e. maps).
- template < typename Container, typename Graph, typename Label,
- typename Prop >
- std::pair< typename graph_traits< Graph >::vertex_descriptor, bool >
- insert_labeled_vertex(Container& c, Graph& g, Label const& l, Prop const& p,
- unique_associative_container_tag)
- {
- // Here, we actually have to try the insertion first, and only add
- // the vertex if we get a new element.
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename Container::iterator Iterator;
- std::pair< Iterator, bool > x = c.insert(std::make_pair(l, Vertex()));
- if (x.second)
- {
- x.first->second = add_vertex(g);
- put(boost::vertex_all, g, x.first->second, p);
- }
- return std::make_pair(x.first->second, x.second);
- }
-
- // Dispatcher
- template < typename Container, typename Graph, typename Label,
- typename Prop >
- std::pair< typename graph_traits< Graph >::vertex_descriptor, bool >
- insert_labeled_vertex(Container& c, Graph& g, Label const& l, Prop const& p)
- {
- return insert_labeled_vertex(c, g, l, p, container_category(c));
- }
- //@}
-
- /** @name Find Labeled Vertex */
- //@{
- // Tag dispatch for sequential maps (i.e., vectors).
- template < typename Container, typename Graph, typename Label >
- typename graph_traits< Graph >::vertex_descriptor find_labeled_vertex(
- Container const& c, Graph const&, Label const& l,
- random_access_container_tag)
- {
- return l < c.size() ? c[l] : graph_traits< Graph >::null_vertex();
- }
-
- // Tag dispatch for pair associative maps (more or less).
- template < typename Container, typename Graph, typename Label >
- typename graph_traits< Graph >::vertex_descriptor find_labeled_vertex(
- Container const& c, Graph const&, Label const& l,
- associative_container_tag)
- {
- typename Container::const_iterator i = c.find(l);
- return i != c.end() ? i->second : graph_traits< Graph >::null_vertex();
- }
-
- // Dispatcher
- template < typename Container, typename Graph, typename Label >
- typename graph_traits< Graph >::vertex_descriptor find_labeled_vertex(
- Container const& c, Graph const& g, Label const& l)
- {
- return find_labeled_vertex(c, g, l, container_category(c));
- }
- //@}
-
- /** @name Put Vertex Label */
- //@{
- // Tag dispatch on vectors.
- template < typename Container, typename Label, typename Graph,
- typename Vertex >
- bool put_vertex_label(Container& c, Graph const&, Label const& l, Vertex v,
- random_access_container_tag)
- {
- // If the element is already occupied, then we probably don't want to
- // overwrite it.
- if (c[l] == graph_traits< Graph >::null_vertex())
- return false;
- c[l] = v;
- return true;
- }
-
- // Attempt the insertion and return its result.
- template < typename Container, typename Label, typename Graph,
- typename Vertex >
- bool put_vertex_label(Container& c, Graph const&, Label const& l, Vertex v,
- unique_associative_container_tag)
- {
- return c.insert(std::make_pair(l, v)).second;
- }
-
- // Insert the pair and return true.
- template < typename Container, typename Label, typename Graph,
- typename Vertex >
- bool put_vertex_label(Container& c, Graph const&, Label const& l, Vertex v,
- multiple_associative_container_tag)
- {
- c.insert(std::make_pair(l, v));
- return true;
- }
-
- // Dispatcher
- template < typename Container, typename Label, typename Graph,
- typename Vertex >
- bool put_vertex_label(
- Container& c, Graph const& g, Label const& l, Vertex v)
- {
- return put_vertex_label(c, g, l, v, container_category(c));
- }
- //@}
-
-} // namespace detail
-
-struct labeled_graph_class_tag
-{
-};
-
-/** @internal
- * This class is responsible for the deduction and declaration of type names
- * for the labeled_graph class template.
- */
-template < typename Graph, typename Label, typename Selector >
-struct labeled_graph_types
-{
- typedef Graph graph_type;
-
- // Label and maps
- typedef Label label_type;
- typedef typename graph_detail::choose_map< Selector, Label,
- typename graph_traits< Graph >::vertex_descriptor >::type map_type;
-};
-
-/**
- * The labeled_graph class is a graph adaptor that maintains a mapping between
- * vertex labels and vertex descriptors.
- *
- * @todo This class is somewhat redundant for adjacency_list<*, vecS> if
- * the intended label is an unsigned int (and perhaps some other cases), but
- * it does avoid some weird ambiguities (i.e. adding a vertex with a label that
- * does not match its target index).
- *
- * @todo This needs to be reconciled with the named_graph, but since there is
- * no documentation or examples, its not going to happen.
- */
-template < typename Graph, typename Label, typename Selector = defaultS >
-class labeled_graph : protected labeled_graph_types< Graph, Label, Selector >
-{
- typedef labeled_graph_types< Graph, Label, Selector > Base;
-
-public:
- typedef labeled_graph_class_tag graph_tag;
-
- typedef typename Base::graph_type graph_type;
- typedef typename graph_traits< graph_type >::vertex_descriptor
- vertex_descriptor;
- typedef
- typename graph_traits< graph_type >::edge_descriptor edge_descriptor;
- typedef typename graph_traits< graph_type >::directed_category
- directed_category;
- typedef typename graph_traits< graph_type >::edge_parallel_category
- edge_parallel_category;
- typedef typename graph_traits< graph_type >::traversal_category
- traversal_category;
-
- typedef typename graph_traits< graph_type >::out_edge_iterator
- out_edge_iterator;
- typedef
- typename graph_traits< graph_type >::in_edge_iterator in_edge_iterator;
- typedef typename graph_traits< graph_type >::adjacency_iterator
- adjacency_iterator;
- typedef
- typename graph_traits< graph_type >::degree_size_type degree_size_type;
-
- typedef
- typename graph_traits< graph_type >::vertex_iterator vertex_iterator;
- typedef typename graph_traits< graph_type >::vertices_size_type
- vertices_size_type;
- typedef typename graph_traits< graph_type >::edge_iterator edge_iterator;
- typedef
- typename graph_traits< graph_type >::edges_size_type edges_size_type;
-
- typedef typename graph_type::graph_property_type graph_property_type;
- typedef typename graph_type::graph_bundled graph_bundled;
-
- typedef typename graph_type::vertex_property_type vertex_property_type;
- typedef typename graph_type::vertex_bundled vertex_bundled;
-
- typedef typename graph_type::edge_property_type edge_property_type;
- typedef typename graph_type::edge_bundled edge_bundled;
-
- typedef typename Base::label_type label_type;
- typedef typename Base::map_type map_type;
-
-public:
- labeled_graph(graph_property_type const& gp = graph_property_type())
- : _graph(gp), _map()
- {
- }
-
- labeled_graph(labeled_graph const& x) : _graph(x._graph), _map(x._map) {}
-
- // This constructor can only be used if map_type supports positional
- // range insertion (i.e. its a vector). This is the only case where we can
- // try to guess the intended labels for graph.
- labeled_graph(vertices_size_type n,
- graph_property_type const& gp = graph_property_type())
- : _graph(n, gp), _map()
- {
- std::pair< vertex_iterator, vertex_iterator > rng = vertices(_graph);
- _map.insert(_map.end(), rng.first, rng.second);
- }
-
- // Construct a graph over n vertices, each of which receives a label from
- // the range [l, l + n). Note that the graph is not directly constructed
- // over the n vertices, but added sequentially. This constructor is
- // necessarily slower than the underlying counterpart.
- template < typename LabelIter >
- labeled_graph(vertices_size_type n, LabelIter l,
- graph_property_type const& gp = graph_property_type())
- : _graph(gp)
- {
- while (n-- > 0)
- add_vertex(*l++);
- }
-
- // Construct the graph over n vertices each of which has a label in the
- // range [l, l + n) and a property in the range [p, p + n).
- template < typename LabelIter, typename PropIter >
- labeled_graph(vertices_size_type n, LabelIter l, PropIter p,
- graph_property_type const& gp = graph_property_type())
- : _graph(gp)
- {
- while (n-- > 0)
- add_vertex(*l++, *p++);
- }
-
- labeled_graph& operator=(labeled_graph const& x)
- {
- _graph = x._graph;
- _map = x._map;
- return *this;
- }
-
- /** @name Graph Accessors */
- //@{
- graph_type& graph() { return _graph; }
- graph_type const& graph() const { return _graph; }
- //@}
-
- /**
- * Create a new label for the given vertex, returning false, if the label
- * cannot be created.
- */
- bool label_vertex(vertex_descriptor v, Label const& l)
- {
- return graph_detail::put_vertex_label(_map, _graph, l, v);
- }
-
- /** @name Add Vertex
- * Add a vertex to the graph, returning the descriptor. If the vertices
- * are uniquely labeled and the label already exists within the graph,
- * then no vertex is added, and the returned descriptor refers to the
- * existing vertex. A vertex property can be given as a parameter, if
- * needed.
- */
- //@{
- vertex_descriptor add_vertex(Label const& l)
- {
- return graph_detail::insert_labeled_vertex(
- _map, _graph, l, vertex_property_type())
- .first;
- }
-
- vertex_descriptor add_vertex(Label const& l, vertex_property_type const& p)
- {
- return graph_detail::insert_labeled_vertex(_map, _graph, l, p).first;
- }
- //@}
-
- /** @name Insert Vertex
- * Insert a vertex into the graph, returning a pair containing the
- * descriptor of a vertex and a boolean value that describes whether or not
- * a new vertex was inserted. If vertices are not uniquely labeled, then
- * insertion will always succeed.
- */
- //@{
- std::pair< vertex_descriptor, bool > insert_vertex(Label const& l)
- {
- return graph_detail::insert_labeled_vertex(
- _map, _graph, l, vertex_property_type());
- }
-
- std::pair< vertex_descriptor, bool > insert_vertex(
- Label const& l, vertex_property_type const& p)
- {
- return graph_detail::insert_labeled_vertex(_map, _graph, l, p);
- }
- //@}
-
- /** Remove the vertex with the given label. */
- void remove_vertex(Label const& l)
- {
- return boost::remove_vertex(vertex(l), _graph);
- }
-
- /** Return a descriptor for the given label. */
- vertex_descriptor vertex(Label const& l) const
- {
- return graph_detail::find_labeled_vertex(_map, _graph, l);
- }
-
-#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- /** @name Bundled Properties */
- //@{
- // Lookup the requested vertex and return the bundle.
- vertex_bundled& operator[](Label const& l) { return _graph[vertex(l)]; }
-
- vertex_bundled const& operator[](Label const& l) const
- {
- return _graph[vertex(l)];
- }
-
- // Delegate edge lookup to the underlying graph.
- edge_bundled& operator[](edge_descriptor e) { return _graph[e]; }
-
- edge_bundled const& operator[](edge_descriptor e) const
- {
- return _graph[e];
- }
- //@}
-#endif
-
- /** Return a null descriptor */
- static vertex_descriptor null_vertex()
- {
- return graph_traits< graph_type >::null_vertex();
- }
-
-private:
- graph_type _graph;
- map_type _map;
-};
-
-/**
- * The partial specialization over graph pointers allows the construction
- * of temporary labeled graph objects. In this case, the labels are destructed
- * when the wrapper goes out of scope.
- */
-template < typename Graph, typename Label, typename Selector >
-class labeled_graph< Graph*, Label, Selector >
-: protected labeled_graph_types< Graph, Label, Selector >
-{
- typedef labeled_graph_types< Graph, Label, Selector > Base;
-
-public:
- typedef labeled_graph_class_tag graph_tag;
-
- typedef typename Base::graph_type graph_type;
- typedef typename graph_traits< graph_type >::vertex_descriptor
- vertex_descriptor;
- typedef
- typename graph_traits< graph_type >::edge_descriptor edge_descriptor;
- typedef typename graph_traits< graph_type >::directed_category
- directed_category;
- typedef typename graph_traits< graph_type >::edge_parallel_category
- edge_parallel_category;
- typedef typename graph_traits< graph_type >::traversal_category
- traversal_category;
-
- typedef typename graph_traits< graph_type >::out_edge_iterator
- out_edge_iterator;
- typedef
- typename graph_traits< graph_type >::in_edge_iterator in_edge_iterator;
- typedef typename graph_traits< graph_type >::adjacency_iterator
- adjacency_iterator;
- typedef
- typename graph_traits< graph_type >::degree_size_type degree_size_type;
-
- typedef
- typename graph_traits< graph_type >::vertex_iterator vertex_iterator;
- typedef typename graph_traits< graph_type >::vertices_size_type
- vertices_size_type;
- typedef typename graph_traits< graph_type >::edge_iterator edge_iterator;
- typedef
- typename graph_traits< graph_type >::edges_size_type edges_size_type;
-
- typedef typename graph_type::vertex_property_type vertex_property_type;
- typedef typename graph_type::edge_property_type edge_property_type;
- typedef typename graph_type::graph_property_type graph_property_type;
- typedef typename graph_type::vertex_bundled vertex_bundled;
- typedef typename graph_type::edge_bundled edge_bundled;
-
- typedef typename Base::label_type label_type;
- typedef typename Base::map_type map_type;
-
- labeled_graph(graph_type* g) : _graph(g) {}
-
- /** @name Graph Access */
- //@{
- graph_type& graph() { return *_graph; }
- graph_type const& graph() const { return *_graph; }
- //@}
-
- /**
- * Create a new label for the given vertex, returning false, if the label
- * cannot be created.
- */
- bool label_vertex(vertex_descriptor v, Label const& l)
- {
- return graph_detail::put_vertex_label(_map, *_graph, l, v);
- }
-
- /** @name Add Vertex */
- //@{
- vertex_descriptor add_vertex(Label const& l)
- {
- return graph_detail::insert_labeled_vertex(
- _map, *_graph, l, vertex_property_type())
- .first;
- }
-
- vertex_descriptor add_vertex(Label const& l, vertex_property_type const& p)
- {
- return graph_detail::insert_labeled_vertex(_map, *_graph, l, p).first;
- }
-
- std::pair< vertex_descriptor, bool > insert_vertex(Label const& l)
- {
- return graph_detail::insert_labeled_vertex(
- _map, *_graph, l, vertex_property_type());
- }
- //@}
-
- /** Try to insert a vertex with the given label. */
- std::pair< vertex_descriptor, bool > insert_vertex(
- Label const& l, vertex_property_type const& p)
- {
- return graph_detail::insert_labeled_vertex(_map, *_graph, l, p);
- }
-
- /** Remove the vertex with the given label. */
- void remove_vertex(Label const& l)
- {
- return boost::remove_vertex(vertex(l), *_graph);
- }
-
- /** Return a descriptor for the given label. */
- vertex_descriptor vertex(Label const& l) const
- {
- return graph_detail::find_labeled_vertex(_map, *_graph, l);
- }
-
-#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- /** @name Bundled Properties */
- //@{
- // Lookup the requested vertex and return the bundle.
- vertex_bundled& operator[](Label const& l) { return (*_graph)[vertex(l)]; }
-
- vertex_bundled const& operator[](Label const& l) const
- {
- return (*_graph)[vertex(l)];
- }
-
- // Delegate edge lookup to the underlying graph.
- edge_bundled& operator[](edge_descriptor e) { return (*_graph)[e]; }
-
- edge_bundled const& operator[](edge_descriptor e) const
- {
- return (*_graph)[e];
- }
- //@}
-#endif
-
- static vertex_descriptor null_vertex()
- {
- return graph_traits< graph_type >::null_vertex();
- }
-
-private:
- graph_type* _graph;
- map_type _map;
-};
-
-#define LABELED_GRAPH_PARAMS typename G, typename L, typename S
-#define LABELED_GRAPH labeled_graph< G, L, S >
-
-/** @name Labeled Graph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline bool label_vertex(typename LABELED_GRAPH::vertex_descriptor v,
- typename LABELED_GRAPH::label_type const l, LABELED_GRAPH& g)
-{
- return g.label_vertex(v, l);
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::vertex_descriptor vertex_by_label(
- typename LABELED_GRAPH::label_type const l, LABELED_GRAPH& g)
-{
- return g.vertex(l);
-}
-//@}
-
-/** @name Graph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_descriptor, bool > edge(
- typename LABELED_GRAPH::vertex_descriptor const& u,
- typename LABELED_GRAPH::vertex_descriptor const& v, LABELED_GRAPH const& g)
-{
- return edge(u, v, g.graph());
-}
-
-// Labeled Extensions
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_descriptor, bool > edge_by_label(
- typename LABELED_GRAPH::label_type const& u,
- typename LABELED_GRAPH::label_type const& v, LABELED_GRAPH const& g)
-{
- return edge(g.vertex(u), g.vertex(v), g);
-}
-//@}
-
-/** @name Incidence Graph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::out_edge_iterator,
- typename LABELED_GRAPH::out_edge_iterator >
-out_edges(typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH const& g)
-{
- return out_edges(v, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::degree_size_type out_degree(
- typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH const& g)
-{
- return out_degree(v, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::vertex_descriptor source(
- typename LABELED_GRAPH::edge_descriptor e, LABELED_GRAPH const& g)
-{
- return source(e, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::vertex_descriptor target(
- typename LABELED_GRAPH::edge_descriptor e, LABELED_GRAPH const& g)
-{
- return target(e, g.graph());
-}
-//@}
-
-/** @name Bidirectional Graph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::in_edge_iterator,
- typename LABELED_GRAPH::in_edge_iterator >
-in_edges(typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH const& g)
-{
- return in_edges(v, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::degree_size_type in_degree(
- typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH const& g)
-{
- return in_degree(v, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::degree_size_type degree(
- typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH const& g)
-{
- return degree(v, g.graph());
-}
-//@}
-
-/** @name Adjacency Graph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::adjacency_iterator,
- typename LABELED_GRAPH::adjacency_iterator >
-adjacenct_vertices(
- typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH const& g)
-{
- return adjacent_vertices(v, g.graph());
-}
-//@}
-
-/** @name VertexListGraph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::vertex_iterator,
- typename LABELED_GRAPH::vertex_iterator >
-vertices(LABELED_GRAPH const& g)
-{
- return vertices(g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::vertices_size_type num_vertices(
- LABELED_GRAPH const& g)
-{
- return num_vertices(g.graph());
-}
-//@}
-
-/** @name EdgeListGraph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_iterator,
- typename LABELED_GRAPH::edge_iterator >
-edges(LABELED_GRAPH const& g)
-{
- return edges(g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::edges_size_type num_edges(LABELED_GRAPH const& g)
-{
- return num_edges(g.graph());
-}
-//@}
-
-/** @internal @name Property Lookup */
-//@{
-namespace graph_detail
-{
- struct labeled_graph_vertex_property_selector
- {
- template < class LabeledGraph, class Property, class Tag > struct bind_
- {
- typedef typename LabeledGraph::graph_type Graph;
- typedef property_map< Graph, Tag > PropertyMap;
- typedef typename PropertyMap::type type;
- typedef typename PropertyMap::const_type const_type;
- };
- };
-
- struct labeled_graph_edge_property_selector
- {
- template < class LabeledGraph, class Property, class Tag > struct bind_
- {
- typedef typename LabeledGraph::graph_type Graph;
- typedef property_map< Graph, Tag > PropertyMap;
- typedef typename PropertyMap::type type;
- typedef typename PropertyMap::const_type const_type;
- };
- };
-}
-
-template <> struct vertex_property_selector< labeled_graph_class_tag >
-{
- typedef graph_detail::labeled_graph_vertex_property_selector type;
-};
-
-template <> struct edge_property_selector< labeled_graph_class_tag >
-{
- typedef graph_detail::labeled_graph_edge_property_selector type;
-};
-//@}
-
-/** @name Property Graph */
-//@{
-template < LABELED_GRAPH_PARAMS, typename Prop >
-inline typename property_map< LABELED_GRAPH, Prop >::type get(
- Prop p, LABELED_GRAPH& g)
-{
- return get(p, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS, typename Prop >
-inline typename property_map< LABELED_GRAPH, Prop >::const_type get(
- Prop p, LABELED_GRAPH const& g)
-{
- return get(p, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS, typename Prop, typename Key >
-inline typename property_traits< typename property_map<
- typename LABELED_GRAPH::graph_type, Prop >::const_type >::value_type
-get(Prop p, LABELED_GRAPH const& g, const Key& k)
-{
- return get(p, g.graph(), k);
-}
-
-template < LABELED_GRAPH_PARAMS, typename Prop, typename Key, typename Value >
-inline void put(Prop p, LABELED_GRAPH& g, Key const& k, Value const& v)
-{
- put(p, g.graph(), k, v);
-}
-//@}
-
-/** @name Mutable Graph */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_descriptor, bool > add_edge(
- typename LABELED_GRAPH::vertex_descriptor const& u,
- typename LABELED_GRAPH::vertex_descriptor const& v, LABELED_GRAPH& g)
-{
- return add_edge(u, v, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_descriptor, bool > add_edge(
- typename LABELED_GRAPH::vertex_descriptor const& u,
- typename LABELED_GRAPH::vertex_descriptor const& v,
- typename LABELED_GRAPH::edge_property_type const& p, LABELED_GRAPH& g)
-{
- return add_edge(u, v, p, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline void clear_vertex(
- typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH& g)
-{
- return clear_vertex(v, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline void remove_edge(
- typename LABELED_GRAPH::edge_descriptor e, LABELED_GRAPH& g)
-{
- return remove_edge(e, g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline void remove_edge(typename LABELED_GRAPH::vertex_descriptor u,
- typename LABELED_GRAPH::vertex_descriptor v, LABELED_GRAPH& g)
-{
- return remove_edge(u, v, g.graph());
-}
-
-// Labeled extensions
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_descriptor, bool >
-add_edge_by_label(typename LABELED_GRAPH::label_type const& u,
- typename LABELED_GRAPH::label_type const& v, LABELED_GRAPH& g)
-{
- return add_edge(g.vertex(u), g.vertex(v), g);
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline std::pair< typename LABELED_GRAPH::edge_descriptor, bool >
-add_edge_by_label(typename LABELED_GRAPH::label_type const& u,
- typename LABELED_GRAPH::label_type const& v,
- typename LABELED_GRAPH::edge_property_type const& p, LABELED_GRAPH& g)
-{
- return add_edge(g.vertex(u), g.vertex(v), p, g);
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline void clear_vertex_by_label(
- typename LABELED_GRAPH::label_type const& l, LABELED_GRAPH& g)
-{
- clear_vertex(g.vertex(l), g.graph());
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline void remove_edge_by_label(typename LABELED_GRAPH::label_type const& u,
- typename LABELED_GRAPH::label_type const& v, LABELED_GRAPH& g)
-{
- remove_edge(g.vertex(u), g.vertex(v), g.graph());
-}
-//@}
-
-/** @name Labeled Mutable Graph
- * The labeled mutable graph hides the add_ and remove_ vertex functions from
- * the mutable graph concept. Note that the remove_vertex is hidden because
- * removing the vertex without its key could leave a dangling reference in
- * the map.
- */
-//@{
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::vertex_descriptor add_vertex(
- typename LABELED_GRAPH::label_type const& l, LABELED_GRAPH& g)
-{
- return g.add_vertex(l);
-}
-
-// MutableLabeledPropertyGraph::add_vertex(l, vp, g)
-template < LABELED_GRAPH_PARAMS >
-inline typename LABELED_GRAPH::vertex_descriptor add_vertex(
- typename LABELED_GRAPH::label_type const& l,
- typename LABELED_GRAPH::vertex_property_type const& p, LABELED_GRAPH& g)
-{
- return g.add_vertex(l, p);
-}
-
-template < LABELED_GRAPH_PARAMS >
-inline void remove_vertex(
- typename LABELED_GRAPH::label_type const& l, LABELED_GRAPH& g)
-{
- g.remove_vertex(l);
-}
-//@}
-
-#undef LABELED_GRAPH_PARAMS
-#undef LABELED_GRAPH
-
-} // namespace boost
-
-// Pull the labeled graph traits
-#include <boost/graph/detail/labeled_graph_traits.hpp>
-
-#endif // BOOST_GRAPH_LABELED_GRAPH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/leda_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/leda_graph.hpp
deleted file mode 100644
index 7d58518a7d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/leda_graph.hpp
+++ /dev/null
@@ -1,942 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2004 The Trustees of Indiana University.
-// Copyright 2007 University of Karlsruhe
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Douglas Gregor,
-// Jens Mueller
-//
-// 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_LEDA_HPP
-#define BOOST_GRAPH_LEDA_HPP
-
-#include <boost/config.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-
-#include <LEDA/graph/graph.h>
-#include <LEDA/graph/node_array.h>
-#include <LEDA/graph/node_map.h>
-
-// The functions and classes in this file allows the user to
-// treat a LEDA GRAPH object as a boost graph "as is". No
-// wrapper is needed for the GRAPH object.
-
-// Warning: this implementation relies on partial specialization
-// for the graph_traits class (so it won't compile with Visual C++)
-
-// Warning: this implementation is in alpha and has not been tested
-
-namespace boost
-{
-
-struct leda_graph_traversal_category : public virtual bidirectional_graph_tag,
- public virtual adjacency_graph_tag,
- public virtual vertex_list_graph_tag
-{
-};
-
-template < class vtype, class etype >
-struct graph_traits< leda::GRAPH< vtype, etype > >
-{
- typedef leda::node vertex_descriptor;
- typedef leda::edge edge_descriptor;
-
- class adjacency_iterator
- : public iterator_facade< adjacency_iterator, leda::node,
- bidirectional_traversal_tag, leda::node, const leda::node* >
- {
- public:
- adjacency_iterator(
- leda::node node = 0, const leda::GRAPH< vtype, etype >* g = 0)
- : base(node), g(g)
- {
- }
-
- private:
- leda::node dereference() const { return leda::target(base); }
-
- bool equal(const adjacency_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->adj_succ(base); }
- void decrement() { base = g->adj_pred(base); }
-
- leda::edge base;
- const leda::GRAPH< vtype, etype >* g;
-
- friend class iterator_core_access;
- };
-
- class out_edge_iterator
- : public iterator_facade< out_edge_iterator, leda::edge,
- bidirectional_traversal_tag, const leda::edge&, const leda::edge* >
- {
- public:
- out_edge_iterator(
- leda::node node = 0, const leda::GRAPH< vtype, etype >* g = 0)
- : base(node), g(g)
- {
- }
-
- private:
- const leda::edge& dereference() const { return base; }
-
- bool equal(const out_edge_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->adj_succ(base); }
- void decrement() { base = g->adj_pred(base); }
-
- leda::edge base;
- const leda::GRAPH< vtype, etype >* g;
-
- friend class iterator_core_access;
- };
-
- class in_edge_iterator
- : public iterator_facade< in_edge_iterator, leda::edge,
- bidirectional_traversal_tag, const leda::edge&, const leda::edge* >
- {
- public:
- in_edge_iterator(
- leda::node node = 0, const leda::GRAPH< vtype, etype >* g = 0)
- : base(node), g(g)
- {
- }
-
- private:
- const leda::edge& dereference() const { return base; }
-
- bool equal(const in_edge_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->in_succ(base); }
- void decrement() { base = g->in_pred(base); }
-
- leda::edge base;
- const leda::GRAPH< vtype, etype >* g;
-
- friend class iterator_core_access;
- };
-
- class vertex_iterator
- : public iterator_facade< vertex_iterator, leda::node,
- bidirectional_traversal_tag, const leda::node&, const leda::node* >
- {
- public:
- vertex_iterator(
- leda::node node = 0, const leda::GRAPH< vtype, etype >* g = 0)
- : base(node), g(g)
- {
- }
-
- private:
- const leda::node& dereference() const { return base; }
-
- bool equal(const vertex_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->succ_node(base); }
- void decrement() { base = g->pred_node(base); }
-
- leda::node base;
- const leda::GRAPH< vtype, etype >* g;
-
- friend class iterator_core_access;
- };
-
- class edge_iterator
- : public iterator_facade< edge_iterator, leda::edge,
- bidirectional_traversal_tag, const leda::edge&, const leda::edge* >
- {
- public:
- edge_iterator(
- leda::edge edge = 0, const leda::GRAPH< vtype, etype >* g = 0)
- : base(edge), g(g)
- {
- }
-
- private:
- const leda::edge& dereference() const { return base; }
-
- bool equal(const edge_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->succ_edge(base); }
- void decrement() { base = g->pred_edge(base); }
-
- leda::node base;
- const leda::GRAPH< vtype, etype >* g;
-
- friend class iterator_core_access;
- };
-
- typedef directed_tag directed_category;
- typedef allow_parallel_edge_tag edge_parallel_category; // not sure here
- typedef leda_graph_traversal_category traversal_category;
- typedef int vertices_size_type;
- typedef int edges_size_type;
- typedef int degree_size_type;
-};
-
-template <> struct graph_traits< leda::graph >
-{
- typedef leda::node vertex_descriptor;
- typedef leda::edge edge_descriptor;
-
- class adjacency_iterator
- : public iterator_facade< adjacency_iterator, leda::node,
- bidirectional_traversal_tag, leda::node, const leda::node* >
- {
- public:
- adjacency_iterator(leda::edge edge = 0, const leda::graph* g = 0)
- : base(edge), g(g)
- {
- }
-
- private:
- leda::node dereference() const { return leda::target(base); }
-
- bool equal(const adjacency_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->adj_succ(base); }
- void decrement() { base = g->adj_pred(base); }
-
- leda::edge base;
- const leda::graph* g;
-
- friend class iterator_core_access;
- };
-
- class out_edge_iterator
- : public iterator_facade< out_edge_iterator, leda::edge,
- bidirectional_traversal_tag, const leda::edge&, const leda::edge* >
- {
- public:
- out_edge_iterator(leda::edge edge = 0, const leda::graph* g = 0)
- : base(edge), g(g)
- {
- }
-
- private:
- const leda::edge& dereference() const { return base; }
-
- bool equal(const out_edge_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->adj_succ(base); }
- void decrement() { base = g->adj_pred(base); }
-
- leda::edge base;
- const leda::graph* g;
-
- friend class iterator_core_access;
- };
-
- class in_edge_iterator
- : public iterator_facade< in_edge_iterator, leda::edge,
- bidirectional_traversal_tag, const leda::edge&, const leda::edge* >
- {
- public:
- in_edge_iterator(leda::edge edge = 0, const leda::graph* g = 0)
- : base(edge), g(g)
- {
- }
-
- private:
- const leda::edge& dereference() const { return base; }
-
- bool equal(const in_edge_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->in_succ(base); }
- void decrement() { base = g->in_pred(base); }
-
- leda::edge base;
- const leda::graph* g;
-
- friend class iterator_core_access;
- };
-
- class vertex_iterator
- : public iterator_facade< vertex_iterator, leda::node,
- bidirectional_traversal_tag, const leda::node&, const leda::node* >
- {
- public:
- vertex_iterator(leda::node node = 0, const leda::graph* g = 0)
- : base(node), g(g)
- {
- }
-
- private:
- const leda::node& dereference() const { return base; }
-
- bool equal(const vertex_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->succ_node(base); }
- void decrement() { base = g->pred_node(base); }
-
- leda::node base;
- const leda::graph* g;
-
- friend class iterator_core_access;
- };
-
- class edge_iterator
- : public iterator_facade< edge_iterator, leda::edge,
- bidirectional_traversal_tag, const leda::edge&, const leda::edge* >
- {
- public:
- edge_iterator(leda::edge edge = 0, const leda::graph* g = 0)
- : base(edge), g(g)
- {
- }
-
- private:
- const leda::edge& dereference() const { return base; }
-
- bool equal(const edge_iterator& other) const
- {
- return base == other.base;
- }
-
- void increment() { base = g->succ_edge(base); }
- void decrement() { base = g->pred_edge(base); }
-
- leda::edge base;
- const leda::graph* g;
-
- friend class iterator_core_access;
- };
-
- typedef directed_tag directed_category;
- typedef allow_parallel_edge_tag edge_parallel_category; // not sure here
- typedef leda_graph_traversal_category traversal_category;
- typedef int vertices_size_type;
- typedef int edges_size_type;
- typedef int degree_size_type;
-};
-
-} // namespace boost
-
-namespace boost
-{
-
-//===========================================================================
-// functions for GRAPH<vtype,etype>
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor source(
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_descriptor e,
- const leda::GRAPH< vtype, etype >& g)
-{
- return source(e);
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor target(
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_descriptor e,
- const leda::GRAPH< vtype, etype >& g)
-{
- return target(e);
-}
-
-template < class vtype, class etype >
-inline std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_iterator,
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_iterator >
-vertices(const leda::GRAPH< vtype, etype >& g)
-{
- typedef
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_iterator
- Iter;
- return std::make_pair(Iter(g.first_node(), &g), Iter(0, &g));
-}
-
-template < class vtype, class etype >
-inline std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_iterator,
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_iterator >
-edges(const leda::GRAPH< vtype, etype >& g)
-{
- typedef typename graph_traits< leda::GRAPH< vtype, etype > >::edge_iterator
- Iter;
- return std::make_pair(Iter(g.first_edge(), &g), Iter(0, &g));
-}
-
-template < class vtype, class etype >
-inline std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::out_edge_iterator,
- typename graph_traits< leda::GRAPH< vtype, etype > >::out_edge_iterator >
-out_edges(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- const leda::GRAPH< vtype, etype >& g)
-{
- typedef
- typename graph_traits< leda::GRAPH< vtype, etype > >::out_edge_iterator
- Iter;
- return std::make_pair(Iter(g.first_adj_edge(u, 0), &g), Iter(0, &g));
-}
-
-template < class vtype, class etype >
-inline std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::in_edge_iterator,
- typename graph_traits< leda::GRAPH< vtype, etype > >::in_edge_iterator >
-in_edges(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- const leda::GRAPH< vtype, etype >& g)
-{
- typedef
- typename graph_traits< leda::GRAPH< vtype, etype > >::in_edge_iterator
- Iter;
- return std::make_pair(Iter(g.first_adj_edge(u, 1), &g), Iter(0, &g));
-}
-
-template < class vtype, class etype >
-inline std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::adjacency_iterator,
- typename graph_traits< leda::GRAPH< vtype, etype > >::adjacency_iterator >
-adjacent_vertices(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- const leda::GRAPH< vtype, etype >& g)
-{
- typedef
- typename graph_traits< leda::GRAPH< vtype, etype > >::adjacency_iterator
- Iter;
- return std::make_pair(Iter(g.first_adj_edge(u, 0), &g), Iter(0, &g));
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::vertices_size_type
-num_vertices(const leda::GRAPH< vtype, etype >& g)
-{
- return g.number_of_nodes();
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::edges_size_type num_edges(
- const leda::GRAPH< vtype, etype >& g)
-{
- return g.number_of_edges();
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::degree_size_type
-out_degree(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- const leda::GRAPH< vtype, etype >& g)
-{
- return g.outdeg(u);
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::degree_size_type
-in_degree(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- const leda::GRAPH< vtype, etype >& g)
-{
- return g.indeg(u);
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::degree_size_type degree(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- const leda::GRAPH< vtype, etype >& g)
-{
- return g.outdeg(u) + g.indeg(u);
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor
-add_vertex(leda::GRAPH< vtype, etype >& g)
-{
- return g.new_node();
-}
-
-template < class vtype, class etype >
-typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor
-add_vertex(const vtype& vp, leda::GRAPH< vtype, etype >& g)
-{
- return g.new_node(vp);
-}
-
-template < class vtype, class etype >
-void clear_vertex(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- leda::GRAPH< vtype, etype >& g)
-{
- typename graph_traits< leda::GRAPH< vtype, etype > >::out_edge_iterator ei,
- ei_end;
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ei++)
- remove_edge(*ei);
-
- typename graph_traits< leda::GRAPH< vtype, etype > >::in_edge_iterator iei,
- iei_end;
- for (boost::tie(iei, iei_end) = in_edges(u, g); iei != iei_end; iei++)
- remove_edge(*iei);
-}
-
-template < class vtype, class etype >
-void remove_vertex(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- leda::GRAPH< vtype, etype >& g)
-{
- g.del_node(u);
-}
-
-template < class vtype, class etype >
-std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_descriptor,
- bool >
-add_edge(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor v,
- leda::GRAPH< vtype, etype >& g)
-{
- return std::make_pair(g.new_edge(u, v), true);
-}
-
-template < class vtype, class etype >
-std::pair<
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_descriptor,
- bool >
-add_edge(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor v,
- const etype& et, leda::GRAPH< vtype, etype >& g)
-{
- return std::make_pair(g.new_edge(u, v, et), true);
-}
-
-template < class vtype, class etype >
-void remove_edge(
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor u,
- typename graph_traits< leda::GRAPH< vtype, etype > >::vertex_descriptor v,
- leda::GRAPH< vtype, etype >& g)
-{
- typename graph_traits< leda::GRAPH< vtype, etype > >::out_edge_iterator i,
- iend;
- for (boost::tie(i, iend) = out_edges(u, g); i != iend; ++i)
- if (target(*i, g) == v)
- g.del_edge(*i);
-}
-
-template < class vtype, class etype >
-void remove_edge(
- typename graph_traits< leda::GRAPH< vtype, etype > >::edge_descriptor e,
- leda::GRAPH< vtype, etype >& g)
-{
- g.del_edge(e);
-}
-
-//===========================================================================
-// functions for graph (non-templated version)
-
-graph_traits< leda::graph >::vertex_descriptor source(
- graph_traits< leda::graph >::edge_descriptor e, const leda::graph& g)
-{
- return source(e);
-}
-
-graph_traits< leda::graph >::vertex_descriptor target(
- graph_traits< leda::graph >::edge_descriptor e, const leda::graph& g)
-{
- return target(e);
-}
-
-inline std::pair< graph_traits< leda::graph >::vertex_iterator,
- graph_traits< leda::graph >::vertex_iterator >
-vertices(const leda::graph& g)
-{
- typedef graph_traits< leda::graph >::vertex_iterator Iter;
- return std::make_pair(Iter(g.first_node(), &g), Iter(0, &g));
-}
-
-inline std::pair< graph_traits< leda::graph >::edge_iterator,
- graph_traits< leda::graph >::edge_iterator >
-edges(const leda::graph& g)
-{
- typedef graph_traits< leda::graph >::edge_iterator Iter;
- return std::make_pair(Iter(g.first_edge(), &g), Iter(0, &g));
-}
-
-inline std::pair< graph_traits< leda::graph >::out_edge_iterator,
- graph_traits< leda::graph >::out_edge_iterator >
-out_edges(
- graph_traits< leda::graph >::vertex_descriptor u, const leda::graph& g)
-{
- typedef graph_traits< leda::graph >::out_edge_iterator Iter;
- return std::make_pair(Iter(g.first_adj_edge(u), &g), Iter(0, &g));
-}
-
-inline std::pair< graph_traits< leda::graph >::in_edge_iterator,
- graph_traits< leda::graph >::in_edge_iterator >
-in_edges(graph_traits< leda::graph >::vertex_descriptor u, const leda::graph& g)
-{
- typedef graph_traits< leda::graph >::in_edge_iterator Iter;
- return std::make_pair(Iter(g.first_in_edge(u), &g), Iter(0, &g));
-}
-
-inline std::pair< graph_traits< leda::graph >::adjacency_iterator,
- graph_traits< leda::graph >::adjacency_iterator >
-adjacent_vertices(
- graph_traits< leda::graph >::vertex_descriptor u, const leda::graph& g)
-{
- typedef graph_traits< leda::graph >::adjacency_iterator Iter;
- return std::make_pair(Iter(g.first_adj_edge(u), &g), Iter(0, &g));
-}
-
-graph_traits< leda::graph >::vertices_size_type num_vertices(
- const leda::graph& g)
-{
- return g.number_of_nodes();
-}
-
-graph_traits< leda::graph >::edges_size_type num_edges(const leda::graph& g)
-{
- return g.number_of_edges();
-}
-
-graph_traits< leda::graph >::degree_size_type out_degree(
- graph_traits< leda::graph >::vertex_descriptor u, const leda::graph& g)
-{
- return g.outdeg(u);
-}
-
-graph_traits< leda::graph >::degree_size_type in_degree(
- graph_traits< leda::graph >::vertex_descriptor u, const leda::graph& g)
-{
- return g.indeg(u);
-}
-
-graph_traits< leda::graph >::degree_size_type degree(
- graph_traits< leda::graph >::vertex_descriptor u, const leda::graph& g)
-{
- return g.outdeg(u) + g.indeg(u);
-}
-
-graph_traits< leda::graph >::vertex_descriptor add_vertex(leda::graph& g)
-{
- return g.new_node();
-}
-
-void remove_edge(graph_traits< leda::graph >::vertex_descriptor u,
- graph_traits< leda::graph >::vertex_descriptor v, leda::graph& g)
-{
- graph_traits< leda::graph >::out_edge_iterator i, iend;
- for (boost::tie(i, iend) = out_edges(u, g); i != iend; ++i)
- if (target(*i, g) == v)
- g.del_edge(*i);
-}
-
-void remove_edge(graph_traits< leda::graph >::edge_descriptor e, leda::graph& g)
-{
- g.del_edge(e);
-}
-
-void clear_vertex(
- graph_traits< leda::graph >::vertex_descriptor u, leda::graph& g)
-{
- graph_traits< leda::graph >::out_edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ei++)
- remove_edge(*ei, g);
-
- graph_traits< leda::graph >::in_edge_iterator iei, iei_end;
- for (boost::tie(iei, iei_end) = in_edges(u, g); iei != iei_end; iei++)
- remove_edge(*iei, g);
-}
-
-void remove_vertex(
- graph_traits< leda::graph >::vertex_descriptor u, leda::graph& g)
-{
- g.del_node(u);
-}
-
-std::pair< graph_traits< leda::graph >::edge_descriptor, bool > add_edge(
- graph_traits< leda::graph >::vertex_descriptor u,
- graph_traits< leda::graph >::vertex_descriptor v, leda::graph& g)
-{
- return std::make_pair(g.new_edge(u, v), true);
-}
-
-//===========================================================================
-// property maps for GRAPH<vtype,etype>
-
-class leda_graph_id_map : public put_get_helper< int, leda_graph_id_map >
-{
-public:
- typedef readable_property_map_tag category;
- typedef int value_type;
- typedef int reference;
- typedef leda::node key_type;
- leda_graph_id_map() {}
- template < class T > long operator[](T x) const { return x->id(); }
-};
-template < class vtype, class etype >
-inline leda_graph_id_map get(
- vertex_index_t, const leda::GRAPH< vtype, etype >& g)
-{
- return leda_graph_id_map();
-}
-template < class vtype, class etype >
-inline leda_graph_id_map get(edge_index_t, const leda::GRAPH< vtype, etype >& g)
-{
- return leda_graph_id_map();
-}
-
-template < class Tag > struct leda_property_map
-{
-};
-
-template <> struct leda_property_map< vertex_index_t >
-{
- template < class vtype, class etype > struct bind_
- {
- typedef leda_graph_id_map type;
- typedef leda_graph_id_map const_type;
- };
-};
-template <> struct leda_property_map< edge_index_t >
-{
- template < class vtype, class etype > struct bind_
- {
- typedef leda_graph_id_map type;
- typedef leda_graph_id_map const_type;
- };
-};
-
-template < class Data, class DataRef, class GraphPtr >
-class leda_graph_data_map : public put_get_helper< DataRef,
- leda_graph_data_map< Data, DataRef, GraphPtr > >
-{
-public:
- typedef Data value_type;
- typedef DataRef reference;
- typedef void key_type;
- typedef lvalue_property_map_tag category;
- leda_graph_data_map(GraphPtr g) : m_g(g) {}
- template < class NodeOrEdge > DataRef operator[](NodeOrEdge x) const
- {
- return (*m_g)[x];
- }
-
-protected:
- GraphPtr m_g;
-};
-
-template <> struct leda_property_map< vertex_all_t >
-{
- template < class vtype, class etype > struct bind_
- {
- typedef leda_graph_data_map< vtype, vtype&,
- leda::GRAPH< vtype, etype >* >
- type;
- typedef leda_graph_data_map< vtype, const vtype&,
- const leda::GRAPH< vtype, etype >* >
- const_type;
- };
-};
-template < class vtype, class etype >
-inline typename property_map< leda::GRAPH< vtype, etype >, vertex_all_t >::type
-get(vertex_all_t, leda::GRAPH< vtype, etype >& g)
-{
- typedef
- typename property_map< leda::GRAPH< vtype, etype >, vertex_all_t >::type
- pmap_type;
- return pmap_type(&g);
-}
-template < class vtype, class etype >
-inline typename property_map< leda::GRAPH< vtype, etype >,
- vertex_all_t >::const_type
-get(vertex_all_t, const leda::GRAPH< vtype, etype >& g)
-{
- typedef typename property_map< leda::GRAPH< vtype, etype >,
- vertex_all_t >::const_type pmap_type;
- return pmap_type(&g);
-}
-
-template <> struct leda_property_map< edge_all_t >
-{
- template < class vtype, class etype > struct bind_
- {
- typedef leda_graph_data_map< etype, etype&,
- leda::GRAPH< vtype, etype >* >
- type;
- typedef leda_graph_data_map< etype, const etype&,
- const leda::GRAPH< vtype, etype >* >
- const_type;
- };
-};
-template < class vtype, class etype >
-inline typename property_map< leda::GRAPH< vtype, etype >, edge_all_t >::type
-get(edge_all_t, leda::GRAPH< vtype, etype >& g)
-{
- typedef
- typename property_map< leda::GRAPH< vtype, etype >, edge_all_t >::type
- pmap_type;
- return pmap_type(&g);
-}
-template < class vtype, class etype >
-inline
- typename property_map< leda::GRAPH< vtype, etype >, edge_all_t >::const_type
- get(edge_all_t, const leda::GRAPH< vtype, etype >& g)
-{
- typedef typename property_map< leda::GRAPH< vtype, etype >,
- edge_all_t >::const_type pmap_type;
- return pmap_type(&g);
-}
-
-// property map interface to the LEDA node_array class
-
-template < class E, class ERef, class NodeMapPtr >
-class leda_node_property_map
-: public put_get_helper< ERef, leda_node_property_map< E, ERef, NodeMapPtr > >
-{
-public:
- typedef E value_type;
- typedef ERef reference;
- typedef leda::node key_type;
- typedef lvalue_property_map_tag category;
- leda_node_property_map(NodeMapPtr a) : m_array(a) {}
- ERef operator[](leda::node n) const { return (*m_array)[n]; }
-
-protected:
- NodeMapPtr m_array;
-};
-template < class E >
-leda_node_property_map< E, const E&, const leda::node_array< E >* >
-make_leda_node_property_map(const leda::node_array< E >& a)
-{
- typedef leda_node_property_map< E, const E&, const leda::node_array< E >* >
- pmap_type;
- return pmap_type(&a);
-}
-template < class E >
-leda_node_property_map< E, E&, leda::node_array< E >* >
-make_leda_node_property_map(leda::node_array< E >& a)
-{
- typedef leda_node_property_map< E, E&, leda::node_array< E >* > pmap_type;
- return pmap_type(&a);
-}
-
-template < class E >
-leda_node_property_map< E, const E&, const leda::node_map< E >* >
-make_leda_node_property_map(const leda::node_map< E >& a)
-{
- typedef leda_node_property_map< E, const E&, const leda::node_map< E >* >
- pmap_type;
- return pmap_type(&a);
-}
-template < class E >
-leda_node_property_map< E, E&, leda::node_map< E >* >
-make_leda_node_property_map(leda::node_map< E >& a)
-{
- typedef leda_node_property_map< E, E&, leda::node_map< E >* > pmap_type;
- return pmap_type(&a);
-}
-
-// g++ 'enumeral_type' in template unification not implemented workaround
-template < class vtype, class etype, class Tag >
-struct property_map< leda::GRAPH< vtype, etype >, Tag >
-{
- typedef typename leda_property_map< Tag >::template bind_< vtype, etype >
- map_gen;
- typedef typename map_gen::type type;
- typedef typename map_gen::const_type const_type;
-};
-
-template < class vtype, class etype, class PropertyTag, class Key >
-inline typename boost::property_traits< typename boost::property_map<
- leda::GRAPH< vtype, etype >, PropertyTag >::const_type >::value_type
-get(PropertyTag p, const leda::GRAPH< vtype, etype >& g, const Key& key)
-{
- return get(get(p, g), key);
-}
-
-template < class vtype, class etype, class PropertyTag, class Key, class Value >
-inline void put(PropertyTag p, leda::GRAPH< vtype, etype >& g, const Key& key,
- const Value& value)
-{
- typedef
- typename property_map< leda::GRAPH< vtype, etype >, PropertyTag >::type
- Map;
- Map pmap = get(p, g);
- put(pmap, key, value);
-}
-
-// property map interface to the LEDA edge_array class
-
-template < class E, class ERef, class EdgeMapPtr >
-class leda_edge_property_map
-: public put_get_helper< ERef, leda_edge_property_map< E, ERef, EdgeMapPtr > >
-{
-public:
- typedef E value_type;
- typedef ERef reference;
- typedef leda::edge key_type;
- typedef lvalue_property_map_tag category;
- leda_edge_property_map(EdgeMapPtr a) : m_array(a) {}
- ERef operator[](leda::edge n) const { return (*m_array)[n]; }
-
-protected:
- EdgeMapPtr m_array;
-};
-template < class E >
-leda_edge_property_map< E, const E&, const leda::edge_array< E >* >
-make_leda_node_property_map(const leda::node_array< E >& a)
-{
- typedef leda_edge_property_map< E, const E&, const leda::node_array< E >* >
- pmap_type;
- return pmap_type(&a);
-}
-template < class E >
-leda_edge_property_map< E, E&, leda::edge_array< E >* >
-make_leda_edge_property_map(leda::edge_array< E >& a)
-{
- typedef leda_edge_property_map< E, E&, leda::edge_array< E >* > pmap_type;
- return pmap_type(&a);
-}
-
-template < class E >
-leda_edge_property_map< E, const E&, const leda::edge_map< E >* >
-make_leda_edge_property_map(const leda::edge_map< E >& a)
-{
- typedef leda_edge_property_map< E, const E&, const leda::edge_map< E >* >
- pmap_type;
- return pmap_type(&a);
-}
-template < class E >
-leda_edge_property_map< E, E&, leda::edge_map< E >* >
-make_leda_edge_property_map(leda::edge_map< E >& a)
-{
- typedef leda_edge_property_map< E, E&, leda::edge_map< E >* > pmap_type;
- return pmap_type(&a);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_LEDA_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/loop_erased_random_walk.hpp b/contrib/restricted/boost/graph/include/boost/graph/loop_erased_random_walk.hpp
deleted file mode 100644
index 432d515940..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/loop_erased_random_walk.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2010 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jeremiah Willcock
-// Andrew Lumsdaine
-
-#ifndef BOOST_GRAPH_LOOP_ERASED_RANDOM_WALK_HPP
-#define BOOST_GRAPH_LOOP_ERASED_RANDOM_WALK_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/random.hpp>
-#include <boost/next_prior.hpp>
-#include <vector>
-#include <boost/assert.hpp>
-
-namespace boost
-{
-
-struct BOOST_SYMBOL_VISIBLE loop_erased_random_walk_stuck
-: public std::exception
-{
- ~loop_erased_random_walk_stuck() BOOST_OVERRIDE {}
- const char* what() const noexcept BOOST_OVERRIDE
- {
- return "Loop-erased random walk found a vertex with no out-edges";
- }
-};
-
-// Do a loop-erased random walk from vertex s to any vertex colored black (or
-// actually any color other than white or gray) in the color map. The color
-// white is for vertices that are not part of the path, while gray is for
-// those that are on the path (for cycle detection). The vector path is used
-// for temporary storage and as the result of the algorithm; while all
-// elements of the path except the last have their colors set to gray upon
-// return. Vertex s must start off colored white.
-//
-// Useful references:
-// http://everything2.com/title/loop-erased+random+walk
-// Wikipedia page on "Loop-Erased Random Walk"
-
-template < typename Graph, typename ColorMap, typename NextEdge >
-void loop_erased_random_walk(const Graph& g,
- typename boost::graph_traits< Graph >::vertex_descriptor s,
- NextEdge next_edge, ColorMap color,
- std::vector< typename boost::graph_traits< Graph >::vertex_descriptor >&
- path)
-{
- typedef typename boost::graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
- typedef
- typename boost::graph_traits< Graph >::edge_descriptor edge_descriptor;
- typedef typename boost::property_traits< ColorMap >::value_type color_t;
- typedef boost::color_traits< color_t > color_gen;
-
- BOOST_ASSERT(get(color, s) == color_gen::white());
- path.clear();
- path.push_back(s);
- put(color, s, color_gen::gray());
- while (true)
- {
- edge_descriptor e = next_edge(s, g);
- vertex_descriptor t = target(e, g);
- color_t t_color = get(color, t);
- if (t_color == color_gen::white())
- {
- path.push_back(t);
- put(color, t, color_gen::gray());
- s = t;
- }
- else if (t_color == color_gen::gray())
- {
- // Found a loop; delete from path from the first occurrence of t to
- // the end, coloring vertices white.
- typename std::vector< vertex_descriptor >::iterator it
- = std::find(path.begin(), path.end(), t);
- BOOST_ASSERT(it != path.end());
- ++it;
- for (typename std::vector< vertex_descriptor >::iterator j = it;
- j != path.end(); ++j)
- {
- put(color, *j, color_gen::white());
- }
- path.erase(it, path.end());
- s = t;
- }
- else
- {
- // Done
- path.push_back(t);
- break;
- }
- }
-}
-
-template < typename Graph, typename Gen > class unweighted_random_out_edge_gen
-{
- Gen& gen;
-
- typedef boost::graph_traits< Graph > gt;
-
-public:
- unweighted_random_out_edge_gen(Gen& gen) : gen(gen) {}
-
- typename gt::edge_descriptor operator()(
- typename gt::vertex_descriptor src, const Graph& g) const
- {
- if (out_degree(src, g) == 0)
- throw loop_erased_random_walk_stuck();
- return boost::random_out_edge(g, src, gen);
- }
-};
-
-template < typename Graph, typename WeightMap, typename Gen >
-class weighted_random_out_edge_gen
-{
- WeightMap weight;
- Gen& gen;
-
- typedef boost::graph_traits< Graph > gt;
-
-public:
- weighted_random_out_edge_gen(const WeightMap& weight, Gen& gen)
- : weight(weight), gen(gen)
- {
- }
-
- typename gt::edge_descriptor operator()(
- typename gt::vertex_descriptor src, const Graph& g) const
- {
- if (out_degree(src, g) == 0)
- throw loop_erased_random_walk_stuck();
- return boost::weighted_random_out_edge(g, src, weight, gen);
- }
-};
-}
-
-#endif // BOOST_GRAPH_LOOP_ERASED_RANDOM_WALK_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/make_biconnected_planar.hpp b/contrib/restricted/boost/graph/include/boost/graph/make_biconnected_planar.hpp
deleted file mode 100644
index 60f40772a8..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/make_biconnected_planar.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __MAKE_BICONNECTED_PLANAR_HPP__
-#define __MAKE_BICONNECTED_PLANAR_HPP__
-
-#include <boost/config.hpp>
-#include <boost/tuple/tuple.hpp> //for tie
-#include <boost/graph/biconnected_components.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <vector>
-#include <iterator>
-#include <algorithm>
-
-#include <boost/graph/planar_detail/add_edge_visitors.hpp>
-
-namespace boost
-{
-
-template < typename Graph, typename PlanarEmbedding, typename EdgeIndexMap,
- typename AddEdgeVisitor >
-void make_biconnected_planar(
- Graph& g, PlanarEmbedding embedding, EdgeIndexMap em, AddEdgeVisitor& vis)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::edges_size_type edge_size_t;
- typedef typename property_traits< PlanarEmbedding >::value_type
- embedding_value_t;
- typedef typename embedding_value_t::const_iterator embedding_iterator_t;
- typedef iterator_property_map< std::vector< std::size_t >::iterator,
- EdgeIndexMap >
- component_map_t;
-
- edge_size_t n_edges(num_edges(g));
- std::vector< vertex_t > articulation_points;
- std::vector< edge_size_t > component_vector(n_edges);
- component_map_t component_map(component_vector.begin(), em);
-
- biconnected_components(
- g, component_map, std::back_inserter(articulation_points));
-
- typename std::vector< vertex_t >::iterator ap, ap_end;
- ap_end = articulation_points.end();
- for (ap = articulation_points.begin(); ap != ap_end; ++ap)
- {
- vertex_t v(*ap);
- embedding_iterator_t pi = embedding[v].begin();
- embedding_iterator_t pi_end = embedding[v].end();
- edge_size_t previous_component(n_edges + 1);
- vertex_t previous_vertex = graph_traits< Graph >::null_vertex();
-
- for (; pi != pi_end; ++pi)
- {
- edge_t e(*pi);
- vertex_t e_source(source(e, g));
- vertex_t e_target(target(e, g));
-
- // Skip self-loops and parallel edges
- if (e_source == e_target || previous_vertex == e_target)
- continue;
-
- vertex_t current_vertex = e_source == v ? e_target : e_source;
- edge_size_t current_component = component_map[e];
- if (previous_vertex != graph_traits< Graph >::null_vertex()
- && current_component != previous_component)
- {
- vis.visit_vertex_pair(current_vertex, previous_vertex, g);
- }
- previous_vertex = current_vertex;
- previous_component = current_component;
- }
- }
-}
-
-template < typename Graph, typename PlanarEmbedding, typename EdgeIndexMap >
-inline void make_biconnected_planar(
- Graph& g, PlanarEmbedding embedding, EdgeIndexMap em)
-{
- default_add_edge_visitor vis;
- make_biconnected_planar(g, embedding, em, vis);
-}
-
-template < typename Graph, typename PlanarEmbedding >
-inline void make_biconnected_planar(Graph& g, PlanarEmbedding embedding)
-{
- make_biconnected_planar(g, embedding, get(edge_index, g));
-}
-
-} // namespace boost
-
-#endif //__MAKE_BICONNECTED_PLANAR_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/make_connected.hpp b/contrib/restricted/boost/graph/include/boost/graph/make_connected.hpp
deleted file mode 100644
index de36590673..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/make_connected.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __MAKE_CONNECTED_HPP__
-#define __MAKE_CONNECTED_HPP__
-
-#include <boost/config.hpp>
-#include <boost/next_prior.hpp>
-#include <boost/tuple/tuple.hpp> //for tie
-#include <boost/graph/connected_components.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <vector>
-
-#include <boost/graph/planar_detail/add_edge_visitors.hpp>
-#include <boost/graph/planar_detail/bucket_sort.hpp>
-
-namespace boost
-{
-
-template < typename Graph, typename VertexIndexMap, typename AddEdgeVisitor >
-void make_connected(Graph& g, VertexIndexMap vm, AddEdgeVisitor& vis)
-{
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef iterator_property_map< typename std::vector< v_size_t >::iterator,
- VertexIndexMap >
- vertex_to_v_size_map_t;
-
- std::vector< v_size_t > component_vector(num_vertices(g));
- vertex_to_v_size_map_t component(component_vector.begin(), vm);
- std::vector< vertex_t > vertices_by_component(num_vertices(g));
-
- v_size_t num_components = connected_components(g, component);
-
- if (num_components < 2)
- return;
-
- vertex_iterator_t vi, vi_end;
- boost::tie(vi, vi_end) = vertices(g);
- std::copy(vi, vi_end, vertices_by_component.begin());
-
- bucket_sort(vertices_by_component.begin(), vertices_by_component.end(),
- component, num_components);
-
- typedef typename std::vector< vertex_t >::iterator vec_of_vertices_itr_t;
-
- vec_of_vertices_itr_t ci_end = vertices_by_component.end();
- vec_of_vertices_itr_t ci_prev = vertices_by_component.begin();
- if (ci_prev == ci_end)
- return;
-
- for (vec_of_vertices_itr_t ci = boost::next(ci_prev); ci != ci_end;
- ci_prev = ci, ++ci)
- {
- if (component[*ci_prev] != component[*ci])
- vis.visit_vertex_pair(*ci_prev, *ci, g);
- }
-}
-
-template < typename Graph, typename VertexIndexMap >
-inline void make_connected(Graph& g, VertexIndexMap vm)
-{
- default_add_edge_visitor vis;
- make_connected(g, vm, vis);
-}
-
-template < typename Graph > inline void make_connected(Graph& g)
-{
- make_connected(g, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif //__MAKE_CONNECTED_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/make_maximal_planar.hpp b/contrib/restricted/boost/graph/include/boost/graph/make_maximal_planar.hpp
deleted file mode 100644
index 4f19b8a6fc..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/make_maximal_planar.hpp
+++ /dev/null
@@ -1,213 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __MAKE_MAXIMAL_PLANAR_HPP__
-#define __MAKE_MAXIMAL_PLANAR_HPP__
-
-#include <boost/config.hpp>
-#include <boost/tuple/tuple.hpp> //for tie
-#include <boost/graph/biconnected_components.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <vector>
-#include <iterator>
-#include <algorithm>
-
-#include <boost/graph/planar_face_traversal.hpp>
-#include <boost/graph/planar_detail/add_edge_visitors.hpp>
-
-namespace boost
-{
-
-template < typename Graph, typename VertexIndexMap, typename AddEdgeVisitor >
-struct triangulation_visitor : public planar_face_traversal_visitor
-{
-
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef typename graph_traits< Graph >::degree_size_type degree_size_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef
- typename graph_traits< Graph >::adjacency_iterator adjacency_iterator_t;
- typedef typename std::vector< vertex_t > vertex_vector_t;
- typedef typename std::vector< v_size_t > v_size_vector_t;
- typedef typename std::vector< degree_size_t > degree_size_vector_t;
- typedef iterator_property_map< typename v_size_vector_t::iterator,
- VertexIndexMap >
- vertex_to_v_size_map_t;
- typedef iterator_property_map< typename degree_size_vector_t::iterator,
- VertexIndexMap >
- vertex_to_degree_size_map_t;
- typedef typename vertex_vector_t::iterator face_iterator;
-
- triangulation_visitor(Graph& arg_g, VertexIndexMap arg_vm,
- AddEdgeVisitor arg_add_edge_visitor)
- : g(arg_g)
- , vm(arg_vm)
- , add_edge_visitor(arg_add_edge_visitor)
- , timestamp(0)
- , marked_vector(num_vertices(g), timestamp)
- , degree_vector(num_vertices(g), 0)
- , marked(marked_vector.begin(), vm)
- , degree(degree_vector.begin(), vm)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(degree, *vi, out_degree(*vi, g));
- }
-
- template < typename Vertex > void next_vertex(Vertex v)
- {
- // Self-loops will appear as consecutive vertices in the list of
- // vertices on a face. We want to skip these.
- if (!vertices_on_face.empty()
- && (vertices_on_face.back() == v || vertices_on_face.front() == v))
- return;
-
- vertices_on_face.push_back(v);
- }
-
- void end_face()
- {
- ++timestamp;
-
- if (vertices_on_face.size() <= 3)
- {
- // At most three vertices on this face - don't need to triangulate
- vertices_on_face.clear();
- return;
- }
-
- // Find vertex on face of minimum degree
- degree_size_t min_degree = num_vertices(g);
- typename vertex_vector_t::iterator min_degree_vertex_itr;
- face_iterator fi_end = vertices_on_face.end();
- for (face_iterator fi = vertices_on_face.begin(); fi != fi_end; ++fi)
- {
- degree_size_t deg = get(degree, *fi);
- if (deg < min_degree)
- {
- min_degree_vertex_itr = fi;
- min_degree = deg;
- }
- }
-
- // To simplify some of the manipulations, we'll re-arrange
- // vertices_on_face so that it still contains the same
- // (counter-clockwise) order of the vertices on this face, but now the
- // min_degree_vertex is the first element in vertices_on_face.
- vertex_vector_t temp_vector;
- std::copy(min_degree_vertex_itr, vertices_on_face.end(),
- std::back_inserter(temp_vector));
- std::copy(vertices_on_face.begin(), min_degree_vertex_itr,
- std::back_inserter(temp_vector));
- vertices_on_face.swap(temp_vector);
-
- // Mark all of the min degree vertex's neighbors
- adjacency_iterator_t ai, ai_end;
- for (boost::tie(ai, ai_end)
- = adjacent_vertices(vertices_on_face.front(), g);
- ai != ai_end; ++ai)
- {
- put(marked, *ai, timestamp);
- }
-
- typename vertex_vector_t::iterator marked_neighbor
- = vertices_on_face.end();
-
- // The iterator manipulations on the next two lines are safe because
- // vertices_on_face.size() > 3 (from the first test in this function)
- fi_end = prior(vertices_on_face.end());
- for (face_iterator fi
- = boost::next(boost::next(vertices_on_face.begin()));
- fi != fi_end; ++fi)
- {
- if (get(marked, *fi) == timestamp)
- {
- marked_neighbor = fi;
- break;
- }
- }
-
- if (marked_neighbor == vertices_on_face.end())
- {
- add_edge_range(vertices_on_face[0],
- boost::next(boost::next(vertices_on_face.begin())),
- prior(vertices_on_face.end()));
- }
- else
- {
- add_edge_range(vertices_on_face[1], boost::next(marked_neighbor),
- vertices_on_face.end());
-
- add_edge_range(*boost::next(marked_neighbor),
- boost::next(boost::next(vertices_on_face.begin())),
- marked_neighbor);
- }
-
- // reset for the next face
- vertices_on_face.clear();
- }
-
-private:
- void add_edge_range(vertex_t anchor, face_iterator fi, face_iterator fi_end)
- {
- for (; fi != fi_end; ++fi)
- {
- vertex_t v(*fi);
- add_edge_visitor.visit_vertex_pair(anchor, v, g);
- put(degree, anchor, get(degree, anchor) + 1);
- put(degree, v, get(degree, v) + 1);
- }
- }
-
- Graph& g;
- VertexIndexMap vm;
- AddEdgeVisitor add_edge_visitor;
- v_size_t timestamp;
- vertex_vector_t vertices_on_face;
- v_size_vector_t marked_vector;
- degree_size_vector_t degree_vector;
- vertex_to_v_size_map_t marked;
- vertex_to_degree_size_map_t degree;
-};
-
-template < typename Graph, typename PlanarEmbedding, typename VertexIndexMap,
- typename EdgeIndexMap, typename AddEdgeVisitor >
-void make_maximal_planar(Graph& g, PlanarEmbedding embedding, VertexIndexMap vm,
- EdgeIndexMap em, AddEdgeVisitor& vis)
-{
- triangulation_visitor< Graph, VertexIndexMap, AddEdgeVisitor > visitor(
- g, vm, vis);
- planar_face_traversal(g, embedding, visitor, em);
-}
-
-template < typename Graph, typename PlanarEmbedding, typename VertexIndexMap,
- typename EdgeIndexMap >
-void make_maximal_planar(
- Graph& g, PlanarEmbedding embedding, VertexIndexMap vm, EdgeIndexMap em)
-{
- default_add_edge_visitor vis;
- make_maximal_planar(g, embedding, vm, em, vis);
-}
-
-template < typename Graph, typename PlanarEmbedding, typename VertexIndexMap >
-void make_maximal_planar(Graph& g, PlanarEmbedding embedding, VertexIndexMap vm)
-{
- make_maximal_planar(g, embedding, vm, get(edge_index, g));
-}
-
-template < typename Graph, typename PlanarEmbedding >
-void make_maximal_planar(Graph& g, PlanarEmbedding embedding)
-{
- make_maximal_planar(g, embedding, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif //__MAKE_MAXIMAL_PLANAR_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/matrix_as_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/matrix_as_graph.hpp
deleted file mode 100644
index b5df6cd9fe..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/matrix_as_graph.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_MATRIX2GRAPH_HPP
-#define BOOST_GRAPH_MATRIX2GRAPH_HPP
-
-#include <utility>
-#include <cstddef>
-#include <iterator>
-#include <boost/config.hpp>
-#include <boost/operators.hpp>
-#include <boost/pending/detail/int_iterator.hpp>
-#include <boost/graph/graph_traits.hpp>
-
-namespace boost
-{
-
-template < class Iter, class Vertex > class matrix_adj_iterator;
-
-template < class Iter, class Vertex > class matrix_incidence_iterator;
-
-}
-
-#define BOOST_GRAPH_ADAPT_MATRIX_TO_GRAPH(Matrix) \
- namespace boost \
- { \
- template <> struct graph_traits< Matrix > \
- { \
- typedef Matrix::OneD::const_iterator Iter; \
- typedef Matrix::size_type V; \
- typedef V vertex_descriptor; \
- typedef Iter E; \
- typedef E edge_descriptor; \
- typedef boost::matrix_incidence_iterator< Iter, V > \
- out_edge_iterator; \
- typedef boost::matrix_adj_iterator< Iter, V > adjacency_iterator; \
- typedef Matrix::size_type size_type; \
- typedef boost::int_iterator< size_type > vertex_iterator; \
- \
- friend std::pair< vertex_iterator, vertex_iterator > vertices( \
- const Matrix& g) \
- { \
- typedef vertex_iterator VIter; \
- return std::make_pair(VIter(0), VIter(g.nrows())); \
- } \
- \
- friend std::pair< out_edge_iterator, out_edge_iterator > \
- out_edges(V v, const Matrix& g) \
- { \
- typedef out_edge_iterator IncIter; \
- return std::make_pair( \
- IncIter(g[v].begin()), IncIter(g[v].end())); \
- } \
- friend std::pair< adjacency_iterator, adjacency_iterator > \
- adjacent_vertices(V v, const Matrix& g) \
- { \
- typedef adjacency_iterator AdjIter; \
- return std::make_pair( \
- AdjIter(g[v].begin()), AdjIter(g[v].end())); \
- } \
- friend vertex_descriptor source(E e, const Matrix& g) \
- { \
- return e.row(); \
- } \
- friend vertex_descriptor target(E e, const Matrix& g) \
- { \
- return e.column(); \
- } \
- friend size_type num_vertices(const Matrix& g) \
- { \
- return g.nrows(); \
- } \
- friend size_type num_edges(const Matrix& g) { return g.nnz(); } \
- friend size_type out_degree(V i, const Matrix& g) \
- { \
- return g[i].nnz(); \
- } \
- }; \
- }
-
-namespace boost
-{
-
-template < class Iter, class Vertex > class matrix_adj_iterator
-{
- typedef matrix_adj_iterator self;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef Vertex value_type;
- typedef std::ptrdiff_t difference_type;
- typedef Vertex* pointer;
- typedef Vertex& reference;
- matrix_adj_iterator() {}
- matrix_adj_iterator(Iter i) : _iter(i) {}
- matrix_adj_iterator(const self& x) : _iter(x._iter) {}
- self& operator=(const self& x)
- {
- _iter = x._iter;
- return *this;
- }
- Vertex operator*() { return _iter.column(); }
- self& operator++()
- {
- ++_iter;
- return *this;
- }
- self operator++(int)
- {
- self t = *this;
- ++_iter;
- return t;
- }
- bool operator==(const self& x) const { return _iter == x._iter; }
- bool operator!=(const self& x) const { return _iter != x._iter; }
-
-protected:
- Iter _iter;
-};
-
-template < class Iter, class Vertex > class matrix_incidence_iterator
-{
- typedef matrix_incidence_iterator self;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef Iter value_type;
- typedef std::ptrdiff_t difference_type;
- typedef Iter* pointer;
- typedef Iter& reference;
- matrix_incidence_iterator() {}
- matrix_incidence_iterator(Iter i) : _iter(i) {}
- matrix_incidence_iterator(const self& x) : _iter(x._iter) {}
- self& operator=(const self& x)
- {
- _iter = x._iter;
- return *this;
- }
- Iter operator*() { return _iter; }
- self& operator++()
- {
- ++_iter;
- return *this;
- }
- self operator++(int)
- {
- self t = *this;
- ++_iter;
- return t;
- }
- bool operator==(const self& x) const { return _iter == x._iter; }
- bool operator!=(const self& x) const { return _iter != x._iter; }
-
-protected:
- Iter _iter;
-};
-
-} /* namespace boost */
-
-#endif /* BOOST_GRAPH_MATRIX2GRAPH_HPP*/
diff --git a/contrib/restricted/boost/graph/include/boost/graph/max_cardinality_matching.hpp b/contrib/restricted/boost/graph/include/boost/graph/max_cardinality_matching.hpp
deleted file mode 100644
index 082c2bd38a..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/max_cardinality_matching.hpp
+++ /dev/null
@@ -1,844 +0,0 @@
-//=======================================================================
-// Copyright (c) 2005 Aaron Windsor
-//
-// 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_MAXIMUM_CARDINALITY_MATCHING_HPP
-#define BOOST_GRAPH_MAXIMUM_CARDINALITY_MATCHING_HPP
-
-#include <vector>
-#include <list>
-#include <deque>
-#include <algorithm> // for std::sort and std::stable_sort
-#include <utility> // for std::pair
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/visitors.hpp>
-#include <boost/graph/depth_first_search.hpp>
-#include <boost/graph/filtered_graph.hpp>
-#include <boost/pending/disjoint_sets.hpp>
-#include <boost/assert.hpp>
-
-namespace boost
-{
-namespace graph
-{
- namespace detail
- {
- enum VERTEX_STATE
- {
- V_EVEN,
- V_ODD,
- V_UNREACHED
- };
- }
-} // end namespace graph::detail
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type matching_size(
- const Graph& g, MateMap mate, VertexIndexMap vm)
-{
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
-
- v_size_t size_of_matching = 0;
- vertex_iterator_t vi, vi_end;
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t v = *vi;
- if (get(mate, v) != graph_traits< Graph >::null_vertex()
- && get(vm, v) < get(vm, get(mate, v)))
- ++size_of_matching;
- }
- return size_of_matching;
-}
-
-template < typename Graph, typename MateMap >
-inline typename graph_traits< Graph >::vertices_size_type matching_size(
- const Graph& g, MateMap mate)
-{
- return matching_size(g, mate, get(vertex_index, g));
-}
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-bool is_a_matching(const Graph& g, MateMap mate, VertexIndexMap)
-{
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t v = *vi;
- if (get(mate, v) != graph_traits< Graph >::null_vertex()
- && v != get(mate, get(mate, v)))
- return false;
- }
- return true;
-}
-
-template < typename Graph, typename MateMap >
-inline bool is_a_matching(const Graph& g, MateMap mate)
-{
- return is_a_matching(g, mate, get(vertex_index, g));
-}
-
-//***************************************************************************
-//***************************************************************************
-// Maximum Cardinality Matching Functors
-//***************************************************************************
-//***************************************************************************
-
-template < typename Graph, typename MateMap,
- typename VertexIndexMap = dummy_property_map >
-struct no_augmenting_path_finder
-{
- no_augmenting_path_finder(const Graph&, MateMap, VertexIndexMap) {}
-
- inline bool augment_matching() { return false; }
-
- template < typename PropertyMap > void get_current_matching(PropertyMap) {}
-};
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-class edmonds_augmenting_path_finder
-{
- // This implementation of Edmonds' matching algorithm closely
- // follows Tarjan's description of the algorithm in "Data
- // Structures and Network Algorithms."
-
-public:
- // generates the type of an iterator property map from vertices to type X
- template < typename X > struct map_vertex_to_
- {
- typedef boost::iterator_property_map<
- typename std::vector< X >::iterator, VertexIndexMap >
- type;
- };
-
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename std::pair< vertex_descriptor_t, vertex_descriptor_t >
- vertex_pair_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef typename graph_traits< Graph >::edges_size_type e_size_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef
- typename graph_traits< Graph >::out_edge_iterator out_edge_iterator_t;
- typedef typename std::deque< vertex_descriptor_t > vertex_list_t;
- typedef typename std::vector< edge_descriptor_t > edge_list_t;
- typedef typename map_vertex_to_< vertex_descriptor_t >::type
- vertex_to_vertex_map_t;
- typedef typename map_vertex_to_< int >::type vertex_to_int_map_t;
- typedef typename map_vertex_to_< vertex_pair_t >::type
- vertex_to_vertex_pair_map_t;
- typedef typename map_vertex_to_< v_size_t >::type vertex_to_vsize_map_t;
- typedef typename map_vertex_to_< e_size_t >::type vertex_to_esize_map_t;
-
- edmonds_augmenting_path_finder(
- const Graph& arg_g, MateMap arg_mate, VertexIndexMap arg_vm)
- : g(arg_g)
- , vm(arg_vm)
- , n_vertices(num_vertices(arg_g))
- ,
-
- mate_vector(n_vertices)
- , ancestor_of_v_vector(n_vertices)
- , ancestor_of_w_vector(n_vertices)
- , vertex_state_vector(n_vertices)
- , origin_vector(n_vertices)
- , pred_vector(n_vertices)
- , bridge_vector(n_vertices)
- , ds_parent_vector(n_vertices)
- , ds_rank_vector(n_vertices)
- ,
-
- mate(mate_vector.begin(), vm)
- , ancestor_of_v(ancestor_of_v_vector.begin(), vm)
- , ancestor_of_w(ancestor_of_w_vector.begin(), vm)
- , vertex_state(vertex_state_vector.begin(), vm)
- , origin(origin_vector.begin(), vm)
- , pred(pred_vector.begin(), vm)
- , bridge(bridge_vector.begin(), vm)
- , ds_parent_map(ds_parent_vector.begin(), vm)
- , ds_rank_map(ds_rank_vector.begin(), vm)
- ,
-
- ds(ds_rank_map, ds_parent_map)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- mate[*vi] = get(arg_mate, *vi);
- }
-
- bool augment_matching()
- {
- // As an optimization, some of these values can be saved from one
- // iteration to the next instead of being re-initialized each
- // iteration, allowing for "lazy blossom expansion." This is not
- // currently implemented.
-
- e_size_t timestamp = 0;
- even_edges.clear();
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t u = *vi;
-
- origin[u] = u;
- pred[u] = u;
- ancestor_of_v[u] = 0;
- ancestor_of_w[u] = 0;
- ds.make_set(u);
-
- if (mate[u] == graph_traits< Graph >::null_vertex())
- {
- vertex_state[u] = graph::detail::V_EVEN;
- out_edge_iterator_t ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end;
- ++ei)
- {
- if (target(*ei, g) != u)
- {
- even_edges.push_back(*ei);
- }
- }
- }
- else
- vertex_state[u] = graph::detail::V_UNREACHED;
- }
-
- // end initializations
-
- vertex_descriptor_t v, w, w_free_ancestor, v_free_ancestor;
- w_free_ancestor = graph_traits< Graph >::null_vertex();
- v_free_ancestor = graph_traits< Graph >::null_vertex();
- bool found_alternating_path = false;
-
- while (!even_edges.empty() && !found_alternating_path)
- {
- // since we push even edges onto the back of the list as
- // they're discovered, taking them off the back will search
- // for augmenting paths depth-first.
- edge_descriptor_t current_edge = even_edges.back();
- even_edges.pop_back();
-
- v = source(current_edge, g);
- w = target(current_edge, g);
-
- vertex_descriptor_t v_prime = origin[ds.find_set(v)];
- vertex_descriptor_t w_prime = origin[ds.find_set(w)];
-
- // because of the way we put all of the edges on the queue,
- // v_prime should be labeled V_EVEN; the following is a
- // little paranoid but it could happen...
- if (vertex_state[v_prime] != graph::detail::V_EVEN)
- {
- std::swap(v_prime, w_prime);
- std::swap(v, w);
- }
-
- if (vertex_state[w_prime] == graph::detail::V_UNREACHED)
- {
- vertex_state[w_prime] = graph::detail::V_ODD;
- vertex_descriptor_t w_prime_mate = mate[w_prime];
- vertex_state[w_prime_mate] = graph::detail::V_EVEN;
- out_edge_iterator_t ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(w_prime_mate, g);
- ei != ei_end; ++ei)
- {
- if (target(*ei, g) != w_prime_mate)
- {
- even_edges.push_back(*ei);
- }
- }
- pred[w_prime] = v;
- }
-
- // w_prime == v_prime can happen below if we get an edge that has
- // been shrunk into a blossom
- else if (vertex_state[w_prime] == graph::detail::V_EVEN
- && w_prime != v_prime)
- {
- vertex_descriptor_t w_up = w_prime;
- vertex_descriptor_t v_up = v_prime;
- vertex_descriptor_t nearest_common_ancestor
- = graph_traits< Graph >::null_vertex();
- w_free_ancestor = graph_traits< Graph >::null_vertex();
- v_free_ancestor = graph_traits< Graph >::null_vertex();
-
- // We now need to distinguish between the case that
- // w_prime and v_prime share an ancestor under the
- // "parent" relation, in which case we've found a
- // blossom and should shrink it, or the case that
- // w_prime and v_prime both have distinct ancestors that
- // are free, in which case we've found an alternating
- // path between those two ancestors.
-
- ++timestamp;
-
- while (nearest_common_ancestor
- == graph_traits< Graph >::null_vertex()
- && (v_free_ancestor == graph_traits< Graph >::null_vertex()
- || w_free_ancestor
- == graph_traits< Graph >::null_vertex()))
- {
- ancestor_of_w[w_up] = timestamp;
- ancestor_of_v[v_up] = timestamp;
-
- if (w_free_ancestor == graph_traits< Graph >::null_vertex())
- w_up = parent(w_up);
- if (v_free_ancestor == graph_traits< Graph >::null_vertex())
- v_up = parent(v_up);
-
- if (mate[v_up] == graph_traits< Graph >::null_vertex())
- v_free_ancestor = v_up;
- if (mate[w_up] == graph_traits< Graph >::null_vertex())
- w_free_ancestor = w_up;
-
- if (ancestor_of_w[v_up] == timestamp)
- nearest_common_ancestor = v_up;
- else if (ancestor_of_v[w_up] == timestamp)
- nearest_common_ancestor = w_up;
- else if (v_free_ancestor == w_free_ancestor
- && v_free_ancestor
- != graph_traits< Graph >::null_vertex())
- nearest_common_ancestor = v_up;
- }
-
- if (nearest_common_ancestor
- == graph_traits< Graph >::null_vertex())
- found_alternating_path = true; // to break out of the loop
- else
- {
- // shrink the blossom
- link_and_set_bridges(
- w_prime, nearest_common_ancestor, std::make_pair(w, v));
- link_and_set_bridges(
- v_prime, nearest_common_ancestor, std::make_pair(v, w));
- }
- }
- }
-
- if (!found_alternating_path)
- return false;
-
- // retrieve the augmenting path and put it in aug_path
- reversed_retrieve_augmenting_path(v, v_free_ancestor);
- retrieve_augmenting_path(w, w_free_ancestor);
-
- // augment the matching along aug_path
- vertex_descriptor_t a, b;
- while (!aug_path.empty())
- {
- a = aug_path.front();
- aug_path.pop_front();
- b = aug_path.front();
- aug_path.pop_front();
- mate[a] = b;
- mate[b] = a;
- }
-
- return true;
- }
-
- template < typename PropertyMap > void get_current_matching(PropertyMap pm)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(pm, *vi, mate[*vi]);
- }
-
- template < typename PropertyMap > void get_vertex_state_map(PropertyMap pm)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(pm, *vi, vertex_state[origin[ds.find_set(*vi)]]);
- }
-
-private:
- vertex_descriptor_t parent(vertex_descriptor_t x)
- {
- if (vertex_state[x] == graph::detail::V_EVEN
- && mate[x] != graph_traits< Graph >::null_vertex())
- return mate[x];
- else if (vertex_state[x] == graph::detail::V_ODD)
- return origin[ds.find_set(pred[x])];
- else
- return x;
- }
-
- void link_and_set_bridges(vertex_descriptor_t x,
- vertex_descriptor_t stop_vertex, vertex_pair_t the_bridge)
- {
- for (vertex_descriptor_t v = x; v != stop_vertex; v = parent(v))
- {
- ds.union_set(v, stop_vertex);
- origin[ds.find_set(stop_vertex)] = stop_vertex;
-
- if (vertex_state[v] == graph::detail::V_ODD)
- {
- bridge[v] = the_bridge;
- out_edge_iterator_t oei, oei_end;
- for (boost::tie(oei, oei_end) = out_edges(v, g); oei != oei_end;
- ++oei)
- {
- if (target(*oei, g) != v)
- {
- even_edges.push_back(*oei);
- }
- }
- }
- }
- }
-
- // Since none of the STL containers support both constant-time
- // concatenation and reversal, the process of expanding an
- // augmenting path once we know one exists is a little more
- // complicated than it has to be. If we know the path is from v to
- // w, then the augmenting path is recursively defined as:
- //
- // path(v,w) = [v], if v = w
- // = concat([v, mate[v]], path(pred[mate[v]], w),
- // if v != w and vertex_state[v] == graph::detail::V_EVEN
- // = concat([v], reverse(path(x,mate[v])), path(y,w)),
- // if v != w, vertex_state[v] == graph::detail::V_ODD, and
- // bridge[v] = (x,y)
- //
- // These next two mutually recursive functions implement this definition.
-
- void retrieve_augmenting_path(vertex_descriptor_t v, vertex_descriptor_t w)
- {
- if (v == w)
- aug_path.push_back(v);
- else if (vertex_state[v] == graph::detail::V_EVEN)
- {
- aug_path.push_back(v);
- aug_path.push_back(mate[v]);
- retrieve_augmenting_path(pred[mate[v]], w);
- }
- else // vertex_state[v] == graph::detail::V_ODD
- {
- aug_path.push_back(v);
- reversed_retrieve_augmenting_path(bridge[v].first, mate[v]);
- retrieve_augmenting_path(bridge[v].second, w);
- }
- }
-
- void reversed_retrieve_augmenting_path(
- vertex_descriptor_t v, vertex_descriptor_t w)
- {
-
- if (v == w)
- aug_path.push_back(v);
- else if (vertex_state[v] == graph::detail::V_EVEN)
- {
- reversed_retrieve_augmenting_path(pred[mate[v]], w);
- aug_path.push_back(mate[v]);
- aug_path.push_back(v);
- }
- else // vertex_state[v] == graph::detail::V_ODD
- {
- reversed_retrieve_augmenting_path(bridge[v].second, w);
- retrieve_augmenting_path(bridge[v].first, mate[v]);
- aug_path.push_back(v);
- }
- }
-
- // private data members
-
- const Graph& g;
- VertexIndexMap vm;
- v_size_t n_vertices;
-
- // storage for the property maps below
- std::vector< vertex_descriptor_t > mate_vector;
- std::vector< e_size_t > ancestor_of_v_vector;
- std::vector< e_size_t > ancestor_of_w_vector;
- std::vector< int > vertex_state_vector;
- std::vector< vertex_descriptor_t > origin_vector;
- std::vector< vertex_descriptor_t > pred_vector;
- std::vector< vertex_pair_t > bridge_vector;
- std::vector< vertex_descriptor_t > ds_parent_vector;
- std::vector< v_size_t > ds_rank_vector;
-
- // iterator property maps
- vertex_to_vertex_map_t mate;
- vertex_to_esize_map_t ancestor_of_v;
- vertex_to_esize_map_t ancestor_of_w;
- vertex_to_int_map_t vertex_state;
- vertex_to_vertex_map_t origin;
- vertex_to_vertex_map_t pred;
- vertex_to_vertex_pair_map_t bridge;
- vertex_to_vertex_map_t ds_parent_map;
- vertex_to_vsize_map_t ds_rank_map;
-
- vertex_list_t aug_path;
- edge_list_t even_edges;
- disjoint_sets< vertex_to_vsize_map_t, vertex_to_vertex_map_t > ds;
-};
-
-//***************************************************************************
-//***************************************************************************
-// Initial Matching Functors
-//***************************************************************************
-//***************************************************************************
-
-template < typename Graph, typename MateMap > struct greedy_matching
-{
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
-
- static void find_matching(const Graph& g, MateMap mate)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(mate, *vi, graph_traits< Graph >::null_vertex());
-
- edge_iterator_t ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_descriptor_t e = *ei;
- vertex_descriptor_t u = source(e, g);
- vertex_descriptor_t v = target(e, g);
-
- if (u != v && get(mate, u) == get(mate, v))
- // only way equality can hold is if
- // mate[u] == mate[v] == null_vertex
- {
- put(mate, u, v);
- put(mate, v, u);
- }
- }
- }
-};
-
-template < typename Graph, typename MateMap > struct extra_greedy_matching
-{
- // The "extra greedy matching" is formed by repeating the
- // following procedure as many times as possible: Choose the
- // unmatched vertex v of minimum non-zero degree. Choose the
- // neighbor w of v which is unmatched and has minimum degree over
- // all of v's neighbors. Add (u,v) to the matching. Ties for
- // either choice are broken arbitrarily. This procedure takes time
- // O(m log n), where m is the number of edges in the graph and n
- // is the number of vertices.
-
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
- typedef std::pair< vertex_descriptor_t, vertex_descriptor_t > vertex_pair_t;
-
- struct select_first
- {
- inline static vertex_descriptor_t select_vertex(const vertex_pair_t p)
- {
- return p.first;
- }
- };
-
- struct select_second
- {
- inline static vertex_descriptor_t select_vertex(const vertex_pair_t p)
- {
- return p.second;
- }
- };
-
- template < class PairSelector > class less_than_by_degree
- {
- public:
- less_than_by_degree(const Graph& g) : m_g(g) {}
- bool operator()(const vertex_pair_t x, const vertex_pair_t y)
- {
- return out_degree(PairSelector::select_vertex(x), m_g)
- < out_degree(PairSelector::select_vertex(y), m_g);
- }
-
- private:
- const Graph& m_g;
- };
-
- static void find_matching(const Graph& g, MateMap mate)
- {
- typedef std::vector<
- std::pair< vertex_descriptor_t, vertex_descriptor_t > >
- directed_edges_vector_t;
-
- directed_edges_vector_t edge_list;
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(mate, *vi, graph_traits< Graph >::null_vertex());
-
- edge_iterator_t ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_descriptor_t e = *ei;
- vertex_descriptor_t u = source(e, g);
- vertex_descriptor_t v = target(e, g);
- if (u == v)
- continue;
- edge_list.push_back(std::make_pair(u, v));
- edge_list.push_back(std::make_pair(v, u));
- }
-
- // sort the edges by the degree of the target, then (using a
- // stable sort) by degree of the source
- std::sort(edge_list.begin(), edge_list.end(),
- less_than_by_degree< select_second >(g));
- std::stable_sort(edge_list.begin(), edge_list.end(),
- less_than_by_degree< select_first >(g));
-
- // construct the extra greedy matching
- for (typename directed_edges_vector_t::const_iterator itr
- = edge_list.begin();
- itr != edge_list.end(); ++itr)
- {
- if (get(mate, itr->first) == get(mate, itr->second))
- // only way equality can hold is if mate[itr->first] ==
- // mate[itr->second] == null_vertex
- {
- put(mate, itr->first, itr->second);
- put(mate, itr->second, itr->first);
- }
- }
- }
-};
-
-template < typename Graph, typename MateMap > struct empty_matching
-{
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
-
- static void find_matching(const Graph& g, MateMap mate)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(mate, *vi, graph_traits< Graph >::null_vertex());
- }
-};
-
-//***************************************************************************
-//***************************************************************************
-// Matching Verifiers
-//***************************************************************************
-//***************************************************************************
-
-namespace detail
-{
-
- template < typename SizeType >
- class odd_components_counter : public dfs_visitor<>
- // This depth-first search visitor will count the number of connected
- // components with an odd number of vertices. It's used by
- // maximum_matching_verifier.
- {
- public:
- odd_components_counter(SizeType& c_count) : m_count(c_count)
- {
- m_count = 0;
- }
-
- template < class Vertex, class Graph > void start_vertex(Vertex, Graph&)
- {
- m_parity = false;
- }
-
- template < class Vertex, class Graph >
- void discover_vertex(Vertex, Graph&)
- {
- m_parity = !m_parity;
- m_parity ? ++m_count : --m_count;
- }
-
- protected:
- SizeType& m_count;
-
- private:
- bool m_parity;
- };
-
-} // namespace detail
-
-template < typename Graph, typename MateMap,
- typename VertexIndexMap = dummy_property_map >
-struct no_matching_verifier
-{
- inline static bool verify_matching(const Graph&, MateMap, VertexIndexMap)
- {
- return true;
- }
-};
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-struct maximum_cardinality_matching_verifier
-{
-
- template < typename X > struct map_vertex_to_
- {
- typedef boost::iterator_property_map<
- typename std::vector< X >::iterator, VertexIndexMap >
- type;
- };
-
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename map_vertex_to_< int >::type vertex_to_int_map_t;
- typedef typename map_vertex_to_< vertex_descriptor_t >::type
- vertex_to_vertex_map_t;
-
- template < typename VertexStateMap > struct non_odd_vertex
- {
- // this predicate is used to create a filtered graph that
- // excludes vertices labeled "graph::detail::V_ODD"
- non_odd_vertex() : vertex_state(0) {}
-
- non_odd_vertex(VertexStateMap* arg_vertex_state)
- : vertex_state(arg_vertex_state)
- {
- }
-
- template < typename Vertex > bool operator()(const Vertex& v) const
- {
- BOOST_ASSERT(vertex_state);
- return get(*vertex_state, v) != graph::detail::V_ODD;
- }
-
- VertexStateMap* vertex_state;
- };
-
- static bool verify_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
- {
- // For any graph G, let o(G) be the number of connected
- // components in G of odd size. For a subset S of G's vertex set
- // V(G), let (G - S) represent the subgraph of G induced by
- // removing all vertices in S from G. Let M(G) be the size of the
- // maximum cardinality matching in G. Then the Tutte-Berge
- // formula guarantees that
- //
- // 2 * M(G) = min ( |V(G)| + |U| + o(G - U) )
- //
- // where the minimum is taken over all subsets U of
- // V(G). Edmonds' algorithm finds a set U that achieves the
- // minimum in the above formula, namely the vertices labeled
- //"ODD." This function runs one iteration of Edmonds' algorithm
- // to find U, then verifies that the size of the matching given
- // by mate satisfies the Tutte-Berge formula.
-
- // first, make sure it's a valid matching
- if (!is_a_matching(g, mate, vm))
- return false;
-
- // We'll try to augment the matching once. This serves two
- // purposes: first, if we find some augmenting path, the matching
- // is obviously non-maximum. Second, running edmonds' algorithm
- // on a graph with no augmenting path will create the
- // Edmonds-Gallai decomposition that we need as a certificate of
- // maximality - we can get it by looking at the vertex_state map
- // that results.
- edmonds_augmenting_path_finder< Graph, MateMap, VertexIndexMap >
- augmentor(g, mate, vm);
- if (augmentor.augment_matching())
- return false;
-
- std::vector< int > vertex_state_vector(num_vertices(g));
- vertex_to_int_map_t vertex_state(vertex_state_vector.begin(), vm);
- augmentor.get_vertex_state_map(vertex_state);
-
- // count the number of graph::detail::V_ODD vertices
- v_size_t num_odd_vertices = 0;
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- if (vertex_state[*vi] == graph::detail::V_ODD)
- ++num_odd_vertices;
-
- // count the number of connected components with odd cardinality
- // in the graph without graph::detail::V_ODD vertices
- non_odd_vertex< vertex_to_int_map_t > filter(&vertex_state);
- filtered_graph< Graph, keep_all, non_odd_vertex< vertex_to_int_map_t > >
- fg(g, keep_all(), filter);
-
- v_size_t num_odd_components;
- detail::odd_components_counter< v_size_t > occ(num_odd_components);
- depth_first_search(fg, visitor(occ).vertex_index_map(vm));
-
- if (2 * matching_size(g, mate, vm)
- == num_vertices(g) + num_odd_vertices - num_odd_components)
- return true;
- else
- return false;
- }
-};
-
-template < typename Graph, typename MateMap, typename VertexIndexMap,
- template < typename, typename, typename > class AugmentingPathFinder,
- template < typename, typename > class InitialMatchingFinder,
- template < typename, typename, typename > class MatchingVerifier >
-bool matching(const Graph& g, MateMap mate, VertexIndexMap vm)
-{
-
- InitialMatchingFinder< Graph, MateMap >::find_matching(g, mate);
-
- AugmentingPathFinder< Graph, MateMap, VertexIndexMap > augmentor(
- g, mate, vm);
- bool not_maximum_yet = true;
- while (not_maximum_yet)
- {
- not_maximum_yet = augmentor.augment_matching();
- }
- augmentor.get_current_matching(mate);
-
- return MatchingVerifier< Graph, MateMap, VertexIndexMap >::verify_matching(
- g, mate, vm);
-}
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-inline bool checked_edmonds_maximum_cardinality_matching(
- const Graph& g, MateMap mate, VertexIndexMap vm)
-{
- return matching< Graph, MateMap, VertexIndexMap,
- edmonds_augmenting_path_finder, extra_greedy_matching,
- maximum_cardinality_matching_verifier >(g, mate, vm);
-}
-
-template < typename Graph, typename MateMap >
-inline bool checked_edmonds_maximum_cardinality_matching(
- const Graph& g, MateMap mate)
-{
- return checked_edmonds_maximum_cardinality_matching(
- g, mate, get(vertex_index, g));
-}
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-inline void edmonds_maximum_cardinality_matching(
- const Graph& g, MateMap mate, VertexIndexMap vm)
-{
- matching< Graph, MateMap, VertexIndexMap, edmonds_augmenting_path_finder,
- extra_greedy_matching, no_matching_verifier >(g, mate, vm);
-}
-
-template < typename Graph, typename MateMap >
-inline void edmonds_maximum_cardinality_matching(const Graph& g, MateMap mate)
-{
- edmonds_maximum_cardinality_matching(g, mate, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_MAXIMUM_CARDINALITY_MATCHING_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/maximum_adjacency_search.hpp b/contrib/restricted/boost/graph/include/boost/graph/maximum_adjacency_search.hpp
deleted file mode 100644
index ed4b5578d1..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/maximum_adjacency_search.hpp
+++ /dev/null
@@ -1,399 +0,0 @@
-//
-//=======================================================================
-// Copyright 2012 Fernando Vilas
-// 2010 Daniel Trebbien
-//
-// 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)
-//=======================================================================
-//
-
-// The maximum adjacency search algorithm was originally part of the
-// Stoer-Wagner min cut implementation by Daniel Trebbien. It has been
-// broken out into its own file to be a public search algorithm, with
-// visitor concepts.
-#ifndef BOOST_GRAPH_MAXIMUM_ADJACENCY_SEARCH_H
-#define BOOST_GRAPH_MAXIMUM_ADJACENCY_SEARCH_H
-
-/**
- * This is an implementation of the maximum adjacency search on an
- * undirected graph. It allows a visitor object to perform some
- * operation on each vertex as that vertex is visited.
- *
- * The algorithm runs as follows:
- *
- * Initialize all nodes to be unvisited (reach count = 0)
- * and call vis.initialize_vertex
- * For i = number of nodes in graph downto 1
- * Select the unvisited node with the highest reach count
- * The user provides the starting node to break the first tie,
- * but future ties are broken arbitrarily
- * Visit the node by calling vis.start_vertex
- * Increment the reach count for all unvisited neighbors
- * and call vis.examine_edge for each of these edges
- * Mark the node as visited and call vis.finish_vertex
- *
- */
-
-#include <boost/concept_check.hpp>
-#include <boost/concept/assert.hpp>
-#include <boost/graph/buffer_concepts.hpp>
-#include <boost/graph/exception.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/visitors.hpp>
-#include <boost/tuple/tuple.hpp>
-
-#include <set>
-
-namespace boost
-{
-template < class Visitor, class Graph > struct MASVisitorConcept
-{
- void constraints()
- {
- boost::function_requires<
- boost::CopyConstructibleConcept< Visitor > >();
- vis.initialize_vertex(u, g);
- vis.start_vertex(u, g);
- vis.examine_edge(e, g);
- vis.finish_vertex(u, g);
- }
- Visitor vis;
- Graph g;
- typename boost::graph_traits< Graph >::vertex_descriptor u;
- typename boost::graph_traits< Graph >::edge_descriptor e;
-};
-
-template < class Visitors = null_visitor > class mas_visitor
-{
-public:
- mas_visitor() {}
- mas_visitor(Visitors vis) : m_vis(vis) {}
-
- template < class Vertex, class Graph >
- void initialize_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, ::boost::on_initialize_vertex());
- }
-
- template < class Vertex, class Graph > void start_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, ::boost::on_start_vertex());
- }
-
- template < class Edge, class Graph > void examine_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, ::boost::on_examine_edge());
- }
-
- template < class Vertex, class Graph >
- void finish_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, ::boost::on_finish_vertex());
- }
-
- BOOST_GRAPH_EVENT_STUB(on_initialize_vertex, mas)
- BOOST_GRAPH_EVENT_STUB(on_start_vertex, mas)
- BOOST_GRAPH_EVENT_STUB(on_examine_edge, mas)
- BOOST_GRAPH_EVENT_STUB(on_finish_vertex, mas)
-
-protected:
- Visitors m_vis;
-};
-template < class Visitors >
-mas_visitor< Visitors > make_mas_visitor(Visitors vis)
-{
- return mas_visitor< Visitors >(vis);
-}
-typedef mas_visitor<> default_mas_visitor;
-
-namespace detail
-{
- template < class Graph, class WeightMap, class MASVisitor,
- class VertexAssignmentMap, class KeyedUpdatablePriorityQueue >
- void maximum_adjacency_search(const Graph& g, WeightMap weights,
- MASVisitor vis,
- const typename boost::graph_traits< Graph >::vertex_descriptor start,
- VertexAssignmentMap assignments, KeyedUpdatablePriorityQueue pq)
- {
- typedef typename boost::graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
- typedef typename boost::property_traits< WeightMap >::value_type
- weight_type;
-
- std::set< vertex_descriptor > assignedVertices;
-
- // initialize `assignments` (all vertices are initially
- // assigned to themselves)
- BGL_FORALL_VERTICES_T(v, g, Graph) { put(assignments, v, v); }
-
- typename KeyedUpdatablePriorityQueue::key_map keys = pq.keys();
-
- // set number of visited neighbors for all vertices to 0
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- if (v == get(assignments, v))
- { // foreach u \in V do
- put(keys, v, weight_type(0));
- vis.initialize_vertex(v, g);
-
- pq.push(v);
- }
- }
- BOOST_ASSERT(pq.size() >= 2);
-
- // Give the starting vertex high priority
- put(keys, start, get(keys, start) + num_vertices(g) + 1);
- pq.update(start);
-
- // start traversing the graph
- // vertex_descriptor s, t;
- // weight_type w;
- while (!pq.empty())
- { // while PQ \neq {} do
- const vertex_descriptor u = pq.top(); // u = extractmax(PQ)
- /* weight_type w = */ get(keys, u);
- vis.start_vertex(u, g);
- pq.pop(); // vis.start_vertex(u, g);
-
- BGL_FORALL_OUTEDGES_T(u, e, g, Graph)
- { // foreach (u, v) \in E do
- vis.examine_edge(e, g);
-
- const vertex_descriptor v = get(assignments, target(e, g));
-
- if (pq.contains(v))
- { // if v \in PQ then
- put(keys, v,
- get(keys, v)
- + get(weights,
- e)); // increasekey(PQ, v, wA(v) + w(u, v))
- pq.update(v);
- }
- }
-
- typename std::set< vertex_descriptor >::const_iterator
- assignedVertexIt,
- assignedVertexEnd = assignedVertices.end();
- for (assignedVertexIt = assignedVertices.begin();
- assignedVertexIt != assignedVertexEnd; ++assignedVertexIt)
- {
- const vertex_descriptor uPrime = *assignedVertexIt;
-
- if (get(assignments, uPrime) == u)
- {
- BGL_FORALL_OUTEDGES_T(uPrime, e, g, Graph)
- { // foreach (u, v) \in E do
- vis.examine_edge(e, g);
-
- const vertex_descriptor v
- = get(assignments, target(e, g));
-
- if (pq.contains(v))
- { // if v \in PQ then
- put(keys, v,
- get(keys, v)
- + get(weights, e)); // increasekey(PQ, v,
- // wA(v) + w(u, v))
- pq.update(v);
- }
- }
- }
- }
- vis.finish_vertex(u, g);
- }
- }
-} // end namespace detail
-
-template < class Graph, class WeightMap, class MASVisitor,
- class VertexAssignmentMap, class KeyedUpdatablePriorityQueue >
-void maximum_adjacency_search(const Graph& g, WeightMap weights, MASVisitor vis,
- const typename boost::graph_traits< Graph >::vertex_descriptor start,
- VertexAssignmentMap assignments, KeyedUpdatablePriorityQueue pq)
-{
- BOOST_CONCEPT_ASSERT((boost::IncidenceGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((boost::VertexListGraphConcept< Graph >));
- typedef typename boost::graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
- typedef typename boost::graph_traits< Graph >::vertices_size_type
- vertices_size_type;
- typedef
- typename boost::graph_traits< Graph >::edge_descriptor edge_descriptor;
- BOOST_CONCEPT_ASSERT((boost::Convertible<
- typename boost::graph_traits< Graph >::directed_category,
- boost::undirected_tag >));
- BOOST_CONCEPT_ASSERT(
- (boost::ReadablePropertyMapConcept< WeightMap, edge_descriptor >));
- // typedef typename boost::property_traits<WeightMap>::value_type
- // weight_type;
- boost::function_requires< MASVisitorConcept< MASVisitor, Graph > >();
- BOOST_CONCEPT_ASSERT(
- (boost::ReadWritePropertyMapConcept< VertexAssignmentMap,
- vertex_descriptor >));
- BOOST_CONCEPT_ASSERT((boost::Convertible< vertex_descriptor,
- typename boost::property_traits< VertexAssignmentMap >::value_type >));
- BOOST_CONCEPT_ASSERT(
- (boost::KeyedUpdatableQueueConcept< KeyedUpdatablePriorityQueue >));
-
- vertices_size_type n = num_vertices(g);
- if (n < 2)
- throw boost::bad_graph(
- "the input graph must have at least two vertices.");
- else if (!pq.empty())
- throw std::invalid_argument(
- "the max-priority queue must be empty initially.");
-
- detail::maximum_adjacency_search(g, weights, vis, start, assignments, pq);
-}
-
-namespace graph
-{
- namespace detail
- {
- template < typename WeightMap > struct mas_dispatch
- {
- typedef void result_type;
- template < typename Graph, typename ArgPack >
- static result_type apply(const Graph& g,
- // const bgl_named_params<P,T,R>& params,
- const ArgPack& params, WeightMap w)
- {
-
- using namespace boost::graph::keywords;
- typedef typename boost::graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
- typedef typename WeightMap::value_type weight_type;
-
- typedef boost::detail::make_priority_queue_from_arg_pack_gen<
- boost::graph::keywords::tag::max_priority_queue,
- weight_type, vertex_descriptor,
- std::greater< weight_type > >
- default_pq_gen_type;
-
- default_pq_gen_type pq_gen(
- choose_param(get_param(params, boost::distance_zero_t()),
- weight_type(0)));
-
- typename boost::result_of< default_pq_gen_type(
- const Graph&, const ArgPack&) >::type pq
- = pq_gen(g, params);
-
- boost::null_visitor null_vis;
- boost::mas_visitor< boost::null_visitor > default_visitor(
- null_vis);
- vertex_descriptor v = vertex_descriptor();
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::vertex_assignment_map,
- vertex_descriptor >
- map_gen(v);
- typename boost::detail::map_maker< Graph, ArgPack,
- boost::graph::keywords::tag::vertex_assignment_map,
- vertex_descriptor >::map_type default_map
- = map_gen(g, params);
- boost::maximum_adjacency_search(g, w,
- params[_visitor | default_visitor],
- params[_root_vertex | *vertices(g).first],
- params[_vertex_assignment_map | default_map], pq);
- }
- };
-
- template <> struct mas_dispatch< boost::param_not_found >
- {
- typedef void result_type;
-
- template < typename Graph, typename ArgPack >
- static result_type apply(
- const Graph& g, const ArgPack& params, param_not_found)
- {
-
- using namespace boost::graph::keywords;
- typedef typename boost::graph_traits< Graph >::vertex_descriptor
- vertex_descriptor;
-
- // get edge_weight_t as the weight type
- typedef typename boost::property_map< Graph, edge_weight_t >
- WeightMap;
- typedef typename WeightMap::value_type weight_type;
-
- typedef boost::detail::make_priority_queue_from_arg_pack_gen<
- boost::graph::keywords::tag::max_priority_queue,
- weight_type, vertex_descriptor,
- std::greater< weight_type > >
- default_pq_gen_type;
-
- default_pq_gen_type pq_gen(
- choose_param(get_param(params, boost::distance_zero_t()),
- weight_type(0)));
-
- typename boost::result_of< default_pq_gen_type(
- const Graph&, const ArgPack&) >::type pq
- = pq_gen(g, params);
-
- boost::null_visitor null_vis;
- boost::mas_visitor< boost::null_visitor > default_visitor(
- null_vis);
- vertex_descriptor v = vertex_descriptor();
- boost::detail::make_property_map_from_arg_pack_gen<
- boost::graph::keywords::tag::vertex_assignment_map,
- vertex_descriptor >
- map_gen(v);
- typename boost::detail::map_maker< Graph, ArgPack,
- boost::graph::keywords::tag::vertex_assignment_map,
- vertex_descriptor >::map_type default_map
- = map_gen(g, params);
- boost::maximum_adjacency_search(g, get(edge_weight, g),
- params[_visitor | default_visitor],
- params[_root_vertex | *vertices(g).first],
- params[_vertex_assignment_map | default_map], pq);
- }
- };
- } // end namespace detail
-} // end namespace graph
-
-// Named parameter interface
-// BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(maximum_adjacency_search, 1)
-template < typename Graph, typename P, typename T, typename R >
-void maximum_adjacency_search(
- const Graph& g, const bgl_named_params< P, T, R >& params)
-{
-
- typedef bgl_named_params< P, T, R > params_type;
- BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
-
- // do the dispatch based on WeightMap
- typedef typename get_param_type< edge_weight_t,
- bgl_named_params< P, T, R > >::type W;
- graph::detail::mas_dispatch< W >::apply(
- g, arg_pack, get_param(params, edge_weight));
-}
-
-namespace graph
-{
- namespace detail
- {
- template < typename Graph > struct maximum_adjacency_search_impl
- {
- typedef void result_type;
-
- template < typename ArgPack >
- void operator()(const Graph& g, const ArgPack& arg_pack) const
- {
- // call the function that does the dispatching
- typedef
- typename get_param_type< edge_weight_t, ArgPack >::type W;
- graph::detail::mas_dispatch< W >::apply(
- g, arg_pack, get_param(arg_pack, edge_weight));
- }
- };
- } // end namespace detail
- BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(maximum_adjacency_search, 1, 5)
-} // end namespace graph
-
-} // end namespace boost
-
-#include <boost/graph/iteration_macros_undef.hpp>
-
-#endif // BOOST_GRAPH_MAXIMUM_ADJACENCY_SEARCH_H
diff --git a/contrib/restricted/boost/graph/include/boost/graph/maximum_weighted_matching.hpp b/contrib/restricted/boost/graph/include/boost/graph/maximum_weighted_matching.hpp
deleted file mode 100644
index 098a9c2aa7..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/maximum_weighted_matching.hpp
+++ /dev/null
@@ -1,1313 +0,0 @@
-//=======================================================================
-// Copyright (c) 2018 Yi Ji
-//
-// 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_MAXIMUM_WEIGHTED_MATCHING_HPP
-#define BOOST_GRAPH_MAXIMUM_WEIGHTED_MATCHING_HPP
-
-#include <algorithm> // for std::iter_swap
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/graph/max_cardinality_matching.hpp>
-
-namespace boost
-{
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-typename property_traits<
- typename property_map< Graph, edge_weight_t >::type >::value_type
-matching_weight_sum(const Graph& g, MateMap mate, VertexIndexMap vm)
-{
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename property_traits< typename property_map< Graph,
- edge_weight_t >::type >::value_type edge_property_t;
-
- edge_property_t weight_sum = 0;
- vertex_iterator_t vi, vi_end;
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t v = *vi;
- if (get(mate, v) != graph_traits< Graph >::null_vertex()
- && get(vm, v) < get(vm, get(mate, v)))
- weight_sum += get(edge_weight, g, edge(v, mate[v], g).first);
- }
- return weight_sum;
-}
-
-template < typename Graph, typename MateMap >
-inline typename property_traits<
- typename property_map< Graph, edge_weight_t >::type >::value_type
-matching_weight_sum(const Graph& g, MateMap mate)
-{
- return matching_weight_sum(g, mate, get(vertex_index, g));
-}
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-class weighted_augmenting_path_finder
-{
-public:
- template < typename T > struct map_vertex_to_
- {
- typedef boost::iterator_property_map<
- typename std::vector< T >::iterator, VertexIndexMap >
- type;
- };
- typedef typename graph::detail::VERTEX_STATE vertex_state_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename std::vector< vertex_descriptor_t >::const_iterator
- vertex_vec_iter_t;
- typedef
- typename graph_traits< Graph >::out_edge_iterator out_edge_iterator_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
- typedef typename property_traits< typename property_map< Graph,
- edge_weight_t >::type >::value_type edge_property_t;
- typedef std::deque< vertex_descriptor_t > vertex_list_t;
- typedef std::vector< edge_descriptor_t > edge_list_t;
- typedef typename map_vertex_to_< vertex_descriptor_t >::type
- vertex_to_vertex_map_t;
- typedef
- typename map_vertex_to_< edge_property_t >::type vertex_to_weight_map_t;
- typedef typename map_vertex_to_< bool >::type vertex_to_bool_map_t;
- typedef typename map_vertex_to_< std::pair< vertex_descriptor_t,
- vertex_descriptor_t > >::type vertex_to_pair_map_t;
- typedef
- typename map_vertex_to_< std::pair< edge_descriptor_t, bool > >::type
- vertex_to_edge_map_t;
- typedef typename map_vertex_to_< vertex_to_edge_map_t >::type
- vertex_pair_to_edge_map_t;
-
- class blossom
- {
- public:
- typedef boost::shared_ptr< blossom > blossom_ptr_t;
- std::vector< blossom_ptr_t > sub_blossoms;
- edge_property_t dual_var;
- blossom_ptr_t father;
-
- blossom() : dual_var(0), father(blossom_ptr_t()) {}
-
- // get the base vertex of a blossom by recursively getting
- // its base sub-blossom, which is always the first one in
- // sub_blossoms because of how we create and maintain blossoms
- virtual vertex_descriptor_t get_base() const
- {
- const blossom* b = this;
- while (!b->sub_blossoms.empty())
- b = b->sub_blossoms[0].get();
- return b->get_base();
- }
-
- // set a sub-blossom as a blossom's base by exchanging it
- // with its first sub-blossom
- void set_base(const blossom_ptr_t& sub)
- {
- for (blossom_iterator_t bi = sub_blossoms.begin();
- bi != sub_blossoms.end(); ++bi)
- {
- if (sub.get() == bi->get())
- {
- std::iter_swap(sub_blossoms.begin(), bi);
- break;
- }
- }
- }
-
- // get all vertices inside recursively
- virtual std::vector< vertex_descriptor_t > vertices() const
- {
- std::vector< vertex_descriptor_t > all_vertices;
- for (typename std::vector< blossom_ptr_t >::const_iterator bi
- = sub_blossoms.begin();
- bi != sub_blossoms.end(); ++bi)
- {
- std::vector< vertex_descriptor_t > some_vertices
- = (*bi)->vertices();
- all_vertices.insert(all_vertices.end(), some_vertices.begin(),
- some_vertices.end());
- }
- return all_vertices;
- }
- };
-
- // a trivial_blossom only has one vertex and no sub-blossom;
- // for each vertex v, in_blossom[v] is the trivial_blossom that contains it
- // directly
- class trivial_blossom : public blossom
- {
- public:
- trivial_blossom(vertex_descriptor_t v) : trivial_vertex(v) {}
- virtual vertex_descriptor_t get_base() const { return trivial_vertex; }
-
- virtual std::vector< vertex_descriptor_t > vertices() const
- {
- std::vector< vertex_descriptor_t > all_vertices;
- all_vertices.push_back(trivial_vertex);
- return all_vertices;
- }
-
- private:
- vertex_descriptor_t trivial_vertex;
- };
-
- typedef boost::shared_ptr< blossom > blossom_ptr_t;
- typedef typename std::vector< blossom_ptr_t >::iterator blossom_iterator_t;
- typedef
- typename map_vertex_to_< blossom_ptr_t >::type vertex_to_blossom_map_t;
-
- weighted_augmenting_path_finder(
- const Graph& arg_g, MateMap arg_mate, VertexIndexMap arg_vm)
- : g(arg_g)
- , vm(arg_vm)
- , null_edge(std::pair< edge_descriptor_t, bool >(
- num_edges(g) == 0 ? edge_descriptor_t() : *edges(g).first, false))
- , mate_vector(num_vertices(g))
- , label_S_vector(num_vertices(g), graph_traits< Graph >::null_vertex())
- , label_T_vector(num_vertices(g), graph_traits< Graph >::null_vertex())
- , outlet_vector(num_vertices(g), graph_traits< Graph >::null_vertex())
- , tau_idx_vector(num_vertices(g), graph_traits< Graph >::null_vertex())
- , dual_var_vector(std::vector< edge_property_t >(
- num_vertices(g), std::numeric_limits< edge_property_t >::min()))
- , pi_vector(std::vector< edge_property_t >(
- num_vertices(g), std::numeric_limits< edge_property_t >::max()))
- , gamma_vector(std::vector< edge_property_t >(
- num_vertices(g), std::numeric_limits< edge_property_t >::max()))
- , tau_vector(std::vector< edge_property_t >(
- num_vertices(g), std::numeric_limits< edge_property_t >::max()))
- , in_blossom_vector(num_vertices(g))
- , old_label_vector(num_vertices(g))
- , critical_edge_vectors(num_vertices(g),
- std::vector< std::pair< edge_descriptor_t, bool > >(
- num_vertices(g), null_edge))
- ,
-
- mate(mate_vector.begin(), vm)
- , label_S(label_S_vector.begin(), vm)
- , label_T(label_T_vector.begin(), vm)
- , outlet(outlet_vector.begin(), vm)
- , tau_idx(tau_idx_vector.begin(), vm)
- , dual_var(dual_var_vector.begin(), vm)
- , pi(pi_vector.begin(), vm)
- , gamma(gamma_vector.begin(), vm)
- , tau(tau_vector.begin(), vm)
- , in_blossom(in_blossom_vector.begin(), vm)
- , old_label(old_label_vector.begin(), vm)
- {
- vertex_iterator_t vi, vi_end;
- edge_iterator_t ei, ei_end;
-
- edge_property_t max_weight
- = std::numeric_limits< edge_property_t >::min();
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- max_weight = std::max(max_weight, get(edge_weight, g, *ei));
-
- typename std::vector<
- std::vector< std::pair< edge_descriptor_t, bool > > >::iterator vei;
-
- for (boost::tie(vi, vi_end) = vertices(g),
- vei = critical_edge_vectors.begin();
- vi != vi_end; ++vi, ++vei)
- {
- vertex_descriptor_t u = *vi;
- mate[u] = get(arg_mate, u);
- dual_var[u] = 2 * max_weight;
- in_blossom[u] = boost::make_shared< trivial_blossom >(u);
- outlet[u] = u;
- critical_edge_vector.push_back(
- vertex_to_edge_map_t(vei->begin(), vm));
- }
-
- critical_edge
- = vertex_pair_to_edge_map_t(critical_edge_vector.begin(), vm);
-
- init();
- }
-
- // return the top blossom where v is contained inside
- blossom_ptr_t in_top_blossom(vertex_descriptor_t v) const
- {
- blossom_ptr_t b = in_blossom[v];
- while (b->father != blossom_ptr_t())
- b = b->father;
- return b;
- }
-
- // check if vertex v is in blossom b
- bool is_in_blossom(blossom_ptr_t b, vertex_descriptor_t v) const
- {
- if (v == graph_traits< Graph >::null_vertex())
- return false;
- blossom_ptr_t vb = in_blossom[v]->father;
- while (vb != blossom_ptr_t())
- {
- if (vb.get() == b.get())
- return true;
- vb = vb->father;
- }
- return false;
- }
-
- // return the base vertex of the top blossom that contains v
- inline vertex_descriptor_t base_vertex(vertex_descriptor_t v) const
- {
- return in_top_blossom(v)->get_base();
- }
-
- // add an existed top blossom of base vertex v into new top
- // blossom b as its sub-blossom
- void add_sub_blossom(blossom_ptr_t b, vertex_descriptor_t v)
- {
- blossom_ptr_t sub = in_top_blossom(v);
- sub->father = b;
- b->sub_blossoms.push_back(sub);
- if (sub->sub_blossoms.empty())
- return;
- for (blossom_iterator_t bi = top_blossoms.begin();
- bi != top_blossoms.end(); ++bi)
- {
- if (bi->get() == sub.get())
- {
- top_blossoms.erase(bi);
- break;
- }
- }
- }
-
- // when a top blossom is created or its base vertex getting an S-label,
- // add all edges incident to this blossom into even_edges
- void bloom(blossom_ptr_t b)
- {
- std::vector< vertex_descriptor_t > vertices_of_b = b->vertices();
- vertex_vec_iter_t vi;
- for (vi = vertices_of_b.begin(); vi != vertices_of_b.end(); ++vi)
- {
- out_edge_iterator_t oei, oei_end;
- for (boost::tie(oei, oei_end) = out_edges(*vi, g); oei != oei_end;
- ++oei)
- {
- if (target(*oei, g) != *vi && mate[*vi] != target(*oei, g))
- even_edges.push_back(*oei);
- }
- }
- }
-
- // assigning a T-label to a non S-vertex, along with outlet and updating pi
- // value if updated pi[v] equals zero, augment the matching from its mate
- // vertex
- void put_T_label(vertex_descriptor_t v, vertex_descriptor_t T_label,
- vertex_descriptor_t outlet_v, edge_property_t pi_v)
- {
- if (label_S[v] != graph_traits< Graph >::null_vertex())
- return;
-
- label_T[v] = T_label;
- outlet[v] = outlet_v;
- pi[v] = pi_v;
-
- vertex_descriptor_t v_mate = mate[v];
- if (pi[v] == 0)
- {
- label_T[v_mate] = graph_traits< Graph >::null_vertex();
- label_S[v_mate] = v;
- bloom(in_top_blossom(v_mate));
- }
- }
-
- // get the missing T-label for a to-be-expanded base vertex
- // the missing T-label is the last vertex of the path from outlet[v] to v
- std::pair< vertex_descriptor_t, vertex_descriptor_t > missing_label(
- vertex_descriptor_t b_base)
- {
- vertex_descriptor_t missing_outlet = outlet[b_base];
-
- if (outlet[b_base] == b_base)
- return std::make_pair(
- graph_traits< Graph >::null_vertex(), missing_outlet);
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- old_label[*vi] = std::make_pair(label_T[*vi], outlet[*vi]);
-
- std::pair< vertex_descriptor_t, vertex_state_t > child(
- outlet[b_base], graph::detail::V_EVEN);
- blossom_ptr_t b = in_blossom[child.first];
- for (; b->father->father != blossom_ptr_t(); b = b->father)
- ;
- child.first = b->get_base();
-
- if (child.first == b_base)
- return std::make_pair(
- graph_traits< Graph >::null_vertex(), missing_outlet);
-
- while (true)
- {
- std::pair< vertex_descriptor_t, vertex_state_t > child_parent
- = parent(child, true);
-
- for (b = in_blossom[child_parent.first];
- b->father->father != blossom_ptr_t(); b = b->father)
- ;
- missing_outlet = child_parent.first;
- child_parent.first = b->get_base();
-
- if (child_parent.first == b_base)
- break;
- else
- child = child_parent;
- }
- return std::make_pair(child.first, missing_outlet);
- }
-
- // expand a top blossom, put all its non-trivial sub-blossoms into
- // top_blossoms
- blossom_iterator_t expand_blossom(
- blossom_iterator_t bi, std::vector< blossom_ptr_t >& new_ones)
- {
- blossom_ptr_t b = *bi;
- for (blossom_iterator_t i = b->sub_blossoms.begin();
- i != b->sub_blossoms.end(); ++i)
- {
- blossom_ptr_t sub_blossom = *i;
- vertex_descriptor_t sub_base = sub_blossom->get_base();
- label_S[sub_base] = label_T[sub_base]
- = graph_traits< Graph >::null_vertex();
- outlet[sub_base] = sub_base;
- sub_blossom->father = blossom_ptr_t();
- // new top blossoms cannot be pushed back into top_blossoms
- // immediately, because push_back() may cause reallocation and then
- // invalid iterators
- if (!sub_blossom->sub_blossoms.empty())
- new_ones.push_back(sub_blossom);
- }
- return top_blossoms.erase(bi);
- }
-
- // when expanding a T-blossom with base v, it requires more operations:
- // supply the missing T-labels for new base vertices by picking the minimum
- // tau from vertices of each corresponding new top-blossoms; when label_T[v]
- // is null or we have a smaller tau from missing_label(v), replace T-label
- // and outlet of v (but don't bloom v)
- blossom_iterator_t expand_T_blossom(
- blossom_iterator_t bi, std::vector< blossom_ptr_t >& new_ones)
- {
- blossom_ptr_t b = *bi;
-
- vertex_descriptor_t b_base = b->get_base();
- std::pair< vertex_descriptor_t, vertex_descriptor_t > T_and_outlet
- = missing_label(b_base);
-
- blossom_iterator_t next_bi = expand_blossom(bi, new_ones);
-
- for (blossom_iterator_t i = b->sub_blossoms.begin();
- i != b->sub_blossoms.end(); ++i)
- {
- blossom_ptr_t sub_blossom = *i;
- vertex_descriptor_t sub_base = sub_blossom->get_base();
- vertex_descriptor_t min_tau_v
- = graph_traits< Graph >::null_vertex();
- edge_property_t min_tau
- = std::numeric_limits< edge_property_t >::max();
-
- std::vector< vertex_descriptor_t > sub_vertices
- = sub_blossom->vertices();
- for (vertex_vec_iter_t v = sub_vertices.begin();
- v != sub_vertices.end(); ++v)
- {
- if (tau[*v] < min_tau)
- {
- min_tau = tau[*v];
- min_tau_v = *v;
- }
- }
-
- if (min_tau < std::numeric_limits< edge_property_t >::max())
- put_T_label(
- sub_base, tau_idx[min_tau_v], min_tau_v, tau[min_tau_v]);
- }
-
- if (label_T[b_base] == graph_traits< Graph >::null_vertex()
- || tau[old_label[b_base].second] < pi[b_base])
- boost::tie(label_T[b_base], outlet[b_base]) = T_and_outlet;
-
- return next_bi;
- }
-
- // when vertices v and w are matched to each other by augmenting,
- // we must set v/w as base vertex of any blossom who contains v/w and
- // is a sub-blossom of their lowest (smallest) common blossom
- void adjust_blossom(vertex_descriptor_t v, vertex_descriptor_t w)
- {
- blossom_ptr_t vb = in_blossom[v], wb = in_blossom[w],
- lowest_common_blossom;
- std::vector< blossom_ptr_t > v_ancestors, w_ancestors;
-
- while (vb->father != blossom_ptr_t())
- {
- v_ancestors.push_back(vb->father);
- vb = vb->father;
- }
- while (wb->father != blossom_ptr_t())
- {
- w_ancestors.push_back(wb->father);
- wb = wb->father;
- }
-
- typename std::vector< blossom_ptr_t >::reverse_iterator i, j;
- i = v_ancestors.rbegin();
- j = w_ancestors.rbegin();
- while (i != v_ancestors.rend() && j != w_ancestors.rend()
- && i->get() == j->get())
- {
- lowest_common_blossom = *i;
- ++i;
- ++j;
- }
-
- vb = in_blossom[v];
- wb = in_blossom[w];
- while (vb->father != lowest_common_blossom)
- {
- vb->father->set_base(vb);
- vb = vb->father;
- }
- while (wb->father != lowest_common_blossom)
- {
- wb->father->set_base(wb);
- wb = wb->father;
- }
- }
-
- // every edge weight is multiplied by 4 to ensure integer weights
- // throughout the algorithm if all input weights are integers
- inline edge_property_t slack(const edge_descriptor_t& e) const
- {
- vertex_descriptor_t v, w;
- v = source(e, g);
- w = target(e, g);
- return dual_var[v] + dual_var[w] - 4 * get(edge_weight, g, e);
- }
-
- // backtrace one step on vertex v along the augmenting path
- // by its labels and its vertex state;
- // boolean parameter "use_old" means whether we are updating labels,
- // if we are, then we use old labels to backtrace and also we
- // don't jump to its base vertex when we reach an odd vertex
- std::pair< vertex_descriptor_t, vertex_state_t > parent(
- std::pair< vertex_descriptor_t, vertex_state_t > v,
- bool use_old = false) const
- {
- if (v.second == graph::detail::V_EVEN)
- {
- // a paranoid check: label_S shoule be the same as mate in
- // backtracing
- if (label_S[v.first] == graph_traits< Graph >::null_vertex())
- label_S[v.first] = mate[v.first];
- return std::make_pair(label_S[v.first], graph::detail::V_ODD);
- }
- else if (v.second == graph::detail::V_ODD)
- {
- vertex_descriptor_t w = use_old ? old_label[v.first].first
- : base_vertex(label_T[v.first]);
- return std::make_pair(w, graph::detail::V_EVEN);
- }
- return std::make_pair(v.first, graph::detail::V_UNREACHED);
- }
-
- // backtrace from vertices v and w to their free (unmatched) ancesters,
- // return the nearest common ancestor (null_vertex if none) of v and w
- vertex_descriptor_t nearest_common_ancestor(vertex_descriptor_t v,
- vertex_descriptor_t w, vertex_descriptor_t& v_free_ancestor,
- vertex_descriptor_t& w_free_ancestor) const
- {
- std::pair< vertex_descriptor_t, vertex_state_t > v_up(
- v, graph::detail::V_EVEN);
- std::pair< vertex_descriptor_t, vertex_state_t > w_up(
- w, graph::detail::V_EVEN);
- vertex_descriptor_t nca;
- nca = w_free_ancestor = v_free_ancestor
- = graph_traits< Graph >::null_vertex();
-
- std::vector< bool > ancestor_of_w_vector(num_vertices(g), false);
- std::vector< bool > ancestor_of_v_vector(num_vertices(g), false);
- vertex_to_bool_map_t ancestor_of_w(ancestor_of_w_vector.begin(), vm);
- vertex_to_bool_map_t ancestor_of_v(ancestor_of_v_vector.begin(), vm);
-
- while (nca == graph_traits< Graph >::null_vertex()
- && (v_free_ancestor == graph_traits< Graph >::null_vertex()
- || w_free_ancestor == graph_traits< Graph >::null_vertex()))
- {
- ancestor_of_w[w_up.first] = true;
- ancestor_of_v[v_up.first] = true;
-
- if (w_free_ancestor == graph_traits< Graph >::null_vertex())
- w_up = parent(w_up);
- if (v_free_ancestor == graph_traits< Graph >::null_vertex())
- v_up = parent(v_up);
-
- if (mate[v_up.first] == graph_traits< Graph >::null_vertex())
- v_free_ancestor = v_up.first;
- if (mate[w_up.first] == graph_traits< Graph >::null_vertex())
- w_free_ancestor = w_up.first;
-
- if (ancestor_of_w[v_up.first] == true || v_up.first == w_up.first)
- nca = v_up.first;
- else if (ancestor_of_v[w_up.first] == true)
- nca = w_up.first;
- else if (v_free_ancestor == w_free_ancestor
- && v_free_ancestor != graph_traits< Graph >::null_vertex())
- nca = v_up.first;
- }
-
- return nca;
- }
-
- // when a new top blossom b is created by connecting (v, w), we add
- // sub-blossoms into b along backtracing from v_prime and w_prime to
- // stop_vertex (the base vertex); also, we set labels and outlet for each
- // base vertex we pass by
- void make_blossom(blossom_ptr_t b, vertex_descriptor_t w_prime,
- vertex_descriptor_t v_prime, vertex_descriptor_t stop_vertex)
- {
- std::pair< vertex_descriptor_t, vertex_state_t > u(
- v_prime, graph::detail::V_ODD);
- std::pair< vertex_descriptor_t, vertex_state_t > u_up(
- w_prime, graph::detail::V_EVEN);
-
- for (; u_up.first != stop_vertex; u = u_up, u_up = parent(u))
- {
- if (u_up.second == graph::detail::V_EVEN)
- {
- if (!in_top_blossom(u_up.first)->sub_blossoms.empty())
- outlet[u_up.first] = label_T[u.first];
- label_T[u_up.first] = outlet[u.first];
- }
- else if (u_up.second == graph::detail::V_ODD)
- label_S[u_up.first] = u.first;
-
- add_sub_blossom(b, u_up.first);
- }
- }
-
- // the design of recursively expanding augmenting path in
- // (reversed_)retrieve_augmenting_path functions is inspired by same
- // functions in max_cardinality_matching.hpp; except that in weighted
- // matching, we use "outlet" vertices instead of "bridge" vertex pairs: if
- // blossom b is the smallest non-trivial blossom that contains its base
- // vertex v, then v and outlet[v] are where augmenting path enters and
- // leaves b
- void retrieve_augmenting_path(
- vertex_descriptor_t v, vertex_descriptor_t w, vertex_state_t v_state)
- {
- if (v == w)
- aug_path.push_back(v);
- else if (v_state == graph::detail::V_EVEN)
- {
- aug_path.push_back(v);
- retrieve_augmenting_path(label_S[v], w, graph::detail::V_ODD);
- }
- else if (v_state == graph::detail::V_ODD)
- {
- if (outlet[v] == v)
- aug_path.push_back(v);
- else
- reversed_retrieve_augmenting_path(
- outlet[v], v, graph::detail::V_EVEN);
- retrieve_augmenting_path(label_T[v], w, graph::detail::V_EVEN);
- }
- }
-
- void reversed_retrieve_augmenting_path(
- vertex_descriptor_t v, vertex_descriptor_t w, vertex_state_t v_state)
- {
- if (v == w)
- aug_path.push_back(v);
- else if (v_state == graph::detail::V_EVEN)
- {
- reversed_retrieve_augmenting_path(
- label_S[v], w, graph::detail::V_ODD);
- aug_path.push_back(v);
- }
- else if (v_state == graph::detail::V_ODD)
- {
- reversed_retrieve_augmenting_path(
- label_T[v], w, graph::detail::V_EVEN);
- if (outlet[v] != v)
- retrieve_augmenting_path(outlet[v], v, graph::detail::V_EVEN);
- else
- aug_path.push_back(v);
- }
- }
-
- // correct labels for vertices in the augmenting path
- void relabel(vertex_descriptor_t v)
- {
- blossom_ptr_t b = in_blossom[v]->father;
-
- if (!is_in_blossom(b, mate[v]))
- { // if v is a new base vertex
- std::pair< vertex_descriptor_t, vertex_state_t > u(
- v, graph::detail::V_EVEN);
- while (label_S[u.first] != u.first
- && is_in_blossom(b, label_S[u.first]))
- u = parent(u, true);
-
- vertex_descriptor_t old_base = u.first;
- if (label_S[old_base] != old_base)
- { // if old base is not exposed
- label_T[v] = label_S[old_base];
- outlet[v] = old_base;
- }
- else
- { // if old base is exposed then new label_T[v] is not in b,
- // we must (i) make b2 the smallest blossom containing v but not
- // as base vertex (ii) backtrace from b2's new base vertex to b
- label_T[v] = graph_traits< Graph >::null_vertex();
- for (b = b->father; b != blossom_ptr_t() && b->get_base() == v;
- b = b->father)
- ;
- if (b != blossom_ptr_t())
- {
- u = std::make_pair(b->get_base(), graph::detail::V_ODD);
- while (!is_in_blossom(
- in_blossom[v]->father, old_label[u.first].first))
- u = parent(u, true);
- label_T[v] = u.first;
- outlet[v] = old_label[u.first].first;
- }
- }
- }
- else if (label_S[v] == v || !is_in_blossom(b, label_S[v]))
- { // if v is an old base vertex
- // let u be the new base vertex; backtrace from u's old T-label
- std::pair< vertex_descriptor_t, vertex_state_t > u(
- b->get_base(), graph::detail::V_ODD);
- while (
- old_label[u.first].first != graph_traits< Graph >::null_vertex()
- && old_label[u.first].first != v)
- u = parent(u, true);
- label_T[v] = old_label[u.first].second;
- outlet[v] = v;
- }
- else // if v is neither a new nor an old base vertex
- label_T[v] = label_S[v];
- }
-
- void augmenting(vertex_descriptor_t v, vertex_descriptor_t v_free_ancestor,
- vertex_descriptor_t w, vertex_descriptor_t w_free_ancestor)
- {
- vertex_iterator_t vi, vi_end;
-
- // retrieve the augmenting path and put it in aug_path
- reversed_retrieve_augmenting_path(
- v, v_free_ancestor, graph::detail::V_EVEN);
- retrieve_augmenting_path(w, w_free_ancestor, graph::detail::V_EVEN);
-
- // augment the matching along aug_path
- vertex_descriptor_t a, b;
- vertex_list_t reversed_aug_path;
- while (!aug_path.empty())
- {
- a = aug_path.front();
- aug_path.pop_front();
- reversed_aug_path.push_back(a);
- b = aug_path.front();
- aug_path.pop_front();
- reversed_aug_path.push_back(b);
-
- mate[a] = b;
- mate[b] = a;
-
- // reset base vertex for every blossom in augment path
- adjust_blossom(a, b);
- }
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- old_label[*vi] = std::make_pair(label_T[*vi], outlet[*vi]);
-
- // correct labels for in-blossom vertices along aug_path
- while (!reversed_aug_path.empty())
- {
- a = reversed_aug_path.front();
- reversed_aug_path.pop_front();
-
- if (in_blossom[a]->father != blossom_ptr_t())
- relabel(a);
- }
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t u = *vi;
- if (mate[u] != graph_traits< Graph >::null_vertex())
- label_S[u] = mate[u];
- }
-
- // expand blossoms with zero dual variables
- std::vector< blossom_ptr_t > new_top_blossoms;
- for (blossom_iterator_t bi = top_blossoms.begin();
- bi != top_blossoms.end();)
- {
- if ((*bi)->dual_var <= 0)
- bi = expand_blossom(bi, new_top_blossoms);
- else
- ++bi;
- }
- top_blossoms.insert(top_blossoms.end(), new_top_blossoms.begin(),
- new_top_blossoms.end());
- init();
- }
-
- // create a new blossom and set labels for vertices inside
- void blossoming(vertex_descriptor_t v, vertex_descriptor_t v_prime,
- vertex_descriptor_t w, vertex_descriptor_t w_prime,
- vertex_descriptor_t nca)
- {
- vertex_iterator_t vi, vi_end;
-
- std::vector< bool > is_old_base_vector(num_vertices(g));
- vertex_to_bool_map_t is_old_base(is_old_base_vector.begin(), vm);
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- if (*vi == base_vertex(*vi))
- is_old_base[*vi] = true;
- }
-
- blossom_ptr_t b = boost::make_shared< blossom >();
- add_sub_blossom(b, nca);
-
- label_T[w_prime] = v;
- label_T[v_prime] = w;
- outlet[w_prime] = w;
- outlet[v_prime] = v;
-
- make_blossom(b, w_prime, v_prime, nca);
- make_blossom(b, v_prime, w_prime, nca);
-
- label_T[nca] = graph_traits< Graph >::null_vertex();
- outlet[nca] = nca;
-
- top_blossoms.push_back(b);
- bloom(b);
-
- // set gamma[b_base] = min_slack{critical_edge(b_base, other_base)}
- // where each critical edge is updated before, by
- // argmin{slack(old_bases_in_b, other_base)};
- vertex_vec_iter_t i, j;
- std::vector< vertex_descriptor_t > b_vertices = b->vertices(),
- old_base_in_b, other_base;
- vertex_descriptor_t b_base = b->get_base();
- for (i = b_vertices.begin(); i != b_vertices.end(); ++i)
- {
- if (is_old_base[*i])
- old_base_in_b.push_back(*i);
- }
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- if (*vi != b_base && *vi == base_vertex(*vi))
- other_base.push_back(*vi);
- }
- for (i = other_base.begin(); i != other_base.end(); ++i)
- {
- edge_property_t min_slack
- = std::numeric_limits< edge_property_t >::max();
- std::pair< edge_descriptor_t, bool > b_vi = null_edge;
- for (j = old_base_in_b.begin(); j != old_base_in_b.end(); ++j)
- {
- if (critical_edge[*j][*i] != null_edge
- && min_slack > slack(critical_edge[*j][*i].first))
- {
- min_slack = slack(critical_edge[*j][*i].first);
- b_vi = critical_edge[*j][*i];
- }
- }
- critical_edge[b_base][*i] = critical_edge[*i][b_base] = b_vi;
- }
- gamma[b_base] = std::numeric_limits< edge_property_t >::max();
- for (i = other_base.begin(); i != other_base.end(); ++i)
- {
- if (critical_edge[b_base][*i] != null_edge)
- gamma[b_base] = std::min(
- gamma[b_base], slack(critical_edge[b_base][*i].first));
- }
- }
-
- void init()
- {
- even_edges.clear();
-
- vertex_iterator_t vi, vi_end;
- typename std::vector<
- std::vector< std::pair< edge_descriptor_t, bool > > >::iterator vei;
-
- for (boost::tie(vi, vi_end) = vertices(g),
- vei = critical_edge_vectors.begin();
- vi != vi_end; ++vi, ++vei)
- {
- vertex_descriptor_t u = *vi;
- out_edge_iterator_t ei, ei_end;
-
- gamma[u] = tau[u] = pi[u]
- = std::numeric_limits< edge_property_t >::max();
- std::fill(vei->begin(), vei->end(), null_edge);
-
- if (base_vertex(u) != u)
- continue;
-
- label_S[u] = label_T[u] = graph_traits< Graph >::null_vertex();
- outlet[u] = u;
-
- if (mate[u] == graph_traits< Graph >::null_vertex())
- {
- label_S[u] = u;
- bloom(in_top_blossom(u));
- }
- }
- }
-
- bool augment_matching()
- {
- vertex_descriptor_t v, w, w_free_ancestor, v_free_ancestor;
- v = w = w_free_ancestor = v_free_ancestor
- = graph_traits< Graph >::null_vertex();
- bool found_alternating_path = false;
-
- // note that we only use edges of zero slack value for augmenting
- while (!even_edges.empty() && !found_alternating_path)
- {
- // search for augmenting paths depth-first
- edge_descriptor_t current_edge = even_edges.back();
- even_edges.pop_back();
-
- v = source(current_edge, g);
- w = target(current_edge, g);
-
- vertex_descriptor_t v_prime = base_vertex(v);
- vertex_descriptor_t w_prime = base_vertex(w);
-
- // w_prime == v_prime implies that we get an edge that has been
- // shrunk into a blossom
- if (v_prime == w_prime)
- continue;
-
- // a paranoid check
- if (label_S[v_prime] == graph_traits< Graph >::null_vertex())
- {
- std::swap(v_prime, w_prime);
- std::swap(v, w);
- }
-
- // w_prime may be unlabeled or have a T-label; replace the existed
- // T-label if the edge slack is smaller than current pi[w_prime] and
- // update it. Note that a T-label is "deserved" only when pi equals
- // zero. also update tau and tau_idx so that tau_idx becomes T-label
- // when a T-blossom is expanded
- if (label_S[w_prime] == graph_traits< Graph >::null_vertex())
- {
- if (slack(current_edge) < pi[w_prime])
- put_T_label(w_prime, v, w, slack(current_edge));
- if (slack(current_edge) < tau[w])
- {
- if (in_blossom[w]->father == blossom_ptr_t()
- || label_T[w_prime] == v
- || label_T[w_prime]
- == graph_traits< Graph >::null_vertex()
- || nearest_common_ancestor(v_prime, label_T[w_prime],
- v_free_ancestor, w_free_ancestor)
- == graph_traits< Graph >::null_vertex())
- {
- tau[w] = slack(current_edge);
- tau_idx[w] = v;
- }
- }
- }
-
- else
- {
- if (slack(current_edge) > 0)
- {
- // update gamma and critical_edges when we have a smaller
- // edge slack
- gamma[v_prime]
- = std::min(gamma[v_prime], slack(current_edge));
- gamma[w_prime]
- = std::min(gamma[w_prime], slack(current_edge));
- if (critical_edge[v_prime][w_prime] == null_edge
- || slack(critical_edge[v_prime][w_prime].first)
- > slack(current_edge))
- {
- critical_edge[v_prime][w_prime]
- = std::pair< edge_descriptor_t, bool >(
- current_edge, true);
- critical_edge[w_prime][v_prime]
- = std::pair< edge_descriptor_t, bool >(
- current_edge, true);
- }
- continue;
- }
- else if (slack(current_edge) == 0)
- {
- // if nca is null_vertex then we have an augmenting path;
- // otherwise we have a new top blossom with nca as its base
- // vertex
- vertex_descriptor_t nca = nearest_common_ancestor(
- v_prime, w_prime, v_free_ancestor, w_free_ancestor);
-
- if (nca == graph_traits< Graph >::null_vertex())
- found_alternating_path
- = true; // to break out of the loop
- else
- blossoming(v, v_prime, w, w_prime, nca);
- }
- }
- }
-
- if (!found_alternating_path)
- return false;
-
- augmenting(v, v_free_ancestor, w, w_free_ancestor);
- return true;
- }
-
- // slack the vertex and blossom dual variables when there is no augmenting
- // path found according to the primal-dual method
- bool adjust_dual()
- {
- edge_property_t delta1, delta2, delta3, delta4, delta;
- delta1 = delta2 = delta3 = delta4
- = std::numeric_limits< edge_property_t >::max();
-
- vertex_iterator_t vi, vi_end;
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- delta1 = std::min(delta1, dual_var[*vi]);
- delta4 = pi[*vi] > 0 ? std::min(delta4, pi[*vi]) : delta4;
- if (*vi == base_vertex(*vi))
- delta3 = std::min(delta3, gamma[*vi] / 2);
- }
-
- for (blossom_iterator_t bi = top_blossoms.begin();
- bi != top_blossoms.end(); ++bi)
- {
- vertex_descriptor_t b_base = (*bi)->get_base();
- if (label_T[b_base] != graph_traits< Graph >::null_vertex()
- && pi[b_base] == 0)
- delta2 = std::min(delta2, (*bi)->dual_var / 2);
- }
-
- delta = std::min(std::min(delta1, delta2), std::min(delta3, delta4));
-
- // start updating dual variables, note that the order is important
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t v = *vi, v_prime = base_vertex(v);
-
- if (label_S[v_prime] != graph_traits< Graph >::null_vertex())
- dual_var[v] -= delta;
- else if (label_T[v_prime] != graph_traits< Graph >::null_vertex()
- && pi[v_prime] == 0)
- dual_var[v] += delta;
-
- if (v == v_prime)
- gamma[v] -= 2 * delta;
- }
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t v_prime = base_vertex(*vi);
- if (pi[v_prime] > 0)
- tau[*vi] -= delta;
- }
-
- for (blossom_iterator_t bi = top_blossoms.begin();
- bi != top_blossoms.end(); ++bi)
- {
- vertex_descriptor_t b_base = (*bi)->get_base();
- if (label_T[b_base] != graph_traits< Graph >::null_vertex()
- && pi[b_base] == 0)
- (*bi)->dual_var -= 2 * delta;
- if (label_S[b_base] != graph_traits< Graph >::null_vertex())
- (*bi)->dual_var += 2 * delta;
- }
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_descriptor_t v = *vi;
- if (pi[v] > 0)
- pi[v] -= delta;
-
- // when some T-vertices have zero pi value, bloom their mates so
- // that matching can be further augmented
- if (label_T[v] != graph_traits< Graph >::null_vertex()
- && pi[v] == 0)
- put_T_label(v, label_T[v], outlet[v], pi[v]);
- }
-
- // optimal solution reached, halt
- if (delta == delta1)
- return false;
-
- // expand odd blossoms with zero dual variables and zero pi value of
- // their base vertices
- if (delta == delta2 && delta != delta3)
- {
- std::vector< blossom_ptr_t > new_top_blossoms;
- for (blossom_iterator_t bi = top_blossoms.begin();
- bi != top_blossoms.end();)
- {
- const blossom_ptr_t b = *bi;
- vertex_descriptor_t b_base = b->get_base();
- if (b->dual_var == 0
- && label_T[b_base] != graph_traits< Graph >::null_vertex()
- && pi[b_base] == 0)
- bi = expand_T_blossom(bi, new_top_blossoms);
- else
- ++bi;
- }
- top_blossoms.insert(top_blossoms.end(), new_top_blossoms.begin(),
- new_top_blossoms.end());
- }
-
- while (true)
- {
- // find a zero-slack critical edge (v, w) of zero gamma values
- std::pair< edge_descriptor_t, bool > best_edge = null_edge;
- std::vector< vertex_descriptor_t > base_nodes;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- if (*vi == base_vertex(*vi))
- base_nodes.push_back(*vi);
- }
- for (vertex_vec_iter_t i = base_nodes.begin();
- i != base_nodes.end(); ++i)
- {
- if (gamma[*i] == 0)
- {
- for (vertex_vec_iter_t j = base_nodes.begin();
- j != base_nodes.end(); ++j)
- {
- if (critical_edge[*i][*j] != null_edge
- && slack(critical_edge[*i][*j].first) == 0)
- best_edge = critical_edge[*i][*j];
- }
- }
- }
-
- // if not found, continue finding other augment matching
- if (best_edge == null_edge)
- {
- bool augmented = augment_matching();
- return augmented || delta != delta1;
- }
- // if found, determine either augmenting or blossoming
- vertex_descriptor_t v = source(best_edge.first, g),
- w = target(best_edge.first, g);
- vertex_descriptor_t v_prime = base_vertex(v),
- w_prime = base_vertex(w), v_free_ancestor,
- w_free_ancestor;
- vertex_descriptor_t nca = nearest_common_ancestor(
- v_prime, w_prime, v_free_ancestor, w_free_ancestor);
- if (nca == graph_traits< Graph >::null_vertex())
- {
- augmenting(v, v_free_ancestor, w, w_free_ancestor);
- return true;
- }
- else
- blossoming(v, v_prime, w, w_prime, nca);
- }
-
- return false;
- }
-
- template < typename PropertyMap > void get_current_matching(PropertyMap pm)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(pm, *vi, mate[*vi]);
- }
-
-private:
- const Graph& g;
- VertexIndexMap vm;
- const std::pair< edge_descriptor_t, bool > null_edge;
-
- // storage for the property maps below
- std::vector< vertex_descriptor_t > mate_vector;
- std::vector< vertex_descriptor_t > label_S_vector, label_T_vector;
- std::vector< vertex_descriptor_t > outlet_vector;
- std::vector< vertex_descriptor_t > tau_idx_vector;
- std::vector< edge_property_t > dual_var_vector;
- std::vector< edge_property_t > pi_vector, gamma_vector, tau_vector;
- std::vector< blossom_ptr_t > in_blossom_vector;
- std::vector< std::pair< vertex_descriptor_t, vertex_descriptor_t > >
- old_label_vector;
- std::vector< vertex_to_edge_map_t > critical_edge_vector;
- std::vector< std::vector< std::pair< edge_descriptor_t, bool > > >
- critical_edge_vectors;
-
- // iterator property maps
- vertex_to_vertex_map_t mate;
- vertex_to_vertex_map_t label_S; // v has an S-label -> v can be an even
- // vertex, label_S[v] is its mate
- vertex_to_vertex_map_t
- label_T; // v has a T-label -> v can be an odd vertex, label_T[v] is its
- // predecessor in aug_path
- vertex_to_vertex_map_t outlet;
- vertex_to_vertex_map_t tau_idx;
- vertex_to_weight_map_t dual_var;
- vertex_to_weight_map_t pi, gamma, tau;
- vertex_to_blossom_map_t
- in_blossom; // map any vertex v to the trivial blossom containing v
- vertex_to_pair_map_t old_label; // <old T-label, old outlet> before
- // relabeling or expanding T-blossoms
- vertex_pair_to_edge_map_t
- critical_edge; // an not matched edge (v, w) is critical if v and w
- // belongs to different S-blossoms
-
- vertex_list_t aug_path;
- edge_list_t even_edges;
- std::vector< blossom_ptr_t > top_blossoms;
-};
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-void maximum_weighted_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
-{
- empty_matching< Graph, MateMap >::find_matching(g, mate);
- weighted_augmenting_path_finder< Graph, MateMap, VertexIndexMap > augmentor(
- g, mate, vm);
-
- // can have |V| times augmenting at most
- for (std::size_t t = 0; t < num_vertices(g); ++t)
- {
- bool augmented = false;
- while (!augmented)
- {
- augmented = augmentor.augment_matching();
- if (!augmented)
- {
- // halt if adjusting dual variables can't bring potential
- // augment
- if (!augmentor.adjust_dual())
- break;
- }
- }
- if (!augmented)
- break;
- }
-
- augmentor.get_current_matching(mate);
-}
-
-template < typename Graph, typename MateMap >
-inline void maximum_weighted_matching(const Graph& g, MateMap mate)
-{
- maximum_weighted_matching(g, mate, get(vertex_index, g));
-}
-
-// brute-force matcher searches all possible combinations of matched edges to
-// get the maximum weighted matching which can be used for testing on small
-// graphs (within dozens vertices)
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-class brute_force_matching
-{
-public:
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef
- typename std::vector< vertex_descriptor_t >::iterator vertex_vec_iter_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
- typedef boost::iterator_property_map< vertex_vec_iter_t, VertexIndexMap >
- vertex_to_vertex_map_t;
-
- brute_force_matching(
- const Graph& arg_g, MateMap arg_mate, VertexIndexMap arg_vm)
- : g(arg_g)
- , vm(arg_vm)
- , mate_vector(num_vertices(g))
- , best_mate_vector(num_vertices(g))
- , mate(mate_vector.begin(), vm)
- , best_mate(best_mate_vector.begin(), vm)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- best_mate[*vi] = mate[*vi] = get(arg_mate, *vi);
- }
-
- template < typename PropertyMap > void find_matching(PropertyMap pm)
- {
- edge_iterator_t ei;
- boost::tie(ei, ei_end) = edges(g);
- select_edge(ei);
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- put(pm, *vi, best_mate[*vi]);
- }
-
-private:
- const Graph& g;
- VertexIndexMap vm;
- std::vector< vertex_descriptor_t > mate_vector, best_mate_vector;
- vertex_to_vertex_map_t mate, best_mate;
- edge_iterator_t ei_end;
-
- void select_edge(edge_iterator_t ei)
- {
- if (ei == ei_end)
- {
- if (matching_weight_sum(g, mate)
- > matching_weight_sum(g, best_mate))
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- best_mate[*vi] = mate[*vi];
- }
- return;
- }
-
- vertex_descriptor_t v, w;
- v = source(*ei, g);
- w = target(*ei, g);
-
- select_edge(++ei);
-
- if (mate[v] == graph_traits< Graph >::null_vertex()
- && mate[w] == graph_traits< Graph >::null_vertex())
- {
- mate[v] = w;
- mate[w] = v;
- select_edge(ei);
- mate[v] = mate[w] = graph_traits< Graph >::null_vertex();
- }
- }
-};
-
-template < typename Graph, typename MateMap, typename VertexIndexMap >
-void brute_force_maximum_weighted_matching(
- const Graph& g, MateMap mate, VertexIndexMap vm)
-{
- empty_matching< Graph, MateMap >::find_matching(g, mate);
- brute_force_matching< Graph, MateMap, VertexIndexMap > brute_force_matcher(
- g, mate, vm);
- brute_force_matcher.find_matching(mate);
-}
-
-template < typename Graph, typename MateMap >
-inline void brute_force_maximum_weighted_matching(const Graph& g, MateMap mate)
-{
- brute_force_maximum_weighted_matching(g, mate, get(vertex_index, g));
-}
-
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/mcgregor_common_subgraphs.hpp b/contrib/restricted/boost/graph/include/boost/graph/mcgregor_common_subgraphs.hpp
deleted file mode 100644
index 9c2b4b980d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/mcgregor_common_subgraphs.hpp
+++ /dev/null
@@ -1,1117 +0,0 @@
-//=======================================================================
-// Copyright 2009 Trustees of Indiana University.
-// Authors: Michael Hansen, Andrew Lumsdaine
-//
-// 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_MCGREGOR_COMMON_SUBGRAPHS_HPP
-#define BOOST_GRAPH_MCGREGOR_COMMON_SUBGRAPHS_HPP
-
-#include <algorithm>
-#include <vector>
-#include <stack>
-
-#include <boost/make_shared.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/filtered_graph.hpp>
-#include <boost/graph/graph_utility.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/property_map/shared_array_property_map.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- // Traits associated with common subgraphs, used mainly to keep a
- // consistent type for the correspondence maps.
- template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond >
- struct mcgregor_common_subgraph_traits
- {
- typedef typename graph_traits< GraphFirst >::vertex_descriptor
- vertex_first_type;
- typedef typename graph_traits< GraphSecond >::vertex_descriptor
- vertex_second_type;
-
- typedef shared_array_property_map< vertex_second_type,
- VertexIndexMapFirst >
- correspondence_map_first_to_second_type;
-
- typedef shared_array_property_map< vertex_first_type,
- VertexIndexMapSecond >
- correspondence_map_second_to_first_type;
- };
-
-} // namespace detail
-
-// ==========================================================================
-
-// Binary function object that returns true if the values for item1
-// in property_map1 and item2 in property_map2 are equivalent.
-template < typename PropertyMapFirst, typename PropertyMapSecond >
-struct property_map_equivalent
-{
-
- property_map_equivalent(const PropertyMapFirst property_map1,
- const PropertyMapSecond property_map2)
- : m_property_map1(property_map1), m_property_map2(property_map2)
- {
- }
-
- template < typename ItemFirst, typename ItemSecond >
- bool operator()(const ItemFirst item1, const ItemSecond item2)
- {
- return (get(m_property_map1, item1) == get(m_property_map2, item2));
- }
-
-private:
- const PropertyMapFirst m_property_map1;
- const PropertyMapSecond m_property_map2;
-};
-
-// Returns a property_map_equivalent object that compares the values
-// of property_map1 and property_map2.
-template < typename PropertyMapFirst, typename PropertyMapSecond >
-property_map_equivalent< PropertyMapFirst, PropertyMapSecond >
-make_property_map_equivalent(
- const PropertyMapFirst property_map1, const PropertyMapSecond property_map2)
-{
-
- return (property_map_equivalent< PropertyMapFirst, PropertyMapSecond >(
- property_map1, property_map2));
-}
-
-// Binary function object that always returns true. Used when
-// vertices or edges are always equivalent (i.e. have no labels).
-struct always_equivalent
-{
-
- template < typename ItemFirst, typename ItemSecond >
- bool operator()(const ItemFirst&, const ItemSecond&)
- {
- return (true);
- }
-};
-
-// ==========================================================================
-
-namespace detail
-{
-
- // Return true if new_vertex1 and new_vertex2 can extend the
- // subgraph represented by correspondence_map_1_to_2 and
- // correspondence_map_2_to_1. The vertices_equivalent and
- // edges_equivalent predicates are used to test vertex and edge
- // equivalency between the two graphs.
- template < typename GraphFirst, typename GraphSecond,
- typename CorrespondenceMapFirstToSecond,
- typename CorrespondenceMapSecondToFirst,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate >
- bool can_extend_graph(const GraphFirst& graph1, const GraphSecond& graph2,
- CorrespondenceMapFirstToSecond correspondence_map_1_to_2,
- CorrespondenceMapSecondToFirst /*correspondence_map_2_to_1*/,
- typename graph_traits< GraphFirst >::vertices_size_type subgraph_size,
- typename graph_traits< GraphFirst >::vertex_descriptor new_vertex1,
- typename graph_traits< GraphSecond >::vertex_descriptor new_vertex2,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs)
- {
- typedef typename graph_traits< GraphSecond >::vertex_descriptor
- VertexSecond;
-
- typedef typename graph_traits< GraphFirst >::edge_descriptor EdgeFirst;
- typedef
- typename graph_traits< GraphSecond >::edge_descriptor EdgeSecond;
-
- // Check vertex equality
- if (!vertices_equivalent(new_vertex1, new_vertex2))
- {
- return (false);
- }
-
- // Vertices match and graph is empty, so we can extend the subgraph
- if (subgraph_size == 0)
- {
- return (true);
- }
-
- bool has_one_edge = false;
-
- // Verify edges with existing sub-graph
- BGL_FORALL_VERTICES_T(existing_vertex1, graph1, GraphFirst)
- {
-
- VertexSecond existing_vertex2
- = get(correspondence_map_1_to_2, existing_vertex1);
-
- // Skip unassociated vertices
- if (existing_vertex2 == graph_traits< GraphSecond >::null_vertex())
- {
- continue;
- }
-
- // NOTE: This will not work with parallel edges, since the
- // first matching edge is always chosen.
- EdgeFirst edge_to_new1, edge_from_new1;
- bool edge_to_new_exists1 = false, edge_from_new_exists1 = false;
-
- EdgeSecond edge_to_new2, edge_from_new2;
- bool edge_to_new_exists2 = false, edge_from_new_exists2 = false;
-
- // Search for edge from existing to new vertex (graph1)
- BGL_FORALL_OUTEDGES_T(existing_vertex1, edge1, graph1, GraphFirst)
- {
- if (target(edge1, graph1) == new_vertex1)
- {
- edge_to_new1 = edge1;
- edge_to_new_exists1 = true;
- break;
- }
- }
-
- // Search for edge from existing to new vertex (graph2)
- BGL_FORALL_OUTEDGES_T(existing_vertex2, edge2, graph2, GraphSecond)
- {
- if (target(edge2, graph2) == new_vertex2)
- {
- edge_to_new2 = edge2;
- edge_to_new_exists2 = true;
- break;
- }
- }
-
- // Make sure edges from existing to new vertices are equivalent
- if ((edge_to_new_exists1 != edge_to_new_exists2)
- || ((edge_to_new_exists1 && edge_to_new_exists2)
- && !edges_equivalent(edge_to_new1, edge_to_new2)))
- {
-
- return (false);
- }
-
- bool is_undirected1 = is_undirected(graph1),
- is_undirected2 = is_undirected(graph2);
-
- if (is_undirected1 && is_undirected2)
- {
-
- // Edge in both graphs exists and both graphs are undirected
- if (edge_to_new_exists1 && edge_to_new_exists2)
- {
- has_one_edge = true;
- }
-
- continue;
- }
- else
- {
-
- if (!is_undirected1)
- {
-
- // Search for edge from new to existing vertex (graph1)
- BGL_FORALL_OUTEDGES_T(
- new_vertex1, edge1, graph1, GraphFirst)
- {
- if (target(edge1, graph1) == existing_vertex1)
- {
- edge_from_new1 = edge1;
- edge_from_new_exists1 = true;
- break;
- }
- }
- }
-
- if (!is_undirected2)
- {
-
- // Search for edge from new to existing vertex (graph2)
- BGL_FORALL_OUTEDGES_T(
- new_vertex2, edge2, graph2, GraphSecond)
- {
- if (target(edge2, graph2) == existing_vertex2)
- {
- edge_from_new2 = edge2;
- edge_from_new_exists2 = true;
- break;
- }
- }
- }
-
- // Make sure edges from new to existing vertices are equivalent
- if ((edge_from_new_exists1 != edge_from_new_exists2)
- || ((edge_from_new_exists1 && edge_from_new_exists2)
- && !edges_equivalent(edge_from_new1, edge_from_new2)))
- {
-
- return (false);
- }
-
- if ((edge_from_new_exists1 && edge_from_new_exists2)
- || (edge_to_new_exists1 && edge_to_new_exists2))
- {
- has_one_edge = true;
- }
-
- } // else
-
- } // BGL_FORALL_VERTICES_T
-
- // Make sure new vertices are connected to the existing subgraph
- if (only_connected_subgraphs && !has_one_edge)
- {
- return (false);
- }
-
- return (true);
- }
-
- // Recursive method that does a depth-first search in the space of
- // potential subgraphs. At each level, every new vertex pair from
- // both graphs is tested to see if it can extend the current
- // subgraph. If so, the subgraph is output to subgraph_callback
- // in the form of two correspondence maps (one for each graph).
- // Returning false from subgraph_callback will terminate the
- // search. Function returns true if the entire search space was
- // explored.
- template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename CorrespondenceMapFirstToSecond,
- typename CorrespondenceMapSecondToFirst, typename VertexStackFirst,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphInternalCallback >
- bool mcgregor_common_subgraphs_internal(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst& vindex_map1,
- const VertexIndexMapSecond& vindex_map2,
- CorrespondenceMapFirstToSecond correspondence_map_1_to_2,
- CorrespondenceMapSecondToFirst correspondence_map_2_to_1,
- VertexStackFirst& vertex_stack1,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs,
- SubGraphInternalCallback subgraph_callback)
- {
- typedef
- typename graph_traits< GraphFirst >::vertex_descriptor VertexFirst;
- typedef typename graph_traits< GraphSecond >::vertex_descriptor
- VertexSecond;
- typedef typename graph_traits< GraphFirst >::vertices_size_type
- VertexSizeFirst;
-
- // Get iterators for vertices from both graphs
- typename graph_traits< GraphFirst >::vertex_iterator vertex1_iter,
- vertex1_end;
-
- typename graph_traits< GraphSecond >::vertex_iterator vertex2_begin,
- vertex2_end, vertex2_iter;
-
- boost::tie(vertex1_iter, vertex1_end) = vertices(graph1);
- boost::tie(vertex2_begin, vertex2_end) = vertices(graph2);
- vertex2_iter = vertex2_begin;
-
- // Iterate until all vertices have been visited
- BGL_FORALL_VERTICES_T(new_vertex1, graph1, GraphFirst)
- {
-
- VertexSecond existing_vertex2
- = get(correspondence_map_1_to_2, new_vertex1);
-
- // Skip already matched vertices in first graph
- if (existing_vertex2 != graph_traits< GraphSecond >::null_vertex())
- {
- continue;
- }
-
- BGL_FORALL_VERTICES_T(new_vertex2, graph2, GraphSecond)
- {
-
- VertexFirst existing_vertex1
- = get(correspondence_map_2_to_1, new_vertex2);
-
- // Skip already matched vertices in second graph
- if (existing_vertex1
- != graph_traits< GraphFirst >::null_vertex())
- {
- continue;
- }
-
- // Check if current sub-graph can be extended with the matched
- // vertex pair
- if (can_extend_graph(graph1, graph2, correspondence_map_1_to_2,
- correspondence_map_2_to_1,
- (VertexSizeFirst)vertex_stack1.size(), new_vertex1,
- new_vertex2, edges_equivalent, vertices_equivalent,
- only_connected_subgraphs))
- {
-
- // Keep track of old graph size for restoring later
- VertexSizeFirst old_graph_size
- = (VertexSizeFirst)vertex_stack1.size(),
- new_graph_size = old_graph_size + 1;
-
- // Extend subgraph
- put(correspondence_map_1_to_2, new_vertex1, new_vertex2);
- put(correspondence_map_2_to_1, new_vertex2, new_vertex1);
- vertex_stack1.push(new_vertex1);
-
- // Returning false from the callback will cancel iteration
- if (!subgraph_callback(correspondence_map_1_to_2,
- correspondence_map_2_to_1, new_graph_size))
- {
- return (false);
- }
-
- // Depth-first search into the state space of possible
- // sub-graphs
- bool continue_iteration
- = mcgregor_common_subgraphs_internal(graph1, graph2,
- vindex_map1, vindex_map2, correspondence_map_1_to_2,
- correspondence_map_2_to_1, vertex_stack1,
- edges_equivalent, vertices_equivalent,
- only_connected_subgraphs, subgraph_callback);
-
- if (!continue_iteration)
- {
- return (false);
- }
-
- // Restore previous state
- if (vertex_stack1.size() > old_graph_size)
- {
-
- VertexFirst stack_vertex1 = vertex_stack1.top();
- VertexSecond stack_vertex2
- = get(correspondence_map_1_to_2, stack_vertex1);
-
- // Contract subgraph
- put(correspondence_map_1_to_2, stack_vertex1,
- graph_traits< GraphSecond >::null_vertex());
-
- put(correspondence_map_2_to_1, stack_vertex2,
- graph_traits< GraphFirst >::null_vertex());
-
- vertex_stack1.pop();
- }
-
- } // if can_extend_graph
-
- } // BGL_FORALL_VERTICES_T (graph2)
-
- } // BGL_FORALL_VERTICES_T (graph1)
-
- return (true);
- }
-
- // Internal method that initializes blank correspondence maps and
- // a vertex stack for use in mcgregor_common_subgraphs_internal.
- template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphInternalCallback >
- inline void mcgregor_common_subgraphs_internal_init(
- const GraphFirst& graph1, const GraphSecond& graph2,
- const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs,
- SubGraphInternalCallback subgraph_callback)
- {
- typedef mcgregor_common_subgraph_traits< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond >
- SubGraphTraits;
-
- typename SubGraphTraits::correspondence_map_first_to_second_type
- correspondence_map_1_to_2(num_vertices(graph1), vindex_map1);
-
- BGL_FORALL_VERTICES_T(vertex1, graph1, GraphFirst)
- {
- put(correspondence_map_1_to_2, vertex1,
- graph_traits< GraphSecond >::null_vertex());
- }
-
- typename SubGraphTraits::correspondence_map_second_to_first_type
- correspondence_map_2_to_1(num_vertices(graph2), vindex_map2);
-
- BGL_FORALL_VERTICES_T(vertex2, graph2, GraphSecond)
- {
- put(correspondence_map_2_to_1, vertex2,
- graph_traits< GraphFirst >::null_vertex());
- }
-
- typedef
- typename graph_traits< GraphFirst >::vertex_descriptor VertexFirst;
-
- std::stack< VertexFirst > vertex_stack1;
-
- mcgregor_common_subgraphs_internal(graph1, graph2, vindex_map1,
- vindex_map2, correspondence_map_1_to_2, correspondence_map_2_to_1,
- vertex_stack1, edges_equivalent, vertices_equivalent,
- only_connected_subgraphs, subgraph_callback);
- }
-
-} // namespace detail
-
-// ==========================================================================
-
-// Enumerates all common subgraphs present in graph1 and graph2.
-// Continues until the search space has been fully explored or false
-// is returned from user_callback.
-template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs, SubGraphCallback user_callback)
-{
-
- detail::mcgregor_common_subgraphs_internal_init(graph1, graph2, vindex_map1,
- vindex_map2, edges_equivalent, vertices_equivalent,
- only_connected_subgraphs, user_callback);
-}
-
-// Variant of mcgregor_common_subgraphs with all default parameters
-template < typename GraphFirst, typename GraphSecond,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback)
-{
-
- detail::mcgregor_common_subgraphs_internal_init(graph1, graph2,
- get(vertex_index, graph1), get(vertex_index, graph2),
- always_equivalent(), always_equivalent(), only_connected_subgraphs,
- user_callback);
-}
-
-// Named parameter variant of mcgregor_common_subgraphs
-template < typename GraphFirst, typename GraphSecond, typename SubGraphCallback,
- typename Param, typename Tag, typename Rest >
-void mcgregor_common_subgraphs(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
-
- detail::mcgregor_common_subgraphs_internal_init(graph1, graph2,
- choose_const_pmap(
- get_param(params, vertex_index1), graph1, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph2, vertex_index),
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()),
- only_connected_subgraphs, user_callback);
-}
-
-// ==========================================================================
-
-namespace detail
-{
-
- // Binary function object that intercepts subgraphs from
- // mcgregor_common_subgraphs_internal and maintains a cache of
- // unique subgraphs. The user callback is invoked for each unique
- // subgraph.
- template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename SubGraphCallback >
- struct unique_subgraph_interceptor
- {
-
- typedef typename graph_traits< GraphFirst >::vertices_size_type
- VertexSizeFirst;
-
- typedef mcgregor_common_subgraph_traits< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond >
- SubGraphTraits;
-
- typedef typename SubGraphTraits::correspondence_map_first_to_second_type
- CachedCorrespondenceMapFirstToSecond;
-
- typedef typename SubGraphTraits::correspondence_map_second_to_first_type
- CachedCorrespondenceMapSecondToFirst;
-
- typedef std::pair< VertexSizeFirst,
- std::pair< CachedCorrespondenceMapFirstToSecond,
- CachedCorrespondenceMapSecondToFirst > >
- SubGraph;
-
- typedef std::vector< SubGraph > SubGraphList;
-
- unique_subgraph_interceptor(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- SubGraphCallback user_callback)
- : m_graph1(graph1)
- , m_graph2(graph2)
- , m_vindex_map1(vindex_map1)
- , m_vindex_map2(vindex_map2)
- , m_subgraphs(make_shared< SubGraphList >())
- , m_user_callback(user_callback)
- {
- }
-
- template < typename CorrespondenceMapFirstToSecond,
- typename CorrespondenceMapSecondToFirst >
- bool operator()(
- CorrespondenceMapFirstToSecond correspondence_map_1_to_2,
- CorrespondenceMapSecondToFirst correspondence_map_2_to_1,
- VertexSizeFirst subgraph_size)
- {
-
- for (typename SubGraphList::const_iterator subgraph_iter
- = m_subgraphs->begin();
- subgraph_iter != m_subgraphs->end(); ++subgraph_iter)
- {
-
- SubGraph subgraph_cached = *subgraph_iter;
-
- // Compare subgraph sizes
- if (subgraph_size != subgraph_cached.first)
- {
- continue;
- }
-
- if (!are_property_maps_different(correspondence_map_1_to_2,
- subgraph_cached.second.first, m_graph1))
- {
-
- // New subgraph is a duplicate
- return (true);
- }
- }
-
- // Subgraph is unique, so make a cached copy
- CachedCorrespondenceMapFirstToSecond new_subgraph_1_to_2
- = CachedCorrespondenceMapFirstToSecond(
- num_vertices(m_graph1), m_vindex_map1);
-
- CachedCorrespondenceMapSecondToFirst new_subgraph_2_to_1
- = CorrespondenceMapSecondToFirst(
- num_vertices(m_graph2), m_vindex_map2);
-
- BGL_FORALL_VERTICES_T(vertex1, m_graph1, GraphFirst)
- {
- put(new_subgraph_1_to_2, vertex1,
- get(correspondence_map_1_to_2, vertex1));
- }
-
- BGL_FORALL_VERTICES_T(vertex2, m_graph2, GraphFirst)
- {
- put(new_subgraph_2_to_1, vertex2,
- get(correspondence_map_2_to_1, vertex2));
- }
-
- m_subgraphs->push_back(std::make_pair(subgraph_size,
- std::make_pair(new_subgraph_1_to_2, new_subgraph_2_to_1)));
-
- return (m_user_callback(correspondence_map_1_to_2,
- correspondence_map_2_to_1, subgraph_size));
- }
-
- private:
- const GraphFirst& m_graph1;
- const GraphFirst& m_graph2;
- const VertexIndexMapFirst m_vindex_map1;
- const VertexIndexMapSecond m_vindex_map2;
- shared_ptr< SubGraphList > m_subgraphs;
- SubGraphCallback m_user_callback;
- };
-
-} // namespace detail
-
-// Enumerates all unique common subgraphs between graph1 and graph2.
-// The user callback is invoked for each unique subgraph as they are
-// discovered.
-template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs_unique(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs, SubGraphCallback user_callback)
-{
- detail::unique_subgraph_interceptor< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond, SubGraphCallback >
- unique_callback(
- graph1, graph2, vindex_map1, vindex_map2, user_callback);
-
- detail::mcgregor_common_subgraphs_internal_init(graph1, graph2, vindex_map1,
- vindex_map2, edges_equivalent, vertices_equivalent,
- only_connected_subgraphs, unique_callback);
-}
-
-// Variant of mcgregor_common_subgraphs_unique with all default
-// parameters.
-template < typename GraphFirst, typename GraphSecond,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs_unique(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback)
-{
- mcgregor_common_subgraphs_unique(graph1, graph2, get(vertex_index, graph1),
- get(vertex_index, graph2), always_equivalent(), always_equivalent(),
- only_connected_subgraphs, user_callback);
-}
-
-// Named parameter variant of mcgregor_common_subgraphs_unique
-template < typename GraphFirst, typename GraphSecond, typename SubGraphCallback,
- typename Param, typename Tag, typename Rest >
-void mcgregor_common_subgraphs_unique(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
- mcgregor_common_subgraphs_unique(graph1, graph2,
- choose_const_pmap(
- get_param(params, vertex_index1), graph1, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph2, vertex_index),
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()),
- only_connected_subgraphs, user_callback);
-}
-
-// ==========================================================================
-
-namespace detail
-{
-
- // Binary function object that intercepts subgraphs from
- // mcgregor_common_subgraphs_internal and maintains a cache of the
- // largest subgraphs.
- template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename SubGraphCallback >
- struct maximum_subgraph_interceptor
- {
-
- typedef typename graph_traits< GraphFirst >::vertices_size_type
- VertexSizeFirst;
-
- typedef mcgregor_common_subgraph_traits< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond >
- SubGraphTraits;
-
- typedef typename SubGraphTraits::correspondence_map_first_to_second_type
- CachedCorrespondenceMapFirstToSecond;
-
- typedef typename SubGraphTraits::correspondence_map_second_to_first_type
- CachedCorrespondenceMapSecondToFirst;
-
- typedef std::pair< VertexSizeFirst,
- std::pair< CachedCorrespondenceMapFirstToSecond,
- CachedCorrespondenceMapSecondToFirst > >
- SubGraph;
-
- typedef std::vector< SubGraph > SubGraphList;
-
- maximum_subgraph_interceptor(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- SubGraphCallback user_callback)
- : m_graph1(graph1)
- , m_graph2(graph2)
- , m_vindex_map1(vindex_map1)
- , m_vindex_map2(vindex_map2)
- , m_subgraphs(make_shared< SubGraphList >())
- , m_largest_size_so_far(make_shared< VertexSizeFirst >(0))
- , m_user_callback(user_callback)
- {
- }
-
- template < typename CorrespondenceMapFirstToSecond,
- typename CorrespondenceMapSecondToFirst >
- bool operator()(
- CorrespondenceMapFirstToSecond correspondence_map_1_to_2,
- CorrespondenceMapSecondToFirst correspondence_map_2_to_1,
- VertexSizeFirst subgraph_size)
- {
-
- if (subgraph_size > *m_largest_size_so_far)
- {
- m_subgraphs->clear();
- *m_largest_size_so_far = subgraph_size;
- }
-
- if (subgraph_size == *m_largest_size_so_far)
- {
-
- // Make a cached copy
- CachedCorrespondenceMapFirstToSecond new_subgraph_1_to_2
- = CachedCorrespondenceMapFirstToSecond(
- num_vertices(m_graph1), m_vindex_map1);
-
- CachedCorrespondenceMapSecondToFirst new_subgraph_2_to_1
- = CachedCorrespondenceMapSecondToFirst(
- num_vertices(m_graph2), m_vindex_map2);
-
- BGL_FORALL_VERTICES_T(vertex1, m_graph1, GraphFirst)
- {
- put(new_subgraph_1_to_2, vertex1,
- get(correspondence_map_1_to_2, vertex1));
- }
-
- BGL_FORALL_VERTICES_T(vertex2, m_graph2, GraphFirst)
- {
- put(new_subgraph_2_to_1, vertex2,
- get(correspondence_map_2_to_1, vertex2));
- }
-
- m_subgraphs->push_back(std::make_pair(subgraph_size,
- std::make_pair(new_subgraph_1_to_2, new_subgraph_2_to_1)));
- }
-
- return (true);
- }
-
- void output_subgraphs()
- {
- for (typename SubGraphList::const_iterator subgraph_iter
- = m_subgraphs->begin();
- subgraph_iter != m_subgraphs->end(); ++subgraph_iter)
- {
-
- SubGraph subgraph_cached = *subgraph_iter;
- m_user_callback(subgraph_cached.second.first,
- subgraph_cached.second.second, subgraph_cached.first);
- }
- }
-
- private:
- const GraphFirst& m_graph1;
- const GraphFirst& m_graph2;
- const VertexIndexMapFirst m_vindex_map1;
- const VertexIndexMapSecond m_vindex_map2;
- shared_ptr< SubGraphList > m_subgraphs;
- shared_ptr< VertexSizeFirst > m_largest_size_so_far;
- SubGraphCallback m_user_callback;
- };
-
-} // namespace detail
-
-// Enumerates the largest common subgraphs found between graph1
-// and graph2. Note that the ENTIRE search space is explored before
-// user_callback is actually invoked.
-template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs_maximum(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs, SubGraphCallback user_callback)
-{
- detail::maximum_subgraph_interceptor< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond, SubGraphCallback >
- max_interceptor(
- graph1, graph2, vindex_map1, vindex_map2, user_callback);
-
- detail::mcgregor_common_subgraphs_internal_init(graph1, graph2, vindex_map1,
- vindex_map2, edges_equivalent, vertices_equivalent,
- only_connected_subgraphs, max_interceptor);
-
- // Only output the largest subgraphs
- max_interceptor.output_subgraphs();
-}
-
-// Variant of mcgregor_common_subgraphs_maximum with all default
-// parameters.
-template < typename GraphFirst, typename GraphSecond,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs_maximum(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback)
-{
- mcgregor_common_subgraphs_maximum(graph1, graph2, get(vertex_index, graph1),
- get(vertex_index, graph2), always_equivalent(), always_equivalent(),
- only_connected_subgraphs, user_callback);
-}
-
-// Named parameter variant of mcgregor_common_subgraphs_maximum
-template < typename GraphFirst, typename GraphSecond, typename SubGraphCallback,
- typename Param, typename Tag, typename Rest >
-void mcgregor_common_subgraphs_maximum(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
- mcgregor_common_subgraphs_maximum(graph1, graph2,
- choose_const_pmap(
- get_param(params, vertex_index1), graph1, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph2, vertex_index),
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()),
- only_connected_subgraphs, user_callback);
-}
-
-// ==========================================================================
-
-namespace detail
-{
-
- // Binary function object that intercepts subgraphs from
- // mcgregor_common_subgraphs_internal and maintains a cache of the
- // largest, unique subgraphs.
- template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename SubGraphCallback >
- struct unique_maximum_subgraph_interceptor
- {
-
- typedef typename graph_traits< GraphFirst >::vertices_size_type
- VertexSizeFirst;
-
- typedef mcgregor_common_subgraph_traits< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond >
- SubGraphTraits;
-
- typedef typename SubGraphTraits::correspondence_map_first_to_second_type
- CachedCorrespondenceMapFirstToSecond;
-
- typedef typename SubGraphTraits::correspondence_map_second_to_first_type
- CachedCorrespondenceMapSecondToFirst;
-
- typedef std::pair< VertexSizeFirst,
- std::pair< CachedCorrespondenceMapFirstToSecond,
- CachedCorrespondenceMapSecondToFirst > >
- SubGraph;
-
- typedef std::vector< SubGraph > SubGraphList;
-
- unique_maximum_subgraph_interceptor(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- SubGraphCallback user_callback)
- : m_graph1(graph1)
- , m_graph2(graph2)
- , m_vindex_map1(vindex_map1)
- , m_vindex_map2(vindex_map2)
- , m_subgraphs(make_shared< SubGraphList >())
- , m_largest_size_so_far(make_shared< VertexSizeFirst >(0))
- , m_user_callback(user_callback)
- {
- }
-
- template < typename CorrespondenceMapFirstToSecond,
- typename CorrespondenceMapSecondToFirst >
- bool operator()(
- CorrespondenceMapFirstToSecond correspondence_map_1_to_2,
- CorrespondenceMapSecondToFirst correspondence_map_2_to_1,
- VertexSizeFirst subgraph_size)
- {
-
- if (subgraph_size > *m_largest_size_so_far)
- {
- m_subgraphs->clear();
- *m_largest_size_so_far = subgraph_size;
- }
-
- if (subgraph_size == *m_largest_size_so_far)
- {
-
- // Check if subgraph is unique
- for (typename SubGraphList::const_iterator subgraph_iter
- = m_subgraphs->begin();
- subgraph_iter != m_subgraphs->end(); ++subgraph_iter)
- {
-
- SubGraph subgraph_cached = *subgraph_iter;
-
- if (!are_property_maps_different(correspondence_map_1_to_2,
- subgraph_cached.second.first, m_graph1))
- {
-
- // New subgraph is a duplicate
- return (true);
- }
- }
-
- // Subgraph is unique, so make a cached copy
- CachedCorrespondenceMapFirstToSecond new_subgraph_1_to_2
- = CachedCorrespondenceMapFirstToSecond(
- num_vertices(m_graph1), m_vindex_map1);
-
- CachedCorrespondenceMapSecondToFirst new_subgraph_2_to_1
- = CachedCorrespondenceMapSecondToFirst(
- num_vertices(m_graph2), m_vindex_map2);
-
- BGL_FORALL_VERTICES_T(vertex1, m_graph1, GraphFirst)
- {
- put(new_subgraph_1_to_2, vertex1,
- get(correspondence_map_1_to_2, vertex1));
- }
-
- BGL_FORALL_VERTICES_T(vertex2, m_graph2, GraphFirst)
- {
- put(new_subgraph_2_to_1, vertex2,
- get(correspondence_map_2_to_1, vertex2));
- }
-
- m_subgraphs->push_back(std::make_pair(subgraph_size,
- std::make_pair(new_subgraph_1_to_2, new_subgraph_2_to_1)));
- }
-
- return (true);
- }
-
- void output_subgraphs()
- {
- for (typename SubGraphList::const_iterator subgraph_iter
- = m_subgraphs->begin();
- subgraph_iter != m_subgraphs->end(); ++subgraph_iter)
- {
-
- SubGraph subgraph_cached = *subgraph_iter;
- m_user_callback(subgraph_cached.second.first,
- subgraph_cached.second.second, subgraph_cached.first);
- }
- }
-
- private:
- const GraphFirst& m_graph1;
- const GraphFirst& m_graph2;
- const VertexIndexMapFirst m_vindex_map1;
- const VertexIndexMapSecond m_vindex_map2;
- shared_ptr< SubGraphList > m_subgraphs;
- shared_ptr< VertexSizeFirst > m_largest_size_so_far;
- SubGraphCallback m_user_callback;
- };
-
-} // namespace detail
-
-// Enumerates the largest, unique common subgraphs found between
-// graph1 and graph2. Note that the ENTIRE search space is explored
-// before user_callback is actually invoked.
-template < typename GraphFirst, typename GraphSecond,
- typename VertexIndexMapFirst, typename VertexIndexMapSecond,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs_maximum_unique(const GraphFirst& graph1,
- const GraphSecond& graph2, const VertexIndexMapFirst vindex_map1,
- const VertexIndexMapSecond vindex_map2,
- EdgeEquivalencePredicate edges_equivalent,
- VertexEquivalencePredicate vertices_equivalent,
- bool only_connected_subgraphs, SubGraphCallback user_callback)
-{
- detail::unique_maximum_subgraph_interceptor< GraphFirst, GraphSecond,
- VertexIndexMapFirst, VertexIndexMapSecond, SubGraphCallback >
- unique_max_interceptor(
- graph1, graph2, vindex_map1, vindex_map2, user_callback);
-
- detail::mcgregor_common_subgraphs_internal_init(graph1, graph2, vindex_map1,
- vindex_map2, edges_equivalent, vertices_equivalent,
- only_connected_subgraphs, unique_max_interceptor);
-
- // Only output the largest, unique subgraphs
- unique_max_interceptor.output_subgraphs();
-}
-
-// Variant of mcgregor_common_subgraphs_maximum_unique with all default
-// parameters
-template < typename GraphFirst, typename GraphSecond,
- typename SubGraphCallback >
-void mcgregor_common_subgraphs_maximum_unique(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback)
-{
-
- mcgregor_common_subgraphs_maximum_unique(graph1, graph2,
- get(vertex_index, graph1), get(vertex_index, graph2),
- always_equivalent(), always_equivalent(), only_connected_subgraphs,
- user_callback);
-}
-
-// Named parameter variant of
-// mcgregor_common_subgraphs_maximum_unique
-template < typename GraphFirst, typename GraphSecond, typename SubGraphCallback,
- typename Param, typename Tag, typename Rest >
-void mcgregor_common_subgraphs_maximum_unique(const GraphFirst& graph1,
- const GraphSecond& graph2, bool only_connected_subgraphs,
- SubGraphCallback user_callback,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
- mcgregor_common_subgraphs_maximum_unique(graph1, graph2,
- choose_const_pmap(
- get_param(params, vertex_index1), graph1, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph2, vertex_index),
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()),
- only_connected_subgraphs, user_callback);
-}
-
-// ==========================================================================
-
-// Fills a membership map (vertex -> bool) using the information
-// present in correspondence_map_1_to_2. Every vertex in a
-// membership map will have a true value only if it is not
-// associated with a null vertex in the correspondence map.
-template < typename GraphSecond, typename GraphFirst,
- typename CorrespondenceMapFirstToSecond, typename MembershipMapFirst >
-void fill_membership_map(const GraphFirst& graph1,
- const CorrespondenceMapFirstToSecond correspondence_map_1_to_2,
- MembershipMapFirst membership_map1)
-{
-
- BGL_FORALL_VERTICES_T(vertex1, graph1, GraphFirst)
- {
- put(membership_map1, vertex1,
- get(correspondence_map_1_to_2, vertex1)
- != graph_traits< GraphSecond >::null_vertex());
- }
-}
-
-// Traits associated with a membership map filtered graph. Provided
-// for convenience to access graph and vertex filter types.
-template < typename Graph, typename MembershipMap >
-struct membership_filtered_graph_traits
-{
- typedef property_map_filter< MembershipMap > vertex_filter_type;
- typedef filtered_graph< Graph, keep_all, vertex_filter_type > graph_type;
-};
-
-// Returns a filtered sub-graph of graph whose edge and vertex
-// inclusion is dictated by membership_map.
-template < typename Graph, typename MembershipMap >
-typename membership_filtered_graph_traits< Graph, MembershipMap >::graph_type
-make_membership_filtered_graph(
- const Graph& graph, MembershipMap& membership_map)
-{
-
- typedef membership_filtered_graph_traits< Graph, MembershipMap > MFGTraits;
- typedef typename MFGTraits::graph_type MembershipFilteredGraph;
-
- typename MFGTraits::vertex_filter_type v_filter(membership_map);
-
- return (MembershipFilteredGraph(graph, keep_all(), v_filter));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_MCGREGOR_COMMON_SUBGRAPHS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/mesh_graph_generator.hpp b/contrib/restricted/boost/graph/include/boost/graph/mesh_graph_generator.hpp
deleted file mode 100644
index 0dcba2adad..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/mesh_graph_generator.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2004, 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Nick Edmonds
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_MESH_GENERATOR_HPP
-#define BOOST_GRAPH_MESH_GENERATOR_HPP
-
-#include <iterator>
-#include <utility>
-#include <boost/assert.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/type_traits/is_base_and_derived.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost
-{
-
-template < typename Graph > class mesh_iterator
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
-
- BOOST_STATIC_CONSTANT(bool,
- is_undirected
- = (is_base_and_derived< undirected_tag, directed_category >::value
- || is_same< undirected_tag, directed_category >::value));
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef void difference_type;
-
- mesh_iterator() : x(0), y(0), done(true) {}
-
- // Vertices are numbered in row-major order
- // Assumes directed
- mesh_iterator(
- vertices_size_type x, vertices_size_type y, bool toroidal = true)
- : x(x)
- , y(y)
- , n(x * y)
- , source(0)
- , target(1)
- , current(0, 1)
- , toroidal(toroidal)
- , done(false)
- {
- BOOST_ASSERT(x > 1 && y > 1);
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- mesh_iterator& operator++()
- {
- if (is_undirected)
- {
- if (!toroidal)
- {
- if (target == source + 1)
- if (source < x * (y - 1))
- target = source + x;
- else
- {
- source++;
- target = (source % x) < x - 1 ? source + 1 : source + x;
- if (target > n)
- done = true;
- }
- else if (target == source + x)
- {
- source++;
- target = (source % x) < x - 1 ? source + 1 : source + x;
- }
- }
- else
- {
- if (target == source + 1 || target == source - (source % x))
- target = (source + x) % n;
- else if (target == (source + x) % n)
- {
- if (source == n - 1)
- done = true;
- else
- {
- source++;
- target = (source % x) < (x - 1) ? source + 1
- : source - (source % x);
- }
- }
- }
- }
- else
- { // Directed
- if (!toroidal)
- {
- if (target == source - x)
- target = source % x > 0 ? source - 1 : source + 1;
- else if (target == source - 1)
- if ((source % x) < (x - 1))
- target = source + 1;
- else if (source < x * (y - 1))
- target = source + x;
- else
- {
- done = true;
- }
- else if (target == source + 1)
- if (source < x * (y - 1))
- target = source + x;
- else
- {
- source++;
- target = source - x;
- }
- else if (target == source + x)
- {
- source++;
- target = (source >= x) ? source - x : source - 1;
- }
- }
- else
- {
- if (source == n - 1 && target == (source + x) % n)
- done = true;
- else if (target == source - 1 || target == source + x - 1)
- target = (source + x) % n;
- else if (target == source + 1
- || target == source - (source % x))
- target = (source - x + n) % n;
- else if (target == (source - x + n) % n)
- target = (source % x > 0) ? source - 1 : source + x - 1;
- else if (target == (source + x) % n)
- {
- source++;
- target = (source % x) < (x - 1) ? source + 1
- : source - (source % x);
- }
- }
- }
-
- current.first = source;
- current.second = target;
-
- return *this;
- }
-
- mesh_iterator operator++(int)
- {
- mesh_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const mesh_iterator& other) const
- {
- return done == other.done;
- }
-
- bool operator!=(const mesh_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- vertices_size_type x, y;
- vertices_size_type n;
- vertices_size_type source;
- vertices_size_type target;
- value_type current;
- bool toroidal;
- bool done;
-};
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_MESH_GENERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/metis.hpp b/contrib/restricted/boost/graph/include/boost/graph/metis.hpp
deleted file mode 100644
index e6d4c4626e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/metis.hpp
+++ /dev/null
@@ -1,367 +0,0 @@
-// Copyright 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_METIS_HPP
-#define BOOST_GRAPH_METIS_HPP
-
-#ifdef BOOST_GRAPH_METIS_NO_INLINE
-#define BOOST_GRAPH_METIS_INLINE_KEYWORD
-#else
-#define BOOST_GRAPH_METIS_INLINE_KEYWORD inline
-#endif
-
-#include <string>
-#include <iostream>
-#include <iterator>
-#include <utility>
-#include <sstream>
-#include <exception>
-#include <vector>
-#include <algorithm>
-
-namespace boost
-{
-namespace graph
-{
-
- class BOOST_SYMBOL_VISIBLE metis_exception : public std::exception
- {
- };
- class BOOST_SYMBOL_VISIBLE metis_input_exception : public metis_exception
- {
- };
-
- class metis_reader
- {
- public:
- typedef std::size_t vertices_size_type;
- typedef std::size_t edges_size_type;
- typedef double vertex_weight_type;
- typedef double edge_weight_type;
-
- class edge_iterator
- {
- public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type >
- value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type;
-
- private:
- class postincrement_proxy
- {
- postincrement_proxy(const value_type& value) : value(value) {}
-
- public:
- reference operator*() const { return value; }
-
- private:
- value_type value;
- friend class edge_iterator;
- };
-
- public:
- edge_iterator& operator++();
- postincrement_proxy operator++(int);
-
- reference operator*() const { return self->edge; }
- pointer operator->() const { return &self->edge; }
-
- // Default copy constructor and assignment operator are okay
-
- private:
- edge_iterator(metis_reader* self);
- void advance(bool skip_initial_read);
-
- metis_reader* self;
-
- friend class metis_reader;
- friend bool operator==(edge_iterator, edge_iterator);
- friend bool operator!=(edge_iterator, edge_iterator);
- };
- friend class edge_iterator;
-
- class edge_weight_iterator
- {
- public:
- typedef std::input_iterator_tag iterator_category;
- typedef edge_weight_type value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
-
- // Default copy constructor and assignment operator are okay
-
- reference operator*() const { return self->edge_weight; }
- pointer operator->() const { return &self->edge_weight; }
-
- edge_weight_iterator& operator++() { return *this; }
- edge_weight_iterator operator++(int) { return *this; }
-
- private:
- edge_weight_iterator(metis_reader* self) : self(self) {}
-
- metis_reader* self;
-
- friend class metis_reader;
- };
-
- metis_reader(std::istream& in) : in(in), edge_weight(1.0) { start(); }
-
- edge_iterator begin();
- edge_iterator end();
- edge_weight_iterator weight_begin();
-
- vertices_size_type num_vertices() const { return n_vertices; }
- edges_size_type num_edges() const { return n_edges; }
-
- std::size_t num_vertex_weights() const { return n_vertex_weights; }
-
- vertex_weight_type vertex_weight(vertices_size_type v, std::size_t n)
- {
- return vertex_weights[v * num_vertex_weights() + n];
- }
-
- bool has_edge_weights() const { return edge_weights; }
-
- private:
- void start();
-
- // Configuration information
- std::istream& in;
-
- // Information about the current METIS file
- vertices_size_type n_vertices;
- edges_size_type n_edges;
- std::size_t n_vertex_weights;
- bool edge_weights;
-
- // Information about the current edge/vertex
- std::istringstream line_in;
- std::pair< vertices_size_type, vertices_size_type > edge;
- std::vector< vertex_weight_type > vertex_weights;
- edge_weight_type edge_weight;
-
- friend bool operator==(edge_iterator, edge_iterator);
- friend bool operator!=(edge_iterator, edge_iterator);
- };
-
- class metis_distribution
- {
- public:
- typedef int process_id_type;
- typedef std::size_t size_type;
- typedef std::vector< process_id_type >::iterator iterator;
-
- metis_distribution(std::istream& in, process_id_type my_id);
-
- size_type block_size(process_id_type id, size_type) const;
- process_id_type operator()(size_type n) const { return vertices[n]; }
- size_type local(size_type n) const;
- size_type global(size_type n) const { return global(my_id, n); }
- size_type global(process_id_type id, size_type n) const;
-
- iterator begin() { return vertices.begin(); }
- iterator end() { return vertices.end(); }
-
- private:
- process_id_type my_id;
- std::vector< process_id_type > vertices;
- };
-
-#if !defined(BOOST_GRAPH_METIS_NO_INLINE) || defined(BOOST_GRAPH_METIS_SOURCE)
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- bool operator==(
- metis_reader::edge_iterator x, metis_reader::edge_iterator y)
- {
- return (x.self == y.self
- || (x.self && x.self->edge.first == x.self->num_vertices())
- || (y.self && y.self->edge.first == y.self->num_vertices()));
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- bool operator!=(
- metis_reader::edge_iterator x, metis_reader::edge_iterator y)
- {
- return !(x == y);
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- metis_reader::edge_iterator::edge_iterator(metis_reader* self) : self(self)
- {
- if (self)
- advance(true);
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- metis_reader::edge_iterator& metis_reader::edge_iterator::operator++()
- {
- advance(false);
- return *this;
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- void metis_reader::edge_iterator::advance(bool skip_initial_read)
- {
- do
- {
-
- if (!skip_initial_read)
- {
- // Try to read the next edge
- if (self->line_in >> std::ws >> self->edge.second)
- {
- --self->edge.second;
- if (self->has_edge_weights())
- {
- if (!(self->line_in >> self->edge_weight))
- boost::throw_exception(metis_input_exception());
- }
- return;
- }
-
- // Check if we're done
- ++self->edge.first;
- if (self->edge.first == self->num_vertices())
- return;
- }
-
- // Find the next line
- std::string line;
- while (getline(self->in, line) && !line.empty() && line[0] == '%')
- {
- /* Keep reading lines in the loop header... */
- }
- if (!self->in)
- boost::throw_exception(metis_input_exception());
- self->line_in.str(line);
- self->line_in.clear();
-
- // Read the next line
- std::size_t weights_left = self->n_vertex_weights;
- vertex_weight_type weight;
- while (weights_left > 0)
- {
- if (self->line_in >> weight)
- self->vertex_weights.push_back(weight);
- else
- boost::throw_exception(metis_input_exception());
- --weights_left;
- }
-
- // Successive iterations will pick up edges for this vertex.
- skip_initial_read = false;
- } while (true);
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- metis_reader::edge_iterator::postincrement_proxy
- metis_reader::edge_iterator::operator++(int)
- {
- postincrement_proxy result(**this);
- ++(*this);
- return result;
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- metis_reader::edge_iterator metis_reader::begin()
- {
- if (edge.first != 0)
- start();
- return edge_iterator(this);
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- metis_reader::edge_iterator metis_reader::end() { return edge_iterator(0); }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- metis_reader::edge_weight_iterator metis_reader::weight_begin()
- {
- return edge_weight_iterator(this);
- }
-
- BOOST_GRAPH_METIS_INLINE_KEYWORD
- void metis_reader::start()
- {
- in.seekg(0, std::ios::beg);
- std::string line;
- while (getline(in, line) && !line.empty() && line[0] == '%')
- {
- /* Keep getting lines in loop header. */
- }
-
- if (!in || line.empty())
- boost::throw_exception(metis_input_exception());
-
- // Determine number of vertices and edges in the graph
- line_in.str(line);
- if (!(line_in >> n_vertices >> n_edges))
- boost::throw_exception(metis_input_exception());
-
- // Determine whether vertex or edge weights are included in the graph
- int fmt = 0;
- line_in >> fmt;
- n_vertex_weights = fmt / 10;
- edge_weights = (fmt % 10 == 1);
-
- // Determine how many (if any!) vertex weights are included
- if (n_vertex_weights)
- line_in >> n_vertex_weights;
-
- // Setup the iteration data structures
- edge_weight = 1.0;
- edge.first = 0;
- edge.second = 0;
- vertex_weights.reserve(n_vertex_weights * num_vertices());
- }
-
- metis_distribution::metis_distribution(
- std::istream& in, process_id_type my_id)
- : my_id(my_id)
- , vertices(std::istream_iterator< process_id_type >(in),
- std::istream_iterator< process_id_type >())
- {
- }
-
- metis_distribution::size_type metis_distribution::block_size(
- process_id_type id, size_type) const
- {
- return std::count(vertices.begin(), vertices.end(), id);
- }
-
- metis_distribution::size_type metis_distribution::local(size_type n) const
- {
- return std::count(vertices.begin(), vertices.begin() + n, vertices[n]);
- }
-
- metis_distribution::size_type metis_distribution::global(
- process_id_type id, size_type n) const
- {
- std::vector< process_id_type >::const_iterator i = vertices.begin();
- while (*i != id)
- ++i;
-
- while (n > 0)
- {
- do
- {
- ++i;
- } while (*i != id);
- --n;
- }
-
- return i - vertices.begin();
- }
-
-#endif
-
-}
-} // end namespace boost::graph
-
-#endif // BOOST_GRAPH_METIS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/metric_tsp_approx.hpp b/contrib/restricted/boost/graph/include/boost/graph/metric_tsp_approx.hpp
deleted file mode 100644
index 38eaf6fa61..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/metric_tsp_approx.hpp
+++ /dev/null
@@ -1,316 +0,0 @@
-
-//=======================================================================
-// Copyright 2008
-// Author: Matyas W Egyhazy
-//
-// 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_METRIC_TSP_APPROX_HPP
-#define BOOST_GRAPH_METRIC_TSP_APPROX_HPP
-
-// metric_tsp_approx
-// Generates an approximate tour solution for the traveling salesperson
-// problem in polynomial time. The current algorithm guarantees a tour with a
-// length at most as long as 2x optimal solution. The graph should have
-// 'natural' (metric) weights such that the triangle inequality is maintained.
-// Graphs must be fully interconnected.
-
-// TODO:
-// There are a couple of improvements that could be made.
-// 1) Change implementation to lower uppper bound Christofides heuristic
-// 2) Implement a less restrictive TSP heuristic (one that does not rely on
-// triangle inequality).
-// 3) Determine if the algorithm can be implemented without creating a new
-// graph.
-
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_as_tree.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/prim_minimum_spanning_tree.hpp>
-#include <boost/graph/lookup_edge.hpp>
-#include <boost/throw_exception.hpp>
-
-namespace boost
-{
-// Define a concept for the concept-checking library.
-template < typename Visitor, typename Graph > struct TSPVertexVisitorConcept
-{
-private:
- Visitor vis_;
-
-public:
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- BOOST_CONCEPT_USAGE(TSPVertexVisitorConcept)
- {
- Visitor vis(vis_); // require copy construction
- Graph g(1);
- Vertex v(*vertices(g).first);
- vis.visit_vertex(v, g); // require visit_vertex
- }
-};
-
-// Tree visitor that keeps track of a preorder traversal of a tree
-// TODO: Consider migrating this to the graph_as_tree header.
-// TODO: Parameterize the underlying stores so it doesn't have to be a vector.
-template < typename Node, typename Tree > class PreorderTraverser
-{
-private:
- std::vector< Node >& path_;
-
-public:
- typedef typename std::vector< Node >::const_iterator const_iterator;
-
- PreorderTraverser(std::vector< Node >& p) : path_(p) {}
-
- void preorder(Node n, const Tree&) { path_.push_back(n); }
-
- void inorder(Node, const Tree&) const {}
- void postorder(Node, const Tree&) const {}
-
- const_iterator begin() const { return path_.begin(); }
- const_iterator end() const { return path_.end(); }
-};
-
-// Forward declarations
-template < typename > class tsp_tour_visitor;
-template < typename, typename, typename, typename > class tsp_tour_len_visitor;
-
-template < typename VertexListGraph, typename OutputIterator >
-void metric_tsp_approx_tour(VertexListGraph& g, OutputIterator o)
-{
- metric_tsp_approx_from_vertex(g, *vertices(g).first, get(edge_weight, g),
- get(vertex_index, g), tsp_tour_visitor< OutputIterator >(o));
-}
-
-template < typename VertexListGraph, typename WeightMap,
- typename OutputIterator >
-void metric_tsp_approx_tour(VertexListGraph& g, WeightMap w, OutputIterator o)
-{
- metric_tsp_approx_from_vertex(
- g, *vertices(g).first, w, tsp_tour_visitor< OutputIterator >(o));
-}
-
-template < typename VertexListGraph, typename OutputIterator >
-void metric_tsp_approx_tour_from_vertex(VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor start,
- OutputIterator o)
-{
- metric_tsp_approx_from_vertex(g, start, get(edge_weight, g),
- get(vertex_index, g), tsp_tour_visitor< OutputIterator >(o));
-}
-
-template < typename VertexListGraph, typename WeightMap,
- typename OutputIterator >
-void metric_tsp_approx_tour_from_vertex(VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor start,
- WeightMap w, OutputIterator o)
-{
- metric_tsp_approx_from_vertex(g, start, w, get(vertex_index, g),
- tsp_tour_visitor< OutputIterator >(o));
-}
-
-template < typename VertexListGraph, typename TSPVertexVisitor >
-void metric_tsp_approx(VertexListGraph& g, TSPVertexVisitor vis)
-{
- metric_tsp_approx_from_vertex(
- g, *vertices(g).first, get(edge_weight, g), get(vertex_index, g), vis);
-}
-
-template < typename VertexListGraph, typename Weightmap,
- typename VertexIndexMap, typename TSPVertexVisitor >
-void metric_tsp_approx(VertexListGraph& g, Weightmap w, TSPVertexVisitor vis)
-{
- metric_tsp_approx_from_vertex(
- g, *vertices(g).first, w, get(vertex_index, g), vis);
-}
-
-template < typename VertexListGraph, typename WeightMap,
- typename VertexIndexMap, typename TSPVertexVisitor >
-void metric_tsp_approx(
- VertexListGraph& g, WeightMap w, VertexIndexMap id, TSPVertexVisitor vis)
-{
- metric_tsp_approx_from_vertex(g, *vertices(g).first, w, id, vis);
-}
-
-template < typename VertexListGraph, typename WeightMap,
- typename TSPVertexVisitor >
-void metric_tsp_approx_from_vertex(VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor start,
- WeightMap w, TSPVertexVisitor vis)
-{
- metric_tsp_approx_from_vertex(g, start, w, get(vertex_index, g), vis);
-}
-
-template < typename VertexListGraph, typename WeightMap,
- typename VertexIndexMap, typename TSPVertexVisitor >
-void metric_tsp_approx_from_vertex(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor start,
- WeightMap weightmap, VertexIndexMap indexmap, TSPVertexVisitor vis)
-{
- using namespace boost;
- using namespace std;
-
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< VertexListGraph >));
- BOOST_CONCEPT_ASSERT(
- (TSPVertexVisitorConcept< TSPVertexVisitor, VertexListGraph >));
-
- // Types related to the input graph (GVertex is a template parameter).
- typedef typename graph_traits< VertexListGraph >::vertex_descriptor GVertex;
- typedef typename graph_traits< VertexListGraph >::vertex_iterator GVItr;
-
- // We build a custom graph in this algorithm.
- typedef adjacency_list< vecS, vecS, directedS, no_property, no_property >
- MSTImpl;
- typedef graph_traits< MSTImpl >::vertex_descriptor Vertex;
- typedef graph_traits< MSTImpl >::vertex_iterator VItr;
-
- // And then re-cast it as a tree.
- typedef iterator_property_map< vector< Vertex >::iterator,
- property_map< MSTImpl, vertex_index_t >::type >
- ParentMap;
- typedef graph_as_tree< MSTImpl, ParentMap > Tree;
- typedef tree_traits< Tree >::node_descriptor Node;
-
- // A predecessor map.
- typedef vector< GVertex > PredMap;
- typedef iterator_property_map< typename PredMap::iterator, VertexIndexMap >
- PredPMap;
-
- PredMap preds(num_vertices(g));
- PredPMap pred_pmap(preds.begin(), indexmap);
-
- // Compute a spanning tree over the in put g.
- prim_minimum_spanning_tree(g, pred_pmap,
- root_vertex(start).vertex_index_map(indexmap).weight_map(weightmap));
-
- // Build a MST using the predecessor map from prim mst
- MSTImpl mst(num_vertices(g));
- std::size_t cnt = 0;
- pair< VItr, VItr > mst_verts(vertices(mst));
- for (typename PredMap::iterator vi(preds.begin()); vi != preds.end();
- ++vi, ++cnt)
- {
- if (indexmap[*vi] != cnt)
- {
- add_edge(*next(mst_verts.first, indexmap[*vi]),
- *next(mst_verts.first, cnt), mst);
- }
- }
-
- // Build a tree abstraction over the MST.
- vector< Vertex > parent(num_vertices(mst));
- Tree t(mst, *vertices(mst).first,
- make_iterator_property_map(parent.begin(), get(vertex_index, mst)));
-
- // Create tour using a preorder traversal of the mst
- vector< Node > tour;
- PreorderTraverser< Node, Tree > tvis(tour);
- traverse_tree(indexmap[start], t, tvis);
-
- pair< GVItr, GVItr > g_verts(vertices(g));
- for (PreorderTraverser< Node, Tree >::const_iterator curr(tvis.begin());
- curr != tvis.end(); ++curr)
- {
- // TODO: This is will be O(n^2) if vertex storage of g != vecS.
- GVertex v = *next(g_verts.first, get(vertex_index, mst)[*curr]);
- vis.visit_vertex(v, g);
- }
-
- // Connect back to the start of the tour
- vis.visit_vertex(start, g);
-}
-
-// Default tsp tour visitor that puts the tour in an OutputIterator
-template < typename OutItr > class tsp_tour_visitor
-{
- OutItr itr_;
-
-public:
- tsp_tour_visitor(OutItr itr) : itr_(itr) {}
-
- template < typename Vertex, typename Graph >
- void visit_vertex(Vertex v, const Graph&)
- {
- BOOST_CONCEPT_ASSERT((OutputIterator< OutItr, Vertex >));
- *itr_++ = v;
- }
-};
-
-// Tsp tour visitor that adds the total tour length.
-template < typename Graph, typename WeightMap, typename OutIter,
- typename Length >
-class tsp_tour_len_visitor
-{
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- BOOST_CONCEPT_ASSERT((OutputIterator< OutIter, Vertex >));
-
- OutIter iter_;
- Length& tourlen_;
- WeightMap& wmap_;
- Vertex previous_;
-
- // Helper function for getting the null vertex.
- Vertex null() { return graph_traits< Graph >::null_vertex(); }
-
-public:
- tsp_tour_len_visitor(Graph const&, OutIter iter, Length& l, WeightMap& map)
- : iter_(iter), tourlen_(l), wmap_(map), previous_(null())
- {
- }
-
- void visit_vertex(Vertex v, const Graph& g)
- {
- typedef typename graph_traits< Graph >::edge_descriptor Edge;
-
- // If it is not the start, then there is a
- // previous vertex
- if (previous_ != null())
- {
- // NOTE: For non-adjacency matrix graphs g, this bit of code
- // will be linear in the degree of previous_ or v. A better
- // solution would be to visit edges of the graph, but that
- // would require revisiting the core algorithm.
- Edge e;
- bool found;
- boost::tie(e, found) = lookup_edge(previous_, v, g);
- if (!found)
- {
- BOOST_THROW_EXCEPTION(not_complete());
- }
-
- tourlen_ += wmap_[e];
- }
-
- previous_ = v;
- *iter_++ = v;
- }
-};
-
-// Object generator(s)
-template < typename OutIter >
-inline tsp_tour_visitor< OutIter > make_tsp_tour_visitor(OutIter iter)
-{
- return tsp_tour_visitor< OutIter >(iter);
-}
-
-template < typename Graph, typename WeightMap, typename OutIter,
- typename Length >
-inline tsp_tour_len_visitor< Graph, WeightMap, OutIter, Length >
-make_tsp_tour_len_visitor(
- Graph const& g, OutIter iter, Length& l, WeightMap map)
-{
- return tsp_tour_len_visitor< Graph, WeightMap, OutIter, Length >(
- g, iter, l, map);
-}
-
-} // boost
-
-#endif // BOOST_GRAPH_METRIC_TSP_APPROX_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/minimum_degree_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/minimum_degree_ordering.hpp
deleted file mode 100644
index 2630831f5e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/minimum_degree_ordering.hpp
+++ /dev/null
@@ -1,760 +0,0 @@
-//-*-c++-*-
-//=======================================================================
-// Copyright 1997-2001 University of Notre Dame.
-// Authors: Lie-Quan Lee, Jeremy Siek
-//
-// 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_MINIMUM_DEGREE_ORDERING_HPP
-#define BOOST_GRAPH_MINIMUM_DEGREE_ORDERING_HPP
-
-#include <vector>
-#include <boost/assert.hpp>
-#include <boost/config.hpp>
-#include <boost/pending/bucket_sorter.hpp>
-#include <boost/detail/numeric_traits.hpp> // for integer_traits
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- //
- // Given a set of n integers (where the integer values range from
- // zero to n-1), we want to keep track of a collection of stacks
- // of integers. It so happens that an integer will appear in at
- // most one stack at a time, so the stacks form disjoint sets.
- // Because of these restrictions, we can use one big array to
- // store all the stacks, intertwined with one another.
- // No allocation/deallocation happens in the push()/pop() methods
- // so this is faster than using std::stack's.
- //
- template < class SignedInteger > class Stacks
- {
- typedef SignedInteger value_type;
- typedef typename std::vector< value_type >::size_type size_type;
-
- public:
- Stacks(size_type n) : data(n) {}
-
- //: stack
- class stack
- {
- typedef typename std::vector< value_type >::iterator Iterator;
-
- public:
- stack(Iterator _data, const value_type& head)
- : data(_data), current(head)
- {
- }
-
- // did not use default argument here to avoid internal compiler
- // error in g++.
- stack(Iterator _data)
- : data(_data), current(-(std::numeric_limits< value_type >::max)())
- {
- }
-
- void pop()
- {
- BOOST_ASSERT(!empty());
- current = data[current];
- }
- void push(value_type v)
- {
- data[v] = current;
- current = v;
- }
- bool empty()
- {
- return current == -(std::numeric_limits< value_type >::max)();
- }
- value_type& top() { return current; }
-
- private:
- Iterator data;
- value_type current;
- };
-
- // To return a stack object
- stack make_stack() { return stack(data.begin()); }
-
- protected:
- std::vector< value_type > data;
- };
-
- // marker class, a generalization of coloring.
- //
- // This class is to provide a generalization of coloring which has
- // complexity of amortized constant time to set all vertices' color
- // back to be untagged. It implemented by increasing a tag.
- //
- // The colors are:
- // not tagged
- // tagged
- // multiple_tagged
- // done
- //
- template < class SignedInteger, class Vertex, class VertexIndexMap >
- class Marker
- {
- typedef SignedInteger value_type;
- typedef typename std::vector< value_type >::size_type size_type;
-
- static value_type done()
- {
- return (std::numeric_limits< value_type >::max)() / 2;
- }
-
- public:
- Marker(size_type _num, VertexIndexMap index_map)
- : tag(1 - (std::numeric_limits< value_type >::max)())
- , data(_num, -(std::numeric_limits< value_type >::max)())
- , id(index_map)
- {
- }
-
- void mark_done(Vertex node) { data[get(id, node)] = done(); }
-
- bool is_done(Vertex node) { return data[get(id, node)] == done(); }
-
- void mark_tagged(Vertex node) { data[get(id, node)] = tag; }
-
- void mark_multiple_tagged(Vertex node)
- {
- data[get(id, node)] = multiple_tag;
- }
-
- bool is_tagged(Vertex node) const { return data[get(id, node)] >= tag; }
-
- bool is_not_tagged(Vertex node) const
- {
- return data[get(id, node)] < tag;
- }
-
- bool is_multiple_tagged(Vertex node) const
- {
- return data[get(id, node)] >= multiple_tag;
- }
-
- void increment_tag()
- {
- const size_type num = data.size();
- ++tag;
- if (tag >= done())
- {
- tag = 1 - (std::numeric_limits< value_type >::max)();
- for (size_type i = 0; i < num; ++i)
- if (data[i] < done())
- data[i] = -(std::numeric_limits< value_type >::max)();
- }
- }
-
- void set_multiple_tag(value_type mdeg0)
- {
- const size_type num = data.size();
- multiple_tag = tag + mdeg0;
-
- if (multiple_tag >= done())
- {
- tag = 1 - (std::numeric_limits< value_type >::max)();
-
- for (size_type i = 0; i < num; i++)
- if (data[i] < done())
- data[i] = -(std::numeric_limits< value_type >::max)();
-
- multiple_tag = tag + mdeg0;
- }
- }
-
- void set_tag_as_multiple_tag() { tag = multiple_tag; }
-
- protected:
- value_type tag;
- value_type multiple_tag;
- std::vector< value_type > data;
- VertexIndexMap id;
- };
-
- template < class Iterator, class SignedInteger, class Vertex,
- class VertexIndexMap, int offset = 1 >
- class Numbering
- {
- typedef SignedInteger number_type;
- number_type num; // start from 1 instead of zero
- Iterator data;
- number_type max_num;
- VertexIndexMap id;
-
- public:
- Numbering(Iterator _data, number_type _max_num, VertexIndexMap id)
- : num(1), data(_data), max_num(_max_num), id(id)
- {
- }
- void operator()(Vertex node) { data[get(id, node)] = -num; }
- bool all_done(number_type i = 0) const { return num + i > max_num; }
- void increment(number_type i = 1) { num += i; }
- bool is_numbered(Vertex node) const { return data[get(id, node)] < 0; }
- void indistinguishable(Vertex i, Vertex j)
- {
- data[get(id, i)] = -(get(id, j) + offset);
- }
- };
-
- template < class SignedInteger, class Vertex, class VertexIndexMap >
- class degreelists_marker
- {
- public:
- typedef SignedInteger value_type;
- typedef typename std::vector< value_type >::size_type size_type;
- degreelists_marker(size_type n, VertexIndexMap id) : marks(n, 0), id(id)
- {
- }
- void mark_need_update(Vertex i) { marks[get(id, i)] = 1; }
- bool need_update(Vertex i) { return marks[get(id, i)] == 1; }
- bool outmatched_or_done(Vertex i) { return marks[get(id, i)] == -1; }
- void mark(Vertex i) { marks[get(id, i)] = -1; }
- void unmark(Vertex i) { marks[get(id, i)] = 0; }
-
- private:
- std::vector< value_type > marks;
- VertexIndexMap id;
- };
-
- // Helper function object for edge removal
- template < class Graph, class MarkerP, class NumberD, class Stack,
- class VertexIndexMap >
- class predicateRemoveEdge1
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
-
- public:
- predicateRemoveEdge1(Graph& _g, MarkerP& _marker, NumberD _numbering,
- Stack& n_e, VertexIndexMap id)
- : g(&_g)
- , marker(&_marker)
- , numbering(_numbering)
- , neighbor_elements(&n_e)
- , id(id)
- {
- }
-
- bool operator()(edge_t e)
- {
- vertex_t dist = target(e, *g);
- if (marker->is_tagged(dist))
- return true;
- marker->mark_tagged(dist);
- if (numbering.is_numbered(dist))
- {
- neighbor_elements->push(get(id, dist));
- return true;
- }
- return false;
- }
-
- private:
- Graph* g;
- MarkerP* marker;
- NumberD numbering;
- Stack* neighbor_elements;
- VertexIndexMap id;
- };
-
- // Helper function object for edge removal
- template < class Graph, class MarkerP > class predicate_remove_tagged_edges
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
-
- public:
- predicate_remove_tagged_edges(Graph& _g, MarkerP& _marker)
- : g(&_g), marker(&_marker)
- {
- }
-
- bool operator()(edge_t e)
- {
- vertex_t dist = target(e, *g);
- if (marker->is_tagged(dist))
- return true;
- return false;
- }
-
- private:
- Graph* g;
- MarkerP* marker;
- };
-
- template < class Graph, class DegreeMap, class InversePermutationMap,
- class PermutationMap, class SuperNodeMap, class VertexIndexMap >
- class mmd_impl
- {
- // Typedefs
- typedef graph_traits< Graph > Traits;
- typedef typename Traits::vertices_size_type size_type;
- typedef typename detail::integer_traits< size_type >::difference_type
- diff_t;
- typedef typename Traits::vertex_descriptor vertex_t;
- typedef typename Traits::adjacency_iterator adj_iter;
- typedef iterator_property_map< vertex_t*, identity_property_map,
- vertex_t, vertex_t& >
- IndexVertexMap;
- typedef detail::Stacks< diff_t > Workspace;
- typedef bucket_sorter< size_type, vertex_t, DegreeMap, VertexIndexMap >
- DegreeLists;
- typedef Numbering< InversePermutationMap, diff_t, vertex_t,
- VertexIndexMap >
- NumberingD;
- typedef degreelists_marker< diff_t, vertex_t, VertexIndexMap >
- DegreeListsMarker;
- typedef Marker< diff_t, vertex_t, VertexIndexMap > MarkerP;
-
- // Data Members
- bool has_no_edges;
-
- // input parameters
- Graph& G;
- int delta;
- DegreeMap degree;
- InversePermutationMap inverse_perm;
- PermutationMap perm;
- SuperNodeMap supernode_size;
- VertexIndexMap vertex_index_map;
-
- // internal data-structures
- std::vector< vertex_t > index_vertex_vec;
- size_type n;
- IndexVertexMap index_vertex_map;
- DegreeLists degreelists;
- NumberingD numbering;
- DegreeListsMarker degree_lists_marker;
- MarkerP marker;
- Workspace work_space;
-
- public:
- mmd_impl(Graph& g, size_type n_, int delta, DegreeMap degree,
- InversePermutationMap inverse_perm, PermutationMap perm,
- SuperNodeMap supernode_size, VertexIndexMap id)
- : has_no_edges(true)
- , G(g)
- , delta(delta)
- , degree(degree)
- , inverse_perm(inverse_perm)
- , perm(perm)
- , supernode_size(supernode_size)
- , vertex_index_map(id)
- , index_vertex_vec(n_)
- , n(n_)
- , degreelists(n_ + 1, n_, degree, id)
- , numbering(inverse_perm, n_, vertex_index_map)
- , degree_lists_marker(n_, vertex_index_map)
- , marker(n_, vertex_index_map)
- , work_space(n_)
- {
- typename graph_traits< Graph >::vertex_iterator v, vend;
- size_type vid = 0;
- for (boost::tie(v, vend) = vertices(G); v != vend; ++v, ++vid)
- index_vertex_vec[vid] = *v;
- index_vertex_map = IndexVertexMap(&index_vertex_vec[0]);
-
- // Initialize degreelists. Degreelists organizes the nodes
- // according to their degree.
- for (boost::tie(v, vend) = vertices(G); v != vend; ++v)
- {
- typename Traits::degree_size_type d = out_degree(*v, G);
- put(degree, *v, d);
- if (0 < d)
- has_no_edges = false;
- degreelists.push(*v);
- }
- }
-
- void do_mmd()
- {
- // Eliminate the isolated nodes -- these are simply the nodes
- // with no neighbors, which are accessible as a list (really, a
- // stack) at location 0. Since these don't affect any other
- // nodes, we can eliminate them without doing degree updates.
- typename DegreeLists::stack list_isolated = degreelists[0];
- while (!list_isolated.empty())
- {
- vertex_t node = list_isolated.top();
- marker.mark_done(node);
- numbering(node);
- numbering.increment();
- list_isolated.pop();
- }
-
- if (has_no_edges)
- {
- return;
- }
-
- size_type min_degree = 1;
- typename DegreeLists::stack list_min_degree
- = degreelists[min_degree];
-
- while (list_min_degree.empty())
- {
- ++min_degree;
- list_min_degree = degreelists[min_degree];
- }
-
- // check if the whole eliminating process is done
- while (!numbering.all_done())
- {
-
- size_type min_degree_limit = min_degree + delta; // WARNING
- typename Workspace::stack llist = work_space.make_stack();
-
- // multiple elimination
- while (delta >= 0)
- {
-
- // Find the next non-empty degree
- for (list_min_degree = degreelists[min_degree];
- list_min_degree.empty()
- && min_degree <= min_degree_limit;
- ++min_degree,
- list_min_degree = degreelists[min_degree])
- ;
- if (min_degree > min_degree_limit)
- break;
-
- const vertex_t node = list_min_degree.top();
- const size_type node_id = get(vertex_index_map, node);
- list_min_degree.pop();
- numbering(node);
-
- // check if node is the last one
- if (numbering.all_done(supernode_size[node]))
- {
- numbering.increment(supernode_size[node]);
- break;
- }
- marker.increment_tag();
- marker.mark_tagged(node);
-
- this->eliminate(node);
-
- numbering.increment(supernode_size[node]);
- llist.push(node_id);
- } // multiple elimination
-
- if (numbering.all_done())
- break;
-
- this->update(llist, min_degree);
- }
-
- } // do_mmd()
-
- void eliminate(vertex_t node)
- {
- typename Workspace::stack element_neighbor
- = work_space.make_stack();
-
- // Create two function objects for edge removal
- typedef typename Workspace::stack WorkStack;
- predicateRemoveEdge1< Graph, MarkerP, NumberingD, WorkStack,
- VertexIndexMap >
- p(G, marker, numbering, element_neighbor, vertex_index_map);
-
- predicate_remove_tagged_edges< Graph, MarkerP > p2(G, marker);
-
- // Reconstruct the adjacent node list, push element neighbor in a
- // List.
- remove_out_edge_if(node, p, G);
- // during removal element neighbors are collected.
-
- while (!element_neighbor.empty())
- {
- // element absorb
- size_type e_id = element_neighbor.top();
- vertex_t element = get(index_vertex_map, e_id);
- adj_iter i, i_end;
- for (boost::tie(i, i_end) = adjacent_vertices(element, G);
- i != i_end; ++i)
- {
- vertex_t i_node = *i;
- if (!marker.is_tagged(i_node)
- && !numbering.is_numbered(i_node))
- {
- marker.mark_tagged(i_node);
- add_edge(node, i_node, G);
- }
- }
- element_neighbor.pop();
- }
- adj_iter v, ve;
- for (boost::tie(v, ve) = adjacent_vertices(node, G); v != ve; ++v)
- {
- vertex_t v_node = *v;
- if (!degree_lists_marker.need_update(v_node)
- && !degree_lists_marker.outmatched_or_done(v_node))
- {
- degreelists.remove(v_node);
- }
- // update out edges of v_node
- remove_out_edge_if(v_node, p2, G);
-
- if (out_degree(v_node, G) == 0)
- { // indistinguishable nodes
- supernode_size[node] += supernode_size[v_node];
- supernode_size[v_node] = 0;
- numbering.indistinguishable(v_node, node);
- marker.mark_done(v_node);
- degree_lists_marker.mark(v_node);
- }
- else
- { // not indistinguishable nodes
- add_edge(v_node, node, G);
- degree_lists_marker.mark_need_update(v_node);
- }
- }
- } // eliminate()
-
- template < class Stack > void update(Stack llist, size_type& min_degree)
- {
- size_type min_degree0 = min_degree + delta + 1;
-
- while (!llist.empty())
- {
- size_type deg, deg0 = 0;
-
- marker.set_multiple_tag(min_degree0);
- typename Workspace::stack q2list = work_space.make_stack();
- typename Workspace::stack qxlist = work_space.make_stack();
-
- vertex_t current = get(index_vertex_map, llist.top());
- adj_iter i, ie;
- for (boost::tie(i, ie) = adjacent_vertices(current, G); i != ie;
- ++i)
- {
- vertex_t i_node = *i;
- const size_type i_id = get(vertex_index_map, i_node);
- if (supernode_size[i_node] != 0)
- {
- deg0 += supernode_size[i_node];
- marker.mark_multiple_tagged(i_node);
- if (degree_lists_marker.need_update(i_node))
- {
- if (out_degree(i_node, G) == 2)
- q2list.push(i_id);
- else
- qxlist.push(i_id);
- }
- }
- }
-
- while (!q2list.empty())
- {
- const size_type u_id = q2list.top();
- vertex_t u_node = get(index_vertex_map, u_id);
- // if u_id is outmatched by others, no need to update degree
- if (degree_lists_marker.outmatched_or_done(u_node))
- {
- q2list.pop();
- continue;
- }
- marker.increment_tag();
- deg = deg0;
-
- adj_iter nu = adjacent_vertices(u_node, G).first;
- vertex_t neighbor = *nu;
- if (neighbor == u_node)
- {
- ++nu;
- neighbor = *nu;
- }
- if (numbering.is_numbered(neighbor))
- {
- adj_iter i, ie;
- for (boost::tie(i, ie) = adjacent_vertices(neighbor, G);
- i != ie; ++i)
- {
- const vertex_t i_node = *i;
- if (i_node == u_node || supernode_size[i_node] == 0)
- continue;
- if (marker.is_tagged(i_node))
- {
- if (degree_lists_marker.need_update(i_node))
- {
- if (out_degree(i_node, G) == 2)
- { // is indistinguishable
- supernode_size[u_node]
- += supernode_size[i_node];
- supernode_size[i_node] = 0;
- numbering.indistinguishable(
- i_node, u_node);
- marker.mark_done(i_node);
- degree_lists_marker.mark(i_node);
- }
- else // is outmatched
- degree_lists_marker.mark(i_node);
- }
- }
- else
- {
- marker.mark_tagged(i_node);
- deg += supernode_size[i_node];
- }
- }
- }
- else
- deg += supernode_size[neighbor];
-
- deg -= supernode_size[u_node];
- degree[u_node] = deg; // update degree
- degreelists[deg].push(u_node);
- // u_id has been pushed back into degreelists
- degree_lists_marker.unmark(u_node);
- if (min_degree > deg)
- min_degree = deg;
- q2list.pop();
- } // while (!q2list.empty())
-
- while (!qxlist.empty())
- {
- const size_type u_id = qxlist.top();
- const vertex_t u_node = get(index_vertex_map, u_id);
-
- // if u_id is outmatched by others, no need to update degree
- if (degree_lists_marker.outmatched_or_done(u_node))
- {
- qxlist.pop();
- continue;
- }
- marker.increment_tag();
- deg = deg0;
- adj_iter i, ie;
- for (boost::tie(i, ie) = adjacent_vertices(u_node, G);
- i != ie; ++i)
- {
- vertex_t i_node = *i;
- if (marker.is_tagged(i_node))
- continue;
- marker.mark_tagged(i_node);
-
- if (numbering.is_numbered(i_node))
- {
- adj_iter j, je;
- for (boost::tie(j, je)
- = adjacent_vertices(i_node, G);
- j != je; ++j)
- {
- const vertex_t j_node = *j;
- if (marker.is_not_tagged(j_node))
- {
- marker.mark_tagged(j_node);
- deg += supernode_size[j_node];
- }
- }
- }
- else
- deg += supernode_size[i_node];
- } // for adjacent vertices of u_node
- deg -= supernode_size[u_node];
- degree[u_node] = deg;
- degreelists[deg].push(u_node);
- // u_id has been pushed back into degreelists
- degree_lists_marker.unmark(u_node);
- if (min_degree > deg)
- min_degree = deg;
- qxlist.pop();
- } // while (!qxlist.empty()) {
-
- marker.set_tag_as_multiple_tag();
- llist.pop();
- } // while (! llist.empty())
-
- } // update()
-
- void build_permutation(InversePermutationMap next, PermutationMap prev)
- {
- // collect the permutation info
- size_type i;
- for (i = 0; i < n; ++i)
- {
- diff_t size = supernode_size[get(index_vertex_map, i)];
- if (size <= 0)
- {
- prev[i] = next[i];
- supernode_size[get(index_vertex_map, i)]
- = next[i] + 1; // record the supernode info
- }
- else
- prev[i] = -next[i];
- }
- for (i = 1; i < n + 1; ++i)
- {
- if (prev[i - 1] > 0)
- continue;
- diff_t parent = i;
- while (prev[parent - 1] < 0)
- {
- parent = -prev[parent - 1];
- }
-
- diff_t root = parent;
- diff_t num = prev[root - 1] + 1;
- next[i - 1] = -num;
- prev[root - 1] = num;
-
- parent = i;
- diff_t next_node = -prev[parent - 1];
- while (next_node > 0)
- {
- prev[parent - 1] = -root;
- parent = next_node;
- next_node = -prev[parent - 1];
- }
- }
- for (i = 0; i < n; i++)
- {
- diff_t num = -next[i] - 1;
- next[i] = num;
- prev[num] = i;
- }
- } // build_permutation()
- };
-
-} // namespace detail
-
-// MMD algorithm
-//
-// The implementation presently includes the enhancements for mass
-// elimination, incomplete degree update, multiple elimination, and
-// external degree.
-//
-// Important Note: This implementation requires the BGL graph to be
-// directed. Therefore, nonzero entry (i, j) in a symmetrical matrix
-// A coresponds to two directed edges (i->j and j->i).
-//
-// see Alan George and Joseph W. H. Liu, The Evolution of the Minimum
-// Degree Ordering Algorithm, SIAM Review, 31, 1989, Page 1-19
-template < class Graph, class DegreeMap, class InversePermutationMap,
- class PermutationMap, class SuperNodeMap, class VertexIndexMap >
-void minimum_degree_ordering(Graph& G, DegreeMap degree,
- InversePermutationMap inverse_perm, PermutationMap perm,
- SuperNodeMap supernode_size, int delta, VertexIndexMap vertex_index_map)
-{
- detail::mmd_impl< Graph, DegreeMap, InversePermutationMap, PermutationMap,
- SuperNodeMap, VertexIndexMap >
- impl(G, num_vertices(G), delta, degree, inverse_perm, perm,
- supernode_size, vertex_index_map);
- impl.do_mmd();
- impl.build_permutation(inverse_perm, perm);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_MINIMUM_DEGREE_ORDERING_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/neighbor_bfs.hpp b/contrib/restricted/boost/graph/include/boost/graph/neighbor_bfs.hpp
deleted file mode 100644
index bfe87a998b..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/neighbor_bfs.hpp
+++ /dev/null
@@ -1,326 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_NEIGHBOR_BREADTH_FIRST_SEARCH_HPP
-#define BOOST_GRAPH_NEIGHBOR_BREADTH_FIRST_SEARCH_HPP
-
-/*
- Neighbor Breadth First Search
- Like BFS, but traverses in-edges as well as out-edges.
- (for directed graphs only. use normal BFS for undirected graphs)
-*/
-#include <boost/config.hpp>
-#include <boost/ref.hpp>
-#include <vector>
-#include <boost/pending/queue.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/visitors.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-template < class Visitor, class Graph > struct NeighborBFSVisitorConcept
-{
- void constraints()
- {
- BOOST_CONCEPT_ASSERT((CopyConstructibleConcept< Visitor >));
- vis.initialize_vertex(u, g);
- vis.discover_vertex(u, g);
- vis.examine_vertex(u, g);
- vis.examine_out_edge(e, g);
- vis.examine_in_edge(e, g);
- vis.tree_out_edge(e, g);
- vis.tree_in_edge(e, g);
- vis.non_tree_out_edge(e, g);
- vis.non_tree_in_edge(e, g);
- vis.gray_target(e, g);
- vis.black_target(e, g);
- vis.gray_source(e, g);
- vis.black_source(e, g);
- vis.finish_vertex(u, g);
- }
- Visitor vis;
- Graph g;
- typename graph_traits< Graph >::vertex_descriptor u;
- typename graph_traits< Graph >::edge_descriptor e;
-};
-
-template < class Visitors = null_visitor > class neighbor_bfs_visitor
-{
-public:
- neighbor_bfs_visitor(Visitors vis = Visitors()) : m_vis(vis) {}
-
- template < class Vertex, class Graph >
- void initialize_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_initialize_vertex());
- }
- template < class Vertex, class Graph >
- void discover_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_discover_vertex());
- }
- template < class Vertex, class Graph >
- void examine_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_examine_vertex());
- }
- template < class Edge, class Graph > void examine_out_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_examine_edge());
- }
- template < class Edge, class Graph > void tree_out_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_tree_edge());
- }
- template < class Edge, class Graph >
- void non_tree_out_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_non_tree_edge());
- }
- template < class Edge, class Graph > void gray_target(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_gray_target());
- }
- template < class Edge, class Graph > void black_target(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_black_target());
- }
- template < class Edge, class Graph > void examine_in_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_examine_edge());
- }
- template < class Edge, class Graph > void tree_in_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_tree_edge());
- }
- template < class Edge, class Graph > void non_tree_in_edge(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_non_tree_edge());
- }
- template < class Edge, class Graph > void gray_source(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_gray_target());
- }
- template < class Edge, class Graph > void black_source(Edge e, Graph& g)
- {
- invoke_visitors(m_vis, e, g, on_black_target());
- }
- template < class Vertex, class Graph >
- void finish_vertex(Vertex u, Graph& g)
- {
- invoke_visitors(m_vis, u, g, on_finish_vertex());
- }
-
-protected:
- Visitors m_vis;
-};
-
-template < class Visitors >
-neighbor_bfs_visitor< Visitors > make_neighbor_bfs_visitor(Visitors vis)
-{
- return neighbor_bfs_visitor< Visitors >(vis);
-}
-
-namespace detail
-{
-
- template < class BidirectionalGraph, class Buffer, class BFSVisitor,
- class ColorMap >
- void neighbor_bfs_impl(const BidirectionalGraph& g,
- typename graph_traits< BidirectionalGraph >::vertex_descriptor s,
- Buffer& Q, BFSVisitor vis, ColorMap color)
-
- {
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< BidirectionalGraph >));
- typedef graph_traits< BidirectionalGraph > GTraits;
- typedef typename GTraits::vertex_descriptor Vertex;
- typedef typename GTraits::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(
- (NeighborBFSVisitorConcept< BFSVisitor, BidirectionalGraph >));
- BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept< ColorMap, Vertex >));
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- put(color, s, Color::gray());
- vis.discover_vertex(s, g);
- Q.push(s);
- while (!Q.empty())
- {
- Vertex u = Q.top();
- Q.pop(); // pop before push to avoid problem if Q is priority_queue.
- vis.examine_vertex(u, g);
-
- typename GTraits::out_edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei)
- {
- Edge e = *ei;
- vis.examine_out_edge(e, g);
- Vertex v = target(e, g);
- ColorValue v_color = get(color, v);
- if (v_color == Color::white())
- {
- vis.tree_out_edge(e, g);
- put(color, v, Color::gray());
- vis.discover_vertex(v, g);
- Q.push(v);
- }
- else
- {
- vis.non_tree_out_edge(e, g);
- if (v_color == Color::gray())
- vis.gray_target(e, g);
- else
- vis.black_target(e, g);
- }
- } // for out-edges
-
- typename GTraits::in_edge_iterator in_ei, in_ei_end;
- for (boost::tie(in_ei, in_ei_end) = in_edges(u, g);
- in_ei != in_ei_end; ++in_ei)
- {
- Edge e = *in_ei;
- vis.examine_in_edge(e, g);
- Vertex v = source(e, g);
- ColorValue v_color = get(color, v);
- if (v_color == Color::white())
- {
- vis.tree_in_edge(e, g);
- put(color, v, Color::gray());
- vis.discover_vertex(v, g);
- Q.push(v);
- }
- else
- {
- vis.non_tree_in_edge(e, g);
- if (v_color == Color::gray())
- vis.gray_source(e, g);
- else
- vis.black_source(e, g);
- }
- } // for in-edges
-
- put(color, u, Color::black());
- vis.finish_vertex(u, g);
- } // while
- }
-
- template < class VertexListGraph, class ColorMap, class BFSVisitor, class P,
- class T, class R >
- void neighbor_bfs_helper(VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- ColorMap color, BFSVisitor vis,
- const bgl_named_params< P, T, R >& params)
- {
- typedef graph_traits< VertexListGraph > Traits;
- // Buffer default
- typedef typename Traits::vertex_descriptor Vertex;
- typedef boost::queue< Vertex > queue_t;
- queue_t Q;
- // Initialization
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
- typename boost::graph_traits< VertexListGraph >::vertex_iterator i,
- i_end;
- for (boost::tie(i, i_end) = vertices(g); i != i_end; ++i)
- {
- put(color, *i, Color::white());
- vis.initialize_vertex(*i, g);
- }
- neighbor_bfs_impl(g, s,
- choose_param(get_param(params, buffer_param_t()), boost::ref(Q))
- .get(),
- vis, color);
- }
-
- //-------------------------------------------------------------------------
- // Choose between default color and color parameters. Using
- // function dispatching so that we don't require vertex index if
- // the color default is not being used.
-
- template < class ColorMap > struct neighbor_bfs_dispatch
- {
- template < class VertexListGraph, class P, class T, class R >
- static void apply(VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- const bgl_named_params< P, T, R >& params, ColorMap color)
- {
- neighbor_bfs_helper(g, s, color,
- choose_param(get_param(params, graph_visitor),
- make_neighbor_bfs_visitor(null_visitor())),
- params);
- }
- };
-
- template <> struct neighbor_bfs_dispatch< param_not_found >
- {
- template < class VertexListGraph, class P, class T, class R >
- static void apply(VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- const bgl_named_params< P, T, R >& params, param_not_found)
- {
- std::vector< default_color_type > color_vec(num_vertices(g));
- null_visitor null_vis;
-
- neighbor_bfs_helper(g, s,
- make_iterator_property_map(color_vec.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index),
- color_vec[0]),
- choose_param(get_param(params, graph_visitor),
- make_neighbor_bfs_visitor(null_vis)),
- params);
- }
- };
-
-} // namespace detail
-
-// Named Parameter Variant
-template < class VertexListGraph, class P, class T, class R >
-void neighbor_breadth_first_search(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- const bgl_named_params< P, T, R >& params)
-{
- // The graph is passed by *const* reference so that graph adaptors
- // (temporaries) can be passed into this function. However, the
- // graph is not really const since we may write to property maps
- // of the graph.
- VertexListGraph& ng = const_cast< VertexListGraph& >(g);
- typedef typename get_param_type< vertex_color_t,
- bgl_named_params< P, T, R > >::type C;
- detail::neighbor_bfs_dispatch< C >::apply(
- ng, s, params, get_param(params, vertex_color));
-}
-
-// This version does not initialize colors, user has to.
-
-template < class IncidenceGraph, class P, class T, class R >
-void neighbor_breadth_first_visit(IncidenceGraph& g,
- typename graph_traits< IncidenceGraph >::vertex_descriptor s,
- const bgl_named_params< P, T, R >& params)
-{
- typedef graph_traits< IncidenceGraph > Traits;
- // Buffer default
- typedef boost::queue< typename Traits::vertex_descriptor > queue_t;
- queue_t Q;
-
- detail::neighbor_bfs_impl(g, s,
- choose_param(get_param(params, buffer_param_t()), boost::ref(Q)).get(),
- choose_param(get_param(params, graph_visitor),
- make_neighbor_bfs_visitor(null_visitor())),
- choose_pmap(get_param(params, vertex_color), g, vertex_color));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_NEIGHBOR_BREADTH_FIRST_SEARCH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/one_bit_color_map.hpp b/contrib/restricted/boost/graph/include/boost/graph/one_bit_color_map.hpp
deleted file mode 100644
index b11f16f684..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/one_bit_color_map.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (C) 2005-2010 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jeremiah Willcock
-// Douglas Gregor
-// Andrew Lumsdaine
-
-// One bit per color property map (gray and black are the same, green is not
-// supported)
-
-#ifndef BOOST_ONE_BIT_COLOR_MAP_HPP
-#define BOOST_ONE_BIT_COLOR_MAP_HPP
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/detail/mpi_include.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/config.hpp>
-#include <boost/assert.hpp>
-#include <algorithm>
-#include <limits>
-
-namespace boost
-{
-
-enum one_bit_color_type
-{
- one_bit_white = 0,
- one_bit_not_white = 1
-};
-
-template <> struct color_traits< one_bit_color_type >
-{
- static one_bit_color_type white() { return one_bit_white; }
- static one_bit_color_type gray() { return one_bit_not_white; }
- static one_bit_color_type black() { return one_bit_not_white; }
-};
-
-template < typename IndexMap = identity_property_map > struct one_bit_color_map
-{
- BOOST_STATIC_CONSTANT(
- int, bits_per_char = std::numeric_limits< unsigned char >::digits);
- std::size_t n;
- IndexMap index;
- shared_array< unsigned char > data;
-
- typedef typename property_traits< IndexMap >::key_type key_type;
- typedef one_bit_color_type value_type;
- typedef void reference;
- typedef read_write_property_map_tag category;
-
- explicit one_bit_color_map(
- std::size_t n, const IndexMap& index = IndexMap())
- : n(n)
- , index(index)
- , data(new unsigned char[(n + bits_per_char - 1) / bits_per_char]())
- {
- }
-};
-
-template < typename IndexMap >
-inline one_bit_color_type get(const one_bit_color_map< IndexMap >& pm,
- typename property_traits< IndexMap >::key_type key)
-{
- BOOST_STATIC_CONSTANT(
- int, bits_per_char = one_bit_color_map< IndexMap >::bits_per_char);
- typename property_traits< IndexMap >::value_type i = get(pm.index, key);
- BOOST_ASSERT((std::size_t)i < pm.n);
- return one_bit_color_type(
- (pm.data.get()[i / bits_per_char] >> (i % bits_per_char)) & 1);
-}
-
-template < typename IndexMap >
-inline void put(const one_bit_color_map< IndexMap >& pm,
- typename property_traits< IndexMap >::key_type key,
- one_bit_color_type value)
-{
- BOOST_STATIC_CONSTANT(
- int, bits_per_char = one_bit_color_map< IndexMap >::bits_per_char);
- typename property_traits< IndexMap >::value_type i = get(pm.index, key);
- BOOST_ASSERT((std::size_t)i < pm.n);
- BOOST_ASSERT(value >= 0 && value < 2);
- std::size_t byte_num = i / bits_per_char;
- std::size_t bit_position = (i % bits_per_char);
- pm.data.get()[byte_num]
- = (unsigned char)((pm.data.get()[byte_num] & ~(1 << bit_position))
- | (value << bit_position));
-}
-
-template < typename IndexMap >
-inline one_bit_color_map< IndexMap > make_one_bit_color_map(
- std::size_t n, const IndexMap& index_map)
-{
- return one_bit_color_map< IndexMap >(n, index_map);
-}
-
-} // end namespace boost
-
-
-
-#endif // BOOST_ONE_BIT_COLOR_MAP_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/page_rank.hpp b/contrib/restricted/boost/graph/include/boost/graph/page_rank.hpp
deleted file mode 100644
index 94ae0f3409..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/page_rank.hpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2004-5 The Trustees of Indiana University.
-// Copyright 2002 Brad King and Douglas Gregor
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-
-#ifndef BOOST_GRAPH_PAGE_RANK_HPP
-#define BOOST_GRAPH_PAGE_RANK_HPP
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/overloading.hpp>
-#include <boost/graph/detail/mpi_include.hpp>
-#include <vector>
-
-namespace boost
-{
-namespace graph
-{
-
- struct n_iterations
- {
- explicit n_iterations(std::size_t n) : n(n) {}
-
- template < typename RankMap, typename Graph >
- bool operator()(const RankMap&, const Graph&)
- {
- return n-- == 0;
- }
-
- private:
- std::size_t n;
- };
-
- namespace detail
- {
- template < typename Graph, typename RankMap, typename RankMap2 >
- void page_rank_step(const Graph& g, RankMap from_rank, RankMap2 to_rank,
- typename property_traits< RankMap >::value_type damping,
- incidence_graph_tag)
- {
- typedef typename property_traits< RankMap >::value_type rank_type;
-
- // Set new rank maps
- BGL_FORALL_VERTICES_T(v, g, Graph)
- put(to_rank, v, rank_type(1 - damping));
-
- BGL_FORALL_VERTICES_T(u, g, Graph)
- {
- rank_type u_rank_out
- = damping * get(from_rank, u) / out_degree(u, g);
- BGL_FORALL_ADJ_T(u, v, g, Graph)
- put(to_rank, v, get(to_rank, v) + u_rank_out);
- }
- }
-
- template < typename Graph, typename RankMap, typename RankMap2 >
- void page_rank_step(const Graph& g, RankMap from_rank, RankMap2 to_rank,
- typename property_traits< RankMap >::value_type damping,
- bidirectional_graph_tag)
- {
- typedef
- typename property_traits< RankMap >::value_type damping_type;
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- typename property_traits< RankMap >::value_type rank(0);
- BGL_FORALL_INEDGES_T(v, e, g, Graph)
- rank += get(from_rank, source(e, g))
- / out_degree(source(e, g), g);
- put(to_rank, v, (damping_type(1) - damping) + damping * rank);
- }
- }
- } // end namespace detail
-
- template < typename Graph, typename RankMap, typename Done,
- typename RankMap2 >
- void page_rank(const Graph& g, RankMap rank_map, Done done,
- typename property_traits< RankMap >::value_type damping,
- typename graph_traits< Graph >::vertices_size_type n,
- RankMap2 rank_map2 BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- Graph, vertex_list_graph_tag))
- {
- typedef typename property_traits< RankMap >::value_type rank_type;
-
- rank_type initial_rank = rank_type(rank_type(1) / n);
- BGL_FORALL_VERTICES_T(v, g, Graph) put(rank_map, v, initial_rank);
-
- bool to_map_2 = true;
- while ((to_map_2 && !done(rank_map, g))
- || (!to_map_2 && !done(rank_map2, g)))
- {
- typedef typename graph_traits< Graph >::traversal_category category;
-
- if (to_map_2)
- {
- detail::page_rank_step(
- g, rank_map, rank_map2, damping, category());
- }
- else
- {
- detail::page_rank_step(
- g, rank_map2, rank_map, damping, category());
- }
- to_map_2 = !to_map_2;
- }
-
- if (!to_map_2)
- {
- BGL_FORALL_VERTICES_T(v, g, Graph)
- put(rank_map, v, get(rank_map2, v));
- }
- }
-
- template < typename Graph, typename RankMap, typename Done >
- void page_rank(const Graph& g, RankMap rank_map, Done done,
- typename property_traits< RankMap >::value_type damping,
- typename graph_traits< Graph >::vertices_size_type n)
- {
- typedef typename property_traits< RankMap >::value_type rank_type;
-
- std::vector< rank_type > ranks2(num_vertices(g));
- page_rank(g, rank_map, done, damping, n,
- make_iterator_property_map(ranks2.begin(), get(vertex_index, g)));
- }
-
- template < typename Graph, typename RankMap, typename Done >
- inline void page_rank(const Graph& g, RankMap rank_map, Done done,
- typename property_traits< RankMap >::value_type damping = 0.85)
- {
- page_rank(g, rank_map, done, damping, num_vertices(g));
- }
-
- template < typename Graph, typename RankMap >
- inline void page_rank(const Graph& g, RankMap rank_map)
- {
- page_rank(g, rank_map, n_iterations(20));
- }
-
- // TBD: this could be _much_ more efficient, using a queue to store
- // the vertices that should be reprocessed and keeping track of which
- // vertices are in the queue with a property map. Baah, this only
- // applies when we have a bidirectional graph.
- template < typename MutableGraph >
- void remove_dangling_links(
- MutableGraph& g BOOST_GRAPH_ENABLE_IF_MODELS_PARM(
- MutableGraph, vertex_list_graph_tag))
- {
- typename graph_traits< MutableGraph >::vertices_size_type old_n;
- do
- {
- old_n = num_vertices(g);
-
- typename graph_traits< MutableGraph >::vertex_iterator vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end;
- /* in loop */)
- {
- typename graph_traits< MutableGraph >::vertex_descriptor v
- = *vi++;
- if (out_degree(v, g) == 0)
- {
- clear_vertex(v, g);
- remove_vertex(v, g);
- }
- }
- } while (num_vertices(g) < old_n);
- }
-
-}
-} // end namespace boost::graph
-
-
-
-#endif // BOOST_GRAPH_PAGE_RANK_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_canonical_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_canonical_ordering.hpp
deleted file mode 100644
index f1bf7b773e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_canonical_ordering.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-//=======================================================================
-// Copyright (c) Aaron Windsor 2007
-//
-// 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 __PLANAR_CANONICAL_ORDERING_HPP__
-#define __PLANAR_CANONICAL_ORDERING_HPP__
-
-#include <vector>
-#include <list>
-#include <boost/config.hpp>
-#include <boost/next_prior.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
- enum planar_canonical_ordering_state
- {
- PCO_PROCESSED,
- PCO_UNPROCESSED,
- PCO_ONE_NEIGHBOR_PROCESSED,
- PCO_READY_TO_BE_PROCESSED
- };
-}
-
-template < typename Graph, typename PlanarEmbedding, typename OutputIterator,
- typename VertexIndexMap >
-void planar_canonical_ordering(const Graph& g, PlanarEmbedding embedding,
- OutputIterator ordering, VertexIndexMap vm)
-{
-
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef
- typename graph_traits< Graph >::adjacency_iterator adjacency_iterator_t;
- typedef typename property_traits< PlanarEmbedding >::value_type
- embedding_value_t;
- typedef typename embedding_value_t::const_iterator embedding_iterator_t;
- typedef iterator_property_map< typename std::vector< vertex_t >::iterator,
- VertexIndexMap >
- vertex_to_vertex_map_t;
- typedef iterator_property_map<
- typename std::vector< std::size_t >::iterator, VertexIndexMap >
- vertex_to_size_t_map_t;
-
- std::vector< vertex_t > processed_neighbor_vector(num_vertices(g));
- vertex_to_vertex_map_t processed_neighbor(
- processed_neighbor_vector.begin(), vm);
-
- std::vector< std::size_t > status_vector(
- num_vertices(g), detail::PCO_UNPROCESSED);
- vertex_to_size_t_map_t status(status_vector.begin(), vm);
-
- std::list< vertex_t > ready_to_be_processed;
-
- vertex_t first_vertex = *vertices(g).first;
- vertex_t second_vertex = first_vertex;
- adjacency_iterator_t ai, ai_end;
- for (boost::tie(ai, ai_end) = adjacent_vertices(first_vertex, g);
- ai != ai_end; ++ai)
- {
- if (*ai == first_vertex)
- continue;
- second_vertex = *ai;
- break;
- }
-
- ready_to_be_processed.push_back(first_vertex);
- status[first_vertex] = detail::PCO_READY_TO_BE_PROCESSED;
- ready_to_be_processed.push_back(second_vertex);
- status[second_vertex] = detail::PCO_READY_TO_BE_PROCESSED;
-
- while (!ready_to_be_processed.empty())
- {
- vertex_t u = ready_to_be_processed.front();
- ready_to_be_processed.pop_front();
-
- if (status[u] != detail::PCO_READY_TO_BE_PROCESSED
- && u != second_vertex)
- continue;
-
- embedding_iterator_t ei, ei_start, ei_end;
- embedding_iterator_t next_edge_itr, prior_edge_itr;
-
- ei_start = embedding[u].begin();
- ei_end = embedding[u].end();
- prior_edge_itr = prior(ei_end);
- while (source(*prior_edge_itr, g) == target(*prior_edge_itr, g))
- prior_edge_itr = prior(prior_edge_itr);
-
- for (ei = ei_start; ei != ei_end; ++ei)
- {
-
- edge_t e(*ei); // e = (u,v)
- next_edge_itr
- = boost::next(ei) == ei_end ? ei_start : boost::next(ei);
- vertex_t v = source(e, g) == u ? target(e, g) : source(e, g);
-
- vertex_t prior_vertex = source(*prior_edge_itr, g) == u
- ? target(*prior_edge_itr, g)
- : source(*prior_edge_itr, g);
- vertex_t next_vertex = source(*next_edge_itr, g) == u
- ? target(*next_edge_itr, g)
- : source(*next_edge_itr, g);
-
- // Need prior_vertex, u, v, and next_vertex to all be
- // distinct. This is possible, since the input graph is
- // triangulated. It'll be true all the time in a simple
- // graph, but loops and parallel edges cause some complications.
- if (prior_vertex == v || prior_vertex == u)
- {
- prior_edge_itr = ei;
- continue;
- }
-
- // Skip any self-loops
- if (u == v)
- continue;
-
- // Move next_edge_itr (and next_vertex) forwards
- // past any loops or parallel edges
- while (next_vertex == v || next_vertex == u)
- {
- next_edge_itr = boost::next(next_edge_itr) == ei_end
- ? ei_start
- : boost::next(next_edge_itr);
- next_vertex = source(*next_edge_itr, g) == u
- ? target(*next_edge_itr, g)
- : source(*next_edge_itr, g);
- }
-
- if (status[v] == detail::PCO_UNPROCESSED)
- {
- status[v] = detail::PCO_ONE_NEIGHBOR_PROCESSED;
- processed_neighbor[v] = u;
- }
- else if (status[v] == detail::PCO_ONE_NEIGHBOR_PROCESSED)
- {
- vertex_t x = processed_neighbor[v];
- // are edges (v,u) and (v,x) adjacent in the planar
- // embedding? if so, set status[v] = 1. otherwise, set
- // status[v] = 2.
-
- if ((next_vertex == x
- && !(first_vertex == u && second_vertex == x))
- || (prior_vertex == x
- && !(first_vertex == x && second_vertex == u)))
- {
- status[v] = detail::PCO_READY_TO_BE_PROCESSED;
- }
- else
- {
- status[v] = detail::PCO_READY_TO_BE_PROCESSED + 1;
- }
- }
- else if (status[v] > detail::PCO_ONE_NEIGHBOR_PROCESSED)
- {
- // check the two edges before and after (v,u) in the planar
- // embedding, and update status[v] accordingly
-
- bool processed_before = false;
- if (status[prior_vertex] == detail::PCO_PROCESSED)
- processed_before = true;
-
- bool processed_after = false;
- if (status[next_vertex] == detail::PCO_PROCESSED)
- processed_after = true;
-
- if (!processed_before && !processed_after)
- ++status[v];
-
- else if (processed_before && processed_after)
- --status[v];
- }
-
- if (status[v] == detail::PCO_READY_TO_BE_PROCESSED)
- ready_to_be_processed.push_back(v);
-
- prior_edge_itr = ei;
- }
-
- status[u] = detail::PCO_PROCESSED;
- *ordering = u;
- ++ordering;
- }
-}
-
-template < typename Graph, typename PlanarEmbedding, typename OutputIterator >
-void planar_canonical_ordering(
- const Graph& g, PlanarEmbedding embedding, OutputIterator ordering)
-{
- planar_canonical_ordering(g, embedding, ordering, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif //__PLANAR_CANONICAL_ORDERING_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/add_edge_visitors.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_detail/add_edge_visitors.hpp
deleted file mode 100644
index 7ea34f479d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/add_edge_visitors.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __ADD_EDGE_VISITORS_HPP__
-#define __ADD_EDGE_VISITORS_HPP__
-
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-struct default_add_edge_visitor
-{
-
- template < typename Graph, typename Vertex >
- void visit_vertex_pair(Vertex u, Vertex v, Graph& g)
- {
- add_edge(u, v, g);
- }
-};
-
-template < typename EdgeIndexMap > struct edge_index_update_visitor
-{
-
- typedef
- typename property_traits< EdgeIndexMap >::value_type edge_index_value_t;
-
- edge_index_update_visitor(
- EdgeIndexMap em, edge_index_value_t next_index_available)
- : m_em(em), m_next_index(next_index_available)
- {
- }
-
- template < typename Graph, typename Vertex >
- void visit_vertex_pair(Vertex u, Vertex v, Graph& g)
- {
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- std::pair< edge_t, bool > return_value = add_edge(u, v, g);
- if (return_value.second)
- put(m_em, return_value.first, m_next_index++);
- }
-
-private:
- EdgeIndexMap m_em;
- edge_index_value_t m_next_index;
-};
-
-} // namespace boost
-
-#endif //__ADD_EDGE_VISITORS_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/boyer_myrvold_impl.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_detail/boyer_myrvold_impl.hpp
deleted file mode 100644
index c2797c1d81..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/boyer_myrvold_impl.hpp
+++ /dev/null
@@ -1,1813 +0,0 @@
-//=======================================================================
-// Copyright (c) Aaron Windsor 2007
-//
-// 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 __BOYER_MYRVOLD_IMPL_HPP__
-#define __BOYER_MYRVOLD_IMPL_HPP__
-
-#include <vector>
-#include <list>
-#include <boost/next_prior.hpp>
-#include <boost/config.hpp> //for std::min macros
-#include <boost/shared_ptr.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/depth_first_search.hpp>
-#include <boost/graph/planar_detail/face_handles.hpp>
-#include <boost/graph/planar_detail/face_iterators.hpp>
-#include <boost/graph/planar_detail/bucket_sort.hpp>
-
-namespace boost
-{
-namespace detail
-{
- enum bm_case_t
- {
- BM_NO_CASE_CHOSEN,
- BM_CASE_A,
- BM_CASE_B,
- BM_CASE_C,
- BM_CASE_D,
- BM_CASE_E
- };
-}
-
-template < typename LowPointMap, typename DFSParentMap, typename DFSNumberMap,
- typename LeastAncestorMap, typename DFSParentEdgeMap, typename SizeType >
-struct planar_dfs_visitor : public dfs_visitor<>
-{
- planar_dfs_visitor(LowPointMap lpm, DFSParentMap dfs_p, DFSNumberMap dfs_n,
- LeastAncestorMap lam, DFSParentEdgeMap dfs_edge)
- : low(lpm)
- , parent(dfs_p)
- , df_number(dfs_n)
- , least_ancestor(lam)
- , df_edge(dfs_edge)
- , count(0)
- {
- }
-
- template < typename Vertex, typename Graph >
- void start_vertex(const Vertex& u, Graph&)
- {
- put(parent, u, u);
- put(least_ancestor, u, count);
- }
-
- template < typename Vertex, typename Graph >
- void discover_vertex(const Vertex& u, Graph&)
- {
- put(low, u, count);
- put(df_number, u, count);
- ++count;
- }
-
- template < typename Edge, typename Graph >
- void tree_edge(const Edge& e, Graph& g)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- vertex_t s(source(e, g));
- vertex_t t(target(e, g));
-
- put(parent, t, s);
- put(df_edge, t, e);
- put(least_ancestor, t, get(df_number, s));
- }
-
- template < typename Edge, typename Graph >
- void back_edge(const Edge& e, Graph& g)
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
-
- vertex_t s(source(e, g));
- vertex_t t(target(e, g));
- BOOST_USING_STD_MIN();
-
- if (t != get(parent, s))
- {
- v_size_t s_low_df_number = get(low, s);
- v_size_t t_df_number = get(df_number, t);
- v_size_t s_least_ancestor_df_number = get(least_ancestor, s);
-
- put(low, s,
- min BOOST_PREVENT_MACRO_SUBSTITUTION(
- s_low_df_number, t_df_number));
-
- put(least_ancestor, s,
- min BOOST_PREVENT_MACRO_SUBSTITUTION(
- s_least_ancestor_df_number, t_df_number));
- }
- }
-
- template < typename Vertex, typename Graph >
- void finish_vertex(const Vertex& u, Graph&)
- {
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
-
- Vertex u_parent = get(parent, u);
- v_size_t u_parent_lowpoint = get(low, u_parent);
- v_size_t u_lowpoint = get(low, u);
- BOOST_USING_STD_MIN();
-
- if (u_parent != u)
- {
- put(low, u_parent,
- min BOOST_PREVENT_MACRO_SUBSTITUTION(
- u_lowpoint, u_parent_lowpoint));
- }
- }
-
- LowPointMap low;
- DFSParentMap parent;
- DFSNumberMap df_number;
- LeastAncestorMap least_ancestor;
- DFSParentEdgeMap df_edge;
- SizeType count;
-};
-
-template < typename Graph, typename VertexIndexMap,
- typename StoreOldHandlesPolicy = graph::detail::store_old_handles,
- typename StoreEmbeddingPolicy = graph::detail::recursive_lazy_list >
-class boyer_myrvold_impl
-{
-
- typedef typename graph_traits< Graph >::vertices_size_type v_size_t;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
- typedef
- typename graph_traits< Graph >::out_edge_iterator out_edge_iterator_t;
- typedef graph::detail::face_handle< Graph, StoreOldHandlesPolicy,
- StoreEmbeddingPolicy >
- face_handle_t;
- typedef std::vector< vertex_t > vertex_vector_t;
- typedef std::vector< edge_t > edge_vector_t;
- typedef std::list< vertex_t > vertex_list_t;
- typedef std::list< face_handle_t > face_handle_list_t;
- typedef boost::shared_ptr< face_handle_list_t > face_handle_list_ptr_t;
- typedef boost::shared_ptr< vertex_list_t > vertex_list_ptr_t;
- typedef boost::tuple< vertex_t, bool, bool > merge_stack_frame_t;
- typedef std::vector< merge_stack_frame_t > merge_stack_t;
-
- template < typename T > struct map_vertex_to_
- {
- typedef iterator_property_map< typename std::vector< T >::iterator,
- VertexIndexMap >
- type;
- };
-
- typedef typename map_vertex_to_< v_size_t >::type vertex_to_v_size_map_t;
- typedef typename map_vertex_to_< vertex_t >::type vertex_to_vertex_map_t;
- typedef typename map_vertex_to_< edge_t >::type vertex_to_edge_map_t;
- typedef typename map_vertex_to_< vertex_list_ptr_t >::type
- vertex_to_vertex_list_ptr_map_t;
- typedef typename map_vertex_to_< edge_vector_t >::type
- vertex_to_edge_vector_map_t;
- typedef typename map_vertex_to_< bool >::type vertex_to_bool_map_t;
- typedef typename map_vertex_to_< face_handle_t >::type
- vertex_to_face_handle_map_t;
- typedef typename map_vertex_to_< face_handle_list_ptr_t >::type
- vertex_to_face_handle_list_ptr_map_t;
- typedef typename map_vertex_to_< typename vertex_list_t::iterator >::type
- vertex_to_separated_node_map_t;
-
- template < typename BicompSideToTraverse = single_side,
- typename VisitorType = lead_visitor, typename Time = current_iteration >
- struct face_vertex_iterator
- {
- typedef face_iterator< Graph, vertex_to_face_handle_map_t, vertex_t,
- BicompSideToTraverse, VisitorType, Time >
- type;
- };
-
- template < typename BicompSideToTraverse = single_side,
- typename Time = current_iteration >
- struct face_edge_iterator
- {
- typedef face_iterator< Graph, vertex_to_face_handle_map_t, edge_t,
- BicompSideToTraverse, lead_visitor, Time >
- type;
- };
-
-public:
- boyer_myrvold_impl(const Graph& arg_g, VertexIndexMap arg_vm)
- : g(arg_g)
- , vm(arg_vm)
- ,
-
- low_point_vector(num_vertices(g))
- , dfs_parent_vector(num_vertices(g))
- , dfs_number_vector(num_vertices(g))
- , least_ancestor_vector(num_vertices(g))
- , pertinent_roots_vector(num_vertices(g))
- , backedge_flag_vector(num_vertices(g), num_vertices(g) + 1)
- , visited_vector(num_vertices(g), num_vertices(g) + 1)
- , face_handles_vector(num_vertices(g))
- , dfs_child_handles_vector(num_vertices(g))
- , separated_dfs_child_list_vector(num_vertices(g))
- , separated_node_in_parent_list_vector(num_vertices(g))
- , canonical_dfs_child_vector(num_vertices(g))
- , flipped_vector(num_vertices(g), false)
- , backedges_vector(num_vertices(g))
- , dfs_parent_edge_vector(num_vertices(g))
- ,
-
- vertices_by_dfs_num(num_vertices(g))
- ,
-
- low_point(low_point_vector.begin(), vm)
- , dfs_parent(dfs_parent_vector.begin(), vm)
- , dfs_number(dfs_number_vector.begin(), vm)
- , least_ancestor(least_ancestor_vector.begin(), vm)
- , pertinent_roots(pertinent_roots_vector.begin(), vm)
- , backedge_flag(backedge_flag_vector.begin(), vm)
- , visited(visited_vector.begin(), vm)
- , face_handles(face_handles_vector.begin(), vm)
- , dfs_child_handles(dfs_child_handles_vector.begin(), vm)
- , separated_dfs_child_list(separated_dfs_child_list_vector.begin(), vm)
- , separated_node_in_parent_list(
- separated_node_in_parent_list_vector.begin(), vm)
- , canonical_dfs_child(canonical_dfs_child_vector.begin(), vm)
- , flipped(flipped_vector.begin(), vm)
- , backedges(backedges_vector.begin(), vm)
- , dfs_parent_edge(dfs_parent_edge_vector.begin(), vm)
-
- {
-
- planar_dfs_visitor< vertex_to_v_size_map_t, vertex_to_vertex_map_t,
- vertex_to_v_size_map_t, vertex_to_v_size_map_t,
- vertex_to_edge_map_t, v_size_t >
- vis(low_point, dfs_parent, dfs_number, least_ancestor,
- dfs_parent_edge);
-
- // Perform a depth-first search to find each vertex's low point, least
- // ancestor, and dfs tree information
- depth_first_search(g, visitor(vis).vertex_index_map(vm));
-
- // Sort vertices by their lowpoint - need this later in the constructor
- vertex_vector_t vertices_by_lowpoint(num_vertices(g));
- std::copy(vertices(g).first, vertices(g).second,
- vertices_by_lowpoint.begin());
- bucket_sort(vertices_by_lowpoint.begin(), vertices_by_lowpoint.end(),
- low_point, num_vertices(g));
-
- // Sort vertices by their dfs number - need this to iterate by reverse
- // DFS number in the main loop.
- std::copy(
- vertices(g).first, vertices(g).second, vertices_by_dfs_num.begin());
- bucket_sort(vertices_by_dfs_num.begin(), vertices_by_dfs_num.end(),
- dfs_number, num_vertices(g));
-
- // Initialize face handles. A face handle is an abstraction that serves
- // two uses in our implementation - it allows us to efficiently move
- // along the outer face of embedded bicomps in a partially embedded
- // graph, and it provides storage for the planar embedding. Face
- // handles are implemented by a sequence of edges and are associated
- // with a particular vertex - the sequence of edges represents the
- // current embedding of edges around that vertex, and the first and
- // last edges in the sequence represent the pair of edges on the outer
- // face that are adjacent to the associated vertex. This lets us embed
- // edges in the graph by just pushing them on the front or back of the
- // sequence of edges held by the face handles.
- //
- // Our algorithm starts with a DFS tree of edges (where every vertex is
- // an articulation point and every edge is a singleton bicomp) and
- // repeatedly merges bicomps by embedding additional edges. Note that
- // any bicomp at any point in the algorithm can be associated with a
- // unique edge connecting the vertex of that bicomp with the lowest DFS
- // number (which we refer to as the "root" of the bicomp) with its DFS
- // child in the bicomp: the existence of two such edges would contradict
- // the properties of a DFS tree. We refer to the DFS child of the root
- // of a bicomp as the "canonical DFS child" of the bicomp. Note that a
- // vertex can be the root of more than one bicomp.
- //
- // We move around the external faces of a bicomp using a few property
- // maps, which we'll initialize presently:
- //
- // - face_handles: maps a vertex to a face handle that can be used to
- // move "up" a bicomp. For a vertex that isn't an articulation point,
- // this holds the face handles that can be used to move around that
- // vertex's unique bicomp. For a vertex that is an articulation point,
- // this holds the face handles associated with the unique bicomp that
- // the vertex is NOT the root of. These handles can therefore be used
- // to move from any point on the outer face of the tree of bicomps
- // around the current outer face towards the root of the DFS tree.
- //
- // - dfs_child_handles: these are used to hold face handles for
- // vertices that are articulation points - dfs_child_handles[v] holds
- // the face handles corresponding to vertex u in the bicomp with root
- // u and canonical DFS child v.
- //
- // - canonical_dfs_child: this property map allows one to determine the
- // canonical DFS child of a bicomp while traversing the outer face.
- // This property map is only valid when applied to one of the two
- // vertices adjacent to the root of the bicomp on the outer face. To
- // be more precise, if v is the canonical DFS child of a bicomp,
- // canonical_dfs_child[dfs_child_handles[v].first_vertex()] == v and
- // canonical_dfs_child[dfs_child_handles[v].second_vertex()] == v.
- //
- // - pertinent_roots: given a vertex v, pertinent_roots[v] contains a
- // list of face handles pointing to the top of bicomps that need to
- // be visited by the current walkdown traversal (since they lead to
- // backedges that need to be embedded). These lists are populated by
- // the walkup and consumed by the walkdown.
-
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_t v(*vi);
- vertex_t parent = dfs_parent[v];
-
- if (parent != v)
- {
- edge_t parent_edge = dfs_parent_edge[v];
- add_to_embedded_edges(parent_edge, StoreOldHandlesPolicy());
- face_handles[v] = face_handle_t(v, parent_edge, g);
- dfs_child_handles[v] = face_handle_t(parent, parent_edge, g);
- }
- else
- {
- face_handles[v] = face_handle_t(v);
- dfs_child_handles[v] = face_handle_t(parent);
- }
-
- canonical_dfs_child[v] = v;
- pertinent_roots[v] = face_handle_list_ptr_t(new face_handle_list_t);
- separated_dfs_child_list[v] = vertex_list_ptr_t(new vertex_list_t);
- }
-
- // We need to create a list of not-yet-merged depth-first children for
- // each vertex that will be updated as bicomps get merged. We sort each
- // list by ascending lowpoint, which allows the externally_active
- // function to run in constant time, and we keep a pointer to each
- // vertex's representation in its parent's list, which allows merging
- // in constant time.
-
- for (typename vertex_vector_t::iterator itr
- = vertices_by_lowpoint.begin();
- itr != vertices_by_lowpoint.end(); ++itr)
- {
- vertex_t v(*itr);
- vertex_t parent(dfs_parent[v]);
- if (v != parent)
- {
- separated_node_in_parent_list[v]
- = separated_dfs_child_list[parent]->insert(
- separated_dfs_child_list[parent]->end(), v);
- }
- }
-
- // The merge stack holds path information during a walkdown iteration
- merge_stack.reserve(num_vertices(g));
- }
-
- bool is_planar()
- {
-
- // This is the main algorithm: starting with a DFS tree of embedded
- // edges (which, since it's a tree, is planar), iterate through all
- // vertices by reverse DFS number, attempting to embed all backedges
- // connecting the current vertex to vertices with higher DFS numbers.
- //
- // The walkup is a procedure that examines all such backedges and sets
- // up the required data structures so that they can be searched by the
- // walkdown in linear time. The walkdown does the actual work of
- // embedding edges and flipping bicomps, and can identify when it has
- // come across a kuratowski subgraph.
- //
- // store_old_face_handles caches face handles from the previous
- // iteration - this is used only for the kuratowski subgraph isolation,
- // and is therefore dispatched based on the StoreOldHandlesPolicy.
- //
- // clean_up_embedding does some clean-up and fills in values that have
- // to be computed lazily during the actual execution of the algorithm
- // (for instance, whether or not a bicomp is flipped in the final
- // embedding). It's dispatched on the the StoreEmbeddingPolicy, since
- // it's not needed if an embedding isn't desired.
-
- typename vertex_vector_t::reverse_iterator vi, vi_end;
-
- vi_end = vertices_by_dfs_num.rend();
- for (vi = vertices_by_dfs_num.rbegin(); vi != vi_end; ++vi)
- {
-
- store_old_face_handles(StoreOldHandlesPolicy());
-
- vertex_t v(*vi);
-
- walkup(v);
-
- if (!walkdown(v))
- return false;
- }
-
- clean_up_embedding(StoreEmbeddingPolicy());
-
- return true;
- }
-
-private:
- void walkup(vertex_t v)
- {
-
- // The point of the walkup is to follow all backedges from v to
- // vertices with higher DFS numbers, and update pertinent_roots
- // for the bicomp roots on the path from backedge endpoints up
- // to v. This will set the stage for the walkdown to efficiently
- // traverse the graph of bicomps down from v.
-
- typedef
- typename face_vertex_iterator< both_sides >::type walkup_iterator_t;
-
- out_edge_iterator_t oi, oi_end;
- for (boost::tie(oi, oi_end) = out_edges(v, g); oi != oi_end; ++oi)
- {
- edge_t e(*oi);
- vertex_t e_source(source(e, g));
- vertex_t e_target(target(e, g));
-
- if (e_source == e_target)
- {
- self_loops.push_back(e);
- continue;
- }
-
- vertex_t w(e_source == v ? e_target : e_source);
-
- // continue if not a back edge or already embedded
- if (dfs_number[w] < dfs_number[v] || e == dfs_parent_edge[w])
- continue;
-
- backedges[w].push_back(e);
-
- v_size_t timestamp = dfs_number[v];
- backedge_flag[w] = timestamp;
-
- walkup_iterator_t walkup_itr(w, face_handles);
- walkup_iterator_t walkup_end;
- vertex_t lead_vertex = w;
-
- while (true)
- {
-
- // Move to the root of the current bicomp or the first visited
- // vertex on the bicomp by going up each side in parallel
-
- while (walkup_itr != walkup_end
- && visited[*walkup_itr] != timestamp)
- {
- lead_vertex = *walkup_itr;
- visited[lead_vertex] = timestamp;
- ++walkup_itr;
- }
-
- // If we've found the root of a bicomp through a path we haven't
- // seen before, update pertinent_roots with a handle to the
- // current bicomp. Otherwise, we've just seen a path we've been
- // up before, so break out of the main while loop.
-
- if (walkup_itr == walkup_end)
- {
- vertex_t dfs_child = canonical_dfs_child[lead_vertex];
- vertex_t parent = dfs_parent[dfs_child];
-
- visited[dfs_child_handles[dfs_child].first_vertex()]
- = timestamp;
- visited[dfs_child_handles[dfs_child].second_vertex()]
- = timestamp;
-
- if (low_point[dfs_child] < dfs_number[v]
- || least_ancestor[dfs_child] < dfs_number[v])
- {
- pertinent_roots[parent]->push_back(
- dfs_child_handles[dfs_child]);
- }
- else
- {
- pertinent_roots[parent]->push_front(
- dfs_child_handles[dfs_child]);
- }
-
- if (parent != v && visited[parent] != timestamp)
- {
- walkup_itr = walkup_iterator_t(parent, face_handles);
- lead_vertex = parent;
- }
- else
- break;
- }
- else
- break;
- }
- }
- }
-
- bool walkdown(vertex_t v)
- {
- // This procedure is where all of the action is - pertinent_roots
- // has already been set up by the walkup, so we just need to move
- // down bicomps from v until we find vertices that have been
- // labeled as backedge endpoints. Once we find such a vertex, we
- // embed the corresponding edge and glue together the bicomps on
- // the path connecting the two vertices in the edge. This may
- // involve flipping bicomps along the way.
-
- vertex_t w; // the other endpoint of the edge we're embedding
-
- while (!pertinent_roots[v]->empty())
- {
-
- face_handle_t root_face_handle = pertinent_roots[v]->front();
- face_handle_t curr_face_handle = root_face_handle;
- pertinent_roots[v]->pop_front();
-
- merge_stack.clear();
-
- while (true)
- {
-
- typename face_vertex_iterator<>::type first_face_itr,
- second_face_itr, face_end;
- vertex_t first_side_vertex
- = graph_traits< Graph >::null_vertex();
- vertex_t second_side_vertex
- = graph_traits< Graph >::null_vertex();
- vertex_t first_tail, second_tail;
-
- first_tail = second_tail = curr_face_handle.get_anchor();
- first_face_itr = typename face_vertex_iterator<>::type(
- curr_face_handle, face_handles, first_side());
- second_face_itr = typename face_vertex_iterator<>::type(
- curr_face_handle, face_handles, second_side());
-
- for (; first_face_itr != face_end; ++first_face_itr)
- {
- vertex_t face_vertex(*first_face_itr);
- if (pertinent(face_vertex, v)
- || externally_active(face_vertex, v))
- {
- first_side_vertex = face_vertex;
- second_side_vertex = face_vertex;
- break;
- }
- first_tail = face_vertex;
- }
-
- if (first_side_vertex == graph_traits< Graph >::null_vertex()
- || first_side_vertex == curr_face_handle.get_anchor())
- break;
-
- for (; second_face_itr != face_end; ++second_face_itr)
- {
- vertex_t face_vertex(*second_face_itr);
- if (pertinent(face_vertex, v)
- || externally_active(face_vertex, v))
- {
- second_side_vertex = face_vertex;
- break;
- }
- second_tail = face_vertex;
- }
-
- vertex_t chosen;
- bool chose_first_upper_path;
- if (internally_active(first_side_vertex, v))
- {
- chosen = first_side_vertex;
- chose_first_upper_path = true;
- }
- else if (internally_active(second_side_vertex, v))
- {
- chosen = second_side_vertex;
- chose_first_upper_path = false;
- }
- else if (pertinent(first_side_vertex, v))
- {
- chosen = first_side_vertex;
- chose_first_upper_path = true;
- }
- else if (pertinent(second_side_vertex, v))
- {
- chosen = second_side_vertex;
- chose_first_upper_path = false;
- }
- else
- {
-
- // If there's a pertinent vertex on the lower face
- // between the first_face_itr and the second_face_itr,
- // this graph isn't planar.
- for (; *first_face_itr != second_side_vertex;
- ++first_face_itr)
- {
- vertex_t p(*first_face_itr);
- if (pertinent(p, v))
- {
- // Found a Kuratowski subgraph
- kuratowski_v = v;
- kuratowski_x = first_side_vertex;
- kuratowski_y = second_side_vertex;
- return false;
- }
- }
-
- // Otherwise, the fact that we didn't find a pertinent
- // vertex on this face is fine - we should set the
- // short-circuit edges and break out of this loop to
- // start looking at a different pertinent root.
-
- if (first_side_vertex == second_side_vertex)
- {
- if (first_tail != v)
- {
- vertex_t first
- = face_handles[first_tail].first_vertex();
- vertex_t second
- = face_handles[first_tail].second_vertex();
- boost::tie(first_side_vertex, first_tail)
- = make_tuple(first_tail,
- first == first_side_vertex ? second
- : first);
- }
- else if (second_tail != v)
- {
- vertex_t first
- = face_handles[second_tail].first_vertex();
- vertex_t second
- = face_handles[second_tail].second_vertex();
- boost::tie(second_side_vertex, second_tail)
- = make_tuple(second_tail,
- first == second_side_vertex ? second
- : first);
- }
- else
- break;
- }
-
- canonical_dfs_child[first_side_vertex]
- = canonical_dfs_child[root_face_handle.first_vertex()];
- canonical_dfs_child[second_side_vertex]
- = canonical_dfs_child[root_face_handle.second_vertex()];
- root_face_handle.set_first_vertex(first_side_vertex);
- root_face_handle.set_second_vertex(second_side_vertex);
-
- if (face_handles[first_side_vertex].first_vertex()
- == first_tail)
- face_handles[first_side_vertex].set_first_vertex(v);
- else
- face_handles[first_side_vertex].set_second_vertex(v);
-
- if (face_handles[second_side_vertex].first_vertex()
- == second_tail)
- face_handles[second_side_vertex].set_first_vertex(v);
- else
- face_handles[second_side_vertex].set_second_vertex(v);
-
- break;
- }
-
- // When we unwind the stack, we need to know which direction
- // we came down from on the top face handle
-
- bool chose_first_lower_path
- = (chose_first_upper_path
- && face_handles[chosen].first_vertex() == first_tail)
- || (!chose_first_upper_path
- && face_handles[chosen].first_vertex() == second_tail);
-
- // If there's a backedge at the chosen vertex, embed it now
- if (backedge_flag[chosen] == dfs_number[v])
- {
- w = chosen;
-
- backedge_flag[chosen] = num_vertices(g) + 1;
- add_to_merge_points(chosen, StoreOldHandlesPolicy());
-
- typename edge_vector_t::iterator ei, ei_end;
- ei_end = backedges[chosen].end();
- for (ei = backedges[chosen].begin(); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- add_to_embedded_edges(e, StoreOldHandlesPolicy());
-
- if (chose_first_lower_path)
- face_handles[chosen].push_first(e, g);
- else
- face_handles[chosen].push_second(e, g);
- }
- }
- else
- {
- merge_stack.push_back(make_tuple(chosen,
- chose_first_upper_path, chose_first_lower_path));
- curr_face_handle = *pertinent_roots[chosen]->begin();
- continue;
- }
-
- // Unwind the merge stack to the root, merging all bicomps
-
- bool bottom_path_follows_first;
- bool top_path_follows_first;
- bool next_bottom_follows_first = chose_first_upper_path;
-
- vertex_t merge_point = chosen;
-
- while (!merge_stack.empty())
- {
-
- bottom_path_follows_first = next_bottom_follows_first;
- boost::tie(merge_point, next_bottom_follows_first,
- top_path_follows_first)
- = merge_stack.back();
- merge_stack.pop_back();
-
- face_handle_t top_handle(face_handles[merge_point]);
- face_handle_t bottom_handle(
- *pertinent_roots[merge_point]->begin());
-
- vertex_t bottom_dfs_child = canonical_dfs_child
- [pertinent_roots[merge_point]->begin()->first_vertex()];
-
- remove_vertex_from_separated_dfs_child_list(
- canonical_dfs_child[pertinent_roots[merge_point]
- ->begin()
- ->first_vertex()]);
-
- pertinent_roots[merge_point]->pop_front();
-
- add_to_merge_points(
- top_handle.get_anchor(), StoreOldHandlesPolicy());
-
- if (top_path_follows_first && bottom_path_follows_first)
- {
- bottom_handle.flip();
- top_handle.glue_first_to_second(bottom_handle);
- }
- else if (!top_path_follows_first
- && bottom_path_follows_first)
- {
- flipped[bottom_dfs_child] = true;
- top_handle.glue_second_to_first(bottom_handle);
- }
- else if (top_path_follows_first
- && !bottom_path_follows_first)
- {
- flipped[bottom_dfs_child] = true;
- top_handle.glue_first_to_second(bottom_handle);
- }
- else //! top_path_follows_first &&
- //! !bottom_path_follows_first
- {
- bottom_handle.flip();
- top_handle.glue_second_to_first(bottom_handle);
- }
- }
-
- // Finally, embed all edges (v,w) at their upper end points
- canonical_dfs_child[w]
- = canonical_dfs_child[root_face_handle.first_vertex()];
-
- add_to_merge_points(
- root_face_handle.get_anchor(), StoreOldHandlesPolicy());
-
- typename edge_vector_t::iterator ei, ei_end;
- ei_end = backedges[chosen].end();
- for (ei = backedges[chosen].begin(); ei != ei_end; ++ei)
- {
- if (next_bottom_follows_first)
- root_face_handle.push_first(*ei, g);
- else
- root_face_handle.push_second(*ei, g);
- }
-
- backedges[chosen].clear();
- curr_face_handle = root_face_handle;
-
- } // while(true)
-
- } // while(!pertinent_roots[v]->empty())
-
- return true;
- }
-
- void store_old_face_handles(graph::detail::no_old_handles) {}
-
- void store_old_face_handles(graph::detail::store_old_handles)
- {
- for (typename std::vector< vertex_t >::iterator mp_itr
- = current_merge_points.begin();
- mp_itr != current_merge_points.end(); ++mp_itr)
- {
- face_handles[*mp_itr].store_old_face_handles();
- }
- current_merge_points.clear();
- }
-
- void add_to_merge_points(vertex_t, graph::detail::no_old_handles) {}
-
- void add_to_merge_points(vertex_t v, graph::detail::store_old_handles)
- {
- current_merge_points.push_back(v);
- }
-
- void add_to_embedded_edges(edge_t, graph::detail::no_old_handles) {}
-
- void add_to_embedded_edges(edge_t e, graph::detail::store_old_handles)
- {
- embedded_edges.push_back(e);
- }
-
- void clean_up_embedding(graph::detail::no_embedding) {}
-
- void clean_up_embedding(graph::detail::store_embedding)
- {
-
- // If the graph isn't biconnected, we'll still have entries
- // in the separated_dfs_child_list for some vertices. Since
- // these represent articulation points, we can obtain a
- // planar embedding no matter what order we embed them in.
-
- vertex_iterator_t xi, xi_end;
- for (boost::tie(xi, xi_end) = vertices(g); xi != xi_end; ++xi)
- {
- if (!separated_dfs_child_list[*xi]->empty())
- {
- typename vertex_list_t::iterator yi, yi_end;
- yi_end = separated_dfs_child_list[*xi]->end();
- for (yi = separated_dfs_child_list[*xi]->begin(); yi != yi_end;
- ++yi)
- {
- dfs_child_handles[*yi].flip();
- face_handles[*xi].glue_first_to_second(
- dfs_child_handles[*yi]);
- }
- }
- }
-
- // Up until this point, we've flipped bicomps lazily by setting
- // flipped[v] to true if the bicomp rooted at v was flipped (the
- // lazy aspect of this flip is that all descendents of that vertex
- // need to have their orientations reversed as well). Now, we
- // traverse the DFS tree by DFS number and perform the actual
- // flipping as needed
-
- typedef typename vertex_vector_t::iterator vertex_vector_itr_t;
- vertex_vector_itr_t vi_end = vertices_by_dfs_num.end();
- for (vertex_vector_itr_t vi = vertices_by_dfs_num.begin(); vi != vi_end;
- ++vi)
- {
- vertex_t v(*vi);
- bool v_flipped = flipped[v];
- bool p_flipped = flipped[dfs_parent[v]];
- if (v_flipped && !p_flipped)
- {
- face_handles[v].flip();
- }
- else if (p_flipped && !v_flipped)
- {
- face_handles[v].flip();
- flipped[v] = true;
- }
- else
- {
- flipped[v] = false;
- }
- }
-
- // If there are any self-loops in the graph, they were flagged
- // during the walkup, and we should add them to the embedding now.
- // Adding a self loop anywhere in the embedding could never
- // invalidate the embedding, but they would complicate the traversal
- // if they were added during the walkup/walkdown.
-
- typename edge_vector_t::iterator ei, ei_end;
- ei_end = self_loops.end();
- for (ei = self_loops.begin(); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- face_handles[source(e, g)].push_second(e, g);
- }
- }
-
- bool pertinent(vertex_t w, vertex_t v)
- {
- // w is pertinent with respect to v if there is a backedge (v,w) or if
- // w is the root of a bicomp that contains a pertinent vertex.
-
- return backedge_flag[w] == dfs_number[v]
- || !pertinent_roots[w]->empty();
- }
-
- bool externally_active(vertex_t w, vertex_t v)
- {
- // Let a be any proper depth-first search ancestor of v. w is externally
- // active with respect to v if there exists a backedge (a,w) or a
- // backedge (a,w_0) for some w_0 in a descendent bicomp of w.
-
- v_size_t dfs_number_of_v = dfs_number[v];
- return (least_ancestor[w] < dfs_number_of_v)
- || (!separated_dfs_child_list[w]->empty()
- && low_point[separated_dfs_child_list[w]->front()]
- < dfs_number_of_v);
- }
-
- bool internally_active(vertex_t w, vertex_t v)
- {
- return pertinent(w, v) && !externally_active(w, v);
- }
-
- void remove_vertex_from_separated_dfs_child_list(vertex_t v)
- {
- typename vertex_list_t::iterator to_delete
- = separated_node_in_parent_list[v];
- garbage.splice(garbage.end(), *separated_dfs_child_list[dfs_parent[v]],
- to_delete, boost::next(to_delete));
- }
-
- // End of the implementation of the basic Boyer-Myrvold Algorithm. The rest
- // of the code below implements the isolation of a Kuratowski subgraph in
- // the case that the input graph is not planar. This is by far the most
- // complicated part of the implementation.
-
-public:
- template < typename EdgeToBoolPropertyMap, typename EdgeContainer >
- vertex_t kuratowski_walkup(vertex_t v, EdgeToBoolPropertyMap forbidden_edge,
- EdgeToBoolPropertyMap goal_edge, EdgeToBoolPropertyMap is_embedded,
- EdgeContainer& path_edges)
- {
- vertex_t current_endpoint;
- bool seen_goal_edge = false;
- out_edge_iterator_t oi, oi_end;
-
- for (boost::tie(oi, oi_end) = out_edges(v, g); oi != oi_end; ++oi)
- forbidden_edge[*oi] = true;
-
- for (boost::tie(oi, oi_end) = out_edges(v, g); oi != oi_end; ++oi)
- {
- path_edges.clear();
-
- edge_t e(*oi);
- current_endpoint
- = target(*oi, g) == v ? source(*oi, g) : target(*oi, g);
-
- if (dfs_number[current_endpoint] < dfs_number[v] || is_embedded[e]
- || v == current_endpoint // self-loop
- )
- {
- // Not a backedge
- continue;
- }
-
- path_edges.push_back(e);
- if (goal_edge[e])
- {
- return current_endpoint;
- }
-
- typedef typename face_edge_iterator<>::type walkup_itr_t;
-
- walkup_itr_t walkup_itr(
- current_endpoint, face_handles, first_side());
- walkup_itr_t walkup_end;
-
- seen_goal_edge = false;
-
- while (true)
- {
-
- if (walkup_itr != walkup_end && forbidden_edge[*walkup_itr])
- break;
-
- while (walkup_itr != walkup_end && !goal_edge[*walkup_itr]
- && !forbidden_edge[*walkup_itr])
- {
- edge_t f(*walkup_itr);
- forbidden_edge[f] = true;
- path_edges.push_back(f);
- current_endpoint = source(f, g) == current_endpoint
- ? target(f, g)
- : source(f, g);
- ++walkup_itr;
- }
-
- if (walkup_itr != walkup_end && goal_edge[*walkup_itr])
- {
- path_edges.push_back(*walkup_itr);
- seen_goal_edge = true;
- break;
- }
-
- walkup_itr = walkup_itr_t(
- current_endpoint, face_handles, first_side());
- }
-
- if (seen_goal_edge)
- break;
- }
-
- if (seen_goal_edge)
- return current_endpoint;
- else
- return graph_traits< Graph >::null_vertex();
- }
-
- template < typename OutputIterator, typename EdgeIndexMap >
- void extract_kuratowski_subgraph(OutputIterator o_itr, EdgeIndexMap em)
- {
-
- // If the main algorithm has failed to embed one of the back-edges from
- // a vertex v, we can use the current state of the algorithm to isolate
- // a Kuratowksi subgraph. The isolation process breaks down into five
- // cases, A - E. The general configuration of all five cases is shown in
- // figure 1. There is a vertex v from which the planar
- // v embedding process could not proceed. This means that
- // | there exists some bicomp containing three vertices
- // ----- x,y, and z as shown such that x and y are externally
- // | | active with respect to v (which means that there are
- // x y two vertices x_0 and y_0 such that (1) both x_0 and
- // | | y_0 are proper depth-first search ancestors of v and
- // --z-- (2) there are two disjoint paths, one connecting x
- // and x_0 and one connecting y and y_0, both
- // consisting
- // fig. 1 entirely of unembedded edges). Furthermore, there
- // exists a vertex z_0 such that z is a depth-first
- // search ancestor of z_0 and (v,z_0) is an unembedded back-edge from v.
- // x,y and z all exist on the same bicomp, which consists entirely of
- // embedded edges. The five subcases break down as follows, and are
- // handled by the algorithm logically in the order A-E: First, if v is
- // not on the same bicomp as x,y, and z, a K_3_3 can be isolated - this
- // is case A. So, we'll assume that v is on the same bicomp as x,y, and
- // z. If z_0 is on a different bicomp than x,y, and z, a K_3_3 can also
- // be isolated - this is a case B - so we'll assume from now on that v
- // is on the same bicomp as x, y, and z=z_0. In this case, one can use
- // properties of the Boyer-Myrvold algorithm to show the existence of an
- // "x-y path" connecting some vertex on the "left side" of the x,y,z
- // bicomp with some vertex on the "right side" of the bicomp (where the
- // left and right are split by a line drawn through v and z.If either of
- // the endpoints of the x-y path is above x or y on the bicomp, a K_3_3
- // can be isolated - this is a case C. Otherwise, both endpoints are at
- // or below x and y on the bicomp. If there is a vertex alpha on the x-y
- // path such that alpha is not x or y and there's a path from alpha to v
- // that's disjoint from any of the edges on the bicomp and the x-y path,
- // a K_3_3 can be isolated - this is a case D. Otherwise, properties of
- // the Boyer-Myrvold algorithm can be used to show that another vertex
- // w exists on the lower half of the bicomp such that w is externally
- // active with respect to v. w can then be used to isolate a K_5 - this
- // is the configuration of case E.
-
- vertex_iterator_t vi, vi_end;
- edge_iterator_t ei, ei_end;
- out_edge_iterator_t oei, oei_end;
- typename std::vector< edge_t >::iterator xi, xi_end;
-
- // Clear the short-circuit edges - these are needed for the planar
- // testing/embedding algorithm to run in linear time, but they'll
- // complicate the kuratowski subgraph isolation
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- face_handles[*vi].reset_vertex_cache();
- dfs_child_handles[*vi].reset_vertex_cache();
- }
-
- vertex_t v = kuratowski_v;
- vertex_t x = kuratowski_x;
- vertex_t y = kuratowski_y;
-
- typedef iterator_property_map< typename std::vector< bool >::iterator,
- EdgeIndexMap >
- edge_to_bool_map_t;
-
- std::vector< bool > is_in_subgraph_vector(num_edges(g), false);
- edge_to_bool_map_t is_in_subgraph(is_in_subgraph_vector.begin(), em);
-
- std::vector< bool > is_embedded_vector(num_edges(g), false);
- edge_to_bool_map_t is_embedded(is_embedded_vector.begin(), em);
-
- typename std::vector< edge_t >::iterator embedded_itr, embedded_end;
- embedded_end = embedded_edges.end();
- for (embedded_itr = embedded_edges.begin();
- embedded_itr != embedded_end; ++embedded_itr)
- is_embedded[*embedded_itr] = true;
-
- // upper_face_vertex is true for x,y, and all vertices above x and y in
- // the bicomp
- std::vector< bool > upper_face_vertex_vector(num_vertices(g), false);
- vertex_to_bool_map_t upper_face_vertex(
- upper_face_vertex_vector.begin(), vm);
-
- std::vector< bool > lower_face_vertex_vector(num_vertices(g), false);
- vertex_to_bool_map_t lower_face_vertex(
- lower_face_vertex_vector.begin(), vm);
-
- // These next few variable declarations are all things that we need
- // to find.
- vertex_t z = graph_traits< Graph >::null_vertex();
- vertex_t bicomp_root;
- vertex_t w = graph_traits< Graph >::null_vertex();
- face_handle_t w_handle;
- face_handle_t v_dfchild_handle;
- vertex_t first_x_y_path_endpoint = graph_traits< Graph >::null_vertex();
- vertex_t second_x_y_path_endpoint
- = graph_traits< Graph >::null_vertex();
- vertex_t w_ancestor = v;
-
- detail::bm_case_t chosen_case = detail::BM_NO_CASE_CHOSEN;
-
- std::vector< edge_t > x_external_path;
- std::vector< edge_t > y_external_path;
- std::vector< edge_t > case_d_edges;
-
- std::vector< edge_t > z_v_path;
- std::vector< edge_t > w_path;
-
- // first, use a walkup to find a path from V that starts with a
- // backedge from V, then goes up until it hits either X or Y
- //(but doesn't find X or Y as the root of a bicomp)
-
- typename face_vertex_iterator<>::type x_upper_itr(
- x, face_handles, first_side());
- typename face_vertex_iterator<>::type x_lower_itr(
- x, face_handles, second_side());
- typename face_vertex_iterator<>::type face_itr, face_end;
-
- // Don't know which path from x is the upper or lower path -
- // we'll find out here
- for (face_itr = x_upper_itr; face_itr != face_end; ++face_itr)
- {
- if (*face_itr == y)
- {
- std::swap(x_upper_itr, x_lower_itr);
- break;
- }
- }
-
- upper_face_vertex[x] = true;
-
- vertex_t current_vertex = x;
- vertex_t previous_vertex;
- for (face_itr = x_upper_itr; face_itr != face_end; ++face_itr)
- {
- previous_vertex = current_vertex;
- current_vertex = *face_itr;
- upper_face_vertex[current_vertex] = true;
- }
-
- v_dfchild_handle
- = dfs_child_handles[canonical_dfs_child[previous_vertex]];
-
- for (face_itr = x_lower_itr; *face_itr != y; ++face_itr)
- {
- vertex_t current_vertex(*face_itr);
- lower_face_vertex[current_vertex] = true;
-
- typename face_handle_list_t::iterator roots_itr, roots_end;
-
- if (w == graph_traits< Graph >::null_vertex()) // haven't found a w
- // yet
- {
- roots_end = pertinent_roots[current_vertex]->end();
- for (roots_itr = pertinent_roots[current_vertex]->begin();
- roots_itr != roots_end; ++roots_itr)
- {
- if (low_point
- [canonical_dfs_child[roots_itr->first_vertex()]]
- < dfs_number[v])
- {
- w = current_vertex;
- w_handle = *roots_itr;
- break;
- }
- }
- }
- }
-
- for (; face_itr != face_end; ++face_itr)
- {
- vertex_t current_vertex(*face_itr);
- upper_face_vertex[current_vertex] = true;
- bicomp_root = current_vertex;
- }
-
- typedef typename face_edge_iterator<>::type walkup_itr_t;
-
- std::vector< bool > outer_face_edge_vector(num_edges(g), false);
- edge_to_bool_map_t outer_face_edge(outer_face_edge_vector.begin(), em);
-
- walkup_itr_t walkup_end;
- for (walkup_itr_t walkup_itr(x, face_handles, first_side());
- walkup_itr != walkup_end; ++walkup_itr)
- {
- outer_face_edge[*walkup_itr] = true;
- is_in_subgraph[*walkup_itr] = true;
- }
-
- for (walkup_itr_t walkup_itr(x, face_handles, second_side());
- walkup_itr != walkup_end; ++walkup_itr)
- {
- outer_face_edge[*walkup_itr] = true;
- is_in_subgraph[*walkup_itr] = true;
- }
-
- std::vector< bool > forbidden_edge_vector(num_edges(g), false);
- edge_to_bool_map_t forbidden_edge(forbidden_edge_vector.begin(), em);
-
- std::vector< bool > goal_edge_vector(num_edges(g), false);
- edge_to_bool_map_t goal_edge(goal_edge_vector.begin(), em);
-
- // Find external path to x and to y
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- goal_edge[e] = !outer_face_edge[e]
- && (source(e, g) == x || target(e, g) == x);
- forbidden_edge[*ei] = outer_face_edge[*ei];
- }
-
- vertex_t x_ancestor = v;
- vertex_t x_endpoint = graph_traits< Graph >::null_vertex();
-
- while (x_endpoint == graph_traits< Graph >::null_vertex())
- {
- x_ancestor = dfs_parent[x_ancestor];
- x_endpoint = kuratowski_walkup(x_ancestor, forbidden_edge,
- goal_edge, is_embedded, x_external_path);
- }
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- goal_edge[e] = !outer_face_edge[e]
- && (source(e, g) == y || target(e, g) == y);
- forbidden_edge[*ei] = outer_face_edge[*ei];
- }
-
- vertex_t y_ancestor = v;
- vertex_t y_endpoint = graph_traits< Graph >::null_vertex();
-
- while (y_endpoint == graph_traits< Graph >::null_vertex())
- {
- y_ancestor = dfs_parent[y_ancestor];
- y_endpoint = kuratowski_walkup(y_ancestor, forbidden_edge,
- goal_edge, is_embedded, y_external_path);
- }
-
- vertex_t parent, child;
-
- // If v isn't on the same bicomp as x and y, it's a case A
- if (bicomp_root != v)
- {
- chosen_case = detail::BM_CASE_A;
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- if (lower_face_vertex[*vi])
- for (boost::tie(oei, oei_end) = out_edges(*vi, g);
- oei != oei_end; ++oei)
- if (!outer_face_edge[*oei])
- goal_edge[*oei] = true;
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- forbidden_edge[*ei] = outer_face_edge[*ei];
-
- z = kuratowski_walkup(
- v, forbidden_edge, goal_edge, is_embedded, z_v_path);
- }
- else if (w != graph_traits< Graph >::null_vertex())
- {
- chosen_case = detail::BM_CASE_B;
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- goal_edge[e] = false;
- forbidden_edge[e] = outer_face_edge[e];
- }
-
- goal_edge[w_handle.first_edge()] = true;
- goal_edge[w_handle.second_edge()] = true;
-
- z = kuratowski_walkup(
- v, forbidden_edge, goal_edge, is_embedded, z_v_path);
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- forbidden_edge[*ei] = outer_face_edge[*ei];
- }
-
- typename std::vector< edge_t >::iterator pi, pi_end;
- pi_end = z_v_path.end();
- for (pi = z_v_path.begin(); pi != pi_end; ++pi)
- {
- goal_edge[*pi] = true;
- }
-
- w_ancestor = v;
- vertex_t w_endpoint = graph_traits< Graph >::null_vertex();
-
- while (w_endpoint == graph_traits< Graph >::null_vertex())
- {
- w_ancestor = dfs_parent[w_ancestor];
- w_endpoint = kuratowski_walkup(
- w_ancestor, forbidden_edge, goal_edge, is_embedded, w_path);
- }
-
- // We really want both the w walkup and the z walkup to finish on
- // exactly the same edge, but for convenience (since we don't have
- // control over which side of a bicomp a walkup moves up) we've
- // defined the walkup to either end at w_handle.first_edge() or
- // w_handle.second_edge(). If both walkups ended at different edges,
- // we'll do a little surgery on the w walkup path to make it follow
- // the other side of the final bicomp.
-
- if ((w_path.back() == w_handle.first_edge()
- && z_v_path.back() == w_handle.second_edge())
- || (w_path.back() == w_handle.second_edge()
- && z_v_path.back() == w_handle.first_edge()))
- {
- walkup_itr_t wi, wi_end;
- edge_t final_edge = w_path.back();
- vertex_t anchor = source(final_edge, g) == w_handle.get_anchor()
- ? target(final_edge, g)
- : source(final_edge, g);
- if (face_handles[anchor].first_edge() == final_edge)
- wi = walkup_itr_t(anchor, face_handles, second_side());
- else
- wi = walkup_itr_t(anchor, face_handles, first_side());
-
- w_path.pop_back();
-
- for (; wi != wi_end; ++wi)
- {
- edge_t e(*wi);
- if (w_path.back() == e)
- w_path.pop_back();
- else
- w_path.push_back(e);
- }
- }
- }
- else
- {
-
- // We need to find a valid z, since the x-y path re-defines the
- // lower face, and the z we found earlier may now be on the upper
- // face.
-
- chosen_case = detail::BM_CASE_E;
-
- // The z we've used so far is just an externally active vertex on
- // the lower face path, but may not be the z we need for a case C,
- // D, or E subgraph. the z we need now is any externally active
- // vertex on the lower face path with both old_face_handles edges on
- // the outer face. Since we know an x-y path exists, such a z must
- // also exist.
-
- // TODO: find this z in the first place.
-
- // find the new z
-
- for (face_itr = x_lower_itr; *face_itr != y; ++face_itr)
- {
- vertex_t possible_z(*face_itr);
- if (pertinent(possible_z, v)
- && outer_face_edge[face_handles[possible_z]
- .old_first_edge()]
- && outer_face_edge[face_handles[possible_z]
- .old_second_edge()])
- {
- z = possible_z;
- break;
- }
- }
-
- // find x-y path, and a w if one exists.
-
- if (externally_active(z, v))
- w = z;
-
- typedef typename face_edge_iterator< single_side,
- previous_iteration >::type old_face_iterator_t;
-
- old_face_iterator_t first_old_face_itr(
- z, face_handles, first_side());
- old_face_iterator_t second_old_face_itr(
- z, face_handles, second_side());
- old_face_iterator_t old_face_itr, old_face_end;
-
- std::vector< old_face_iterator_t > old_face_iterators;
- old_face_iterators.push_back(first_old_face_itr);
- old_face_iterators.push_back(second_old_face_itr);
-
- std::vector< bool > x_y_path_vertex_vector(num_vertices(g), false);
- vertex_to_bool_map_t x_y_path_vertex(
- x_y_path_vertex_vector.begin(), vm);
-
- typename std::vector< old_face_iterator_t >::iterator of_itr,
- of_itr_end;
- of_itr_end = old_face_iterators.end();
- for (of_itr = old_face_iterators.begin(); of_itr != of_itr_end;
- ++of_itr)
- {
-
- old_face_itr = *of_itr;
-
- vertex_t previous_vertex;
- bool seen_x_or_y = false;
- vertex_t current_vertex = z;
- for (; old_face_itr != old_face_end; ++old_face_itr)
- {
- edge_t e(*old_face_itr);
- previous_vertex = current_vertex;
- current_vertex = source(e, g) == current_vertex
- ? target(e, g)
- : source(e, g);
-
- if (current_vertex == x || current_vertex == y)
- seen_x_or_y = true;
-
- if (w == graph_traits< Graph >::null_vertex()
- && externally_active(current_vertex, v)
- && outer_face_edge[e]
- && outer_face_edge[*boost::next(old_face_itr)]
- && !seen_x_or_y)
- {
- w = current_vertex;
- }
-
- if (!outer_face_edge[e])
- {
- if (!upper_face_vertex[current_vertex]
- && !lower_face_vertex[current_vertex])
- {
- x_y_path_vertex[current_vertex] = true;
- }
-
- is_in_subgraph[e] = true;
- if (upper_face_vertex[source(e, g)]
- || lower_face_vertex[source(e, g)])
- {
- if (first_x_y_path_endpoint
- == graph_traits< Graph >::null_vertex())
- first_x_y_path_endpoint = source(e, g);
- else
- second_x_y_path_endpoint = source(e, g);
- }
- if (upper_face_vertex[target(e, g)]
- || lower_face_vertex[target(e, g)])
- {
- if (first_x_y_path_endpoint
- == graph_traits< Graph >::null_vertex())
- first_x_y_path_endpoint = target(e, g);
- else
- second_x_y_path_endpoint = target(e, g);
- }
- }
- else if (previous_vertex == x || previous_vertex == y)
- {
- chosen_case = detail::BM_CASE_C;
- }
- }
- }
-
- // Look for a case D - one of v's embedded edges will connect to the
- // x-y path along an inner face path.
-
- // First, get a list of all of v's embedded child edges
-
- out_edge_iterator_t v_edge_itr, v_edge_end;
- for (boost::tie(v_edge_itr, v_edge_end) = out_edges(v, g);
- v_edge_itr != v_edge_end; ++v_edge_itr)
- {
- edge_t embedded_edge(*v_edge_itr);
-
- if (!is_embedded[embedded_edge]
- || embedded_edge == dfs_parent_edge[v])
- continue;
-
- case_d_edges.push_back(embedded_edge);
-
- vertex_t current_vertex = source(embedded_edge, g) == v
- ? target(embedded_edge, g)
- : source(embedded_edge, g);
-
- typename face_edge_iterator<>::type internal_face_itr,
- internal_face_end;
- if (face_handles[current_vertex].first_vertex() == v)
- {
- internal_face_itr = typename face_edge_iterator<>::type(
- current_vertex, face_handles, second_side());
- }
- else
- {
- internal_face_itr = typename face_edge_iterator<>::type(
- current_vertex, face_handles, first_side());
- }
-
- while (internal_face_itr != internal_face_end
- && !outer_face_edge[*internal_face_itr]
- && !x_y_path_vertex[current_vertex])
- {
- edge_t e(*internal_face_itr);
- case_d_edges.push_back(e);
- current_vertex = source(e, g) == current_vertex
- ? target(e, g)
- : source(e, g);
- ++internal_face_itr;
- }
-
- if (x_y_path_vertex[current_vertex])
- {
- chosen_case = detail::BM_CASE_D;
- break;
- }
- else
- {
- case_d_edges.clear();
- }
- }
- }
-
- if (chosen_case != detail::BM_CASE_B
- && chosen_case != detail::BM_CASE_A)
- {
-
- // Finding z and w.
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- edge_t e(*ei);
- goal_edge[e] = !outer_face_edge[e]
- && (source(e, g) == z || target(e, g) == z);
- forbidden_edge[e] = outer_face_edge[e];
- }
-
- kuratowski_walkup(
- v, forbidden_edge, goal_edge, is_embedded, z_v_path);
-
- if (chosen_case == detail::BM_CASE_E)
- {
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- {
- forbidden_edge[*ei] = outer_face_edge[*ei];
- goal_edge[*ei] = !outer_face_edge[*ei]
- && (source(*ei, g) == w || target(*ei, g) == w);
- }
-
- for (boost::tie(oei, oei_end) = out_edges(w, g); oei != oei_end;
- ++oei)
- {
- if (!outer_face_edge[*oei])
- goal_edge[*oei] = true;
- }
-
- typename std::vector< edge_t >::iterator pi, pi_end;
- pi_end = z_v_path.end();
- for (pi = z_v_path.begin(); pi != pi_end; ++pi)
- {
- goal_edge[*pi] = true;
- }
-
- w_ancestor = v;
- vertex_t w_endpoint = graph_traits< Graph >::null_vertex();
-
- while (w_endpoint == graph_traits< Graph >::null_vertex())
- {
- w_ancestor = dfs_parent[w_ancestor];
- w_endpoint = kuratowski_walkup(w_ancestor, forbidden_edge,
- goal_edge, is_embedded, w_path);
- }
- }
- }
-
- // We're done isolating the Kuratowski subgraph at this point -
- // but there's still some cleaning up to do.
-
- // Update is_in_subgraph with the paths we just found
-
- xi_end = x_external_path.end();
- for (xi = x_external_path.begin(); xi != xi_end; ++xi)
- is_in_subgraph[*xi] = true;
-
- xi_end = y_external_path.end();
- for (xi = y_external_path.begin(); xi != xi_end; ++xi)
- is_in_subgraph[*xi] = true;
-
- xi_end = z_v_path.end();
- for (xi = z_v_path.begin(); xi != xi_end; ++xi)
- is_in_subgraph[*xi] = true;
-
- xi_end = case_d_edges.end();
- for (xi = case_d_edges.begin(); xi != xi_end; ++xi)
- is_in_subgraph[*xi] = true;
-
- xi_end = w_path.end();
- for (xi = w_path.begin(); xi != xi_end; ++xi)
- is_in_subgraph[*xi] = true;
-
- child = bicomp_root;
- parent = dfs_parent[child];
- while (child != parent)
- {
- is_in_subgraph[dfs_parent_edge[child]] = true;
- boost::tie(parent, child)
- = std::make_pair(dfs_parent[parent], parent);
- }
-
- // At this point, we've already isolated the Kuratowski subgraph and
- // collected all of the edges that compose it in the is_in_subgraph
- // property map. But we want the verification of such a subgraph to be
- // a deterministic process, and we can simplify the function
- // is_kuratowski_subgraph by cleaning up some edges here.
-
- if (chosen_case == detail::BM_CASE_B)
- {
- is_in_subgraph[dfs_parent_edge[v]] = false;
- }
- else if (chosen_case == detail::BM_CASE_C)
- {
- // In a case C subgraph, at least one of the x-y path endpoints
- // (call it alpha) is above either x or y on the outer face. The
- // other endpoint may be attached at x or y OR above OR below. In
- // any of these three cases, we can form a K_3_3 by removing the
- // edge attached to v on the outer face that is NOT on the path to
- // alpha.
-
- typename face_vertex_iterator< single_side, follow_visitor >::type
- face_itr,
- face_end;
- if (face_handles[v_dfchild_handle.first_vertex()].first_edge()
- == v_dfchild_handle.first_edge())
- {
- face_itr = typename face_vertex_iterator< single_side,
- follow_visitor >::type(v_dfchild_handle.first_vertex(),
- face_handles, second_side());
- }
- else
- {
- face_itr = typename face_vertex_iterator< single_side,
- follow_visitor >::type(v_dfchild_handle.first_vertex(),
- face_handles, first_side());
- }
-
- for (; true; ++face_itr)
- {
- vertex_t current_vertex(*face_itr);
- if (current_vertex == x || current_vertex == y)
- {
- is_in_subgraph[v_dfchild_handle.first_edge()] = false;
- break;
- }
- else if (current_vertex == first_x_y_path_endpoint
- || current_vertex == second_x_y_path_endpoint)
- {
- is_in_subgraph[v_dfchild_handle.second_edge()] = false;
- break;
- }
- }
- }
- else if (chosen_case == detail::BM_CASE_D)
- {
- // Need to remove both of the edges adjacent to v on the outer face.
- // remove the connecting edges from v to bicomp, then
- // is_kuratowski_subgraph will shrink vertices of degree 1
- // automatically...
-
- is_in_subgraph[v_dfchild_handle.first_edge()] = false;
- is_in_subgraph[v_dfchild_handle.second_edge()] = false;
- }
- else if (chosen_case == detail::BM_CASE_E)
- {
- // Similarly to case C, if the endpoints of the x-y path are both
- // below x and y, we should remove an edge to allow the subgraph to
- // contract to a K_3_3.
-
- if ((first_x_y_path_endpoint != x && first_x_y_path_endpoint != y)
- || (second_x_y_path_endpoint != x
- && second_x_y_path_endpoint != y))
- {
- is_in_subgraph[dfs_parent_edge[v]] = false;
-
- vertex_t deletion_endpoint, other_endpoint;
- if (lower_face_vertex[first_x_y_path_endpoint])
- {
- deletion_endpoint = second_x_y_path_endpoint;
- other_endpoint = first_x_y_path_endpoint;
- }
- else
- {
- deletion_endpoint = first_x_y_path_endpoint;
- other_endpoint = second_x_y_path_endpoint;
- }
-
- typename face_edge_iterator<>::type face_itr, face_end;
-
- bool found_other_endpoint = false;
- for (face_itr = typename face_edge_iterator<>::type(
- deletion_endpoint, face_handles, first_side());
- face_itr != face_end; ++face_itr)
- {
- edge_t e(*face_itr);
- if (source(e, g) == other_endpoint
- || target(e, g) == other_endpoint)
- {
- found_other_endpoint = true;
- break;
- }
- }
-
- if (found_other_endpoint)
- {
- is_in_subgraph[face_handles[deletion_endpoint].first_edge()]
- = false;
- }
- else
- {
- is_in_subgraph[face_handles[deletion_endpoint]
- .second_edge()]
- = false;
- }
- }
- }
-
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- if (is_in_subgraph[*ei])
- *o_itr = *ei;
- }
-
- template < typename EdgePermutation >
- void make_edge_permutation(EdgePermutation perm)
- {
- vertex_iterator_t vi, vi_end;
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_t v(*vi);
- perm[v].clear();
- face_handles[v].get_list(std::back_inserter(perm[v]));
- }
- }
-
-private:
- const Graph& g;
- VertexIndexMap vm;
-
- vertex_t kuratowski_v;
- vertex_t kuratowski_x;
- vertex_t kuratowski_y;
-
- vertex_list_t garbage; // we delete items from linked lists by
- // splicing them into garbage
-
- // only need these two for kuratowski subgraph isolation
- std::vector< vertex_t > current_merge_points;
- std::vector< edge_t > embedded_edges;
-
- // property map storage
- std::vector< v_size_t > low_point_vector;
- std::vector< vertex_t > dfs_parent_vector;
- std::vector< v_size_t > dfs_number_vector;
- std::vector< v_size_t > least_ancestor_vector;
- std::vector< face_handle_list_ptr_t > pertinent_roots_vector;
- std::vector< v_size_t > backedge_flag_vector;
- std::vector< v_size_t > visited_vector;
- std::vector< face_handle_t > face_handles_vector;
- std::vector< face_handle_t > dfs_child_handles_vector;
- std::vector< vertex_list_ptr_t > separated_dfs_child_list_vector;
- std::vector< typename vertex_list_t::iterator >
- separated_node_in_parent_list_vector;
- std::vector< vertex_t > canonical_dfs_child_vector;
- std::vector< bool > flipped_vector;
- std::vector< edge_vector_t > backedges_vector;
- edge_vector_t self_loops;
- std::vector< edge_t > dfs_parent_edge_vector;
- vertex_vector_t vertices_by_dfs_num;
-
- // property maps
- vertex_to_v_size_map_t low_point;
- vertex_to_vertex_map_t dfs_parent;
- vertex_to_v_size_map_t dfs_number;
- vertex_to_v_size_map_t least_ancestor;
- vertex_to_face_handle_list_ptr_map_t pertinent_roots;
- vertex_to_v_size_map_t backedge_flag;
- vertex_to_v_size_map_t visited;
- vertex_to_face_handle_map_t face_handles;
- vertex_to_face_handle_map_t dfs_child_handles;
- vertex_to_vertex_list_ptr_map_t separated_dfs_child_list;
- vertex_to_separated_node_map_t separated_node_in_parent_list;
- vertex_to_vertex_map_t canonical_dfs_child;
- vertex_to_bool_map_t flipped;
- vertex_to_edge_vector_map_t backedges;
- vertex_to_edge_map_t dfs_parent_edge; // only need for kuratowski
-
- merge_stack_t merge_stack;
-};
-
-} // namespace boost
-
-#endif //__BOYER_MYRVOLD_IMPL_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/bucket_sort.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_detail/bucket_sort.hpp
deleted file mode 100644
index 15b932b9fd..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/bucket_sort.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-//=======================================================================
-// Copyright 2007 Aaron Windsor
-//
-// 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 __BUCKET_SORT_HPP__
-#define __BUCKET_SORT_HPP__
-
-#include <vector>
-#include <algorithm>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-template < typename ItemToRankMap > struct rank_comparison
-{
- rank_comparison(ItemToRankMap arg_itrm) : itrm(arg_itrm) {}
-
- template < typename Item > bool operator()(Item x, Item y) const
- {
- return get(itrm, x) < get(itrm, y);
- }
-
-private:
- ItemToRankMap itrm;
-};
-
-template < typename TupleType, int N,
- typename PropertyMapWrapper = identity_property_map >
-struct property_map_tuple_adaptor
-: public put_get_helper< typename PropertyMapWrapper::value_type,
- property_map_tuple_adaptor< TupleType, N, PropertyMapWrapper > >
-{
- typedef typename PropertyMapWrapper::reference reference;
- typedef typename PropertyMapWrapper::value_type value_type;
- typedef TupleType key_type;
- typedef readable_property_map_tag category;
-
- property_map_tuple_adaptor() {}
-
- property_map_tuple_adaptor(PropertyMapWrapper wrapper_map)
- : m_wrapper_map(wrapper_map)
- {
- }
-
- inline value_type operator[](const key_type& x) const
- {
- return get(m_wrapper_map, get< n >(x));
- }
-
- static const int n = N;
- PropertyMapWrapper m_wrapper_map;
-};
-
-// This function sorts a sequence of n items by their ranks in linear time,
-// given that all ranks are in the range [0, range). This sort is stable.
-template < typename ForwardIterator, typename ItemToRankMap, typename SizeType >
-void bucket_sort(ForwardIterator begin, ForwardIterator end, ItemToRankMap rank,
- SizeType range = 0)
-{
-#ifdef BOOST_GRAPH_PREFER_STD_LIB
- std::stable_sort(begin, end, rank_comparison< ItemToRankMap >(rank));
-#else
- typedef std::vector<
- typename boost::property_traits< ItemToRankMap >::key_type >
- vector_of_values_t;
- typedef std::vector< vector_of_values_t > vector_of_vectors_t;
-
- if (!range)
- {
- rank_comparison< ItemToRankMap > cmp(rank);
- ForwardIterator max_by_rank = std::max_element(begin, end, cmp);
- if (max_by_rank == end)
- return;
- range = get(rank, *max_by_rank) + 1;
- }
-
- vector_of_vectors_t temp_values(range);
-
- for (ForwardIterator itr = begin; itr != end; ++itr)
- {
- temp_values[get(rank, *itr)].push_back(*itr);
- }
-
- ForwardIterator orig_seq_itr = begin;
- typename vector_of_vectors_t::iterator itr_end = temp_values.end();
- for (typename vector_of_vectors_t::iterator itr = temp_values.begin();
- itr != itr_end; ++itr)
- {
- typename vector_of_values_t::iterator jtr_end = itr->end();
- for (typename vector_of_values_t::iterator jtr = itr->begin();
- jtr != jtr_end; ++jtr)
- {
- *orig_seq_itr = *jtr;
- ++orig_seq_itr;
- }
- }
-#endif
-}
-
-template < typename ForwardIterator, typename ItemToRankMap >
-void bucket_sort(ForwardIterator begin, ForwardIterator end, ItemToRankMap rank)
-{
- bucket_sort(begin, end, rank, 0);
-}
-
-template < typename ForwardIterator >
-void bucket_sort(ForwardIterator begin, ForwardIterator end)
-{
- bucket_sort(begin, end, identity_property_map());
-}
-
-} // namespace boost
-
-#endif //__BUCKET_SORT_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_handles.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_handles.hpp
deleted file mode 100644
index 1ea7efcb46..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_handles.hpp
+++ /dev/null
@@ -1,453 +0,0 @@
-//=======================================================================
-// Copyright (c) Aaron Windsor 2007
-//
-// 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 __FACE_HANDLES_HPP__
-#define __FACE_HANDLES_HPP__
-
-#include <list>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/shared_ptr.hpp>
-
-// A "face handle" is an optimization meant to serve two purposes in
-// the implementation of the Boyer-Myrvold planarity test: (1) it holds
-// the partial planar embedding of a particular vertex as it's being
-// constructed, and (2) it allows for efficient traversal around the
-// outer face of the partial embedding at that particular vertex. A face
-// handle is lightweight, just a shared pointer to the actual implementation,
-// since it is passed around/copied liberally in the algorithm. It consists
-// of an "anchor" (the actual vertex it's associated with) as well as a
-// sequence of edges. The functions first_vertex/second_vertex and
-// first_edge/second_edge allow fast access to the beginning and end of the
-// stored sequence, which allows one to traverse the outer face of the partial
-// planar embedding as it's being created.
-//
-// There are some policies below that define the contents of the face handles:
-// in the case no embedding is needed (for example, if one just wants to use
-// the Boyer-Myrvold algorithm as a true/false test for planarity, the
-// no_embedding class can be passed as the StoreEmbedding policy. Otherwise,
-// either std_list (which uses as std::list) or recursive_lazy_list can be
-// passed as this policy. recursive_lazy_list has the best theoretical
-// performance (O(n) for a sequence of interleaved concatenations and reversals
-// of the underlying list), but I've noticed little difference between std_list
-// and recursive_lazy_list in my tests, even though using std_list changes
-// the worst-case complexity of the planarity test to O(n^2)
-//
-// Another policy is StoreOldHandlesPolicy, which specifies whether or not
-// to keep a record of the previous first/second vertex/edge - this is needed
-// if a Kuratowski subgraph needs to be isolated.
-
-namespace boost
-{
-namespace graph
-{
- namespace detail
- {
-
- // face handle policies
-
- // EmbeddingStorage policy
- struct store_embedding
- {
- };
- struct recursive_lazy_list : public store_embedding
- {
- };
- struct std_list : public store_embedding
- {
- };
- struct no_embedding
- {
- };
-
- // StoreOldHandlesPolicy
- struct store_old_handles
- {
- };
- struct no_old_handles
- {
- };
-
- template < typename DataType > struct lazy_list_node
- {
- typedef shared_ptr< lazy_list_node< DataType > > ptr_t;
-
- lazy_list_node(const DataType& data)
- : m_reversed(false), m_data(data), m_has_data(true)
- {
- }
-
- lazy_list_node(ptr_t left_child, ptr_t right_child)
- : m_reversed(false)
- , m_has_data(false)
- , m_left_child(left_child)
- , m_right_child(right_child)
- {
- }
-
- bool m_reversed;
- DataType m_data;
- bool m_has_data;
- shared_ptr< lazy_list_node > m_left_child;
- shared_ptr< lazy_list_node > m_right_child;
- };
-
- template < typename StoreOldHandlesPolicy, typename Vertex,
- typename Edge >
- struct old_handles_storage;
-
- template < typename Vertex, typename Edge >
- struct old_handles_storage< store_old_handles, Vertex, Edge >
- {
- Vertex first_vertex;
- Vertex second_vertex;
- Edge first_edge;
- Edge second_edge;
- };
-
- template < typename Vertex, typename Edge >
- struct old_handles_storage< no_old_handles, Vertex, Edge >
- {
- };
-
- template < typename StoreEmbeddingPolicy, typename Edge >
- struct edge_list_storage;
-
- template < typename Edge >
- struct edge_list_storage< no_embedding, Edge >
- {
- typedef void type;
-
- void push_back(Edge) {}
- void push_front(Edge) {}
- void reverse() {}
- void concat_front(edge_list_storage< no_embedding, Edge >) {}
- void concat_back(edge_list_storage< no_embedding, Edge >) {}
- template < typename OutputIterator > void get_list(OutputIterator)
- {
- }
- };
-
- template < typename Edge >
- struct edge_list_storage< recursive_lazy_list, Edge >
- {
- typedef lazy_list_node< Edge > node_type;
- typedef shared_ptr< node_type > type;
- type value;
-
- void push_back(Edge e)
- {
- type new_node(new node_type(e));
- value = type(new node_type(value, new_node));
- }
-
- void push_front(Edge e)
- {
- type new_node(new node_type(e));
- value = type(new node_type(new_node, value));
- }
-
- void reverse() { value->m_reversed = !value->m_reversed; }
-
- void concat_front(
- edge_list_storage< recursive_lazy_list, Edge > other)
- {
- value = type(new node_type(other.value, value));
- }
-
- void concat_back(
- edge_list_storage< recursive_lazy_list, Edge > other)
- {
- value = type(new node_type(value, other.value));
- }
-
- template < typename OutputIterator >
- void get_list(OutputIterator out)
- {
- get_list_helper(out, value);
- }
-
- private:
- template < typename OutputIterator >
- void get_list_helper(
- OutputIterator o_itr, type root, bool flipped = false)
- {
- if (!root)
- return;
-
- if (root->m_has_data)
- *o_itr = root->m_data;
-
- if ((flipped && !root->m_reversed)
- || (!flipped && root->m_reversed))
- {
- get_list_helper(o_itr, root->m_right_child, true);
- get_list_helper(o_itr, root->m_left_child, true);
- }
- else
- {
- get_list_helper(o_itr, root->m_left_child, false);
- get_list_helper(o_itr, root->m_right_child, false);
- }
- }
- };
-
- template < typename Edge > struct edge_list_storage< std_list, Edge >
- {
- typedef std::list< Edge > type;
- type value;
-
- void push_back(Edge e) { value.push_back(e); }
-
- void push_front(Edge e) { value.push_front(e); }
-
- void reverse() { value.reverse(); }
-
- void concat_front(edge_list_storage< std_list, Edge > other)
- {
- value.splice(value.begin(), other.value);
- }
-
- void concat_back(edge_list_storage< std_list, Edge > other)
- {
- value.splice(value.end(), other.value);
- }
-
- template < typename OutputIterator >
- void get_list(OutputIterator out)
- {
- std::copy(value.begin(), value.end(), out);
- }
- };
-
- template < typename Graph, typename StoreOldHandlesPolicy,
- typename StoreEmbeddingPolicy >
- struct face_handle_impl
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef
- typename edge_list_storage< StoreEmbeddingPolicy, edge_t >::type
- edge_list_storage_t;
-
- face_handle_impl()
- : cached_first_vertex(graph_traits< Graph >::null_vertex())
- , cached_second_vertex(graph_traits< Graph >::null_vertex())
- , true_first_vertex(graph_traits< Graph >::null_vertex())
- , true_second_vertex(graph_traits< Graph >::null_vertex())
- , anchor(graph_traits< Graph >::null_vertex())
- {
- initialize_old_vertices_dispatch(StoreOldHandlesPolicy());
- }
-
- void initialize_old_vertices_dispatch(store_old_handles)
- {
- old_handles.first_vertex = graph_traits< Graph >::null_vertex();
- old_handles.second_vertex
- = graph_traits< Graph >::null_vertex();
- }
-
- void initialize_old_vertices_dispatch(no_old_handles) {}
-
- vertex_t cached_first_vertex;
- vertex_t cached_second_vertex;
- vertex_t true_first_vertex;
- vertex_t true_second_vertex;
- vertex_t anchor;
- edge_t cached_first_edge;
- edge_t cached_second_edge;
-
- edge_list_storage< StoreEmbeddingPolicy, edge_t > edge_list;
- old_handles_storage< StoreOldHandlesPolicy, vertex_t, edge_t >
- old_handles;
- };
-
- template < typename Graph,
- typename StoreOldHandlesPolicy = store_old_handles,
- typename StoreEmbeddingPolicy = recursive_lazy_list >
- class face_handle
- {
- public:
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef face_handle_impl< Graph, StoreOldHandlesPolicy,
- StoreEmbeddingPolicy >
- impl_t;
- typedef face_handle< Graph, StoreOldHandlesPolicy,
- StoreEmbeddingPolicy >
- self_t;
-
- face_handle(vertex_t anchor = graph_traits< Graph >::null_vertex())
- : pimpl(new impl_t())
- {
- pimpl->anchor = anchor;
- }
-
- face_handle(vertex_t anchor, edge_t initial_edge, const Graph& g)
- : pimpl(new impl_t())
- {
- vertex_t s(source(initial_edge, g));
- vertex_t t(target(initial_edge, g));
- vertex_t other_vertex = s == anchor ? t : s;
- pimpl->anchor = anchor;
- pimpl->cached_first_edge = initial_edge;
- pimpl->cached_second_edge = initial_edge;
- pimpl->cached_first_vertex = other_vertex;
- pimpl->cached_second_vertex = other_vertex;
- pimpl->true_first_vertex = other_vertex;
- pimpl->true_second_vertex = other_vertex;
-
- pimpl->edge_list.push_back(initial_edge);
- store_old_face_handles_dispatch(StoreOldHandlesPolicy());
- }
-
- // default copy construction, assignment okay.
-
- void push_first(edge_t e, const Graph& g)
- {
- pimpl->edge_list.push_front(e);
- pimpl->cached_first_vertex = pimpl->true_first_vertex
- = source(e, g) == pimpl->anchor ? target(e, g)
- : source(e, g);
- pimpl->cached_first_edge = e;
- }
-
- void push_second(edge_t e, const Graph& g)
- {
- pimpl->edge_list.push_back(e);
- pimpl->cached_second_vertex = pimpl->true_second_vertex
- = source(e, g) == pimpl->anchor ? target(e, g)
- : source(e, g);
- pimpl->cached_second_edge = e;
- }
-
- inline void store_old_face_handles()
- {
- store_old_face_handles_dispatch(StoreOldHandlesPolicy());
- }
-
- inline vertex_t first_vertex() const
- {
- return pimpl->cached_first_vertex;
- }
-
- inline vertex_t second_vertex() const
- {
- return pimpl->cached_second_vertex;
- }
-
- inline vertex_t true_first_vertex() const
- {
- return pimpl->true_first_vertex;
- }
-
- inline vertex_t true_second_vertex() const
- {
- return pimpl->true_second_vertex;
- }
-
- inline vertex_t old_first_vertex() const
- {
- return pimpl->old_handles.first_vertex;
- }
-
- inline vertex_t old_second_vertex() const
- {
- return pimpl->old_handles.second_vertex;
- }
-
- inline edge_t old_first_edge() const
- {
- return pimpl->old_handles.first_edge;
- }
-
- inline edge_t old_second_edge() const
- {
- return pimpl->old_handles.second_edge;
- }
-
- inline edge_t first_edge() const
- {
- return pimpl->cached_first_edge;
- }
-
- inline edge_t second_edge() const
- {
- return pimpl->cached_second_edge;
- }
-
- inline vertex_t get_anchor() const { return pimpl->anchor; }
-
- void glue_first_to_second(face_handle< Graph, StoreOldHandlesPolicy,
- StoreEmbeddingPolicy >& bottom)
- {
- pimpl->edge_list.concat_front(bottom.pimpl->edge_list);
- pimpl->true_first_vertex = bottom.pimpl->true_first_vertex;
- pimpl->cached_first_vertex = bottom.pimpl->cached_first_vertex;
- pimpl->cached_first_edge = bottom.pimpl->cached_first_edge;
- }
-
- void glue_second_to_first(face_handle< Graph, StoreOldHandlesPolicy,
- StoreEmbeddingPolicy >& bottom)
- {
- pimpl->edge_list.concat_back(bottom.pimpl->edge_list);
- pimpl->true_second_vertex = bottom.pimpl->true_second_vertex;
- pimpl->cached_second_vertex
- = bottom.pimpl->cached_second_vertex;
- pimpl->cached_second_edge = bottom.pimpl->cached_second_edge;
- }
-
- void flip()
- {
- pimpl->edge_list.reverse();
- std::swap(pimpl->true_first_vertex, pimpl->true_second_vertex);
- std::swap(
- pimpl->cached_first_vertex, pimpl->cached_second_vertex);
- std::swap(pimpl->cached_first_edge, pimpl->cached_second_edge);
- }
-
- template < typename OutputIterator >
- void get_list(OutputIterator o_itr)
- {
- pimpl->edge_list.get_list(o_itr);
- }
-
- void reset_vertex_cache()
- {
- pimpl->cached_first_vertex = pimpl->true_first_vertex;
- pimpl->cached_second_vertex = pimpl->true_second_vertex;
- }
-
- inline void set_first_vertex(vertex_t v)
- {
- pimpl->cached_first_vertex = v;
- }
-
- inline void set_second_vertex(vertex_t v)
- {
- pimpl->cached_second_vertex = v;
- }
-
- private:
- void store_old_face_handles_dispatch(store_old_handles)
- {
- pimpl->old_handles.first_vertex = pimpl->true_first_vertex;
- pimpl->old_handles.second_vertex = pimpl->true_second_vertex;
- pimpl->old_handles.first_edge = pimpl->cached_first_edge;
- pimpl->old_handles.second_edge = pimpl->cached_second_edge;
- }
-
- void store_old_face_handles_dispatch(no_old_handles) {}
-
- boost::shared_ptr< impl_t > pimpl;
- };
-
- } /* namespace detail */
-} /* namespace graph */
-} /* namespace boost */
-
-#endif //__FACE_HANDLES_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_iterators.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_iterators.hpp
deleted file mode 100644
index f1a1c333ce..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_detail/face_iterators.hpp
+++ /dev/null
@@ -1,332 +0,0 @@
-//=======================================================================
-// Copyright (c) Aaron Windsor 2007
-//
-// 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 __FACE_ITERATORS_HPP__
-#define __FACE_ITERATORS_HPP__
-
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/graph/graph_traits.hpp>
-
-namespace boost
-{
-
-// tags for defining traversal properties
-
-// VisitorType
-struct lead_visitor
-{
-};
-struct follow_visitor
-{
-};
-
-// TraversalType
-struct single_side
-{
-};
-struct both_sides
-{
-};
-
-// TraversalSubType
-struct first_side
-{
-}; // for single_side
-struct second_side
-{
-}; // for single_side
-struct alternating
-{
-}; // for both_sides
-
-// Time
-struct current_iteration
-{
-};
-struct previous_iteration
-{
-};
-
-// Why TraversalType AND TraversalSubType? TraversalSubType is a function
-// template parameter passed in to the constructor of the face iterator,
-// whereas TraversalType is a class template parameter. This lets us decide
-// at runtime whether to move along the first or second side of a bicomp (by
-// assigning a face_iterator that has been constructed with TraversalSubType
-// = first_side or second_side to a face_iterator variable) without any of
-// the virtual function overhead that comes with implementing this
-// functionality as a more structured form of type erasure. It also allows
-// a single face_iterator to be the end iterator of two iterators traversing
-// both sides of a bicomp.
-
-// ValueType is either graph_traits<Graph>::vertex_descriptor
-// or graph_traits<Graph>::edge_descriptor
-
-// forward declaration (defining defaults)
-template < typename Graph, typename FaceHandlesMap, typename ValueType,
- typename BicompSideToTraverse = single_side,
- typename VisitorType = lead_visitor, typename Time = current_iteration >
-class face_iterator;
-
-template < typename Graph, bool StoreEdge > struct edge_storage
-{
-};
-
-template < typename Graph > struct edge_storage< Graph, true >
-{
- typename graph_traits< Graph >::edge_descriptor value;
-};
-
-// specialization for TraversalType = traverse_vertices
-template < typename Graph, typename FaceHandlesMap, typename ValueType,
- typename TraversalType, typename VisitorType, typename Time >
-
-class face_iterator : public boost::iterator_facade<
- face_iterator< Graph, FaceHandlesMap, ValueType,
- TraversalType, VisitorType, Time >,
- ValueType, boost::forward_traversal_tag, ValueType >
-{
-public:
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef face_iterator< Graph, FaceHandlesMap, ValueType, TraversalType,
- VisitorType, Time >
- self;
- typedef typename FaceHandlesMap::value_type face_handle_t;
-
- face_iterator()
- : m_lead(graph_traits< Graph >::null_vertex())
- , m_follow(graph_traits< Graph >::null_vertex())
- {
- }
-
- template < typename TraversalSubType >
- face_iterator(face_handle_t anchor_handle, FaceHandlesMap face_handles,
- TraversalSubType traversal_type)
- : m_follow(anchor_handle.get_anchor()), m_face_handles(face_handles)
- {
- set_lead_dispatch(anchor_handle, traversal_type);
- }
-
- template < typename TraversalSubType >
- face_iterator(vertex_t anchor, FaceHandlesMap face_handles,
- TraversalSubType traversal_type)
- : m_follow(anchor), m_face_handles(face_handles)
- {
- set_lead_dispatch(m_face_handles[anchor], traversal_type);
- }
-
-private:
- friend class boost::iterator_core_access;
-
- inline vertex_t get_first_vertex(
- face_handle_t anchor_handle, current_iteration)
- {
- return anchor_handle.first_vertex();
- }
-
- inline vertex_t get_second_vertex(
- face_handle_t anchor_handle, current_iteration)
- {
- return anchor_handle.second_vertex();
- }
-
- inline vertex_t get_first_vertex(
- face_handle_t anchor_handle, previous_iteration)
- {
- return anchor_handle.old_first_vertex();
- }
-
- inline vertex_t get_second_vertex(
- face_handle_t anchor_handle, previous_iteration)
- {
- return anchor_handle.old_second_vertex();
- }
-
- inline void set_lead_dispatch(face_handle_t anchor_handle, first_side)
- {
- m_lead = get_first_vertex(anchor_handle, Time());
- set_edge_to_first_dispatch(anchor_handle, ValueType(), Time());
- }
-
- inline void set_lead_dispatch(face_handle_t anchor_handle, second_side)
- {
- m_lead = get_second_vertex(anchor_handle, Time());
- set_edge_to_second_dispatch(anchor_handle, ValueType(), Time());
- }
-
- inline void set_edge_to_first_dispatch(
- face_handle_t anchor_handle, edge_t, current_iteration)
- {
- m_edge.value = anchor_handle.first_edge();
- }
-
- inline void set_edge_to_second_dispatch(
- face_handle_t anchor_handle, edge_t, current_iteration)
- {
- m_edge.value = anchor_handle.second_edge();
- }
-
- inline void set_edge_to_first_dispatch(
- face_handle_t anchor_handle, edge_t, previous_iteration)
- {
- m_edge.value = anchor_handle.old_first_edge();
- }
-
- inline void set_edge_to_second_dispatch(
- face_handle_t anchor_handle, edge_t, previous_iteration)
- {
- m_edge.value = anchor_handle.old_second_edge();
- }
-
- template < typename T >
- inline void set_edge_to_first_dispatch(face_handle_t, vertex_t, T)
- {
- }
-
- template < typename T >
- inline void set_edge_to_second_dispatch(face_handle_t, vertex_t, T)
- {
- }
-
- void increment()
- {
- face_handle_t curr_face_handle(m_face_handles[m_lead]);
- vertex_t first = get_first_vertex(curr_face_handle, Time());
- vertex_t second = get_second_vertex(curr_face_handle, Time());
- if (first == m_follow)
- {
- m_follow = m_lead;
- set_edge_to_second_dispatch(curr_face_handle, ValueType(), Time());
- m_lead = second;
- }
- else if (second == m_follow)
- {
- m_follow = m_lead;
- set_edge_to_first_dispatch(curr_face_handle, ValueType(), Time());
- m_lead = first;
- }
- else
- m_lead = m_follow = graph_traits< Graph >::null_vertex();
- }
-
- bool equal(self const& other) const
- {
- return m_lead == other.m_lead && m_follow == other.m_follow;
- }
-
- ValueType dereference() const
- {
- return dereference_dispatch(VisitorType(), ValueType());
- }
-
- inline ValueType dereference_dispatch(lead_visitor, vertex_t) const
- {
- return m_lead;
- }
-
- inline ValueType dereference_dispatch(follow_visitor, vertex_t) const
- {
- return m_follow;
- }
-
- inline ValueType dereference_dispatch(lead_visitor, edge_t) const
- {
- return m_edge.value;
- }
-
- inline ValueType dereference_dispatch(follow_visitor, edge_t) const
- {
- return m_edge.value;
- }
-
- vertex_t m_lead;
- vertex_t m_follow;
- edge_storage< Graph, boost::is_same< ValueType, edge_t >::value > m_edge;
- FaceHandlesMap m_face_handles;
-};
-
-template < typename Graph, typename FaceHandlesMap, typename ValueType,
- typename VisitorType, typename Time >
-class face_iterator< Graph, FaceHandlesMap, ValueType, both_sides, VisitorType,
- Time >
-: public boost::iterator_facade< face_iterator< Graph, FaceHandlesMap,
- ValueType, both_sides, VisitorType, Time >,
- ValueType, boost::forward_traversal_tag, ValueType >
-{
-public:
- typedef face_iterator< Graph, FaceHandlesMap, ValueType, both_sides,
- VisitorType, Time >
- self;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename FaceHandlesMap::value_type face_handle_t;
-
- face_iterator() {}
-
- face_iterator(face_handle_t anchor_handle, FaceHandlesMap face_handles)
- : first_itr(anchor_handle, face_handles, first_side())
- , second_itr(anchor_handle, face_handles, second_side())
- , first_is_active(true)
- , first_increment(true)
- {
- }
-
- face_iterator(vertex_t anchor, FaceHandlesMap face_handles)
- : first_itr(face_handles[anchor], face_handles, first_side())
- , second_itr(face_handles[anchor], face_handles, second_side())
- , first_is_active(true)
- , first_increment(true)
- {
- }
-
-private:
- friend class boost::iterator_core_access;
-
- typedef face_iterator< Graph, FaceHandlesMap, ValueType, single_side,
- follow_visitor, Time >
- inner_itr_t;
-
- void increment()
- {
- if (first_increment)
- {
- ++first_itr;
- ++second_itr;
- first_increment = false;
- }
- else if (first_is_active)
- ++first_itr;
- else
- ++second_itr;
- first_is_active = !first_is_active;
- }
-
- bool equal(self const& other) const
- {
- // Want this iterator to be equal to the "end" iterator when at least
- // one of the iterators has reached the root of the current bicomp.
- // This isn't ideal, but it works.
-
- return (first_itr == other.first_itr || second_itr == other.second_itr);
- }
-
- ValueType dereference() const
- {
- return first_is_active ? *first_itr : *second_itr;
- }
-
- inner_itr_t first_itr;
- inner_itr_t second_itr;
- inner_itr_t face_end;
- bool first_is_active;
- bool first_increment;
-};
-
-} /* namespace boost */
-
-#endif //__FACE_ITERATORS_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/planar_face_traversal.hpp b/contrib/restricted/boost/graph/include/boost/graph/planar_face_traversal.hpp
deleted file mode 100644
index 00e5b3895a..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/planar_face_traversal.hpp
+++ /dev/null
@@ -1,178 +0,0 @@
-//=======================================================================
-// Copyright (c) Aaron Windsor 2007
-//
-// 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 __PLANAR_FACE_TRAVERSAL_HPP__
-#define __PLANAR_FACE_TRAVERSAL_HPP__
-
-#include <vector>
-#include <set>
-#include <map>
-#include <boost/next_prior.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-
-namespace boost
-{
-
-struct planar_face_traversal_visitor
-{
- void begin_traversal() {}
-
- void begin_face() {}
-
- template < typename Edge > void next_edge(Edge) {}
-
- template < typename Vertex > void next_vertex(Vertex) {}
-
- void end_face() {}
-
- void end_traversal() {}
-};
-
-template < typename Graph, typename PlanarEmbedding, typename Visitor,
- typename EdgeIndexMap >
-void planar_face_traversal(const Graph& g, PlanarEmbedding embedding,
- Visitor& visitor, EdgeIndexMap em)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_t;
- typedef typename graph_traits< Graph >::edge_descriptor edge_t;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
- typedef typename property_traits< PlanarEmbedding >::value_type
- embedding_value_t;
- typedef typename embedding_value_t::const_iterator embedding_iterator_t;
-
- typedef typename std::vector< std::set< vertex_t > >
- distinguished_edge_storage_t;
- typedef typename std::vector< std::map< vertex_t, edge_t > >
- distinguished_edge_to_edge_storage_t;
-
- typedef typename boost::iterator_property_map<
- typename distinguished_edge_storage_t::iterator, EdgeIndexMap >
- distinguished_edge_map_t;
-
- typedef typename boost::iterator_property_map<
- typename distinguished_edge_to_edge_storage_t::iterator, EdgeIndexMap >
- distinguished_edge_to_edge_map_t;
-
- distinguished_edge_storage_t visited_vector(num_edges(g));
- distinguished_edge_to_edge_storage_t next_edge_vector(num_edges(g));
-
- distinguished_edge_map_t visited(visited_vector.begin(), em);
- distinguished_edge_to_edge_map_t next_edge(next_edge_vector.begin(), em);
-
- vertex_iterator_t vi, vi_end;
- typename std::vector< edge_t >::iterator ei, ei_end;
- edge_iterator_t fi, fi_end;
- embedding_iterator_t pi, pi_begin, pi_end;
-
- visitor.begin_traversal();
-
- // Initialize the next_edge property map. This map is initialized from the
- // PlanarEmbedding so that get(next_edge, e)[v] is the edge that comes
- // after e in the clockwise embedding around vertex v.
-
- for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
- {
- vertex_t v(*vi);
- pi_begin = embedding[v].begin();
- pi_end = embedding[v].end();
- for (pi = pi_begin; pi != pi_end; ++pi)
- {
- edge_t e(*pi);
- std::map< vertex_t, edge_t > m = get(next_edge, e);
- m[v] = boost::next(pi) == pi_end ? *pi_begin : *boost::next(pi);
- put(next_edge, e, m);
- }
- }
-
- // Take a copy of the edges in the graph here, since we want to accomodate
- // face traversals that add edges to the graph (for triangulation, in
- // particular) and don't want to use invalidated edge iterators.
- // Also, while iterating over all edges in the graph, we single out
- // any self-loops, which need some special treatment in the face traversal.
-
- std::vector< edge_t > self_loops;
- std::vector< edge_t > edges_cache;
- std::vector< vertex_t > vertices_in_edge;
-
- for (boost::tie(fi, fi_end) = edges(g); fi != fi_end; ++fi)
- {
- edge_t e(*fi);
- edges_cache.push_back(e);
- if (source(e, g) == target(e, g))
- self_loops.push_back(e);
- }
-
- // Iterate over all edges in the graph
- ei_end = edges_cache.end();
- for (ei = edges_cache.begin(); ei != ei_end; ++ei)
- {
-
- edge_t e(*ei);
- vertices_in_edge.clear();
- vertices_in_edge.push_back(source(e, g));
- vertices_in_edge.push_back(target(e, g));
-
- typename std::vector< vertex_t >::iterator vi, vi_end;
- vi_end = vertices_in_edge.end();
-
- // Iterate over both vertices in the current edge
- for (vi = vertices_in_edge.begin(); vi != vi_end; ++vi)
- {
-
- vertex_t v(*vi);
- std::set< vertex_t > e_visited = get(visited, e);
- typename std::set< vertex_t >::iterator e_visited_found
- = e_visited.find(v);
-
- if (e_visited_found == e_visited.end())
- visitor.begin_face();
-
- while (e_visited.find(v) == e_visited.end())
- {
- visitor.next_vertex(v);
- visitor.next_edge(e);
- e_visited.insert(v);
- put(visited, e, e_visited);
- v = source(e, g) == v ? target(e, g) : source(e, g);
- e = get(next_edge, e)[v];
- e_visited = get(visited, e);
- }
-
- if (e_visited_found == e_visited.end())
- visitor.end_face();
- }
- }
-
- // Iterate over all self-loops, visiting them once separately
- // (they've already been visited once, this visitation is for
- // the "inside" of the self-loop)
-
- ei_end = self_loops.end();
- for (ei = self_loops.begin(); ei != ei_end; ++ei)
- {
- visitor.begin_face();
- visitor.next_edge(*ei);
- visitor.next_vertex(source(*ei, g));
- visitor.end_face();
- }
-
- visitor.end_traversal();
-}
-
-template < typename Graph, typename PlanarEmbedding, typename Visitor >
-inline void planar_face_traversal(
- const Graph& g, PlanarEmbedding embedding, Visitor& visitor)
-{
- planar_face_traversal(g, embedding, visitor, get(edge_index, g));
-}
-
-} // namespace boost
-
-#endif //__PLANAR_FACE_TRAVERSAL_HPP__
diff --git a/contrib/restricted/boost/graph/include/boost/graph/plod_generator.hpp b/contrib/restricted/boost/graph/include/boost/graph/plod_generator.hpp
deleted file mode 100644
index 1f22d39190..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/plod_generator.hpp
+++ /dev/null
@@ -1,275 +0,0 @@
-// Copyright 2004-2006 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_PLOD_GENERATOR_HPP
-#define BOOST_GRAPH_PLOD_GENERATOR_HPP
-
-#include <iterator>
-#include <utility>
-#include <boost/random/uniform_int.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <vector>
-#include <map>
-#include <boost/config/no_tr1/cmath.hpp>
-#include <boost/mpl/if.hpp>
-
-namespace boost
-{
-template < typename RandomGenerator > class out_directed_plod_iterator
-{
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef std::pair< std::size_t, std::size_t > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type;
-
- out_directed_plod_iterator() : gen(0), at_end(true) {}
-
- out_directed_plod_iterator(RandomGenerator& gen, std::size_t n,
- double alpha, double beta, bool allow_self_loops)
- : gen(&gen)
- , n(n)
- , alpha(alpha)
- , beta(beta)
- , allow_self_loops(allow_self_loops)
- , at_end(false)
- , degree(0)
- , current(0, 0)
- {
- using std::pow;
-
- uniform_int< std::size_t > x(0, n - 1);
- std::size_t xv = x(gen);
- degree = (xv == 0 ? 0 : std::size_t(beta * pow(xv, -alpha)));
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- out_directed_plod_iterator& operator++()
- {
- using std::pow;
-
- uniform_int< std::size_t > x(0, n - 1);
-
- // Continue stepping through source nodes until the
- // (out)degree is > 0
- while (degree == 0)
- {
- // Step to the next source node. If we've gone past the
- // number of nodes we're responsible for, we're done.
- if (++current.first >= n)
- {
- at_end = true;
- return *this;
- }
-
- std::size_t xv = x(*gen);
- degree = (xv == 0 ? 0 : std::size_t(beta * pow(xv, -alpha)));
- }
-
- do
- {
- current.second = x(*gen);
- } while (current.first == current.second && !allow_self_loops);
- --degree;
-
- return *this;
- }
-
- out_directed_plod_iterator operator++(int)
- {
- out_directed_plod_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const out_directed_plod_iterator& other) const
- {
- return at_end == other.at_end;
- }
-
- bool operator!=(const out_directed_plod_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- RandomGenerator* gen;
- std::size_t n;
- double alpha;
- double beta;
- bool allow_self_loops;
- bool at_end;
- std::size_t degree;
- value_type current;
-};
-
-template < typename RandomGenerator > class undirected_plod_iterator
-{
- typedef std::vector< std::pair< std::size_t, std::size_t > > out_degrees_t;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< std::size_t, std::size_t > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type;
-
- undirected_plod_iterator()
- : gen(0), out_degrees(), degrees_left(0), allow_self_loops(false)
- {
- }
-
- undirected_plod_iterator(RandomGenerator& gen, std::size_t n, double alpha,
- double beta, bool allow_self_loops = false)
- : gen(&gen)
- , n(n)
- , out_degrees(new out_degrees_t)
- , degrees_left(0)
- , allow_self_loops(allow_self_loops)
- {
- using std::pow;
-
- uniform_int< std::size_t > x(0, n - 1);
- for (std::size_t i = 0; i != n; ++i)
- {
- std::size_t xv = x(gen);
- std::size_t degree
- = (xv == 0 ? 0 : std::size_t(beta * pow(xv, -alpha)));
- if (degree == 0)
- degree = 1;
- else if (degree >= n)
- degree = n - 1;
- out_degrees->push_back(std::make_pair(i, degree));
- degrees_left += degree;
- }
-
- next();
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- undirected_plod_iterator& operator++()
- {
- next();
- return *this;
- }
-
- undirected_plod_iterator operator++(int)
- {
- undirected_plod_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const undirected_plod_iterator& other) const
- {
- return degrees_left == other.degrees_left;
- }
-
- bool operator!=(const undirected_plod_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- void next()
- {
- std::size_t source, target;
- while (true)
- {
- /* We may get to the point where we can't actually find any
- new edges, so we just add some random edge and set the
- degrees left = 0 to signal termination. */
- if (out_degrees->size() < 2)
- {
- uniform_int< std::size_t > x(0, n - 1);
- current.first = x(*gen);
- do
- {
- current.second = x(*gen);
- } while (current.first == current.second && !allow_self_loops);
- degrees_left = 0;
- out_degrees->clear();
- return;
- }
-
- uniform_int< std::size_t > x(0, out_degrees->size() - 1);
-
- // Select source vertex
- source = x(*gen);
- if ((*out_degrees)[source].second == 0)
- {
- (*out_degrees)[source] = out_degrees->back();
- out_degrees->pop_back();
- continue;
- }
-
- // Select target vertex
- target = x(*gen);
- if ((*out_degrees)[target].second == 0)
- {
- (*out_degrees)[target] = out_degrees->back();
- out_degrees->pop_back();
- continue;
- }
- else if (source != target
- || (allow_self_loops && (*out_degrees)[source].second > 2))
- {
- break;
- }
- }
-
- // Update degree counts
- --(*out_degrees)[source].second;
- --degrees_left;
- --(*out_degrees)[target].second;
- --degrees_left;
- current.first = (*out_degrees)[source].first;
- current.second = (*out_degrees)[target].first;
- }
-
- RandomGenerator* gen;
- std::size_t n;
- shared_ptr< out_degrees_t > out_degrees;
- std::size_t degrees_left;
- bool allow_self_loops;
- value_type current;
-};
-
-template < typename RandomGenerator, typename Graph >
-class plod_iterator
-: public mpl::if_<
- is_convertible< typename graph_traits< Graph >::directed_category,
- directed_tag >,
- out_directed_plod_iterator< RandomGenerator >,
- undirected_plod_iterator< RandomGenerator > >::type
-{
- typedef typename mpl::if_<
- is_convertible< typename graph_traits< Graph >::directed_category,
- directed_tag >,
- out_directed_plod_iterator< RandomGenerator >,
- undirected_plod_iterator< RandomGenerator > >::type inherited;
-
-public:
- plod_iterator() : inherited() {}
-
- plod_iterator(RandomGenerator& gen, std::size_t n, double alpha,
- double beta, bool allow_self_loops = false)
- : inherited(gen, n, alpha, beta, allow_self_loops)
- {
- }
-};
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_PLOD_GENERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/point_traits.hpp b/contrib/restricted/boost/graph/include/boost/graph/point_traits.hpp
deleted file mode 100644
index 310515f6f1..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/point_traits.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_POINT_TRAITS_HPP
-#define BOOST_GRAPH_POINT_TRAITS_HPP
-
-namespace boost
-{
-namespace graph
-{
-
- template < typename Point > struct point_traits
- {
- // The type of each component of the point
- typedef typename Point::component_type component_type;
-
- // The number of dimensions in the point
- static std::size_t dimensions(const Point& point);
- };
-
-}
-} // end namespace boost::graph
-
-#endif // BOOST_GRAPH_POINT_TRAITS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/prim_minimum_spanning_tree.hpp b/contrib/restricted/boost/graph/include/boost/graph/prim_minimum_spanning_tree.hpp
deleted file mode 100644
index 1f26f2ef54..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/prim_minimum_spanning_tree.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_MST_PRIM_HPP
-#define BOOST_GRAPH_MST_PRIM_HPP
-
-#include <functional>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
- // this should be somewhere else in boost...
- template < class U, class V > struct _project2nd
- {
- V operator()(U, V v) const { return v; }
- };
-}
-
-namespace detail
-{
-
- // This is Prim's algorithm to calculate the Minimum Spanning Tree
- // for an undirected graph with weighted edges.
-
- template < class Graph, class P, class T, class R, class Weight >
- inline void prim_mst_impl(const Graph& G,
- typename graph_traits< Graph >::vertex_descriptor s,
- const bgl_named_params< P, T, R >& params, Weight)
- {
- typedef typename property_traits< Weight >::value_type W;
- std::less< W > compare;
- detail::_project2nd< W, W > combine;
- dijkstra_shortest_paths(
- G, s, params.distance_compare(compare).distance_combine(combine));
- }
-} // namespace detail
-
-template < class VertexListGraph, class DijkstraVisitor, class PredecessorMap,
- class DistanceMap, class WeightMap, class IndexMap >
-inline void prim_minimum_spanning_tree(const VertexListGraph& g,
- typename graph_traits< VertexListGraph >::vertex_descriptor s,
- PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
- IndexMap index_map, DijkstraVisitor vis)
-{
- typedef typename property_traits< WeightMap >::value_type W;
- std::less< W > compare;
- detail::_project2nd< W, W > combine;
- dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
- compare, combine, (std::numeric_limits< W >::max)(), 0, vis);
-}
-
-template < class VertexListGraph, class PredecessorMap, class P, class T,
- class R >
-inline void prim_minimum_spanning_tree(const VertexListGraph& g,
- PredecessorMap p_map, const bgl_named_params< P, T, R >& params)
-{
- detail::prim_mst_impl(g,
- choose_param(get_param(params, root_vertex_t()), *vertices(g).first),
- params.predecessor_map(p_map),
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight));
-}
-
-template < class VertexListGraph, class PredecessorMap >
-inline void prim_minimum_spanning_tree(
- const VertexListGraph& g, PredecessorMap p_map)
-{
- detail::prim_mst_impl(g, *vertices(g).first,
- predecessor_map(p_map).weight_map(get(edge_weight, g)),
- get(edge_weight, g));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_MST_PRIM_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/profile.hpp b/contrib/restricted/boost/graph/include/boost/graph/profile.hpp
deleted file mode 100644
index c06200cb71..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/profile.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-//=======================================================================
-// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
-// ETH Zurich, Center of Structure Technologies
-// (https://web.archive.org/web/20050307090307/http://www.structures.ethz.ch/)
-//
-// 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_PROFILE_HPP
-#define BOOST_GRAPH_PROFILE_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/detail/numeric_traits.hpp>
-#include <boost/graph/bandwidth.hpp>
-
-namespace boost
-{
-
-template < typename Graph, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type profile(
- const Graph& g, VertexIndexMap index)
-{
- typename graph_traits< Graph >::vertices_size_type b = 0;
- typename graph_traits< Graph >::vertex_iterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- b += ith_bandwidth(*i, g, index) + 1;
- }
-
- return b;
-}
-
-template < typename Graph >
-typename graph_traits< Graph >::vertices_size_type profile(const Graph& g)
-{
- return profile(g, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_PROFILE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/property_iter_range.hpp b/contrib/restricted/boost/graph/include/boost/graph/property_iter_range.hpp
deleted file mode 100644
index aa8780b37d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/property_iter_range.hpp
+++ /dev/null
@@ -1,120 +0,0 @@
-
-// (C) Copyright Francois Faure, iMAGIS-GRAVIR / UJF, 2001.
-//
-// 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)
-//
-// Revision History:
-// 03 May 2001 Jeremy Siek
-// Generalized the property map iterator and moved that
-// part to boost/property_map.hpp. Also modified to
-// differentiate between const/mutable graphs and
-// added a workaround to avoid partial specialization.
-
-// 02 May 2001 Francois Faure
-// Initial version.
-
-#ifndef BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
-#define BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
-
-#include <boost/property_map/property_map_iterator.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/same_traits.hpp>
-
-namespace boost
-{
-
-//======================================================================
-// graph property iterator range
-
-template < class Graph, class PropertyTag > class graph_property_iter_range
-{
- typedef typename property_map< Graph, PropertyTag >::type map_type;
- typedef
- typename property_map< Graph, PropertyTag >::const_type const_map_type;
- typedef typename property_kind< PropertyTag >::type Kind;
- typedef typename mpl::if_c< is_same< Kind, vertex_property_tag >::value,
- typename graph_traits< Graph >::vertex_iterator,
- typename graph_traits< Graph >::edge_iterator >::type iter;
-
-public:
- typedef typename property_map_iterator_generator< map_type, iter >::type
- iterator;
- typedef
- typename property_map_iterator_generator< const_map_type, iter >::type
- const_iterator;
- typedef std::pair< iterator, iterator > type;
- typedef std::pair< const_iterator, const_iterator > const_type;
-};
-
-namespace detail
-{
-
- template < class Graph, class Tag >
- typename graph_property_iter_range< Graph, Tag >::type
- get_property_iter_range_kind(
- Graph& graph, const Tag& tag, const vertex_property_tag&)
- {
- typedef typename graph_property_iter_range< Graph, Tag >::iterator iter;
- return std::make_pair(iter(vertices(graph).first, get(tag, graph)),
- iter(vertices(graph).second, get(tag, graph)));
- }
-
- template < class Graph, class Tag >
- typename graph_property_iter_range< Graph, Tag >::const_type
- get_property_iter_range_kind(
- const Graph& graph, const Tag& tag, const vertex_property_tag&)
- {
- typedef typename graph_property_iter_range< Graph, Tag >::const_iterator
- iter;
- return std::make_pair(iter(vertices(graph).first, get(tag, graph)),
- iter(vertices(graph).second, get(tag, graph)));
- }
-
- template < class Graph, class Tag >
- typename graph_property_iter_range< Graph, Tag >::type
- get_property_iter_range_kind(
- Graph& graph, const Tag& tag, const edge_property_tag&)
- {
- typedef typename graph_property_iter_range< Graph, Tag >::iterator iter;
- return std::make_pair(iter(edges(graph).first, get(tag, graph)),
- iter(edges(graph).second, get(tag, graph)));
- }
-
- template < class Graph, class Tag >
- typename graph_property_iter_range< Graph, Tag >::const_type
- get_property_iter_range_kind(
- const Graph& graph, const Tag& tag, const edge_property_tag&)
- {
- typedef typename graph_property_iter_range< Graph, Tag >::const_iterator
- iter;
- return std::make_pair(iter(edges(graph).first, get(tag, graph)),
- iter(edges(graph).second, get(tag, graph)));
- }
-
-} // namespace detail
-
-//======================================================================
-// get an iterator range of properties
-
-template < class Graph, class Tag >
-typename graph_property_iter_range< Graph, Tag >::type get_property_iter_range(
- Graph& graph, const Tag& tag)
-{
- typedef typename property_kind< Tag >::type Kind;
- return detail::get_property_iter_range_kind(graph, tag, Kind());
-}
-
-template < class Graph, class Tag >
-typename graph_property_iter_range< Graph, Tag >::const_type
-get_property_iter_range(const Graph& graph, const Tag& tag)
-{
- typedef typename property_kind< Tag >::type Kind;
- return detail::get_property_iter_range_kind(graph, tag, Kind());
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/property_maps/container_property_map.hpp b/contrib/restricted/boost/graph/include/boost/graph/property_maps/container_property_map.hpp
deleted file mode 100644
index 6a565c2e9d..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/property_maps/container_property_map.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_CONTAINER_PROPERTY_MAP_HPP
-#define BOOST_GRAPH_CONTAINER_PROPERTY_MAP_HPP
-
-#include <boost/graph/detail/index.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-// This is an adapter built over the iterator property map with
-// more useful uniform construction semantics. Specifically, this
-// requires the container rather than the iterator and the graph
-// rather than the optional index map.
-template < typename Graph, typename Key, typename Container >
-struct container_property_map
-: public boost::put_get_helper<
- typename iterator_property_map< typename Container::iterator,
- typename property_map< Graph,
- typename detail::choose_indexer< Graph,
- Key >::index_type >::type >::reference,
- container_property_map< Graph, Key, Container > >
-{
- typedef typename detail::choose_indexer< Graph, Key >::indexer_type
- indexer_type;
- typedef typename indexer_type::index_type index_type;
- typedef iterator_property_map< typename Container::iterator,
- typename property_map< Graph, index_type >::type >
- map_type;
- typedef typename map_type::key_type key_type;
- typedef typename map_type::value_type value_type;
- typedef typename map_type::reference reference;
- typedef typename map_type::category category;
-
- // The default constructor will *probably* crash if its actually
- // used for referencing vertices since the underlying iterator
- // map points past the end of an unknown container.
- inline container_property_map() : m_map() {}
-
- // This is the preferred constructor. It is invoked over the container
- // and the graph explicitly. This requires that the underlying iterator
- // map use the indices of the vertices in g rather than the default
- // identity map.
- //
- // Note the const-cast this ensures the reference type of the
- // vertex index map is non-const, which happens to be an
- // artifact of passing const graph references.
- inline container_property_map(Container& c, const Graph& g)
- : m_map(c.begin(), indexer_type::index_map(const_cast< Graph& >(g)))
- {
- }
-
- // Typical copy constructor.
- inline container_property_map(const container_property_map& x)
- : m_map(x.m_map)
- {
- }
-
- // The [] operator delegates to the underlying map/
- inline reference operator[](const key_type& k) const { return m_map[k]; }
-
- map_type m_map;
-};
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/property_maps/matrix_property_map.hpp b/contrib/restricted/boost/graph/include/boost/graph/property_maps/matrix_property_map.hpp
deleted file mode 100644
index f33f137464..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/property_maps/matrix_property_map.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_MATRIX_PROPERTY_MAP_HPP
-#define BOOST_GRAPH_MATRIX_PROPERTY_MAP_HPP
-
-#include <boost/graph/property_maps/container_property_map.hpp>
-
-namespace boost
-{
-// This property map is built specifically for property maps over
-// matrices. Like the basic property map over a container, this builds
-// the property abstraction over a matrix (usually a vector of vectors)
-// and returns property maps over the nested containers.
-template < typename Graph, typename Key, typename Matrix >
-struct matrix_property_map
-: boost::put_get_helper<
- container_property_map< Graph, Key, typename Matrix::value_type >,
- matrix_property_map< Graph, Key, Matrix > >
-{
- // abstract the indexing keys
- typedef typename detail::choose_indexer< Graph, Key >::indexer_type
- indexer_type;
-
- // aliases for the nested container and its corresponding map
- typedef typename Matrix::value_type container_type;
- typedef container_property_map< Graph, Key, container_type > map_type;
-
- typedef Key key_type;
-
- // This property map doesn't really provide access to nested containers,
- // but returns property maps over them. Since property maps are all
- // copy-constructible (or should be anyways), we never return references.
- // As such, this property is only readable, but not writable. Curiously,
- // the inner property map is actually an lvalue pmap.
- typedef map_type value_type;
- typedef map_type reference;
- typedef readable_property_map_tag category;
-
- matrix_property_map() : m_matrix(0), m_graph(0) {}
-
- matrix_property_map(Matrix& m, const Graph& g)
- : m_matrix(&m), m_graph(const_cast< Graph* >(&g))
- {
- }
-
- matrix_property_map(const matrix_property_map& x)
- : m_matrix(x.m_matrix), m_graph(x.m_graph)
- {
- }
-
- inline reference operator[](key_type k) const
- {
- typedef typename indexer_type::value_type Index;
- Index x = indexer_type::index(k, *m_graph);
- return map_type((*m_matrix)[x], *m_graph);
- }
-
-private:
- mutable Matrix* m_matrix;
- mutable Graph* m_graph;
-};
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/push_relabel_max_flow.hpp b/contrib/restricted/boost/graph/include/boost/graph/push_relabel_max_flow.hpp
deleted file mode 100644
index a243f56487..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/push_relabel_max_flow.hpp
+++ /dev/null
@@ -1,860 +0,0 @@
-//=======================================================================
-// Copyright 2000 University of Notre Dame.
-// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
-//
-// 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_PUSH_RELABEL_MAX_FLOW_HPP
-#define BOOST_PUSH_RELABEL_MAX_FLOW_HPP
-
-#include <boost/config.hpp>
-#include <boost/assert.hpp>
-#include <vector>
-#include <list>
-#include <iosfwd>
-#include <algorithm> // for std::min and std::max
-
-#include <boost/pending/queue.hpp>
-#include <boost/limits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/named_function_params.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- // This implementation is based on Goldberg's
- // "On Implementing Push-Relabel Method for the Maximum Flow Problem"
- // by B.V. Cherkassky and A.V. Goldberg, IPCO '95, pp. 157--171
- // and on the h_prf.c and hi_pr.c code written by the above authors.
-
- // This implements the highest-label version of the push-relabel method
- // with the global relabeling and gap relabeling heuristics.
-
- // The terms "rank", "distance", "height" are synonyms in
- // Goldberg's implementation, paper and in the CLR. A "layer" is a
- // group of vertices with the same distance. The vertices in each
- // layer are categorized as active or inactive. An active vertex
- // has positive excess flow and its distance is less than n (it is
- // not blocked).
-
- template < class Vertex > struct preflow_layer
- {
- std::list< Vertex > active_vertices;
- std::list< Vertex > inactive_vertices;
- };
-
- template < class Graph,
- class EdgeCapacityMap, // integer value type
- class ResidualCapacityEdgeMap, class ReverseEdgeMap,
- class VertexIndexMap, // vertex_descriptor -> integer
- class FlowValue >
- class push_relabel
- {
- public:
- typedef graph_traits< Graph > Traits;
- typedef typename Traits::vertex_descriptor vertex_descriptor;
- typedef typename Traits::edge_descriptor edge_descriptor;
- typedef typename Traits::vertex_iterator vertex_iterator;
- typedef typename Traits::out_edge_iterator out_edge_iterator;
- typedef typename Traits::vertices_size_type vertices_size_type;
- typedef typename Traits::edges_size_type edges_size_type;
-
- typedef preflow_layer< vertex_descriptor > Layer;
- typedef std::vector< Layer > LayerArray;
- typedef typename LayerArray::iterator layer_iterator;
- typedef typename LayerArray::size_type distance_size_type;
-
- typedef color_traits< default_color_type > ColorTraits;
-
- //=======================================================================
- // Some helper predicates
-
- inline bool is_admissible(vertex_descriptor u, vertex_descriptor v)
- {
- return get(distance, u) == get(distance, v) + 1;
- }
- inline bool is_residual_edge(edge_descriptor a)
- {
- return 0 < get(residual_capacity, a);
- }
- inline bool is_saturated(edge_descriptor a)
- {
- return get(residual_capacity, a) == 0;
- }
-
- //=======================================================================
- // Layer List Management Functions
-
- typedef typename std::list< vertex_descriptor >::iterator list_iterator;
-
- void add_to_active_list(vertex_descriptor u, Layer& layer)
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- layer.active_vertices.push_front(u);
- max_active = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- get(distance, u), max_active);
- min_active = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- get(distance, u), min_active);
- layer_list_ptr[u] = layer.active_vertices.begin();
- }
- void remove_from_active_list(vertex_descriptor u)
- {
- layers[get(distance, u)].active_vertices.erase(layer_list_ptr[u]);
- }
-
- void add_to_inactive_list(vertex_descriptor u, Layer& layer)
- {
- layer.inactive_vertices.push_front(u);
- layer_list_ptr[u] = layer.inactive_vertices.begin();
- }
- void remove_from_inactive_list(vertex_descriptor u)
- {
- layers[get(distance, u)].inactive_vertices.erase(layer_list_ptr[u]);
- }
-
- //=======================================================================
- // initialization
- push_relabel(Graph& g_, EdgeCapacityMap cap,
- ResidualCapacityEdgeMap res, ReverseEdgeMap rev,
- vertex_descriptor src_, vertex_descriptor sink_, VertexIndexMap idx)
- : g(g_)
- , n(num_vertices(g_))
- , capacity(cap)
- , src(src_)
- , sink(sink_)
- , index(idx)
- , excess_flow_data(num_vertices(g_))
- , excess_flow(excess_flow_data.begin(), idx)
- , current_data(num_vertices(g_), out_edges(*vertices(g_).first, g_))
- , current(current_data.begin(), idx)
- , distance_data(num_vertices(g_))
- , distance(distance_data.begin(), idx)
- , color_data(num_vertices(g_))
- , color(color_data.begin(), idx)
- , reverse_edge(rev)
- , residual_capacity(res)
- , layers(num_vertices(g_))
- , layer_list_ptr_data(
- num_vertices(g_), layers.front().inactive_vertices.end())
- , layer_list_ptr(layer_list_ptr_data.begin(), idx)
- , push_count(0)
- , update_count(0)
- , relabel_count(0)
- , gap_count(0)
- , gap_node_count(0)
- , work_since_last_update(0)
- {
- vertex_iterator u_iter, u_end;
- // Don't count the reverse edges
- edges_size_type m = num_edges(g) / 2;
- nm = alpha() * n + m;
-
- // Initialize flow to zero which means initializing
- // the residual capacity to equal the capacity.
- out_edge_iterator ei, e_end;
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- for (boost::tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end;
- ++ei)
- {
- put(residual_capacity, *ei, get(capacity, *ei));
- }
-
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- vertex_descriptor u = *u_iter;
- put(excess_flow, u, 0);
- current[u] = out_edges(u, g);
- }
-
- bool overflow_detected = false;
- FlowValue test_excess = 0;
-
- out_edge_iterator a_iter, a_end;
- for (boost::tie(a_iter, a_end) = out_edges(src, g); a_iter != a_end;
- ++a_iter)
- if (target(*a_iter, g) != src)
- test_excess += get(residual_capacity, *a_iter);
- if (test_excess > (std::numeric_limits< FlowValue >::max)())
- overflow_detected = true;
-
- if (overflow_detected)
- put(excess_flow, src,
- (std::numeric_limits< FlowValue >::max)());
- else
- {
- put(excess_flow, src, 0);
- for (boost::tie(a_iter, a_end) = out_edges(src, g);
- a_iter != a_end; ++a_iter)
- {
- edge_descriptor a = *a_iter;
- vertex_descriptor tgt = target(a, g);
- if (tgt != src)
- {
- ++push_count;
- FlowValue delta = get(residual_capacity, a);
- put(residual_capacity, a,
- get(residual_capacity, a) - delta);
- edge_descriptor rev = get(reverse_edge, a);
- put(residual_capacity, rev,
- get(residual_capacity, rev) + delta);
- put(excess_flow, tgt, get(excess_flow, tgt) + delta);
- }
- }
- }
- max_distance = num_vertices(g) - 1;
- max_active = 0;
- min_active = n;
-
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- vertex_descriptor u = *u_iter;
- if (u == sink)
- {
- put(distance, u, 0);
- continue;
- }
- else if (u == src && !overflow_detected)
- put(distance, u, n);
- else
- put(distance, u, 1);
-
- if (get(excess_flow, u) > 0)
- add_to_active_list(u, layers[1]);
- else if (get(distance, u) < n)
- add_to_inactive_list(u, layers[1]);
- }
-
- } // push_relabel constructor
-
- //=======================================================================
- // This is a breadth-first search over the residual graph
- // (well, actually the reverse of the residual graph).
- // Would be cool to have a graph view adaptor for hiding certain
- // edges, like the saturated (non-residual) edges in this case.
- // Goldberg's implementation abused "distance" for the coloring.
- void global_distance_update()
- {
- BOOST_USING_STD_MAX();
- ++update_count;
- vertex_iterator u_iter, u_end;
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- put(color, *u_iter, ColorTraits::white());
- put(distance, *u_iter, n);
- }
- put(color, sink, ColorTraits::gray());
- put(distance, sink, 0);
-
- for (distance_size_type l = 0; l <= max_distance; ++l)
- {
- layers[l].active_vertices.clear();
- layers[l].inactive_vertices.clear();
- }
-
- max_distance = max_active = 0;
- min_active = n;
-
- Q.push(sink);
- while (!Q.empty())
- {
- vertex_descriptor u = Q.top();
- Q.pop();
- distance_size_type d_v = get(distance, u) + 1;
-
- out_edge_iterator ai, a_end;
- for (boost::tie(ai, a_end) = out_edges(u, g); ai != a_end; ++ai)
- {
- edge_descriptor a = *ai;
- vertex_descriptor v = target(a, g);
- if (get(color, v) == ColorTraits::white()
- && is_residual_edge(get(reverse_edge, a)))
- {
- put(distance, v, d_v);
- put(color, v, ColorTraits::gray());
- current[v] = out_edges(v, g);
- max_distance = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- d_v, max_distance);
-
- if (get(excess_flow, v) > 0)
- add_to_active_list(v, layers[d_v]);
- else
- add_to_inactive_list(v, layers[d_v]);
-
- Q.push(v);
- }
- }
- }
- } // global_distance_update()
-
- //=======================================================================
- // This function is called "push" in Goldberg's h_prf implementation,
- // but it is called "discharge" in the paper and in hi_pr.c.
- void discharge(vertex_descriptor u)
- {
- BOOST_ASSERT(get(excess_flow, u) > 0);
- while (1)
- {
- out_edge_iterator ai, ai_end;
- for (boost::tie(ai, ai_end) = current[u]; ai != ai_end; ++ai)
- {
- edge_descriptor a = *ai;
- if (is_residual_edge(a))
- {
- vertex_descriptor v = target(a, g);
- if (is_admissible(u, v))
- {
- ++push_count;
- if (v != sink && get(excess_flow, v) == 0)
- {
- remove_from_inactive_list(v);
- add_to_active_list(v, layers[get(distance, v)]);
- }
- push_flow(a);
- if (get(excess_flow, u) == 0)
- break;
- }
- }
- } // for out_edges of i starting from current
-
- Layer& layer = layers[get(distance, u)];
- distance_size_type du = get(distance, u);
-
- if (ai == ai_end)
- { // i must be relabeled
- relabel_distance(u);
- if (layer.active_vertices.empty()
- && layer.inactive_vertices.empty())
- gap(du);
- if (get(distance, u) == n)
- break;
- }
- else
- { // i is no longer active
- current[u].first = ai;
- add_to_inactive_list(u, layer);
- break;
- }
- } // while (1)
- } // discharge()
-
- //=======================================================================
- // This corresponds to the "push" update operation of the paper,
- // not the "push" function in Goldberg's h_prf.c implementation.
- // The idea is to push the excess flow from from vertex u to v.
- void push_flow(edge_descriptor u_v)
- {
- vertex_descriptor u = source(u_v, g), v = target(u_v, g);
-
- BOOST_USING_STD_MIN();
- FlowValue flow_delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- get(excess_flow, u), get(residual_capacity, u_v));
-
- put(residual_capacity, u_v,
- get(residual_capacity, u_v) - flow_delta);
- edge_descriptor rev = get(reverse_edge, u_v);
- put(residual_capacity, rev,
- get(residual_capacity, rev) + flow_delta);
-
- put(excess_flow, u, get(excess_flow, u) - flow_delta);
- put(excess_flow, v, get(excess_flow, v) + flow_delta);
- } // push_flow()
-
- //=======================================================================
- // The main purpose of this routine is to set distance[v]
- // to the smallest value allowed by the valid labeling constraints,
- // which are:
- // distance[t] = 0
- // distance[u] <= distance[v] + 1 for every residual edge (u,v)
- //
- distance_size_type relabel_distance(vertex_descriptor u)
- {
- BOOST_USING_STD_MAX();
- ++relabel_count;
- work_since_last_update += beta();
-
- distance_size_type min_distance = num_vertices(g);
- put(distance, u, min_distance);
-
- // Examine the residual out-edges of vertex i, choosing the
- // edge whose target vertex has the minimal distance.
- out_edge_iterator ai, a_end, min_edge_iter;
- for (boost::tie(ai, a_end) = out_edges(u, g); ai != a_end; ++ai)
- {
- ++work_since_last_update;
- edge_descriptor a = *ai;
- vertex_descriptor v = target(a, g);
- if (is_residual_edge(a) && get(distance, v) < min_distance)
- {
- min_distance = get(distance, v);
- min_edge_iter = ai;
- }
- }
- ++min_distance;
- if (min_distance < n)
- {
- put(distance, u, min_distance); // this is the main action
- current[u].first = min_edge_iter;
- max_distance = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- min_distance, max_distance);
- }
- return min_distance;
- } // relabel_distance()
-
- //=======================================================================
- // cleanup beyond the gap
- void gap(distance_size_type empty_distance)
- {
- ++gap_count;
-
- distance_size_type r; // distance of layer before the current layer
- r = empty_distance - 1;
-
- // Set the distance for the vertices beyond the gap to "infinity".
- for (layer_iterator l = layers.begin() + empty_distance + 1;
- l < layers.begin() + max_distance; ++l)
- {
- list_iterator i;
- for (i = l->inactive_vertices.begin();
- i != l->inactive_vertices.end(); ++i)
- {
- put(distance, *i, n);
- ++gap_node_count;
- }
- l->inactive_vertices.clear();
- }
- max_distance = r;
- max_active = r;
- }
-
- //=======================================================================
- // This is the core part of the algorithm, "phase one".
- FlowValue maximum_preflow()
- {
- work_since_last_update = 0;
-
- while (max_active >= min_active)
- { // "main" loop
-
- Layer& layer = layers[max_active];
- list_iterator u_iter = layer.active_vertices.begin();
-
- if (u_iter == layer.active_vertices.end())
- --max_active;
- else
- {
- vertex_descriptor u = *u_iter;
- remove_from_active_list(u);
-
- discharge(u);
-
- if (work_since_last_update * global_update_frequency() > nm)
- {
- global_distance_update();
- work_since_last_update = 0;
- }
- }
- } // while (max_active >= min_active)
-
- return get(excess_flow, sink);
- } // maximum_preflow()
-
- //=======================================================================
- // remove excess flow, the "second phase"
- // This does a DFS on the reverse flow graph of nodes with excess flow.
- // If a cycle is found, cancel it.
- // Return the nodes with excess flow in topological order.
- //
- // Unlike the prefl_to_flow() implementation, we use
- // "color" instead of "distance" for the DFS labels
- // "parent" instead of nl_prev for the DFS tree
- // "topo_next" instead of nl_next for the topological ordering
- void convert_preflow_to_flow()
- {
- vertex_iterator u_iter, u_end;
- out_edge_iterator ai, a_end;
-
- vertex_descriptor r, restart, u;
-
- std::vector< vertex_descriptor > parent(n);
- std::vector< vertex_descriptor > topo_next(n);
-
- vertex_descriptor tos(parent[0]),
- bos(parent[0]); // bogus initialization, just to avoid warning
- bool bos_null = true;
-
- // handle self-loops
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- for (boost::tie(ai, a_end) = out_edges(*u_iter, g); ai != a_end;
- ++ai)
- if (target(*ai, g) == *u_iter)
- put(residual_capacity, *ai, get(capacity, *ai));
-
- // initialize
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- u = *u_iter;
- put(color, u, ColorTraits::white());
- parent[get(index, u)] = u;
- current[u] = out_edges(u, g);
- }
- // eliminate flow cycles and topologically order the vertices
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- u = *u_iter;
- if (get(color, u) == ColorTraits::white()
- && get(excess_flow, u) > 0 && u != src && u != sink)
- {
- r = u;
- put(color, r, ColorTraits::gray());
- while (1)
- {
- for (; current[u].first != current[u].second;
- ++current[u].first)
- {
- edge_descriptor a = *current[u].first;
- if (get(capacity, a) == 0 && is_residual_edge(a))
- {
- vertex_descriptor v = target(a, g);
- if (get(color, v) == ColorTraits::white())
- {
- put(color, v, ColorTraits::gray());
- parent[get(index, v)] = u;
- u = v;
- break;
- }
- else if (get(color, v) == ColorTraits::gray())
- {
- // find minimum flow on the cycle
- FlowValue delta = get(residual_capacity, a);
- while (1)
- {
- BOOST_USING_STD_MIN();
- delta = min
- BOOST_PREVENT_MACRO_SUBSTITUTION(
- delta,
- get(residual_capacity,
- *current[v].first));
- if (v == u)
- break;
- else
- v = target(*current[v].first, g);
- }
- // remove delta flow units
- v = u;
- while (1)
- {
- a = *current[v].first;
- put(residual_capacity, a,
- get(residual_capacity, a) - delta);
- edge_descriptor rev
- = get(reverse_edge, a);
- put(residual_capacity, rev,
- get(residual_capacity, rev)
- + delta);
- v = target(a, g);
- if (v == u)
- break;
- }
-
- // back-out of DFS to the first saturated
- // edge
- restart = u;
- for (v = target(*current[u].first, g);
- v != u; v = target(a, g))
- {
- a = *current[v].first;
- if (get(color, v)
- == ColorTraits::white()
- || is_saturated(a))
- {
- put(color,
- target(*current[v].first, g),
- ColorTraits::white());
- if (get(color, v)
- != ColorTraits::white())
- restart = v;
- }
- }
- if (restart != u)
- {
- u = restart;
- ++current[u].first;
- break;
- }
- } // else if (color[v] == ColorTraits::gray())
- } // if (get(capacity, a) == 0 ...
- } // for out_edges(u, g) (though "u" changes during
- // loop)
-
- if (current[u].first == current[u].second)
- {
- // scan of i is complete
- put(color, u, ColorTraits::black());
- if (u != src)
- {
- if (bos_null)
- {
- bos = u;
- bos_null = false;
- tos = u;
- }
- else
- {
- topo_next[get(index, u)] = tos;
- tos = u;
- }
- }
- if (u != r)
- {
- u = parent[get(index, u)];
- ++current[u].first;
- }
- else
- break;
- }
- } // while (1)
- } // if (color[u] == white && excess_flow[u] > 0 & ...)
- } // for all vertices in g
-
- // return excess flows
- // note that the sink is not on the stack
- if (!bos_null)
- {
- for (u = tos; u != bos; u = topo_next[get(index, u)])
- {
- boost::tie(ai, a_end) = out_edges(u, g);
- while (get(excess_flow, u) > 0 && ai != a_end)
- {
- if (get(capacity, *ai) == 0 && is_residual_edge(*ai))
- push_flow(*ai);
- ++ai;
- }
- }
- // do the bottom
- u = bos;
- boost::tie(ai, a_end) = out_edges(u, g);
- while (get(excess_flow, u) > 0 && ai != a_end)
- {
- if (get(capacity, *ai) == 0 && is_residual_edge(*ai))
- push_flow(*ai);
- ++ai;
- }
- }
-
- } // convert_preflow_to_flow()
-
- //=======================================================================
- inline bool is_flow()
- {
- vertex_iterator u_iter, u_end;
- out_edge_iterator ai, a_end;
-
- // check edge flow values
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- for (boost::tie(ai, a_end) = out_edges(*u_iter, g); ai != a_end;
- ++ai)
- {
- edge_descriptor a = *ai;
- if (get(capacity, a) > 0)
- if ((get(residual_capacity, a)
- + get(
- residual_capacity, get(reverse_edge, a))
- != get(capacity, a)
- + get(capacity, get(reverse_edge, a)))
- || (get(residual_capacity, a) < 0)
- || (get(residual_capacity, get(reverse_edge, a))
- < 0))
- return false;
- }
- }
-
- // check conservation
- FlowValue sum;
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- {
- vertex_descriptor u = *u_iter;
- if (u != src && u != sink)
- {
- if (get(excess_flow, u) != 0)
- return false;
- sum = 0;
- for (boost::tie(ai, a_end) = out_edges(u, g); ai != a_end;
- ++ai)
- if (get(capacity, *ai) > 0)
- sum -= get(capacity, *ai)
- - get(residual_capacity, *ai);
- else
- sum += get(residual_capacity, *ai);
-
- if (get(excess_flow, u) != sum)
- return false;
- }
- }
-
- return true;
- } // is_flow()
-
- bool is_optimal()
- {
- // check if mincut is saturated...
- global_distance_update();
- return get(distance, src) >= n;
- }
-
- void print_statistics(std::ostream& os) const
- {
- os << "pushes: " << push_count << std::endl
- << "relabels: " << relabel_count << std::endl
- << "updates: " << update_count << std::endl
- << "gaps: " << gap_count << std::endl
- << "gap nodes: " << gap_node_count << std::endl
- << std::endl;
- }
-
- void print_flow_values(std::ostream& os) const
- {
- os << "flow values" << std::endl;
- vertex_iterator u_iter, u_end;
- out_edge_iterator ei, e_end;
- for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end;
- ++u_iter)
- for (boost::tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end;
- ++ei)
- if (get(capacity, *ei) > 0)
- os << *u_iter << " " << target(*ei, g) << " "
- << (get(capacity, *ei) - get(residual_capacity, *ei))
- << std::endl;
- os << std::endl;
- }
-
- //=======================================================================
-
- Graph& g;
- vertices_size_type n;
- vertices_size_type nm;
- EdgeCapacityMap capacity;
- vertex_descriptor src;
- vertex_descriptor sink;
- VertexIndexMap index;
-
- // will need to use random_access_property_map with these
- std::vector< FlowValue > excess_flow_data;
- iterator_property_map< typename std::vector< FlowValue >::iterator,
- VertexIndexMap >
- excess_flow;
- std::vector< std::pair< out_edge_iterator, out_edge_iterator > >
- current_data;
- iterator_property_map<
- typename std::vector<
- std::pair< out_edge_iterator, out_edge_iterator > >::iterator,
- VertexIndexMap >
- current;
- std::vector< distance_size_type > distance_data;
- iterator_property_map<
- typename std::vector< distance_size_type >::iterator,
- VertexIndexMap >
- distance;
- std::vector< default_color_type > color_data;
- iterator_property_map< std::vector< default_color_type >::iterator,
- VertexIndexMap >
- color;
-
- // Edge Property Maps that must be interior to the graph
- ReverseEdgeMap reverse_edge;
- ResidualCapacityEdgeMap residual_capacity;
-
- LayerArray layers;
- std::vector< list_iterator > layer_list_ptr_data;
- iterator_property_map< typename std::vector< list_iterator >::iterator,
- VertexIndexMap >
- layer_list_ptr;
- distance_size_type max_distance; // maximal distance
- distance_size_type max_active; // maximal distance with active node
- distance_size_type min_active; // minimal distance with active node
- boost::queue< vertex_descriptor > Q;
-
- // Statistics counters
- long push_count;
- long update_count;
- long relabel_count;
- long gap_count;
- long gap_node_count;
-
- inline double global_update_frequency() { return 0.5; }
- inline vertices_size_type alpha() { return 6; }
- inline long beta() { return 12; }
-
- long work_since_last_update;
- };
-
-} // namespace detail
-
-template < class Graph, class CapacityEdgeMap, class ResidualCapacityEdgeMap,
- class ReverseEdgeMap, class VertexIndexMap >
-typename property_traits< CapacityEdgeMap >::value_type push_relabel_max_flow(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink, CapacityEdgeMap cap,
- ResidualCapacityEdgeMap res, ReverseEdgeMap rev, VertexIndexMap index_map)
-{
- typedef typename property_traits< CapacityEdgeMap >::value_type FlowValue;
-
- detail::push_relabel< Graph, CapacityEdgeMap, ResidualCapacityEdgeMap,
- ReverseEdgeMap, VertexIndexMap, FlowValue >
- algo(g, cap, res, rev, src, sink, index_map);
-
- FlowValue flow = algo.maximum_preflow();
-
- algo.convert_preflow_to_flow();
-
- BOOST_ASSERT(algo.is_flow());
- BOOST_ASSERT(algo.is_optimal());
-
- return flow;
-} // push_relabel_max_flow()
-
-template < class Graph, class P, class T, class R >
-typename detail::edge_capacity_value< Graph, P, T, R >::type
-push_relabel_max_flow(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink,
- const bgl_named_params< P, T, R >& params)
-{
- return push_relabel_max_flow(g, src, sink,
- choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
- choose_pmap(get_param(params, edge_residual_capacity), g,
- edge_residual_capacity),
- choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
- choose_const_pmap(get_param(params, vertex_index), g, vertex_index));
-}
-
-template < class Graph >
-typename property_traits<
- typename property_map< Graph, edge_capacity_t >::const_type >::value_type
-push_relabel_max_flow(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink)
-{
- bgl_named_params< int, buffer_param_t > params(0); // bogus empty param
- return push_relabel_max_flow(g, src, sink, params);
-}
-
-} // namespace boost
-
-#endif // BOOST_PUSH_RELABEL_MAX_FLOW_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/r_c_shortest_paths.hpp b/contrib/restricted/boost/graph/include/boost/graph/r_c_shortest_paths.hpp
deleted file mode 100644
index 03aa09063e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/r_c_shortest_paths.hpp
+++ /dev/null
@@ -1,723 +0,0 @@
-// r_c_shortest_paths.hpp header file
-
-// Copyright Michael Drexl 2005, 2006.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_R_C_SHORTEST_PATHS_HPP
-#define BOOST_GRAPH_R_C_SHORTEST_PATHS_HPP
-
-#include <map>
-#include <queue>
-#include <vector>
-#include <list>
-
-#include <boost/make_shared.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-// r_c_shortest_paths_label struct
-template < class Graph, class Resource_Container >
-struct r_c_shortest_paths_label
-: public boost::enable_shared_from_this<
- r_c_shortest_paths_label< Graph, Resource_Container > >
-{
- r_c_shortest_paths_label(const unsigned long n,
- const Resource_Container& rc = Resource_Container(),
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >
- pl
- = boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >(),
- const typename graph_traits< Graph >::edge_descriptor& ed
- = graph_traits< Graph >::edge_descriptor(),
- const typename graph_traits< Graph >::vertex_descriptor& vd
- = graph_traits< Graph >::vertex_descriptor())
- : num(n)
- , cumulated_resource_consumption(rc)
- , p_pred_label(pl)
- , pred_edge(ed)
- , resident_vertex(vd)
- , b_is_dominated(false)
- , b_is_processed(false)
- {
- }
-
- r_c_shortest_paths_label& operator=(const r_c_shortest_paths_label& other)
- {
- if (this == &other)
- return *this;
- this->~r_c_shortest_paths_label();
- new (this) r_c_shortest_paths_label(other);
- return *this;
- }
- const unsigned long num;
- Resource_Container cumulated_resource_consumption;
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >
- p_pred_label;
- const typename graph_traits< Graph >::edge_descriptor pred_edge;
- const typename graph_traits< Graph >::vertex_descriptor resident_vertex;
- bool b_is_dominated;
- bool b_is_processed;
-}; // r_c_shortest_paths_label
-
-template < class Graph, class Resource_Container >
-inline bool operator==(
- const r_c_shortest_paths_label< Graph, Resource_Container >& l1,
- const r_c_shortest_paths_label< Graph, Resource_Container >& l2)
-{
- return l1.cumulated_resource_consumption
- == l2.cumulated_resource_consumption;
-}
-
-template < class Graph, class Resource_Container >
-inline bool operator!=(
- const r_c_shortest_paths_label< Graph, Resource_Container >& l1,
- const r_c_shortest_paths_label< Graph, Resource_Container >& l2)
-{
- return !(l1 == l2);
-}
-
-template < class Graph, class Resource_Container >
-inline bool operator<(
- const r_c_shortest_paths_label< Graph, Resource_Container >& l1,
- const r_c_shortest_paths_label< Graph, Resource_Container >& l2)
-{
- return l1.cumulated_resource_consumption
- < l2.cumulated_resource_consumption;
-}
-
-template < class Graph, class Resource_Container >
-inline bool operator>(
- const r_c_shortest_paths_label< Graph, Resource_Container >& l1,
- const r_c_shortest_paths_label< Graph, Resource_Container >& l2)
-{
- return l2.cumulated_resource_consumption
- < l1.cumulated_resource_consumption;
-}
-
-template < class Graph, class Resource_Container >
-inline bool operator<=(
- const r_c_shortest_paths_label< Graph, Resource_Container >& l1,
- const r_c_shortest_paths_label< Graph, Resource_Container >& l2)
-{
- return l1 < l2 || l1 == l2;
-}
-
-template < class Graph, class Resource_Container >
-inline bool operator>=(
- const r_c_shortest_paths_label< Graph, Resource_Container >& l1,
- const r_c_shortest_paths_label< Graph, Resource_Container >& l2)
-{
- return l2 < l1 || l1 == l2;
-}
-
-template < typename Graph, typename Resource_Container >
-inline bool operator<(
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& t,
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& u)
-{
- return *t < *u;
-}
-
-template < typename Graph, typename Resource_Container >
-inline bool operator<=(
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& t,
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& u)
-{
- return *t <= *u;
-}
-
-template < typename Graph, typename Resource_Container >
-inline bool operator>(
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& t,
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& u)
-{
- return *t > *u;
-}
-
-template < typename Graph, typename Resource_Container >
-inline bool operator>=(
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& t,
- const boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >& u)
-{
- return *t >= *u;
-}
-
-namespace detail
-{
-
- // r_c_shortest_paths_dispatch function (body/implementation)
- template < class Graph, class VertexIndexMap, class EdgeIndexMap,
- class Resource_Container, class Resource_Extension_Function,
- class Dominance_Function, class Label_Allocator, class Visitor >
- void r_c_shortest_paths_dispatch(const Graph& g,
- const VertexIndexMap& vertex_index_map,
- const EdgeIndexMap& /*edge_index_map*/,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- // each inner vector corresponds to a pareto-optimal path
- std::vector<
- std::vector< typename graph_traits< Graph >::edge_descriptor > >&
- pareto_optimal_solutions,
- std::vector< Resource_Container >& pareto_optimal_resource_containers,
- bool b_all_pareto_optimal_solutions,
- // to initialize the first label/resource container
- // and to carry the type information
- const Resource_Container& rc, Resource_Extension_Function& ref,
- Dominance_Function& dominance,
- // to specify the memory management strategy for the labels
- Label_Allocator /*la*/, Visitor vis)
- {
- pareto_optimal_resource_containers.clear();
- pareto_optimal_solutions.clear();
-
- size_t i_label_num = 0;
-#if defined(BOOST_NO_CXX11_ALLOCATOR)
- typedef typename Label_Allocator::template rebind<
- r_c_shortest_paths_label< Graph, Resource_Container > >::other
- LAlloc;
-#else
- typedef typename std::allocator_traits< Label_Allocator >::
- template rebind_alloc<
- r_c_shortest_paths_label< Graph, Resource_Container > >
- LAlloc;
- typedef std::allocator_traits< LAlloc > LTraits;
-#endif
- LAlloc l_alloc;
- typedef boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >
- Splabel;
- std::priority_queue< Splabel, std::vector< Splabel >,
- std::greater< Splabel > >
- unprocessed_labels;
-
- bool b_feasible = true;
- Splabel splabel_first_label = boost::allocate_shared<
- r_c_shortest_paths_label< Graph, Resource_Container > >(l_alloc,
- i_label_num++, rc,
- boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >(),
- typename graph_traits< Graph >::edge_descriptor(), s);
-
- unprocessed_labels.push(splabel_first_label);
- std::vector< std::list< Splabel > > vec_vertex_labels_data(
- num_vertices(g));
- iterator_property_map<
- typename std::vector< std::list< Splabel > >::iterator,
- VertexIndexMap >
- vec_vertex_labels(vec_vertex_labels_data.begin(), vertex_index_map);
- vec_vertex_labels[s].push_back(splabel_first_label);
- typedef std::vector< typename std::list< Splabel >::iterator >
- vec_last_valid_positions_for_dominance_data_type;
- vec_last_valid_positions_for_dominance_data_type
- vec_last_valid_positions_for_dominance_data(num_vertices(g));
- iterator_property_map<
- typename vec_last_valid_positions_for_dominance_data_type::iterator,
- VertexIndexMap >
- vec_last_valid_positions_for_dominance(
- vec_last_valid_positions_for_dominance_data.begin(),
- vertex_index_map);
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- put(vec_last_valid_positions_for_dominance, v,
- vec_vertex_labels[v].begin());
- }
- std::vector< size_t > vec_last_valid_index_for_dominance_data(
- num_vertices(g), 0);
- iterator_property_map< std::vector< size_t >::iterator, VertexIndexMap >
- vec_last_valid_index_for_dominance(
- vec_last_valid_index_for_dominance_data.begin(),
- vertex_index_map);
- std::vector< bool > b_vec_vertex_already_checked_for_dominance_data(
- num_vertices(g), false);
- iterator_property_map< std::vector< bool >::iterator, VertexIndexMap >
- b_vec_vertex_already_checked_for_dominance(
- b_vec_vertex_already_checked_for_dominance_data.begin(),
- vertex_index_map);
-
- while (!unprocessed_labels.empty()
- && vis.on_enter_loop(unprocessed_labels, g))
- {
- Splabel cur_label = unprocessed_labels.top();
- unprocessed_labels.pop();
- vis.on_label_popped(*cur_label, g);
- // an Splabel object in unprocessed_labels and the respective
- // Splabel object in the respective list<Splabel> of
- // vec_vertex_labels share their embedded r_c_shortest_paths_label
- // object to avoid memory leaks, dominated r_c_shortest_paths_label
- // objects are marked and deleted when popped from
- // unprocessed_labels, as they can no longer be deleted at the end
- // of the function; only the Splabel object in unprocessed_labels
- // still references the r_c_shortest_paths_label object this is also
- // for efficiency, because the else branch is executed only if there
- // is a chance that extending the label leads to new undominated
- // labels, which in turn is possible only if the label to be
- // extended is undominated
- if (!cur_label->b_is_dominated)
- {
- typename boost::graph_traits< Graph >::vertex_descriptor
- i_cur_resident_vertex
- = cur_label->resident_vertex;
- std::list< Splabel >& list_labels_cur_vertex
- = get(vec_vertex_labels, i_cur_resident_vertex);
- if (list_labels_cur_vertex.size() >= 2
- && vec_last_valid_index_for_dominance[i_cur_resident_vertex]
- < list_labels_cur_vertex.size())
- {
- typename std::list< Splabel >::iterator outer_iter
- = list_labels_cur_vertex.begin();
- bool b_outer_iter_at_or_beyond_last_valid_pos_for_dominance
- = false;
- while (outer_iter != list_labels_cur_vertex.end())
- {
- Splabel cur_outer_splabel = *outer_iter;
- typename std::list< Splabel >::iterator inner_iter
- = outer_iter;
- if (!b_outer_iter_at_or_beyond_last_valid_pos_for_dominance
- && outer_iter
- == get(vec_last_valid_positions_for_dominance,
- i_cur_resident_vertex))
- b_outer_iter_at_or_beyond_last_valid_pos_for_dominance
- = true;
- if (!get(b_vec_vertex_already_checked_for_dominance,
- i_cur_resident_vertex)
- || b_outer_iter_at_or_beyond_last_valid_pos_for_dominance)
- {
- ++inner_iter;
- }
- else
- {
- inner_iter
- = get(vec_last_valid_positions_for_dominance,
- i_cur_resident_vertex);
- ++inner_iter;
- }
- bool b_outer_iter_erased = false;
- while (inner_iter != list_labels_cur_vertex.end())
- {
- Splabel cur_inner_splabel = *inner_iter;
- if (dominance(cur_outer_splabel
- ->cumulated_resource_consumption,
- cur_inner_splabel
- ->cumulated_resource_consumption))
- {
- typename std::list< Splabel >::iterator buf
- = inner_iter;
- ++inner_iter;
- list_labels_cur_vertex.erase(buf);
- if (cur_inner_splabel->b_is_processed)
- {
- cur_inner_splabel.reset();
- }
- else
- cur_inner_splabel->b_is_dominated = true;
- continue;
- }
- else
- ++inner_iter;
- if (dominance(cur_inner_splabel
- ->cumulated_resource_consumption,
- cur_outer_splabel
- ->cumulated_resource_consumption))
- {
- typename std::list< Splabel >::iterator buf
- = outer_iter;
- ++outer_iter;
- list_labels_cur_vertex.erase(buf);
- b_outer_iter_erased = true;
- if (cur_outer_splabel->b_is_processed)
- {
- cur_outer_splabel.reset();
- }
- else
- cur_outer_splabel->b_is_dominated = true;
- break;
- }
- }
- if (!b_outer_iter_erased)
- ++outer_iter;
- }
- if (list_labels_cur_vertex.size() > 1)
- put(vec_last_valid_positions_for_dominance,
- i_cur_resident_vertex,
- (--(list_labels_cur_vertex.end())));
- else
- put(vec_last_valid_positions_for_dominance,
- i_cur_resident_vertex,
- list_labels_cur_vertex.begin());
- put(b_vec_vertex_already_checked_for_dominance,
- i_cur_resident_vertex, true);
- put(vec_last_valid_index_for_dominance,
- i_cur_resident_vertex,
- list_labels_cur_vertex.size() - 1);
- }
- }
- if (!b_all_pareto_optimal_solutions
- && cur_label->resident_vertex == t)
- {
- // the devil don't sleep
- if (cur_label->b_is_dominated)
- {
- cur_label.reset();
- }
- while (unprocessed_labels.size())
- {
- Splabel l = unprocessed_labels.top();
- unprocessed_labels.pop();
- // delete only dominated labels, because nondominated labels
- // are deleted at the end of the function
- if (l->b_is_dominated)
- {
- l.reset();
- }
- }
- break;
- }
- if (!cur_label->b_is_dominated)
- {
- cur_label->b_is_processed = true;
- vis.on_label_not_dominated(*cur_label, g);
- typename graph_traits< Graph >::vertex_descriptor cur_vertex
- = cur_label->resident_vertex;
- typename graph_traits< Graph >::out_edge_iterator oei, oei_end;
- for (boost::tie(oei, oei_end) = out_edges(cur_vertex, g);
- oei != oei_end; ++oei)
- {
- b_feasible = true;
- Splabel new_label = boost::allocate_shared<
- r_c_shortest_paths_label< Graph, Resource_Container > >(
- l_alloc, i_label_num++,
- cur_label->cumulated_resource_consumption, cur_label,
- *oei, target(*oei, g));
- b_feasible = ref(g,
- new_label->cumulated_resource_consumption,
- new_label->p_pred_label->cumulated_resource_consumption,
- new_label->pred_edge);
-
- if (!b_feasible)
- {
- vis.on_label_not_feasible(*new_label, g);
- new_label.reset();
- }
- else
- {
- vis.on_label_feasible(*new_label, g);
- vec_vertex_labels[new_label->resident_vertex].push_back(
- new_label);
- unprocessed_labels.push(new_label);
- }
- }
- }
- else
- {
- vis.on_label_dominated(*cur_label, g);
- cur_label.reset();
- }
- }
- std::list< Splabel > dsplabels = get(vec_vertex_labels, t);
- typename std::list< Splabel >::const_iterator csi = dsplabels.begin();
- typename std::list< Splabel >::const_iterator csi_end = dsplabels.end();
- // if d could be reached from o
- if (!dsplabels.empty())
- {
- for (; csi != csi_end; ++csi)
- {
- std::vector< typename graph_traits< Graph >::edge_descriptor >
- cur_pareto_optimal_path;
- boost::shared_ptr<
- r_c_shortest_paths_label< Graph, Resource_Container > >
- p_cur_label = *csi;
- pareto_optimal_resource_containers.push_back(
- p_cur_label->cumulated_resource_consumption);
- while (p_cur_label->num != 0)
- {
- cur_pareto_optimal_path.push_back(p_cur_label->pred_edge);
- p_cur_label = p_cur_label->p_pred_label;
-
- // assertion b_is_valid beyond this point is not correct if
- // the domination function requires resource levels to be
- // strictly greater than existing values
- //
- // Example
- // Customers
- // id min_arrival max_departure
- // 2 0 974
- // 3 0 972
- // 4 0 964
- // 5 678 801
- //
- // Path A: 2-3-4-5 (times: 0-16-49-84-678)
- // Path B: 3-2-4-5 (times: 0-18-51-62-678)
- // The partial path 3-2-4 dominates the other partial path
- // 2-3-4, though the path 3-2-4-5 does not strictly dominate
- // the path 2-3-4-5
- }
- pareto_optimal_solutions.push_back(cur_pareto_optimal_path);
- if (!b_all_pareto_optimal_solutions)
- break;
- }
- }
-
- BGL_FORALL_VERTICES_T(i, g, Graph)
- {
- std::list< Splabel >& list_labels_cur_vertex = vec_vertex_labels[i];
- typename std::list< Splabel >::iterator si
- = list_labels_cur_vertex.begin();
- const typename std::list< Splabel >::iterator si_end
- = list_labels_cur_vertex.end();
- for (; si != si_end; ++si)
- {
- (*si).reset();
- }
- }
- } // r_c_shortest_paths_dispatch
-
-} // detail
-
-// default_r_c_shortest_paths_visitor struct
-struct default_r_c_shortest_paths_visitor
-{
- template < class Label, class Graph >
- void on_label_popped(const Label&, const Graph&)
- {
- }
- template < class Label, class Graph >
- void on_label_feasible(const Label&, const Graph&)
- {
- }
- template < class Label, class Graph >
- void on_label_not_feasible(const Label&, const Graph&)
- {
- }
- template < class Label, class Graph >
- void on_label_dominated(const Label&, const Graph&)
- {
- }
- template < class Label, class Graph >
- void on_label_not_dominated(const Label&, const Graph&)
- {
- }
- template < class Queue, class Graph >
- bool on_enter_loop(const Queue& queue, const Graph& graph)
- {
- return true;
- }
-}; // default_r_c_shortest_paths_visitor
-
-// default_r_c_shortest_paths_allocator
-typedef std::allocator< int > default_r_c_shortest_paths_allocator;
-// default_r_c_shortest_paths_allocator
-
-// r_c_shortest_paths functions (handle/interface)
-// first overload:
-// - return all pareto-optimal solutions
-// - specify Label_Allocator and Visitor arguments
-template < class Graph, class VertexIndexMap, class EdgeIndexMap,
- class Resource_Container, class Resource_Extension_Function,
- class Dominance_Function, class Label_Allocator, class Visitor >
-void r_c_shortest_paths(const Graph& g, const VertexIndexMap& vertex_index_map,
- const EdgeIndexMap& edge_index_map,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- // each inner vector corresponds to a pareto-optimal path
- std::vector<
- std::vector< typename graph_traits< Graph >::edge_descriptor > >&
- pareto_optimal_solutions,
- std::vector< Resource_Container >& pareto_optimal_resource_containers,
- // to initialize the first label/resource container
- // and to carry the type information
- const Resource_Container& rc, const Resource_Extension_Function& ref,
- const Dominance_Function& dominance,
- // to specify the memory management strategy for the labels
- Label_Allocator la, Visitor vis)
-{
- r_c_shortest_paths_dispatch(g, vertex_index_map, edge_index_map, s, t,
- pareto_optimal_solutions, pareto_optimal_resource_containers, true, rc,
- ref, dominance, la, vis);
-}
-
-// second overload:
-// - return only one pareto-optimal solution
-// - specify Label_Allocator and Visitor arguments
-template < class Graph, class VertexIndexMap, class EdgeIndexMap,
- class Resource_Container, class Resource_Extension_Function,
- class Dominance_Function, class Label_Allocator, class Visitor >
-void r_c_shortest_paths(const Graph& g, const VertexIndexMap& vertex_index_map,
- const EdgeIndexMap& edge_index_map,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- std::vector< typename graph_traits< Graph >::edge_descriptor >&
- pareto_optimal_solution,
- Resource_Container& pareto_optimal_resource_container,
- // to initialize the first label/resource container
- // and to carry the type information
- const Resource_Container& rc, const Resource_Extension_Function& ref,
- const Dominance_Function& dominance,
- // to specify the memory management strategy for the labels
- Label_Allocator la, Visitor vis)
-{
- // each inner vector corresponds to a pareto-optimal path
- std::vector<
- std::vector< typename graph_traits< Graph >::edge_descriptor > >
- pareto_optimal_solutions;
- std::vector< Resource_Container > pareto_optimal_resource_containers;
- r_c_shortest_paths_dispatch(g, vertex_index_map, edge_index_map, s, t,
- pareto_optimal_solutions, pareto_optimal_resource_containers, false, rc,
- ref, dominance, la, vis);
- if (!pareto_optimal_solutions.empty())
- {
- pareto_optimal_solution = pareto_optimal_solutions[0];
- pareto_optimal_resource_container
- = pareto_optimal_resource_containers[0];
- }
-}
-
-// third overload:
-// - return all pareto-optimal solutions
-// - use default Label_Allocator and Visitor
-template < class Graph, class VertexIndexMap, class EdgeIndexMap,
- class Resource_Container, class Resource_Extension_Function,
- class Dominance_Function >
-void r_c_shortest_paths(const Graph& g, const VertexIndexMap& vertex_index_map,
- const EdgeIndexMap& edge_index_map,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- // each inner vector corresponds to a pareto-optimal path
- std::vector<
- std::vector< typename graph_traits< Graph >::edge_descriptor > >&
- pareto_optimal_solutions,
- std::vector< Resource_Container >& pareto_optimal_resource_containers,
- // to initialize the first label/resource container
- // and to carry the type information
- const Resource_Container& rc, const Resource_Extension_Function& ref,
- const Dominance_Function& dominance)
-{
- r_c_shortest_paths_dispatch(g, vertex_index_map, edge_index_map, s, t,
- pareto_optimal_solutions, pareto_optimal_resource_containers, true, rc,
- ref, dominance, default_r_c_shortest_paths_allocator(),
- default_r_c_shortest_paths_visitor());
-}
-
-// fourth overload:
-// - return only one pareto-optimal solution
-// - use default Label_Allocator and Visitor
-template < class Graph, class VertexIndexMap, class EdgeIndexMap,
- class Resource_Container, class Resource_Extension_Function,
- class Dominance_Function >
-void r_c_shortest_paths(const Graph& g, const VertexIndexMap& vertex_index_map,
- const EdgeIndexMap& edge_index_map,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- std::vector< typename graph_traits< Graph >::edge_descriptor >&
- pareto_optimal_solution,
- Resource_Container& pareto_optimal_resource_container,
- // to initialize the first label/resource container
- // and to carry the type information
- const Resource_Container& rc, const Resource_Extension_Function& ref,
- const Dominance_Function& dominance)
-{
- // each inner vector corresponds to a pareto-optimal path
- std::vector<
- std::vector< typename graph_traits< Graph >::edge_descriptor > >
- pareto_optimal_solutions;
- std::vector< Resource_Container > pareto_optimal_resource_containers;
- r_c_shortest_paths_dispatch(g, vertex_index_map, edge_index_map, s, t,
- pareto_optimal_solutions, pareto_optimal_resource_containers, false, rc,
- ref, dominance, default_r_c_shortest_paths_allocator(),
- default_r_c_shortest_paths_visitor());
- if (!pareto_optimal_solutions.empty())
- {
- pareto_optimal_solution = pareto_optimal_solutions[0];
- pareto_optimal_resource_container
- = pareto_optimal_resource_containers[0];
- }
-}
-// r_c_shortest_paths
-
-// check_r_c_path function
-template < class Graph, class Resource_Container,
- class Resource_Extension_Function >
-void check_r_c_path(const Graph& g,
- const std::vector< typename graph_traits< Graph >::edge_descriptor >&
- ed_vec_path,
- const Resource_Container& initial_resource_levels,
- // if true, computed accumulated final resource levels must
- // be equal to desired_final_resource_levels
- // if false, computed accumulated final resource levels must
- // be less than or equal to desired_final_resource_levels
- bool b_result_must_be_equal_to_desired_final_resource_levels,
- const Resource_Container& desired_final_resource_levels,
- Resource_Container& actual_final_resource_levels,
- const Resource_Extension_Function& ref, bool& b_is_a_path_at_all,
- bool& b_feasible, bool& b_correctly_extended,
- typename graph_traits< Graph >::edge_descriptor& ed_last_extended_arc)
-{
- size_t i_size_ed_vec_path = ed_vec_path.size();
- std::vector< typename graph_traits< Graph >::edge_descriptor > buf_path;
- if (i_size_ed_vec_path == 0)
- b_feasible = true;
- else
- {
- if (i_size_ed_vec_path == 1
- || target(ed_vec_path[0], g) == source(ed_vec_path[1], g))
- buf_path = ed_vec_path;
- else
- for (size_t i = i_size_ed_vec_path; i > 0; --i)
- buf_path.push_back(ed_vec_path[i - 1]);
- for (size_t i = 0; i < i_size_ed_vec_path - 1; ++i)
- {
- if (target(buf_path[i], g) != source(buf_path[i + 1], g))
- {
- b_is_a_path_at_all = false;
- b_feasible = false;
- b_correctly_extended = false;
- return;
- }
- }
- }
- b_is_a_path_at_all = true;
- b_feasible = true;
- b_correctly_extended = false;
- Resource_Container current_resource_levels = initial_resource_levels;
- actual_final_resource_levels = current_resource_levels;
- for (size_t i = 0; i < i_size_ed_vec_path; ++i)
- {
- ed_last_extended_arc = buf_path[i];
- b_feasible = ref(g, actual_final_resource_levels,
- current_resource_levels, buf_path[i]);
- current_resource_levels = actual_final_resource_levels;
- if (!b_feasible)
- return;
- }
- if (b_result_must_be_equal_to_desired_final_resource_levels)
- b_correctly_extended
- = actual_final_resource_levels == desired_final_resource_levels
- ? true
- : false;
- else
- {
- if (actual_final_resource_levels < desired_final_resource_levels
- || actual_final_resource_levels == desired_final_resource_levels)
- b_correctly_extended = true;
- }
-} // check_path
-
-} // namespace
-
-#endif // BOOST_GRAPH_R_C_SHORTEST_PATHS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/random.hpp b/contrib/restricted/boost/graph/include/boost/graph/random.hpp
deleted file mode 100644
index 4c1261b110..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/random.hpp
+++ /dev/null
@@ -1,290 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright (C) Vladimir Prus 2003
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_RANDOM_HPP
-#define BOOST_GRAPH_RANDOM_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/uniform_real.hpp>
-#include <boost/random/variate_generator.hpp>
-
-#include <boost/pending/property.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/next_prior.hpp>
-
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/copy.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-
-#include <iostream>
-#include <boost/assert.hpp>
-
-namespace boost
-{
-
-// grab a random vertex from the graph's vertex set
-template < class Graph, class RandomNumGen >
-typename graph_traits< Graph >::vertex_descriptor random_vertex(
- Graph& g, RandomNumGen& gen)
-{
- if (num_vertices(g) > 1)
- {
-#if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x581))
- std::size_t n = std::random(num_vertices(g));
-#else
- uniform_int<> distrib(0, num_vertices(g) - 1);
- variate_generator< RandomNumGen&, uniform_int<> > rand_gen(
- gen, distrib);
- std::size_t n = rand_gen();
-#endif
- typename graph_traits< Graph >::vertex_iterator i = vertices(g).first;
- return *(boost::next(i, n));
- }
- else
- return *vertices(g).first;
-}
-
-template < class Graph, class RandomNumGen >
-typename graph_traits< Graph >::edge_descriptor random_edge(
- Graph& g, RandomNumGen& gen)
-{
- if (num_edges(g) > 1)
- {
-#if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x581))
- typename graph_traits< Graph >::edges_size_type n
- = std::random(num_edges(g));
-#else
- uniform_int<> distrib(0, num_edges(g) - 1);
- variate_generator< RandomNumGen&, uniform_int<> > rand_gen(
- gen, distrib);
- typename graph_traits< Graph >::edges_size_type n = rand_gen();
-#endif
- typename graph_traits< Graph >::edge_iterator i = edges(g).first;
- return *(boost::next(i, n));
- }
- else
- return *edges(g).first;
-}
-
-template < typename Graph, typename RandomNumGen >
-typename graph_traits< Graph >::edge_descriptor random_out_edge(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor src, RandomNumGen& gen)
-{
- typedef typename graph_traits< Graph >::degree_size_type degree_size_type;
- typedef boost::uniform_int< degree_size_type > ui_type;
- ui_type ui(0, out_degree(src, g) - 1);
- boost::variate_generator< RandomNumGen&, ui_type > variate(gen, ui);
- typename graph_traits< Graph >::out_edge_iterator it
- = out_edges(src, g).first;
- std::advance(it, variate());
- return *it;
-}
-
-template < typename Graph, typename WeightMap, typename RandomNumGen >
-typename graph_traits< Graph >::edge_descriptor weighted_random_out_edge(
- Graph& g, typename graph_traits< Graph >::vertex_descriptor src,
- WeightMap weight, RandomNumGen& gen)
-{
- typedef typename property_traits< WeightMap >::value_type weight_type;
- weight_type weight_sum(0);
- BGL_FORALL_OUTEDGES_T(src, e, g, Graph) { weight_sum += get(weight, e); }
- typedef boost::uniform_real<> ur_type;
- ur_type ur(0, weight_sum);
- boost::variate_generator< RandomNumGen&, ur_type > variate(gen, ur);
- weight_type chosen_weight = variate();
- BGL_FORALL_OUTEDGES_T(src, e, g, Graph)
- {
- weight_type w = get(weight, e);
- if (chosen_weight < w)
- {
- return e;
- }
- else
- {
- chosen_weight -= w;
- }
- }
- BOOST_ASSERT(false); // Should not get here
- return typename graph_traits< Graph >::edge_descriptor();
-}
-
-namespace detail
-{
- class dummy_property_copier
- {
- public:
- template < class V1, class V2 >
- void operator()(const V1&, const V2&) const
- {
- }
- };
-}
-
-template < typename MutableGraph, class RandNumGen >
-void generate_random_graph1(MutableGraph& g,
- typename graph_traits< MutableGraph >::vertices_size_type V,
- typename graph_traits< MutableGraph >::vertices_size_type E,
- RandNumGen& gen, bool allow_parallel = true, bool self_edges = false)
-{
- typedef graph_traits< MutableGraph > Traits;
- typedef typename Traits::edge_descriptor edge_t;
- typedef typename Traits::vertices_size_type v_size_t;
- typedef typename Traits::edges_size_type e_size_t;
- typedef typename Traits::vertex_descriptor vertex_descriptor;
-
- // When parallel edges are not allowed, we create a new graph which
- // does not allow parallel edges, construct it and copy back.
- // This is not efficient if 'g' already disallow parallel edges,
- // but that's task for later.
- if (!allow_parallel)
- {
-
- typedef
- typename boost::graph_traits< MutableGraph >::directed_category dir;
- typedef typename mpl::if_< is_convertible< dir, directed_tag >,
- directedS, undirectedS >::type select;
- adjacency_list< setS, vecS, select > g2;
- generate_random_graph1(g2, V, E, gen, true, self_edges);
-
- copy_graph(g2, g,
- vertex_copy(detail::dummy_property_copier())
- .edge_copy(detail::dummy_property_copier()));
- }
- else
- {
-
- for (v_size_t i = 0; i < V; ++i)
- add_vertex(g);
-
- e_size_t not_inserted_counter
- = 0; /* Number of edge insertion failures */
- e_size_t num_vertices_squared = num_vertices(g) * num_vertices(g);
- for (e_size_t j = 0; j < E; /* Increment in body */)
- {
- vertex_descriptor a = random_vertex(g, gen), b;
- do
- {
- b = random_vertex(g, gen);
- } while (self_edges == false && a == b);
- edge_t e;
- bool inserted;
- boost::tie(e, inserted) = add_edge(a, b, g);
- if (inserted)
- {
- ++j;
- }
- else
- {
- ++not_inserted_counter;
- }
- if (not_inserted_counter >= num_vertices_squared)
- {
- return; /* Rather than looping forever on complete graph */
- }
- }
- }
-}
-
-template < typename MutableGraph, class RandNumGen >
-void generate_random_graph(MutableGraph& g,
- typename graph_traits< MutableGraph >::vertices_size_type V,
- typename graph_traits< MutableGraph >::vertices_size_type E,
- RandNumGen& gen, bool allow_parallel = true, bool self_edges = false)
-{
- generate_random_graph1(g, V, E, gen, allow_parallel, self_edges);
-}
-
-template < typename MutableGraph, typename RandNumGen,
- typename VertexOutputIterator, typename EdgeOutputIterator >
-void generate_random_graph(MutableGraph& g,
- typename graph_traits< MutableGraph >::vertices_size_type V,
- typename graph_traits< MutableGraph >::vertices_size_type E,
- RandNumGen& gen, VertexOutputIterator vertex_out,
- EdgeOutputIterator edge_out, bool self_edges = false)
-{
- typedef graph_traits< MutableGraph > Traits;
- typedef typename Traits::vertices_size_type v_size_t;
- typedef typename Traits::edges_size_type e_size_t;
- typedef typename Traits::vertex_descriptor vertex_t;
- typedef typename Traits::edge_descriptor edge_t;
-
- for (v_size_t i = 0; i < V; ++i)
- *vertex_out++ = add_vertex(g);
-
- e_size_t not_inserted_counter = 0; /* Number of edge insertion failures */
- e_size_t num_vertices_squared = num_vertices(g) * num_vertices(g);
- for (e_size_t j = 0; j < E; /* Increment in body */)
- {
- vertex_t a = random_vertex(g, gen), b;
- do
- {
- b = random_vertex(g, gen);
- } while (self_edges == false && a == b);
- edge_t e;
- bool inserted;
- boost::tie(e, inserted) = add_edge(a, b, g);
- if (inserted)
- {
- *edge_out++ = std::make_pair(source(e, g), target(e, g));
- ++j;
- }
- else
- {
- ++not_inserted_counter;
- }
- if (not_inserted_counter >= num_vertices_squared)
- {
- return; /* Rather than looping forever on complete graph */
- }
- }
-}
-
-namespace detail
-{
-
- template < class Property, class G, class RandomGenerator >
- void randomize_property(
- G& g, RandomGenerator& rg, Property, vertex_property_tag)
- {
- typename property_map< G, Property >::type pm = get(Property(), g);
- typename graph_traits< G >::vertex_iterator vi, ve;
- for (boost::tie(vi, ve) = vertices(g); vi != ve; ++vi)
- {
- pm[*vi] = rg();
- }
- }
-
- template < class Property, class G, class RandomGenerator >
- void randomize_property(
- G& g, RandomGenerator& rg, Property, edge_property_tag)
- {
- typename property_map< G, Property >::type pm = get(Property(), g);
- typename graph_traits< G >::edge_iterator ei, ee;
- for (boost::tie(ei, ee) = edges(g); ei != ee; ++ei)
- {
- pm[*ei] = rg();
- }
- }
-}
-
-template < class Property, class G, class RandomGenerator >
-void randomize_property(G& g, RandomGenerator& rg)
-{
- detail::randomize_property(
- g, rg, Property(), typename property_kind< Property >::type());
-}
-
-}
-
-#include <boost/graph/iteration_macros_undef.hpp>
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/random_layout.hpp b/contrib/restricted/boost/graph/include/boost/graph/random_layout.hpp
deleted file mode 100644
index 757585ced7..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/random_layout.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_RANDOM_LAYOUT_HPP
-#define BOOST_GRAPH_RANDOM_LAYOUT_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/uniform_01.hpp>
-#include <boost/random/uniform_real.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/graph/iteration_macros.hpp>
-
-namespace boost
-{
-
-template < typename Topology, typename Graph, typename PositionMap >
-void random_graph_layout(
- const Graph& g, PositionMap position_map, const Topology& topology)
-{
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- put(position_map, v, topology.random_point());
- }
-}
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_RANDOM_LAYOUT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/random_spanning_tree.hpp b/contrib/restricted/boost/graph/include/boost/graph/random_spanning_tree.hpp
deleted file mode 100644
index 593261da81..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/random_spanning_tree.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2010 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jeremiah Willcock
-// Andrew Lumsdaine
-
-#ifndef BOOST_GRAPH_RANDOM_SPANNING_TREE_HPP
-#define BOOST_GRAPH_RANDOM_SPANNING_TREE_HPP
-
-#include <vector>
-#include <boost/assert.hpp>
-#include <boost/graph/loop_erased_random_walk.hpp>
-#include <boost/graph/random.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/named_function_params.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
- // Use Wilson's algorithm (based on loop-free random walks) to generate a
- // random spanning tree. The distribution of edges used is controlled by
- // the next_edge() function, so this version allows either weighted or
- // unweighted selection of trees.
- // Algorithm is from http://en.wikipedia.org/wiki/Uniform_spanning_tree
- template < typename Graph, typename PredMap, typename ColorMap,
- typename NextEdge >
- void random_spanning_tree_internal(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s, PredMap pred,
- ColorMap color, NextEdge next_edge)
- {
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
-
- BOOST_ASSERT(num_vertices(g)
- >= 1); // g must also be undirected (or symmetric) and connected
-
- typedef color_traits< typename property_traits< ColorMap >::value_type >
- color_gen;
- BGL_FORALL_VERTICES_T(v, g, Graph) put(color, v, color_gen::white());
-
- std::vector< vertex_descriptor > path;
-
- put(color, s, color_gen::black());
- put(pred, s, graph_traits< Graph >::null_vertex());
-
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- if (get(color, v) != color_gen::white())
- continue;
- loop_erased_random_walk(g, v, next_edge, color, path);
- for (typename std::vector<
- vertex_descriptor >::const_reverse_iterator i
- = path.rbegin();
- boost::next(i)
- != (typename std::vector<
- vertex_descriptor >::const_reverse_iterator)path.rend();
- ++i)
- {
- typename std::vector<
- vertex_descriptor >::const_reverse_iterator j
- = i;
- ++j;
- BOOST_ASSERT(get(color, *j) == color_gen::gray());
- put(color, *j, color_gen::black());
- put(pred, *j, *i);
- }
- }
- }
-}
-
-// Compute a uniformly-distributed spanning tree on a graph. Use Wilson's
-// algorithm:
-// @inproceedings{wilson96generating,
-// author = {Wilson, David Bruce},
-// title = {Generating random spanning trees more quickly than the cover
-// time}, booktitle = {STOC '96: Proceedings of the twenty-eighth annual ACM
-// symposium on Theory of computing}, year = {1996}, isbn = {0-89791-785-5},
-// pages = {296--303},
-// location = {Philadelphia, Pennsylvania, United States},
-// doi = {http://doi.acm.org/10.1145/237814.237880},
-// publisher = {ACM},
-// address = {New York, NY, USA},
-// }
-//
-template < typename Graph, typename Gen, typename PredMap, typename ColorMap >
-void random_spanning_tree(const Graph& g, Gen& gen,
- typename graph_traits< Graph >::vertex_descriptor root, PredMap pred,
- static_property_map< double >, ColorMap color)
-{
- unweighted_random_out_edge_gen< Graph, Gen > random_oe(gen);
- detail::random_spanning_tree_internal(g, root, pred, color, random_oe);
-}
-
-// Compute a weight-distributed spanning tree on a graph.
-template < typename Graph, typename Gen, typename PredMap, typename WeightMap,
- typename ColorMap >
-void random_spanning_tree(const Graph& g, Gen& gen,
- typename graph_traits< Graph >::vertex_descriptor root, PredMap pred,
- WeightMap weight, ColorMap color)
-{
- weighted_random_out_edge_gen< Graph, WeightMap, Gen > random_oe(
- weight, gen);
- detail::random_spanning_tree_internal(g, root, pred, color, random_oe);
-}
-
-template < typename Graph, typename Gen, typename P, typename T, typename R >
-void random_spanning_tree(
- const Graph& g, Gen& gen, const bgl_named_params< P, T, R >& params)
-{
- using namespace boost::graph::keywords;
- typedef bgl_named_params< P, T, R > params_type;
- BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params)
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
- vertex_descriptor default_vertex = *vertices(g).first;
- vertex_descriptor start_vertex = arg_pack[_root_vertex | default_vertex];
- typename boost::parameter::binding< arg_pack_type,
- boost::graph::keywords::tag::predecessor_map >::type pred_map
- = arg_pack[_predecessor_map];
- static_property_map< double > default_weight_map(1.);
- typename boost::parameter::value_type< arg_pack_type,
- boost::graph::keywords::tag::weight_map,
- static_property_map< double > >::type e_w_map
- = arg_pack[_weight_map | default_weight_map];
- typename boost::detail::map_maker< Graph, arg_pack_type,
- boost::graph::keywords::tag::color_map,
- boost::default_color_type >::map_type c_map
- = boost::detail::make_color_map_from_arg_pack(g, arg_pack);
- random_spanning_tree(g, gen, start_vertex, pred_map, e_w_map, c_map);
-}
-}
-
-#include <boost/graph/iteration_macros_undef.hpp>
-
-#endif // BOOST_GRAPH_RANDOM_SPANNING_TREE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/read_dimacs.hpp b/contrib/restricted/boost/graph/include/boost/graph/read_dimacs.hpp
deleted file mode 100644
index 4e702793b9..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/read_dimacs.hpp
+++ /dev/null
@@ -1,370 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
-//
-// 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)
-//=======================================================================
-
-/*
- Reads maximal flow problem in extended DIMACS format.
- This works, but could use some polishing.
-*/
-
-/* ----------------------------------------------------------------- */
-
-#ifndef BOOST_GRAPH_READ_DIMACS_HPP
-#define BOOST_GRAPH_READ_DIMACS_HPP
-
-#include <vector>
-#include <iostream>
-#include <string>
-#include <cstdio>
-#include <cstring>
-#include <cstdlib>
-
-#include <boost/graph/graph_traits.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < class Graph, class CapacityMap, class ReverseEdgeMap >
- int read_dimacs_max_flow_internal(Graph& g, CapacityMap capacity,
- ReverseEdgeMap reverse_edge,
- typename graph_traits< Graph >::vertex_descriptor& src,
- typename graph_traits< Graph >::vertex_descriptor& sink,
- std::istream& in, bool require_source_and_sink,
- const std::string& problem_type)
- {
- // const int MAXLINE = 100; /* max line length in the input file
- // */
- const int ARC_FIELDS = 3; /* no of fields in arc line */
- const int NODE_FIELDS = 2; /* no of fields in node line */
- const int P_FIELDS = 3; /* no of fields in problem line */
-
- typedef
- typename graph_traits< Graph >::vertex_descriptor vertex_descriptor;
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor;
-
- std::vector< vertex_descriptor > verts;
-
- long m, n, /* number of edges and nodes */
- i, head, tail, cap;
-
- long no_lines = 0, /* no of current input line */
- no_plines = 0, /* no of problem-lines */
- no_nslines = 0, /* no of node-source-lines */
- no_nklines = 0, /* no of node-source-lines */
- no_alines = 0; /* no of arc-lines */
-
- std::string in_line; /* for reading input line */
- char pr_type[4]; /* for reading type of the problem */
- char nd; /* source (s) or sink (t) */
-
- int k, /* temporary */
- err_no; /* no of detected error */
-
- /* -------------- error numbers & error messages ---------------- */
- const int EN1 = 0;
- const int EN2 = 1;
- const int EN3 = 2;
- const int EN4 = 3;
- // const int EN6 = 4;
- // const int EN10 = 5;
- // const int EN7 = 6;
- const int EN8 = 7;
- const int EN9 = 8;
- const int EN11 = 9;
- const int EN12 = 10;
- // const int EN13 = 11;
- const int EN14 = 12;
- const int EN16 = 13;
- const int EN15 = 14;
- const int EN17 = 15;
- const int EN18 = 16;
- const int EN21 = 17;
- const int EN19 = 18;
- const int EN20 = 19;
- const int EN22 = 20;
-
- static const char* err_message[] = {
- /* 0*/ "more than one problem line.",
- /* 1*/ "wrong number of parameters in the problem line.",
- /* 2*/ "it is not a Max Flow problem line.",
- /* 3*/ "bad value of a parameter in the problem line.",
- /* 4*/ "can't obtain enough memory to solve this problem.",
- /* 5*/ "more than one line with the problem name.",
- /* 6*/ "can't read problem name.",
- /* 7*/ "problem description must be before node description.",
- /* 8*/ "this parser doesn't support multiply sources and sinks.",
- /* 9*/ "wrong number of parameters in the node line.",
- /*10*/ "wrong value of parameters in the node line.",
- /*11*/ " ",
- /*12*/
- "source and sink descriptions must be before arc descriptions.",
- /*13*/ "too many arcs in the input.",
- /*14*/ "wrong number of parameters in the arc line.",
- /*15*/ "wrong value of parameters in the arc line.",
- /*16*/ "unknown line type in the input.",
- /*17*/ "reading error.",
- /*18*/ "not enough arcs in the input.",
- /*19*/ "source or sink doesn't have incident arcs.",
- /*20*/ "can't read anything from the input file."
- };
- /* --------------------------------------------------------------- */
-
- /* The main loop:
- - reads the line of the input,
- - analyses its type,
- - checks correctness of parameters,
- - puts data to the arrays,
- - does service functions
- */
-
- while (std::getline(in, in_line))
- {
- ++no_lines;
-
- switch (in_line[0])
- {
- case 'c': /* skip lines with comments */
- case '\n': /* skip empty lines */
- case '\0': /* skip empty lines at the end of file */
- break;
-
- case 'p': /* problem description */
- if (no_plines > 0)
- /* more than one problem line */
- {
- err_no = EN1;
- goto error;
- }
-
- no_plines = 1;
-
- if (
- /* reading problem line: type of problem, no of nodes, no of
- arcs */
- std::sscanf(
- in_line.c_str(), "%*c %3s %ld %ld", pr_type, &n, &m)
- != P_FIELDS)
- /*wrong number of parameters in the problem line*/
- {
- err_no = EN2;
- goto error;
- }
-
- if (pr_type != problem_type)
- /*wrong problem type*/
- {
- err_no = EN3;
- goto error;
- }
-
- if (n <= 0 || m <= 0)
- /*wrong value of no of arcs or nodes*/
- {
- err_no = EN4;
- goto error;
- }
-
- {
- for (long vi = 0; vi < n; ++vi)
- verts.push_back(add_vertex(g));
- }
- break;
-
- case 'n': /* source(s) description */
- if (no_plines == 0)
- /* there was not problem line above */
- {
- err_no = EN8;
- goto error;
- }
-
- /* reading source or sink */
- k = std::sscanf(in_line.c_str(), "%*c %ld %c", &i, &nd);
- --i; // index from 0
- if (k < NODE_FIELDS)
- /* node line is incorrect */
- {
- err_no = EN11;
- goto error;
- }
-
- if (i < 0 || i > n)
- /* wrong value of node */
- {
- err_no = EN12;
- goto error;
- }
-
- switch (nd)
- {
- case 's': /* source line */
-
- if (no_nslines != 0)
- /* more than one source line */
- {
- err_no = EN9;
- goto error;
- }
-
- no_nslines = 1;
- src = verts[i];
- break;
-
- case 't': /* sink line */
-
- if (no_nklines != 0)
- /* more than one sink line */
- {
- err_no = EN9;
- goto error;
- }
-
- no_nklines = 1;
- sink = verts[i];
- break;
-
- default:
- /* wrong type of node-line */
- err_no = EN12;
- goto error;
- }
- break;
-
- case 'a': /* arc description */
- if (require_source_and_sink
- && (no_nslines == 0 || no_nklines == 0))
- /* there was not source and sink description above */
- {
- err_no = EN14;
- goto error;
- }
-
- if (no_alines >= m)
- /*too many arcs on input*/
- {
- err_no = EN16;
- goto error;
- }
-
- if (
- /* reading an arc description */
- std::sscanf(
- in_line.c_str(), "%*c %ld %ld %ld", &tail, &head, &cap)
- != ARC_FIELDS)
- /* arc description is not correct */
- {
- err_no = EN15;
- goto error;
- }
-
- --tail; // index from 0, not 1
- --head;
- if (tail < 0 || tail > n || head < 0 || head > n)
- /* wrong value of nodes */
- {
- err_no = EN17;
- goto error;
- }
-
- {
- edge_descriptor e1, e2;
- bool in1, in2;
- boost::tie(e1, in1) = add_edge(verts[tail], verts[head], g);
- boost::tie(e2, in2) = add_edge(verts[head], verts[tail], g);
- if (!in1 || !in2)
- {
- std::cerr << "unable to add edge (" << head << ","
- << tail << ")" << std::endl;
- return -1;
- }
- capacity[e1] = cap;
- capacity[e2] = 0;
- reverse_edge[e1] = e2;
- reverse_edge[e2] = e1;
- }
- ++no_alines;
- break;
-
- default:
- /* unknown type of line */
- err_no = EN18;
- goto error;
-
- } /* end of switch */
- } /* end of input loop */
-
- /* ----- all is red or error while reading ----- */
-
- if (in.eof() == 0) /* reading error */
- {
- err_no = EN21;
- goto error;
- }
-
- if (no_lines == 0) /* empty input */
- {
- err_no = EN22;
- goto error;
- }
-
- if (no_alines < m) /* not enough arcs */
- {
- err_no = EN19;
- goto error;
- }
-
- if (require_source_and_sink
- && (out_degree(src, g) == 0 || out_degree(sink, g) == 0))
- /* no arc goes out of the source */
- {
- err_no = EN20;
- goto error;
- }
-
- /* Thanks God! all is done */
- return (0);
-
- /* ---------------------------------- */
- error: /* error found reading input */
-
- std::printf(
- "\nline %ld of input - %s\n", no_lines, err_message[err_no]);
-
- return -1;
- }
- /* -------------------- end of parser -------------------*/
-
-} // namespace detail
-
-template < class Graph, class CapacityMap, class ReverseEdgeMap >
-int read_dimacs_max_flow(Graph& g, CapacityMap capacity,
- ReverseEdgeMap reverse_edge,
- typename graph_traits< Graph >::vertex_descriptor& src,
- typename graph_traits< Graph >::vertex_descriptor& sink,
- std::istream& in = std::cin)
-{
- return detail::read_dimacs_max_flow_internal(
- g, capacity, reverse_edge, src, sink, in, true, "max");
-}
-
-template < class Graph, class CapacityMap, class ReverseEdgeMap >
-int read_dimacs_min_cut(Graph& g, CapacityMap capacity,
- ReverseEdgeMap reverse_edge, std::istream& in = std::cin)
-{
- typename graph_traits< Graph >::vertex_descriptor dummy_src,
- dummy_sink; // Not filled in
- return detail::read_dimacs_max_flow_internal(
- g, capacity, reverse_edge, dummy_src, dummy_sink, in, false, "cut");
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_READ_DIMACS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/rmat_graph_generator.hpp b/contrib/restricted/boost/graph/include/boost/graph/rmat_graph_generator.hpp
deleted file mode 100644
index 35c71ec347..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/rmat_graph_generator.hpp
+++ /dev/null
@@ -1,663 +0,0 @@
-// Copyright 2004, 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Nick Edmonds
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_RMAT_GENERATOR_HPP
-#define BOOST_GRAPH_RMAT_GENERATOR_HPP
-
-#include <math.h>
-#include <iterator>
-#include <utility>
-#include <vector>
-#include <queue>
-#include <map>
-#include <boost/shared_ptr.hpp>
-#include <boost/assert.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/uniform_01.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/detail/mpi_include.hpp>
-#include <boost/type_traits/is_base_and_derived.hpp>
-#include <boost/type_traits/is_same.hpp>
-// #include <boost/test/floating_point_comparison.hpp>
-
-using boost::shared_ptr;
-using boost::uniform_01;
-
-// Returns floor(log_2(n)), and -1 when n is 0
-template < typename IntegerType > inline int int_log2(IntegerType n)
-{
- int l = 0;
- while (n > 0)
- {
- ++l;
- n >>= 1;
- }
- return l - 1;
-}
-
-struct keep_all_edges
-{
- template < typename T > bool operator()(const T&, const T&) { return true; }
-};
-
-template < typename Distribution, typename ProcessId > struct keep_local_edges
-{
-
- keep_local_edges(const Distribution& distrib, const ProcessId& id)
- : distrib(distrib), id(id)
- {
- }
-
- template < typename T > bool operator()(const T& x, const T& y)
- {
- return distrib(x) == id || distrib(y) == id;
- }
-
-private:
- const Distribution& distrib;
- const ProcessId& id;
-};
-
-template < typename RandomGenerator, typename T >
-void generate_permutation_vector(
- RandomGenerator& gen, std::vector< T >& vertexPermutation, T n)
-{
- using boost::uniform_int;
-
- vertexPermutation.resize(n);
-
- // Generate permutation map of vertex numbers
- uniform_int< T > rand_vertex(0, n - 1);
- for (T i = 0; i < n; ++i)
- vertexPermutation[i] = i;
-
- // Can't use std::random_shuffle unless we create another (synchronized)
- // PRNG
- for (T i = 0; i < n; ++i)
- std::swap(vertexPermutation[i], vertexPermutation[rand_vertex(gen)]);
-}
-
-template < typename RandomGenerator, typename T >
-std::pair< T, T > generate_edge(
- shared_ptr< uniform_01< RandomGenerator > > prob, T n, unsigned int SCALE,
- double a, double b, double c, double d)
-{
- T u = 0, v = 0;
- T step = n / 2;
- for (unsigned int j = 0; j < SCALE; ++j)
- {
- double p = (*prob)();
-
- if (p < a)
- ;
- else if (p >= a && p < a + b)
- v += step;
- else if (p >= a + b && p < a + b + c)
- u += step;
- else
- { // p > a + b + c && p < a + b + c + d
- u += step;
- v += step;
- }
-
- step /= 2;
-
- // 0.2 and 0.9 are hardcoded in the reference SSCA implementation.
- // The maximum change in any given value should be less than 10%
- a *= 0.9 + 0.2 * (*prob)();
- b *= 0.9 + 0.2 * (*prob)();
- c *= 0.9 + 0.2 * (*prob)();
- d *= 0.9 + 0.2 * (*prob)();
-
- double S = a + b + c + d;
-
- a /= S;
- b /= S;
- c /= S;
- // d /= S;
- // Ensure all values add up to 1, regardless of floating point errors
- d = 1. - a - b - c;
- }
-
- return std::make_pair(u, v);
-}
-
-namespace boost
-{
-
-/*
- Chakrabarti's R-MAT scale free generator.
-
- For all flavors of the R-MAT iterator a+b+c+d must equal 1 and for the
- unique_rmat_iterator 'm' << 'n^2'. If 'm' is too close to 'n^2' the
- generator may be unable to generate sufficient unique edges
-
- To get a true scale free distribution {a, b, c, d : a > b, a > c, a > d}
-*/
-
-template < typename RandomGenerator, typename Graph > class rmat_iterator
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- typedef typename graph_traits< Graph >::edges_size_type edges_size_type;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type; // Not used
-
- // No argument constructor, set to terminating condition
- rmat_iterator() : gen(), edge(0) {}
-
- // Initialize for edge generation
- rmat_iterator(RandomGenerator& gen, vertices_size_type n, edges_size_type m,
- double a, double b, double c, double d, bool permute_vertices = true)
- : gen()
- , n(n)
- , a(a)
- , b(b)
- , c(c)
- , d(d)
- , edge(m)
- , permute_vertices(permute_vertices)
- , SCALE(int_log2(n))
-
- {
- this->gen.reset(new uniform_01< RandomGenerator >(gen));
-
- // BOOST_ASSERT(boost::test_tools::check_is_close(a + b + c +
- // d, 1., 1.e-5));
-
- if (permute_vertices)
- generate_permutation_vector(gen, vertexPermutation, n);
-
- // TODO: Generate the entire adjacency matrix then "Clip and flip" if
- // undirected graph
-
- // Generate the first edge
- vertices_size_type u, v;
- boost::tie(u, v) = generate_edge(this->gen, n, SCALE, a, b, c, d);
-
- if (permute_vertices)
- current
- = std::make_pair(vertexPermutation[u], vertexPermutation[v]);
- else
- current = std::make_pair(u, v);
-
- --edge;
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- rmat_iterator& operator++()
- {
- vertices_size_type u, v;
- boost::tie(u, v) = generate_edge(this->gen, n, SCALE, a, b, c, d);
-
- if (permute_vertices)
- current
- = std::make_pair(vertexPermutation[u], vertexPermutation[v]);
- else
- current = std::make_pair(u, v);
-
- --edge;
-
- return *this;
- }
-
- rmat_iterator operator++(int)
- {
- rmat_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const rmat_iterator& other) const
- {
- return edge == other.edge;
- }
-
- bool operator!=(const rmat_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- // Parameters
- shared_ptr< uniform_01< RandomGenerator > > gen;
- vertices_size_type n;
- double a, b, c, d;
- int edge;
- bool permute_vertices;
- int SCALE;
-
- // Internal data structures
- std::vector< vertices_size_type > vertexPermutation;
- value_type current;
-};
-
-// Sorted version for CSR
-template < typename T > struct sort_pair
-{
- bool operator()(const std::pair< T, T >& x, const std::pair< T, T >& y)
- {
- if (x.first == y.first)
- return x.second > y.second;
- else
- return x.first > y.first;
- }
-};
-
-template < typename RandomGenerator, typename Graph,
- typename EdgePredicate = keep_all_edges >
-class sorted_rmat_iterator
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- typedef typename graph_traits< Graph >::edges_size_type edges_size_type;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type; // Not used
-
- // No argument constructor, set to terminating condition
- sorted_rmat_iterator()
- : gen(), values(sort_pair< vertices_size_type >()), done(true)
- {
- }
-
- // Initialize for edge generation
- sorted_rmat_iterator(RandomGenerator& gen, vertices_size_type n,
- edges_size_type m, double a, double b, double c, double d,
- bool permute_vertices = true, EdgePredicate ep = keep_all_edges())
- : gen()
- , permute_vertices(permute_vertices)
- , values(sort_pair< vertices_size_type >())
- , done(false)
-
- {
- // BOOST_ASSERT(boost::test_tools::check_is_close(a + b + c +
- // d, 1., 1.e-5));
-
- this->gen.reset(new uniform_01< RandomGenerator >(gen));
-
- std::vector< vertices_size_type > vertexPermutation;
- if (permute_vertices)
- generate_permutation_vector(gen, vertexPermutation, n);
-
- // TODO: "Clip and flip" if undirected graph
- int SCALE = int_log2(n);
-
- for (edges_size_type i = 0; i < m; ++i)
- {
-
- vertices_size_type u, v;
- boost::tie(u, v) = generate_edge(this->gen, n, SCALE, a, b, c, d);
-
- if (permute_vertices)
- {
- if (ep(vertexPermutation[u], vertexPermutation[v]))
- values.push(std::make_pair(
- vertexPermutation[u], vertexPermutation[v]));
- }
- else
- {
- if (ep(u, v))
- values.push(std::make_pair(u, v));
- }
- }
-
- current = values.top();
- values.pop();
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- sorted_rmat_iterator& operator++()
- {
- if (!values.empty())
- {
- current = values.top();
- values.pop();
- }
- else
- done = true;
-
- return *this;
- }
-
- sorted_rmat_iterator operator++(int)
- {
- sorted_rmat_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const sorted_rmat_iterator& other) const
- {
- return values.empty() && other.values.empty() && done && other.done;
- }
-
- bool operator!=(const sorted_rmat_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- // Parameters
- shared_ptr< uniform_01< RandomGenerator > > gen;
- bool permute_vertices;
-
- // Internal data structures
- std::priority_queue< value_type, std::vector< value_type >,
- sort_pair< vertices_size_type > >
- values;
- value_type current;
- bool done;
-};
-
-// This version is slow but guarantees unique edges
-template < typename RandomGenerator, typename Graph,
- typename EdgePredicate = keep_all_edges >
-class unique_rmat_iterator
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- typedef typename graph_traits< Graph >::edges_size_type edges_size_type;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type; // Not used
-
- // No argument constructor, set to terminating condition
- unique_rmat_iterator() : gen(), done(true) {}
-
- // Initialize for edge generation
- unique_rmat_iterator(RandomGenerator& gen, vertices_size_type n,
- edges_size_type m, double a, double b, double c, double d,
- bool permute_vertices = true, EdgePredicate ep = keep_all_edges())
- : gen(), done(false)
-
- {
- // BOOST_ASSERT(boost::test_tools::check_is_close(a + b + c +
- // d, 1., 1.e-5));
-
- this->gen.reset(new uniform_01< RandomGenerator >(gen));
-
- std::vector< vertices_size_type > vertexPermutation;
- if (permute_vertices)
- generate_permutation_vector(gen, vertexPermutation, n);
-
- int SCALE = int_log2(n);
-
- std::map< value_type, bool > edge_map;
-
- edges_size_type edges = 0;
- do
- {
- vertices_size_type u, v;
- boost::tie(u, v) = generate_edge(this->gen, n, SCALE, a, b, c, d);
-
- // Lowest vertex number always comes first
- // (this means we don't have to worry about i->j and j->i being in
- // the edge list)
- if (u > v && is_same< directed_category, undirected_tag >::value)
- std::swap(u, v);
-
- if (edge_map.find(std::make_pair(u, v)) == edge_map.end())
- {
- edge_map[std::make_pair(u, v)] = true;
-
- if (permute_vertices)
- {
- if (ep(vertexPermutation[u], vertexPermutation[v]))
- values.push_back(std::make_pair(
- vertexPermutation[u], vertexPermutation[v]));
- }
- else
- {
- if (ep(u, v))
- values.push_back(std::make_pair(u, v));
- }
-
- edges++;
- }
- } while (edges < m);
- // NGE - Asking for more than n^2 edges will result in an infinite loop
- // here
- // Asking for a value too close to n^2 edges may as well
-
- current = values.back();
- values.pop_back();
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- unique_rmat_iterator& operator++()
- {
- if (!values.empty())
- {
- current = values.back();
- values.pop_back();
- }
- else
- done = true;
-
- return *this;
- }
-
- unique_rmat_iterator operator++(int)
- {
- unique_rmat_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const unique_rmat_iterator& other) const
- {
- return values.empty() && other.values.empty() && done && other.done;
- }
-
- bool operator!=(const unique_rmat_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- // Parameters
- shared_ptr< uniform_01< RandomGenerator > > gen;
-
- // Internal data structures
- std::vector< value_type > values;
- value_type current;
- bool done;
-};
-
-// This version is slow but guarantees unique edges
-template < typename RandomGenerator, typename Graph,
- typename EdgePredicate = keep_all_edges >
-class sorted_unique_rmat_iterator
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
- typedef typename graph_traits< Graph >::edges_size_type edges_size_type;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef std::ptrdiff_t difference_type; // Not used
-
- // No argument constructor, set to terminating condition
- sorted_unique_rmat_iterator()
- : gen(), values(sort_pair< vertices_size_type >()), done(true)
- {
- }
-
- // Initialize for edge generation
- sorted_unique_rmat_iterator(RandomGenerator& gen, vertices_size_type n,
- edges_size_type m, double a, double b, double c, double d,
- bool bidirectional = false, bool permute_vertices = true,
- EdgePredicate ep = keep_all_edges())
- : gen()
- , bidirectional(bidirectional)
- , values(sort_pair< vertices_size_type >())
- , done(false)
-
- {
- // BOOST_ASSERT(boost::test_tools::check_is_close(a + b + c +
- // d, 1., 1.e-5));
-
- this->gen.reset(new uniform_01< RandomGenerator >(gen));
-
- std::vector< vertices_size_type > vertexPermutation;
- if (permute_vertices)
- generate_permutation_vector(gen, vertexPermutation, n);
-
- int SCALE = int_log2(n);
-
- std::map< value_type, bool > edge_map;
-
- edges_size_type edges = 0;
- do
- {
-
- vertices_size_type u, v;
- boost::tie(u, v) = generate_edge(this->gen, n, SCALE, a, b, c, d);
-
- if (bidirectional)
- {
- if (edge_map.find(std::make_pair(u, v)) == edge_map.end())
- {
- edge_map[std::make_pair(u, v)] = true;
- edge_map[std::make_pair(v, u)] = true;
-
- if (ep(u, v))
- {
- if (permute_vertices)
- {
- values.push(std::make_pair(
- vertexPermutation[u], vertexPermutation[v]));
- values.push(std::make_pair(
- vertexPermutation[v], vertexPermutation[u]));
- }
- else
- {
- values.push(std::make_pair(u, v));
- values.push(std::make_pair(v, u));
- }
- }
-
- ++edges;
- }
- }
- else
- {
- // Lowest vertex number always comes first
- // (this means we don't have to worry about i->j and j->i being
- // in the edge list)
- if (u > v
- && is_same< directed_category, undirected_tag >::value)
- std::swap(u, v);
-
- if (edge_map.find(std::make_pair(u, v)) == edge_map.end())
- {
- edge_map[std::make_pair(u, v)] = true;
-
- if (permute_vertices)
- {
- if (ep(vertexPermutation[u], vertexPermutation[v]))
- values.push(std::make_pair(
- vertexPermutation[u], vertexPermutation[v]));
- }
- else
- {
- if (ep(u, v))
- values.push(std::make_pair(u, v));
- }
-
- ++edges;
- }
- }
-
- } while (edges < m);
- // NGE - Asking for more than n^2 edges will result in an infinite loop
- // here
- // Asking for a value too close to n^2 edges may as well
-
- current = values.top();
- values.pop();
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- sorted_unique_rmat_iterator& operator++()
- {
- if (!values.empty())
- {
- current = values.top();
- values.pop();
- }
- else
- done = true;
-
- return *this;
- }
-
- sorted_unique_rmat_iterator operator++(int)
- {
- sorted_unique_rmat_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const sorted_unique_rmat_iterator& other) const
- {
- return values.empty() && other.values.empty() && done && other.done;
- }
-
- bool operator!=(const sorted_unique_rmat_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- // Parameters
- shared_ptr< uniform_01< RandomGenerator > > gen;
- bool bidirectional;
-
- // Internal data structures
- std::priority_queue< value_type, std::vector< value_type >,
- sort_pair< vertices_size_type > >
- values;
- value_type current;
- bool done;
-};
-
-} // end namespace boost
-
-
-
-#endif // BOOST_GRAPH_RMAT_GENERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/sequential_vertex_coloring.hpp b/contrib/restricted/boost/graph/include/boost/graph/sequential_vertex_coloring.hpp
deleted file mode 100644
index fcfa24301e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/sequential_vertex_coloring.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2004 The Trustees of Indiana University
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_SEQUENTIAL_VERTEX_COLORING_HPP
-#define BOOST_GRAPH_SEQUENTIAL_VERTEX_COLORING_HPP
-
-#include <vector>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/limits.hpp>
-
-#ifdef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
-#include <iterator>
-#endif
-
-/* This algorithm is to find coloring of a graph
-
- Algorithm:
- Let G = (V,E) be a graph with vertices (somehow) ordered v_1, v_2, ...,
- v_n. For k = 1, 2, ..., n the sequential algorithm assigns v_k to the
- smallest possible color.
-
- Reference:
-
- Thomas F. Coleman and Jorge J. More, Estimation of sparse Jacobian
- matrices and graph coloring problems. J. Numer. Anal. V20, P187-209, 1983
-
- v_k is stored as o[k] here.
-
- The color of the vertex v will be stored in color[v].
- i.e., vertex v belongs to coloring color[v] */
-
-namespace boost
-{
-template < class VertexListGraph, class OrderPA, class ColorMap >
-typename property_traits< ColorMap >::value_type sequential_vertex_coloring(
- const VertexListGraph& G, OrderPA order, ColorMap color)
-{
- typedef graph_traits< VertexListGraph > GraphTraits;
- typedef typename GraphTraits::vertex_descriptor Vertex;
- typedef typename property_traits< ColorMap >::value_type size_type;
-
- size_type max_color = 0;
- const size_type V = num_vertices(G);
-
- // We need to keep track of which colors are used by
- // adjacent vertices. We do this by marking the colors
- // that are used. The mark array contains the mark
- // for each color. The length of mark is the
- // number of vertices since the maximum possible number of colors
- // is the number of vertices.
- std::vector< size_type > mark(V,
- std::numeric_limits< size_type >::max
- BOOST_PREVENT_MACRO_SUBSTITUTION());
-
- // Initialize colors
- typename GraphTraits::vertex_iterator v, vend;
- for (boost::tie(v, vend) = vertices(G); v != vend; ++v)
- put(color, *v, V - 1);
-
- // Determine the color for every vertex one by one
- for (size_type i = 0; i < V; i++)
- {
- Vertex current = get(order, i);
- typename GraphTraits::adjacency_iterator v, vend;
-
- // Mark the colors of vertices adjacent to current.
- // i can be the value for marking since i increases successively
- for (boost::tie(v, vend) = adjacent_vertices(current, G); v != vend;
- ++v)
- mark[get(color, *v)] = i;
-
- // Next step is to assign the smallest un-marked color
- // to the current vertex.
- size_type j = 0;
-
- // Scan through all useable colors, find the smallest possible
- // color that is not used by neighbors. Note that if mark[j]
- // is equal to i, color j is used by one of the current vertex's
- // neighbors.
- while (j < max_color && mark[j] == i)
- ++j;
-
- if (j == max_color) // All colors are used up. Add one more color
- ++max_color;
-
- // At this point, j is the smallest possible color
- put(color, current, j); // Save the color of vertex current
- }
-
- return max_color;
-}
-
-template < class VertexListGraph, class ColorMap >
-typename property_traits< ColorMap >::value_type sequential_vertex_coloring(
- const VertexListGraph& G, ColorMap color)
-{
- typedef typename graph_traits< VertexListGraph >::vertex_descriptor
- vertex_descriptor;
- typedef typename graph_traits< VertexListGraph >::vertex_iterator
- vertex_iterator;
-
- std::pair< vertex_iterator, vertex_iterator > v = vertices(G);
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- std::vector< vertex_descriptor > order(v.first, v.second);
-#else
- std::vector< vertex_descriptor > order;
- order.reserve(std::distance(v.first, v.second));
- while (v.first != v.second)
- order.push_back(*v.first++);
-#endif
- return sequential_vertex_coloring(G,
- make_iterator_property_map(order.begin(), identity_property_map(),
- graph_traits< VertexListGraph >::null_vertex()),
- color);
-}
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/simple_point.hpp b/contrib/restricted/boost/graph/include/boost/graph/simple_point.hpp
deleted file mode 100644
index 0e3dffca63..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/simple_point.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-//=======================================================================
-// Copyright 2005 Trustees of Indiana University
-// Authors: Andrew Lumsdaine, Douglas Gregor
-//
-// 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_SIMPLE_POINT_HPP
-#define BOOST_GRAPH_SIMPLE_POINT_HPP
-
-namespace boost
-{
-
-template < typename T > struct simple_point
-{
- T x;
- T y;
-};
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_SIMPLE_POINT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/sloan_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/sloan_ordering.hpp
deleted file mode 100644
index 88f845b81c..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/sloan_ordering.hpp
+++ /dev/null
@@ -1,448 +0,0 @@
-//
-//=======================================================================
-// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
-// ETH Zurich, Center of Structure Technologies
-// (https://web.archive.org/web/20050307090307/http://www.structures.ethz.ch/)
-//
-// 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_SLOAN_HPP
-#define BOOST_GRAPH_SLOAN_HPP
-
-#define WEIGHT1 1 // default weight for the distance in the Sloan algorithm
-#define WEIGHT2 2 // default weight for the degree in the Sloan algorithm
-
-#include <boost/config.hpp>
-#include <vector>
-#include <queue>
-#include <algorithm>
-#include <limits>
-#include <boost/pending/queue.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/breadth_first_search.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/indirect_cmp.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/visitors.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/cuthill_mckee_ordering.hpp>
-
-////////////////////////////////////////////////////////////
-//
-// Sloan-Algorithm for graph reordering
-//(optimzes profile and wavefront, not primiraly bandwidth
-//
-////////////////////////////////////////////////////////////
-
-namespace boost
-{
-
-/////////////////////////////////////////////////////////////////////////
-// Function that returns the maximum depth of
-// a rooted level strucutre (RLS)
-//
-/////////////////////////////////////////////////////////////////////////
-template < class Distance > typename Distance::value_type RLS_depth(Distance& d)
-{
- typename Distance::value_type h_s = 0;
- typename Distance::iterator iter;
-
- for (iter = d.begin(); iter != d.end(); ++iter)
- {
- if (*iter > h_s)
- {
- h_s = *iter;
- }
- }
-
- return h_s;
-}
-
-/////////////////////////////////////////////////////////////////////////
-// Function that returns the width of the largest level of
-// a rooted level strucutre (RLS)
-//
-/////////////////////////////////////////////////////////////////////////
-template < class Distance, class my_int >
-typename Distance::value_type RLS_max_width(Distance& d, my_int depth)
-{
-
- typedef typename Distance::value_type Degree;
-
- // Searching for the maximum width of a level
- std::vector< Degree > dummy_width(depth + 1, 0);
- typename std::vector< Degree >::iterator my_it;
- typename Distance::iterator iter;
- Degree w_max = 0;
-
- for (iter = d.begin(); iter != d.end(); ++iter)
- {
- dummy_width[*iter]++;
- }
-
- for (my_it = dummy_width.begin(); my_it != dummy_width.end(); ++my_it)
- {
- if (*my_it > w_max)
- w_max = *my_it;
- }
-
- return w_max;
-}
-
-/////////////////////////////////////////////////////////////////////////
-// Function for finding a good starting node for Sloan algorithm
-//
-// This is to find a good starting node. "good" is in the sense
-// of the ordering generated.
-/////////////////////////////////////////////////////////////////////////
-template < class Graph, class ColorMap, class DegreeMap >
-typename graph_traits< Graph >::vertex_descriptor sloan_start_end_vertices(
- Graph& G, typename graph_traits< Graph >::vertex_descriptor& s,
- ColorMap color, DegreeMap degree)
-{
- typedef typename property_traits< DegreeMap >::value_type Degree;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename std::vector<
- typename graph_traits< Graph >::vertices_size_type >::iterator vec_iter;
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
-
- typedef typename property_map< Graph, vertex_index_t >::const_type VertexID;
-
- s = *(vertices(G).first);
- Vertex e = s;
- Vertex i;
- Degree my_degree = get(degree, s);
- Degree dummy, h_i, h_s, w_i, w_e;
- bool new_start = true;
- Degree maximum_degree = 0;
-
- // Creating a std-vector for storing the distance from the start vertex in
- // dist
- std::vector< typename graph_traits< Graph >::vertices_size_type > dist(
- num_vertices(G), 0);
-
- // Wrap a property_map_iterator around the std::iterator
- boost::iterator_property_map< vec_iter, VertexID, size_type, size_type& >
- dist_pmap(dist.begin(), get(vertex_index, G));
-
- // Creating a property_map for the indices of a vertex
- typename property_map< Graph, vertex_index_t >::type index_map
- = get(vertex_index, G);
-
- // Creating a priority queue
- typedef indirect_cmp< DegreeMap, std::greater< Degree > > Compare;
- Compare comp(degree);
- std::priority_queue< Vertex, std::vector< Vertex >, Compare > degree_queue(
- comp);
-
- // step 1
- // Scan for the vertex with the smallest degree and the maximum degree
- typename graph_traits< Graph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
- {
- dummy = get(degree, *ui);
-
- if (dummy < my_degree)
- {
- my_degree = dummy;
- s = *ui;
- }
-
- if (dummy > maximum_degree)
- {
- maximum_degree = dummy;
- }
- }
- // end 1
-
- do
- {
- new_start = false; // Setting the loop repetition status to false
-
- // step 2
- // initialize the the disance std-vector with 0
- for (typename std::vector< typename graph_traits<
- Graph >::vertices_size_type >::iterator iter
- = dist.begin();
- iter != dist.end(); ++iter)
- *iter = 0;
-
- // generating the RLS (rooted level structure)
- breadth_first_search(G, s,
- visitor(
- make_bfs_visitor(record_distances(dist_pmap, on_tree_edge()))));
-
- // end 2
-
- // step 3
- // calculating the depth of the RLS
- h_s = RLS_depth(dist);
-
- // step 4
- // pushing one node of each degree in an ascending manner into
- // degree_queue
- std::vector< bool > shrink_trace(maximum_degree, false);
- for (boost::tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
- {
- dummy = get(degree, *ui);
-
- if ((dist[index_map[*ui]] == h_s) && (!shrink_trace[dummy]))
- {
- degree_queue.push(*ui);
- shrink_trace[dummy] = true;
- }
- }
-
- // end 3 & 4
-
- // step 5
- // Initializing w
- w_e = (std::numeric_limits< Degree >::max)();
- // end 5
-
- // step 6
- // Testing for termination
- while (!degree_queue.empty())
- {
- i = degree_queue.top(); // getting the node with the lowest degree
- // from the degree queue
- degree_queue.pop(); // ereasing the node with the lowest degree from
- // the degree queue
-
- // generating a RLS
- for (typename std::vector< typename graph_traits<
- Graph >::vertices_size_type >::iterator iter
- = dist.begin();
- iter != dist.end(); ++iter)
- *iter = 0;
-
- breadth_first_search(G, i,
- boost::visitor(make_bfs_visitor(
- record_distances(dist_pmap, on_tree_edge()))));
-
- // Calculating depth and width of the rooted level
- h_i = RLS_depth(dist);
- w_i = RLS_max_width(dist, h_i);
-
- // Testing for termination
- if ((h_i > h_s) && (w_i < w_e))
- {
- h_s = h_i;
- s = i;
- while (!degree_queue.empty())
- degree_queue.pop();
- new_start = true;
- }
- else if (w_i < w_e)
- {
- w_e = w_i;
- e = i;
- }
- }
- // end 6
-
- } while (new_start);
-
- return e;
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Sloan algorithm with a given starting Vertex.
-//
-// This algorithm requires user to provide a starting vertex to
-// compute Sloan ordering.
-//////////////////////////////////////////////////////////////////////////
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap,
- class PriorityMap, class Weight >
-OutputIterator sloan_ordering(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor e,
- OutputIterator permutation, ColorMap color, DegreeMap degree,
- PriorityMap priority, Weight W1, Weight W2)
-{
- // typedef typename property_traits<DegreeMap>::value_type Degree;
- typedef typename property_traits< PriorityMap >::value_type Degree;
- typedef typename property_traits< ColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename std::vector<
- typename graph_traits< Graph >::vertices_size_type >::iterator vec_iter;
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
-
- typedef typename property_map< Graph, vertex_index_t >::const_type VertexID;
-
- // Creating a std-vector for storing the distance from the end vertex in it
- typename std::vector< typename graph_traits< Graph >::vertices_size_type >
- dist(num_vertices(g), 0);
-
- // Wrap a property_map_iterator around the std::iterator
- boost::iterator_property_map< vec_iter, VertexID, size_type, size_type& >
- dist_pmap(dist.begin(), get(vertex_index, g));
-
- breadth_first_search(g, e,
- visitor(make_bfs_visitor(record_distances(dist_pmap, on_tree_edge()))));
-
- // Creating a property_map for the indices of a vertex
- typename property_map< Graph, vertex_index_t >::type index_map
- = get(vertex_index, g);
-
- // Sets the color and priority to their initial status
- Degree cdeg;
- typename graph_traits< Graph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- put(color, *ui, Color::white());
- cdeg = get(degree, *ui) + 1;
- put(priority, *ui, W1 * dist[index_map[*ui]] - W2 * cdeg);
- }
-
- // Priority list
- typedef indirect_cmp< PriorityMap, std::greater< Degree > > Compare;
- Compare comp(priority);
- std::list< Vertex > priority_list;
-
- // Some more declarations
- typename graph_traits< Graph >::out_edge_iterator ei, ei_end, ei2, ei2_end;
- Vertex u, v, w;
-
- put(color, s,
- Color::green()); // Sets the color of the starting vertex to gray
- priority_list.push_front(s); // Puts s into the priority_list
-
- while (!priority_list.empty())
- {
- priority_list.sort(comp); // Orders the elements in the priority list in
- // an ascending manner
-
- u = priority_list
- .front(); // Accesses the last element in the priority list
- priority_list
- .pop_front(); // Removes the last element in the priority list
-
- if (get(color, u) == Color::green())
- {
- // for-loop over all out-edges of vertex u
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei)
- {
- v = target(*ei, g);
-
- put(priority, v, get(priority, v) + W2); // updates the priority
-
- if (get(color, v)
- == Color::white()) // test if the vertex is inactive
- {
- put(color, v,
- Color::green()); // giving the vertex a preactive status
- priority_list.push_front(
- v); // writing the vertex in the priority_queue
- }
- }
- }
-
- // Here starts step 8
- *permutation++
- = u; // Puts u to the first position in the permutation-vector
- put(color, u, Color::black()); // Gives u an inactive status
-
- // for loop over all the adjacent vertices of u
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei)
- {
-
- v = target(*ei, g);
-
- if (get(color, v) == Color::green())
- { // tests if the vertex is inactive
-
- put(color, v,
- Color::red()); // giving the vertex an active status
- put(priority, v, get(priority, v) + W2); // updates the priority
-
- // for loop over alll adjacent vertices of v
- for (boost::tie(ei2, ei2_end) = out_edges(v, g); ei2 != ei2_end;
- ++ei2)
- {
- w = target(*ei2, g);
-
- if (get(color, w) != Color::black())
- { // tests if vertex is postactive
-
- put(priority, w,
- get(priority, w) + W2); // updates the priority
-
- if (get(color, w) == Color::white())
- {
-
- put(color, w, Color::green()); // gives the vertex a
- // preactive status
- priority_list.push_front(
- w); // puts the vertex into the priority queue
-
- } // end if
-
- } // end if
-
- } // end for
-
- } // end if
-
- } // end for
-
- } // end while
-
- return permutation;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Same algorithm as before, but without the weights given (taking default
-// weights
-template < class Graph, class OutputIterator, class ColorMap, class DegreeMap,
- class PriorityMap >
-OutputIterator sloan_ordering(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor e,
- OutputIterator permutation, ColorMap color, DegreeMap degree,
- PriorityMap priority)
-{
- return sloan_ordering(
- g, s, e, permutation, color, degree, priority, WEIGHT1, WEIGHT2);
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Sloan algorithm without a given starting Vertex.
-//
-// This algorithm finds a good starting vertex itself to
-// compute Sloan-ordering.
-//////////////////////////////////////////////////////////////////////////
-
-template < class Graph, class OutputIterator, class Color, class Degree,
- class Priority, class Weight >
-inline OutputIterator sloan_ordering(Graph& G, OutputIterator permutation,
- Color color, Degree degree, Priority priority, Weight W1, Weight W2)
-{
- typedef typename boost::graph_traits< Graph >::vertex_descriptor Vertex;
-
- Vertex s, e;
- e = sloan_start_end_vertices(G, s, color, degree);
-
- return sloan_ordering(
- G, s, e, permutation, color, degree, priority, W1, W2);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Same as before, but without given weights (default weights are taken instead)
-template < class Graph, class OutputIterator, class Color, class Degree,
- class Priority >
-inline OutputIterator sloan_ordering(Graph& G, OutputIterator permutation,
- Color color, Degree degree, Priority priority)
-{
- return sloan_ordering(
- G, permutation, color, degree, priority, WEIGHT1, WEIGHT2);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_SLOAN_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/small_world_generator.hpp b/contrib/restricted/boost/graph/include/boost/graph/small_world_generator.hpp
deleted file mode 100644
index 9c73b54742..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/small_world_generator.hpp
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_SMALL_WORLD_GENERATOR_HPP
-#define BOOST_GRAPH_SMALL_WORLD_GENERATOR_HPP
-
-#include <iterator>
-#include <utility>
-#include <boost/random/uniform_01.hpp>
-#include <boost/random/uniform_int.hpp>
-
-namespace boost
-{
-
-// Assumes undirected
-template < typename RandomGenerator, typename Graph > class small_world_iterator
-{
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef void difference_type;
-
- small_world_iterator() : gen(0) {}
- small_world_iterator(RandomGenerator& gen, vertices_size_type n,
- vertices_size_type k, double prob = 0.0, bool allow_self_loops = false)
- : gen(&gen)
- , n(n)
- , k(k)
- , prob(prob)
- , source(0)
- , target(allow_self_loops ? 0 : 1)
- , allow_self_loops(allow_self_loops)
- , current(0, allow_self_loops ? 0 : 1)
- {
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- small_world_iterator& operator++()
- {
- target = (target + 1) % n;
- if (target == (source + k / 2 + 1) % n)
- {
- ++source;
- if (allow_self_loops)
- target = source;
- else
- target = (source + 1) % n;
- }
- current.first = source;
-
- uniform_01< RandomGenerator, double > rand01(*gen);
- uniform_int< vertices_size_type > rand_vertex_gen(0, n - 1);
- double x = rand01();
- *gen = rand01.base(); // GRRRR
- if (x < prob)
- {
- vertices_size_type lower = (source + n - k / 2) % n;
- vertices_size_type upper = (source + k / 2) % n;
- do
- {
- current.second = rand_vertex_gen(*gen);
- } while ((current.second >= lower && current.second <= upper)
- || (upper < lower
- && (current.second >= lower || current.second <= upper)));
- }
- else
- {
- current.second = target;
- }
- return *this;
- }
-
- small_world_iterator operator++(int)
- {
- small_world_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const small_world_iterator& other) const
- {
- if (!gen && other.gen)
- return other == *this;
- else if (gen && !other.gen)
- return source == n;
- else if (!gen && !other.gen)
- return true;
- return source == other.source && target == other.target;
- }
-
- bool operator!=(const small_world_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- void next()
- {
- uniform_int< vertices_size_type > rand_vertex(0, n - 1);
- current.first = rand_vertex(*gen);
- do
- {
- current.second = rand_vertex(*gen);
- } while (current.first == current.second && !allow_self_loops);
- }
-
- RandomGenerator* gen;
- vertices_size_type n;
- vertices_size_type k;
- double prob;
- vertices_size_type source;
- vertices_size_type target;
- bool allow_self_loops;
- value_type current;
-};
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_SMALL_WORLD_GENERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/smallest_last_ordering.hpp b/contrib/restricted/boost/graph/include/boost/graph/smallest_last_ordering.hpp
deleted file mode 100644
index 88af0ea931..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/smallest_last_ordering.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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)
-//=======================================================================
-
-// Revision History:
-// 17 March 2006: Fixed a bug: when updating the degree a vertex
-// could be moved to a wrong bucket. (Roman Dementiev)
-//
-
-#ifndef BOOST_SMALLEST_LAST_VERTEX_ORDERING_HPP
-#define BOOST_SMALLEST_LAST_VERTEX_ORDERING_HPP
-/*
- The smallest-last ordering is defined for the loopless graph G with
- vertices a(j), j = 1,2,...,n where a(j) is the j-th column of A and
- with edge (a(i),a(j)) if and only if columns i and j have a
- non-zero in the same row position. The smallest-last ordering is
- determined recursively by letting list(k), k = n,...,1 be a column
- with least degree in the subgraph spanned by the un-ordered
- columns.
- */
-#include <vector>
-#include <algorithm>
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/bucket_sorter.hpp>
-
-namespace boost
-{
-
-template < class VertexListGraph, class Order, class Degree, class Marker >
-void smallest_last_vertex_ordering(
- const VertexListGraph& G, Order order, Degree degree, Marker marker)
-{
- typedef typename boost::graph_traits< VertexListGraph > GraphTraits;
- typedef typename GraphTraits::vertex_descriptor Vertex;
- // typedef typename GraphTraits::size_type size_type;
- typedef std::size_t size_type;
-
- const size_type num = num_vertices(G);
-
- typedef
- typename boost::property_map< VertexListGraph, vertex_index_t >::type
- ID;
- typedef bucket_sorter< size_type, Vertex, Degree, ID > BucketSorter;
-
- BucketSorter degree_bucket_sorter(num, num, degree, get(vertex_index, G));
-
- smallest_last_vertex_ordering(
- G, order, degree, marker, degree_bucket_sorter);
-}
-
-template < class VertexListGraph, class Order, class Degree, class Marker,
- class BucketSorter >
-void smallest_last_vertex_ordering(const VertexListGraph& G, Order order,
- Degree degree, Marker marker, BucketSorter& degree_buckets)
-{
- typedef typename boost::graph_traits< VertexListGraph > GraphTraits;
- typedef typename GraphTraits::vertex_descriptor Vertex;
- // typedef typename GraphTraits::size_type size_type;
- typedef std::size_t size_type;
-
- const size_type num = num_vertices(G);
-
- typename GraphTraits::vertex_iterator v, vend;
- for (boost::tie(v, vend) = vertices(G); v != vend; ++v)
- {
- put(marker, *v, num);
- put(degree, *v, out_degree(*v, G));
- degree_buckets.push(*v);
- }
-
- size_type minimum_degree = 0;
- size_type current_order = num - 1;
-
- while (1)
- {
- typedef typename BucketSorter::stack MDStack;
- MDStack minimum_degree_stack = degree_buckets[minimum_degree];
- while (minimum_degree_stack.empty())
- minimum_degree_stack = degree_buckets[++minimum_degree];
-
- Vertex node = minimum_degree_stack.top();
- put(order, current_order, node);
-
- if (current_order == 0) // find all vertices
- break;
-
- minimum_degree_stack.pop();
- put(marker, node, 0); // node has been ordered.
-
- typename GraphTraits::adjacency_iterator v, vend;
- for (boost::tie(v, vend) = adjacent_vertices(node, G); v != vend; ++v)
-
- if (get(marker, *v) > current_order)
- { //*v is unordered vertex
- put(marker, *v,
- current_order); // mark the columns adjacent to node
-
- // delete *v from the bucket sorter
- degree_buckets.remove(*v);
-
- // It is possible minimum degree goes down
- // Here we keep tracking it.
- put(degree, *v, get(degree, *v) - 1);
- BOOST_USING_STD_MIN();
- minimum_degree = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- minimum_degree, get(degree, *v));
-
- // reinsert *v in the bucket sorter with the new degree
- degree_buckets.push(*v);
- }
-
- current_order--;
- }
-
- // at this point, order[i] = v_i;
-}
-
-template < class VertexListGraph, class Order >
-void smallest_last_vertex_ordering(const VertexListGraph& G, Order order)
-{
- typedef typename graph_traits< VertexListGraph >::vertex_descriptor
- vertex_descriptor;
- typedef typename graph_traits< VertexListGraph >::degree_size_type
- degree_size_type;
- smallest_last_vertex_ordering(G, order,
- make_shared_array_property_map(
- num_vertices(G), degree_size_type(0), get(vertex_index, G)),
- make_shared_array_property_map(
- num_vertices(G), (std::size_t)(0), get(vertex_index, G)));
-}
-
-template < class VertexListGraph >
-std::vector< typename graph_traits< VertexListGraph >::vertex_descriptor >
-smallest_last_vertex_ordering(const VertexListGraph& G)
-{
- std::vector< typename graph_traits< VertexListGraph >::vertex_descriptor >
- o(num_vertices(G));
- smallest_last_vertex_ordering(G,
- make_iterator_property_map(
- o.begin(), typed_identity_property_map< std::size_t >()));
- return o;
-}
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/ssca_graph_generator.hpp b/contrib/restricted/boost/graph/include/boost/graph/ssca_graph_generator.hpp
deleted file mode 100644
index 5fb6e35669..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/ssca_graph_generator.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright 2004, 2005 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Nick Edmonds
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_SSCA_GENERATOR_HPP
-#define BOOST_GRAPH_SSCA_GENERATOR_HPP
-
-#include <iterator>
-#include <utility>
-#include <vector>
-#include <queue>
-#include <boost/config.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/type_traits/is_base_and_derived.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-enum Direction
-{
- FORWARD = 1,
- BACKWARD = 2,
- BOTH = FORWARD | BACKWARD
-};
-
-namespace boost
-{
-
-// This generator generates graphs according to the method specified
-// in SSCA 1.1. Current versions of SSCA use R-MAT graphs
-
-template < typename RandomGenerator, typename Graph > class ssca_iterator
-{
- typedef typename graph_traits< Graph >::directed_category directed_category;
- typedef
- typename graph_traits< Graph >::vertices_size_type vertices_size_type;
-
-public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< vertices_size_type, vertices_size_type > value_type;
- typedef const value_type& reference;
- typedef const value_type* pointer;
- typedef void difference_type;
-
- // No argument constructor, set to terminating condition
- ssca_iterator() : gen(), verticesRemaining(0) {}
-
- // Initialize for edge generation
- ssca_iterator(RandomGenerator& gen, vertices_size_type totVertices,
- vertices_size_type maxCliqueSize, double probUnidirectional,
- int maxParallelEdges, double probIntercliqueEdges)
- : gen(&gen)
- , totVertices(totVertices)
- , maxCliqueSize(maxCliqueSize)
- , probUnidirectional(probUnidirectional)
- , maxParallelEdges(maxParallelEdges)
- , probIntercliqueEdges(probIntercliqueEdges)
- , currentClique(0)
- , verticesRemaining(totVertices)
- {
- cliqueNum = std::vector< int >(totVertices, -1);
- current = std::make_pair(0, 0);
- }
-
- reference operator*() const { return current; }
- pointer operator->() const { return &current; }
-
- ssca_iterator& operator++()
- {
- BOOST_USING_STD_MIN();
- while (values.empty() && verticesRemaining > 0)
- { // If there are no values left, generate a new clique
- uniform_int< vertices_size_type > clique_size(1, maxCliqueSize);
- uniform_int< vertices_size_type > rand_vertex(0, totVertices - 1);
- uniform_int< int > num_parallel_edges(1, maxParallelEdges);
- uniform_int< short > direction(0, 1);
- uniform_01< RandomGenerator > prob(*gen);
- std::vector< vertices_size_type > cliqueVertices;
-
- cliqueVertices.clear();
- vertices_size_type size = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- clique_size(*gen), verticesRemaining);
- while (cliqueVertices.size() < size)
- {
- vertices_size_type v = rand_vertex(*gen);
- if (cliqueNum[v] == -1)
- {
- cliqueNum[v] = currentClique;
- cliqueVertices.push_back(v);
- verticesRemaining--;
- }
- } // Nick: This is inefficient when only a few vertices remain...
- // I should probably just select the remaining vertices
- // in order when only a certain fraction remain.
-
- typename std::vector< vertices_size_type >::iterator first, second;
- for (first = cliqueVertices.begin(); first != cliqueVertices.end();
- ++first)
- for (second = first + 1; second != cliqueVertices.end();
- ++second)
- {
- Direction d;
- int edges;
-
- d = prob() < probUnidirectional
- ? (direction(*gen) == 0 ? FORWARD : BACKWARD)
- : BOTH;
-
- if (d & FORWARD)
- {
- edges = num_parallel_edges(*gen);
- for (int i = 0; i < edges; ++i)
- values.push(std::make_pair(*first, *second));
- }
-
- if (d & BACKWARD)
- {
- edges = num_parallel_edges(*gen);
- for (int i = 0; i < edges; ++i)
- values.push(std::make_pair(*second, *first));
- }
- }
-
- if (verticesRemaining == 0)
- {
- // Generate interclique edges
- for (vertices_size_type i = 0; i < totVertices; ++i)
- {
- double p = probIntercliqueEdges;
- for (vertices_size_type d = 2; d < totVertices / 2;
- d *= 2, p /= 2)
- {
- vertices_size_type j = (i + d) % totVertices;
- if (cliqueNum[j] != cliqueNum[i] && prob() < p)
- {
- int edges = num_parallel_edges(*gen);
- for (int i = 0; i < edges; ++i)
- values.push(std::make_pair(i, j));
- }
- }
- }
- }
-
- currentClique++;
- }
-
- if (!values.empty())
- { // If we're not done return a value
- current = values.front();
- values.pop();
- }
-
- return *this;
- }
-
- ssca_iterator operator++(int)
- {
- ssca_iterator temp(*this);
- ++(*this);
- return temp;
- }
-
- bool operator==(const ssca_iterator& other) const
- {
- return verticesRemaining == other.verticesRemaining && values.empty()
- && other.values.empty();
- }
-
- bool operator!=(const ssca_iterator& other) const
- {
- return !(*this == other);
- }
-
-private:
- // Parameters
- RandomGenerator* gen;
- vertices_size_type totVertices;
- vertices_size_type maxCliqueSize;
- double probUnidirectional;
- int maxParallelEdges;
- double probIntercliqueEdges;
-
- // Internal data structures
- std::vector< int > cliqueNum;
- std::queue< value_type > values;
- int currentClique;
- vertices_size_type verticesRemaining;
- value_type current;
-};
-
-} // end namespace boost
-
-#endif // BOOST_GRAPH_SSCA_GENERATOR_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/st_connected.hpp b/contrib/restricted/boost/graph/include/boost/graph/st_connected.hpp
deleted file mode 100644
index 2e8f444319..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/st_connected.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (C) 2006 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_DISTRIBUTED_ST_CONNECTED_HPP
-#define BOOST_GRAPH_DISTRIBUTED_ST_CONNECTED_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/two_bit_color_map.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/pending/queue.hpp>
-
-namespace boost
-{
-namespace graph
-{
-
- template < typename Graph, typename ColorMap >
- bool st_connected(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, ColorMap color)
- {
- typedef typename property_traits< ColorMap >::value_type Color;
- typedef color_traits< Color > ColorTraits;
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- // Set all vertices to white (unvisited)
- BGL_FORALL_VERTICES_T(v, g, Graph)
- put(color, v, ColorTraits::white());
-
- // Vertices found from the source are grey
- put(color, s, ColorTraits::gray());
-
- // Vertices found from the target are greeen
- put(color, t, ColorTraits::green());
- queue< Vertex > Q;
- Q.push(s);
- Q.push(t);
-
- while (!Q.empty())
- {
- Vertex u = Q.top();
- Q.pop();
- Color u_color = get(color, u);
-
- BGL_FORALL_OUTEDGES_T(u, e, g, Graph)
- {
- Vertex v = target(e, g);
- Color v_color = get(color, v);
- if (v_color == ColorTraits::white())
- {
- // We have not seen "v" before; mark it with the same color
- // as u
- Color u_color = get(color, u);
- put(color, v, u_color);
-
- // Push it on the queue
- Q.push(v);
- }
- else if (v_color != ColorTraits::black() && u_color != v_color)
- {
- // Colors have collided. We're done!
- return true;
- }
- }
- // u is done, so mark it black
- put(color, u, ColorTraits::black());
- }
-
- return false;
- }
-
- template < typename Graph >
- inline bool st_connected(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t)
- {
- return st_connected(g, s, t,
- make_two_bit_color_map(num_vertices(g), get(vertex_index, g)));
- }
-
-}
-} // end namespace boost::graph
-
-#endif // BOOST_GRAPH_DISTRIBUTED_ST_CONNECTED_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/stanford_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/stanford_graph.hpp
deleted file mode 100644
index a3b949e610..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/stanford_graph.hpp
+++ /dev/null
@@ -1,586 +0,0 @@
-//=======================================================================
-// Copyright 1997-2001 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_SGB_GRAPH_HPP
-#define BOOST_GRAPH_SGB_GRAPH_HPP
-
-#include <boost/config.hpp>
-#include <boost/operators.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-
-// Thanks to Andreas Scherer for numerous suggestions and fixes!
-
-// This file adapts a Stanford GraphBase (SGB) Graph pointer into a
-// VertexListGraph. Note that a graph adaptor class is not needed,
-// SGB's Graph* is used as is. The VertexListGraph concept is fulfilled by
-// defining the appropriate non-member functions for Graph*.
-//
-// The PROTOTYPES change file extensions to SGB must be applied so
-// that the SGB functions have real prototypes which are necessary for
-// the C++ compiler. To apply the PROTOTYPES extensions, before you do
-// "make tests install" for SGB do "ln -s PROTOTYPES/* ." to the SGB
-// root directory (or just copy all the files from the PROTOTYPES
-// directory to the SGB root directory).
-//
-extern "C"
-{
- // We include all global definitions for the general stuff
- // of The Stanford GraphBase and its various graph generator
- // functions by reading all SGB headerfiles as in section 2 of
- // the "test_sample" program.
-#include <gb_graph.h> /* SGB data structures */
-#include <gb_io.h> /* SGB input/output routines */
-#include <gb_flip.h> /* random number generator */
-#include <gb_dijk.h> /* routines for shortest paths */
-#include <gb_basic.h> /* the basic graph operations */
-#undef empty /* avoid name clash with C++ standard library */
- inline Graph* empty(long n) /* and provide workaround */
- {
- return board(n, 0L, 0L, 0L, 2L, 0L, 0L);
- }
-#include <gb_books.h> /* graphs based on literature */
-#include <gb_econ.h> /* graphs based on economic data */
-#include <gb_games.h> /* graphs based on football scores */
-#undef ap /* avoid name clash with BGL parameter */
- // ap ==> Vertex::u.I
-#include <gb_gates.h> /* graphs based on logic circuits */
-#undef val /* avoid name clash with g++ headerfile stl_tempbuf.h */
- // val ==> Vertex::x.I
-#include <gb_lisa.h> /* graphs based on Mona Lisa */
-#include <gb_miles.h> /* graphs based on mileage data */
-#include <gb_plane.h> /* planar graphs */
-#include <gb_raman.h> /* Ramanujan graphs */
-#include <gb_rand.h> /* random graphs */
-#include <gb_roget.h> /* graphs based on Roget's Thesaurus */
-#include <gb_save.h> /* we save results in ASCII format */
-#include <gb_words.h> /* five-letter-word graphs */
-#undef weight /* avoid name clash with BGL parameter */
- // weight ==> Vertex::u.I
-}
-
-namespace boost
-{
-class sgb_edge;
-}
-
-class sgb_out_edge_iterator;
-class sgb_adj_iterator;
-class sgb_vertex_iterator;
-
-namespace boost
-{
-typedef Graph* sgb_graph_ptr;
-typedef const Graph* sgb_const_graph_ptr;
-
-struct sgb_traversal_tag : public virtual vertex_list_graph_tag,
- public virtual incidence_graph_tag,
- public virtual adjacency_graph_tag
-{
-};
-
-template <> struct graph_traits< sgb_graph_ptr >
-{
- typedef Vertex* vertex_descriptor;
- typedef boost::sgb_edge edge_descriptor;
- typedef sgb_out_edge_iterator out_edge_iterator;
- typedef void in_edge_iterator;
- typedef sgb_adj_iterator adjacency_iterator;
- typedef sgb_vertex_iterator vertex_iterator;
- typedef void edge_iterator;
- typedef long vertices_size_type;
- typedef long edge_size_type;
- typedef long degree_size_type;
- typedef directed_tag directed_category;
- typedef sgb_traversal_tag traversal_category;
- typedef allow_parallel_edge_tag edge_parallel_category;
- /** Return a null descriptor */
- static vertex_descriptor null_vertex() { return NULL; }
-};
-template <> struct graph_traits< sgb_const_graph_ptr >
-{
- typedef Vertex* vertex_descriptor;
- typedef boost::sgb_edge edge_descriptor;
- typedef sgb_out_edge_iterator out_edge_iterator;
- typedef void in_edge_iterator;
- typedef sgb_adj_iterator adjacency_iterator;
- typedef sgb_vertex_iterator vertex_iterator;
- typedef void edge_iterator;
- typedef long vertices_size_type;
- typedef long edge_size_type;
- typedef long degree_size_type;
- typedef directed_tag directed_category;
- typedef sgb_traversal_tag traversal_category;
- typedef allow_parallel_edge_tag edge_parallel_category;
- /** Return a null descriptor */
- static vertex_descriptor null_vertex() { return NULL; }
-};
-}
-
-namespace boost
-{
-
-struct edge_length_t
-{
- typedef edge_property_tag kind;
-};
-
-// We could just use Arc* as the edge descriptor type, but
-// we want to add the source(e,g) function which requires
-// that we carry along a pointer to the source vertex.
-class sgb_edge
-{
- typedef sgb_edge self;
-
-public:
- sgb_edge() : _arc(0), _src(0) {}
- sgb_edge(Arc* a, Vertex* s) : _arc(a), _src(s) {}
- friend Vertex* source(self e, sgb_const_graph_ptr) { return e._src; }
- friend Vertex* target(self e, sgb_const_graph_ptr) { return e._arc->tip; }
- friend bool operator==(const self& a, const self& b)
- {
- return a._arc == b._arc;
- }
- friend bool operator!=(const self& a, const self& b)
- {
- return a._arc != b._arc;
- }
-#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
- template < class Ref > friend class sgb_edge_length_map;
- template < class Tag, class Ref > friend class sgb_edge_util_map;
- friend long get(edge_length_t, const sgb_graph_ptr&, const sgb_edge& key);
- friend long get(
- edge_length_t, const sgb_const_graph_ptr&, const sgb_edge& key);
- friend void put(
- edge_length_t, sgb_graph_ptr&, const sgb_edge& key, long value);
-
-protected:
-#endif
- Arc* _arc;
- Vertex* _src;
-};
-} // namespace boost
-
-class sgb_out_edge_iterator
-: public boost::forward_iterator_helper< sgb_out_edge_iterator, boost::sgb_edge,
- std::ptrdiff_t, boost::sgb_edge*, boost::sgb_edge >
-{
- typedef sgb_out_edge_iterator self;
-
-public:
- sgb_out_edge_iterator() : _src(0), _arc(0) {}
- sgb_out_edge_iterator(Vertex* s, Arc* d) : _src(s), _arc(d) {}
- boost::sgb_edge operator*() { return boost::sgb_edge(_arc, _src); }
- self& operator++()
- {
- _arc = _arc->next;
- return *this;
- }
- friend bool operator==(const self& x, const self& y)
- {
- return x._arc == y._arc;
- }
-
-protected:
- Vertex* _src;
- Arc* _arc;
-};
-
-class sgb_adj_iterator
-: public boost::forward_iterator_helper< sgb_adj_iterator, Vertex*,
- std::ptrdiff_t, Vertex**, Vertex* >
-{
- typedef sgb_adj_iterator self;
-
-public:
- sgb_adj_iterator() : _arc(0) {}
- sgb_adj_iterator(Arc* d) : _arc(d) {}
- Vertex* operator*() { return _arc->tip; }
- self& operator++()
- {
- _arc = _arc->next;
- return *this;
- }
- friend bool operator==(const self& x, const self& y)
- {
- return x._arc == y._arc;
- }
-
-protected:
- Arc* _arc;
-};
-
-// The reason we have this instead of just using Vertex* is that we
-// want to use Vertex* as the vertex_descriptor instead of just
-// Vertex, which avoids problems with boost passing vertex descriptors
-// by value and how that interacts with the sgb_vertex_id_map.
-class sgb_vertex_iterator
-: public boost::forward_iterator_helper< sgb_vertex_iterator, Vertex*,
- std::ptrdiff_t, Vertex**, Vertex* >
-{
- typedef sgb_vertex_iterator self;
-
-public:
- sgb_vertex_iterator() : _v(0) {}
- sgb_vertex_iterator(Vertex* v) : _v(v) {}
- Vertex* operator*() { return _v; }
- self& operator++()
- {
- ++_v;
- return *this;
- }
- friend bool operator==(const self& x, const self& y)
- {
- return x._v == y._v;
- }
-
-protected:
- Vertex* _v;
-};
-
-namespace boost
-{
-
-inline std::pair< sgb_vertex_iterator, sgb_vertex_iterator > vertices(
- sgb_const_graph_ptr g)
-{
- return std::make_pair(sgb_vertex_iterator(g->vertices),
- sgb_vertex_iterator(g->vertices + g->n));
-}
-
-inline std::pair< sgb_out_edge_iterator, sgb_out_edge_iterator > out_edges(
- Vertex* u, sgb_const_graph_ptr)
-{
- return std::make_pair(
- sgb_out_edge_iterator(u, u->arcs), sgb_out_edge_iterator(u, 0));
-}
-
-inline boost::graph_traits< sgb_graph_ptr >::degree_size_type out_degree(
- Vertex* u, sgb_const_graph_ptr g)
-{
- boost::graph_traits< sgb_graph_ptr >::out_edge_iterator i, i_end;
- boost::tie(i, i_end) = out_edges(u, g);
- return std::distance(i, i_end);
-}
-
-// in_edges?
-
-inline std::pair< sgb_adj_iterator, sgb_adj_iterator > adjacent_vertices(
- Vertex* u, sgb_const_graph_ptr)
-{
- return std::make_pair(sgb_adj_iterator(u->arcs), sgb_adj_iterator(0));
-}
-
-inline long num_vertices(sgb_const_graph_ptr g) { return g->n; }
-inline long num_edges(sgb_const_graph_ptr g) { return g->m; }
-
-inline Vertex* vertex(long v, sgb_const_graph_ptr g) { return g->vertices + v; }
-
-// Various Property Maps
-
-// Vertex ID
-class sgb_vertex_id_map
-: public boost::put_get_helper< long, sgb_vertex_id_map >
-{
-public:
- typedef boost::readable_property_map_tag category;
- typedef long value_type;
- typedef long reference;
- typedef Vertex* key_type;
- sgb_vertex_id_map() : _g(0) {}
- sgb_vertex_id_map(sgb_graph_ptr g) : _g(g) {}
- long operator[](Vertex* v) const { return v - _g->vertices; }
-
-protected:
- sgb_graph_ptr _g;
-};
-inline sgb_vertex_id_map get(vertex_index_t, sgb_graph_ptr g)
-{
- return sgb_vertex_id_map(g);
-}
-
-// Vertex Name
-class sgb_vertex_name_map
-: public boost::put_get_helper< char*, sgb_vertex_name_map >
-{
-public:
- typedef boost::readable_property_map_tag category;
- typedef char* value_type;
- typedef char* reference;
- typedef Vertex* key_type;
- char* operator[](Vertex* v) const { return v->name; }
-};
-inline sgb_vertex_name_map get(vertex_name_t, sgb_graph_ptr)
-{
- return sgb_vertex_name_map();
-}
-
-// Vertex Property Tags
-#define SGB_PROPERTY_TAG(KIND, TAG) \
- template < class T > struct TAG##_property \
- { \
- typedef KIND##_property_tag kind; \
- typedef T type; \
- };
-SGB_PROPERTY_TAG(vertex, u)
-SGB_PROPERTY_TAG(vertex, v)
-SGB_PROPERTY_TAG(vertex, w)
-SGB_PROPERTY_TAG(vertex, x)
-SGB_PROPERTY_TAG(vertex, y)
-SGB_PROPERTY_TAG(vertex, z)
-
-// Edge Property Tags
-SGB_PROPERTY_TAG(edge, a)
-SGB_PROPERTY_TAG(edge, b)
-
-// Various Utility Maps
-
-// helpers
-inline Vertex*& get_util(util& u, Vertex*) { return u.V; }
-inline Arc*& get_util(util& u, Arc*) { return u.A; }
-inline sgb_graph_ptr& get_util(util& u, sgb_graph_ptr) { return u.G; }
-inline char*& get_util(util& u, char*) { return u.S; }
-inline long& get_util(util& u, long) { return u.I; }
-
-#define SGB_GET_UTIL_FIELD(KIND, X) \
- template < class T > inline T& get_util_field(KIND* k, X##_property< T >) \
- { \
- return get_util(k->X, T()); \
- }
-
-SGB_GET_UTIL_FIELD(Vertex, u)
-SGB_GET_UTIL_FIELD(Vertex, v)
-SGB_GET_UTIL_FIELD(Vertex, w)
-SGB_GET_UTIL_FIELD(Vertex, x)
-SGB_GET_UTIL_FIELD(Vertex, y)
-SGB_GET_UTIL_FIELD(Vertex, z)
-
-SGB_GET_UTIL_FIELD(Arc, a)
-SGB_GET_UTIL_FIELD(Arc, b)
-
-// Vertex Utility Map
-template < class Tag, class Ref >
-class sgb_vertex_util_map
-: public boost::put_get_helper< Ref, sgb_vertex_util_map< Tag, Ref > >
-{
- Tag tag;
-
-public:
- explicit sgb_vertex_util_map(Tag tag = Tag()) : tag(tag) {}
- typedef boost::lvalue_property_map_tag category;
- typedef typename Tag::type value_type;
- typedef Vertex* key_type;
- typedef Ref reference;
- reference operator[](Vertex* v) const { return get_util_field(v, tag); }
-};
-
-// Edge Utility Map
-template < class Tag, class Ref >
-class sgb_edge_util_map
-: public boost::put_get_helper< Ref, sgb_edge_util_map< Tag, Ref > >
-{
- Tag tag;
-
-public:
- explicit sgb_edge_util_map(Tag tag = Tag()) : tag(tag) {}
- typedef boost::lvalue_property_map_tag category;
- typedef typename Tag::type value_type;
- typedef Vertex* key_type;
- typedef Ref reference;
- reference operator[](const sgb_edge& e) const
- {
- return get_util_field(e._arc, tag);
- }
-};
-
-template < class Tag >
-inline sgb_vertex_util_map< Tag, const typename Tag::type& > get_property_map(
- Tag, const sgb_graph_ptr& g, vertex_property_tag)
-{
- return sgb_vertex_util_map< Tag, const typename Tag::type& >();
-}
-template < class Tag >
-inline sgb_vertex_util_map< Tag, typename Tag::type& > get_property_map(
- Tag, sgb_graph_ptr& g, vertex_property_tag)
-{
- return sgb_vertex_util_map< Tag, typename Tag::type& >();
-}
-
-template < class Tag >
-inline sgb_edge_util_map< Tag, const typename Tag::type& > get_property_map(
- Tag, const sgb_graph_ptr& g, edge_property_tag)
-{
- return sgb_edge_util_map< Tag, const typename Tag::type& >();
-}
-template < class Tag >
-inline sgb_edge_util_map< Tag, typename Tag::type& > get_property_map(
- Tag, sgb_graph_ptr& g, edge_property_tag)
-{
- return sgb_edge_util_map< Tag, typename Tag::type& >();
-}
-
-// Edge Length Access
-template < class Ref >
-class sgb_edge_length_map
-: public boost::put_get_helper< Ref, sgb_edge_length_map< Ref > >
-{
-public:
- typedef boost::lvalue_property_map_tag category;
- typedef long value_type;
- typedef sgb_edge key_type;
- typedef Ref reference;
- reference operator[](const sgb_edge& e) const { return e._arc->len; }
-};
-
-inline sgb_edge_length_map< const long& > get(
- edge_length_t, const sgb_graph_ptr&)
-{
- return sgb_edge_length_map< const long& >();
-}
-inline sgb_edge_length_map< const long& > get(
- edge_length_t, const sgb_const_graph_ptr&)
-{
- return sgb_edge_length_map< const long& >();
-}
-inline sgb_edge_length_map< long& > get(edge_length_t, sgb_graph_ptr&)
-{
- return sgb_edge_length_map< long& >();
-}
-inline long get(edge_length_t, const sgb_graph_ptr&, const sgb_edge& key)
-{
- return key._arc->len;
-}
-inline long get(edge_length_t, const sgb_const_graph_ptr&, const sgb_edge& key)
-{
- return key._arc->len;
-}
-inline void put(edge_length_t, sgb_graph_ptr&, const sgb_edge& key, long value)
-{
- key._arc->len = value;
-}
-
-// Property Map Traits Classes
-template <> struct property_map< sgb_graph_ptr, edge_length_t >
-{
- typedef sgb_edge_length_map< long& > type;
- typedef sgb_edge_length_map< const long& > const_type;
-};
-template <> struct property_map< sgb_graph_ptr, vertex_index_t >
-{
- typedef sgb_vertex_id_map type;
- typedef sgb_vertex_id_map const_type;
-};
-template <> struct property_map< sgb_graph_ptr, vertex_name_t >
-{
- typedef sgb_vertex_name_map type;
- typedef sgb_vertex_name_map const_type;
-};
-
-template <> struct property_map< sgb_const_graph_ptr, edge_length_t >
-{
- typedef sgb_edge_length_map< const long& > const_type;
-};
-template <> struct property_map< sgb_const_graph_ptr, vertex_index_t >
-{
- typedef sgb_vertex_id_map const_type;
-};
-template <> struct property_map< sgb_const_graph_ptr, vertex_name_t >
-{
- typedef sgb_vertex_name_map const_type;
-};
-
-namespace detail
-{
- template < class Kind, class PropertyTag > struct sgb_choose_property_map
- {
- };
- template < class PropertyTag >
- struct sgb_choose_property_map< vertex_property_tag, PropertyTag >
- {
- typedef typename PropertyTag::type value_type;
- typedef sgb_vertex_util_map< PropertyTag, value_type& > type;
- typedef sgb_vertex_util_map< PropertyTag, const value_type& >
- const_type;
- };
- template < class PropertyTag >
- struct sgb_choose_property_map< edge_property_tag, PropertyTag >
- {
- typedef typename PropertyTag::type value_type;
- typedef sgb_edge_util_map< PropertyTag, value_type& > type;
- typedef sgb_edge_util_map< PropertyTag, const value_type& > const_type;
- };
-} // namespace detail
-template < class PropertyTag > struct property_map< sgb_graph_ptr, PropertyTag >
-{
- typedef typename property_kind< PropertyTag >::type Kind;
- typedef detail::sgb_choose_property_map< Kind, PropertyTag > Choice;
- typedef typename Choice::type type;
- typedef typename Choice::const_type const_type;
-};
-template < class PropertyTag >
-struct property_map< sgb_const_graph_ptr, PropertyTag >
-{
- typedef typename property_kind< PropertyTag >::type Kind;
- typedef detail::sgb_choose_property_map< Kind, PropertyTag > Choice;
- typedef typename Choice::const_type const_type;
-};
-
-#define SGB_UTIL_ACCESSOR(KIND, X) \
- template < class T > \
- inline sgb_##KIND##_util_map< X##_property< T >, T& > get( \
- X##_property< T >, sgb_graph_ptr&) \
- { \
- return sgb_##KIND##_util_map< X##_property< T >, T& >(); \
- } \
- template < class T > \
- inline sgb_##KIND##_util_map< X##_property< T >, const T& > get( \
- X##_property< T >, const sgb_graph_ptr&) \
- { \
- return sgb_##KIND##_util_map< X##_property< T >, const T& >(); \
- } \
- template < class T > \
- inline sgb_##KIND##_util_map< X##_property< T >, const T& > get( \
- X##_property< T >, const sgb_const_graph_ptr&) \
- { \
- return sgb_##KIND##_util_map< X##_property< T >, const T& >(); \
- } \
- template < class T, class Key > \
- inline typename sgb_##KIND##_util_map< X##_property< T >, \
- const T& >::value_type \
- get(X##_property< T >, const sgb_graph_ptr&, const Key& key) \
- { \
- return sgb_##KIND##_util_map< X##_property< T >, const T& >()[key]; \
- } \
- template < class T, class Key > \
- inline typename sgb_##KIND##_util_map< X##_property< T >, \
- const T& >::value_type \
- get(X##_property< T >, const sgb_const_graph_ptr&, const Key& key) \
- { \
- return sgb_##KIND##_util_map< X##_property< T >, const T& >()[key]; \
- } \
- template < class T, class Key, class Value > \
- inline void put( \
- X##_property< T >, sgb_graph_ptr&, const Key& key, const Value& value) \
- { \
- sgb_##KIND##_util_map< X##_property< T >, T& >()[key] = value; \
- }
-
-SGB_UTIL_ACCESSOR(vertex, u)
-SGB_UTIL_ACCESSOR(vertex, v)
-SGB_UTIL_ACCESSOR(vertex, w)
-SGB_UTIL_ACCESSOR(vertex, x)
-SGB_UTIL_ACCESSOR(vertex, y)
-SGB_UTIL_ACCESSOR(vertex, z)
-
-SGB_UTIL_ACCESSOR(edge, a)
-SGB_UTIL_ACCESSOR(edge, b)
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_SGB_GRAPH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/stoer_wagner_min_cut.hpp b/contrib/restricted/boost/graph/include/boost/graph/stoer_wagner_min_cut.hpp
deleted file mode 100644
index 33ef6e9693..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/stoer_wagner_min_cut.hpp
+++ /dev/null
@@ -1,383 +0,0 @@
-// Copyright Daniel Trebbien 2010.
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or the copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_STOER_WAGNER_MIN_CUT_HPP
-#define BOOST_GRAPH_STOER_WAGNER_MIN_CUT_HPP 1
-
-#include <boost/assert.hpp>
-#include <set>
-#include <vector>
-#include <boost/concept_check.hpp>
-#include <boost/concept/assert.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/buffer_concepts.hpp>
-#include <boost/graph/exception.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/maximum_adjacency_search.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/one_bit_color_map.hpp>
-#include <boost/graph/detail/d_ary_heap.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/utility/result_of.hpp>
-#include <boost/graph/iteration_macros.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
- /**
- * \brief Performs a phase of the Stoer-Wagner min-cut algorithm
- *
- * Performs a phase of the Stoer-Wagner min-cut algorithm.
- *
- * As described by Stoer & Wagner (1997), a phase is simply a maximum
- * adjacency search (also called a maximum cardinality search), which
- * results in the selection of two vertices \em s and \em t, and, as a side
- * product, a minimum <em>s</em>-<em>t</em> cut of the input graph. Here,
- * the input graph is basically \p g, but some vertices are virtually
- * assigned to others as a way of viewing \p g as a graph with some sets of
- * vertices merged together.
- *
- * This implementation is a translation of pseudocode by Professor Uri
- * Zwick, School of Computer Science, Tel Aviv University.
- *
- * \pre \p g is a connected, undirected graph
- * \param[in] g the input graph
- * \param[in] assignments a read/write property map from each vertex to the
- * vertex that it is assigned to
- * \param[in] assignedVertices a list of vertices that are assigned to
- * others
- * \param[in] weights a readable property map from each edge to its
- * weight (a non-negative value)
- * \param[out] pq a keyed, updatable max-priority queue
- * \returns a tuple (\em s, \em t, \em w) of the "<em>s</em>" and
- * "<em>t</em>" of the minimum <em>s</em>-<em>t</em> cut and the
- * cut weight \em w of the minimum <em>s</em>-<em>t</em> cut.
- * \see http://www.cs.tau.ac.il/~zwick/grad-algo-08/gmc.pdf
- *
- * \author Daniel Trebbien
- * \date 2010-09-11
- */
- template < class UndirectedGraph, class VertexAssignmentMap,
- class WeightMap, class KeyedUpdatablePriorityQueue >
- boost::tuple<
- typename boost::graph_traits< UndirectedGraph >::vertex_descriptor,
- typename boost::graph_traits< UndirectedGraph >::vertex_descriptor,
- typename boost::property_traits< WeightMap >::value_type >
- stoer_wagner_phase(const UndirectedGraph& g,
- VertexAssignmentMap assignments,
- const std::set< typename boost::graph_traits<
- UndirectedGraph >::vertex_descriptor >& assignedVertices,
- WeightMap weights, KeyedUpdatablePriorityQueue& pq)
- {
- typedef
- typename boost::graph_traits< UndirectedGraph >::vertex_descriptor
- vertex_descriptor;
- typedef typename boost::property_traits< WeightMap >::value_type
- weight_type;
-
- BOOST_ASSERT(pq.empty());
- typename KeyedUpdatablePriorityQueue::key_map keys = pq.keys();
-
- BGL_FORALL_VERTICES_T(v, g, UndirectedGraph)
- {
- if (v == get(assignments, v))
- { // foreach u \in V do
- put(keys, v, weight_type(0));
-
- pq.push(v);
- }
- }
-
- BOOST_ASSERT(pq.size() >= 2);
-
- vertex_descriptor s
- = boost::graph_traits< UndirectedGraph >::null_vertex();
- vertex_descriptor t
- = boost::graph_traits< UndirectedGraph >::null_vertex();
- weight_type w;
- while (!pq.empty())
- { // while PQ \neq {} do
- const vertex_descriptor u = pq.top(); // u = extractmax(PQ)
- w = get(keys, u);
- pq.pop();
-
- s = t;
- t = u;
-
- BGL_FORALL_OUTEDGES_T(u, e, g, UndirectedGraph)
- { // foreach (u, v) \in E do
- const vertex_descriptor v = get(assignments, target(e, g));
-
- if (pq.contains(v))
- { // if v \in PQ then
- put(keys, v,
- get(keys, v)
- + get(weights,
- e)); // increasekey(PQ, v, wA(v) + w(u, v))
- pq.update(v);
- }
- }
-
- typename std::set< vertex_descriptor >::const_iterator
- assignedVertexIt,
- assignedVertexEnd = assignedVertices.end();
- for (assignedVertexIt = assignedVertices.begin();
- assignedVertexIt != assignedVertexEnd; ++assignedVertexIt)
- {
- const vertex_descriptor uPrime = *assignedVertexIt;
-
- if (get(assignments, uPrime) == u)
- {
- BGL_FORALL_OUTEDGES_T(uPrime, e, g, UndirectedGraph)
- { // foreach (u, v) \in E do
- const vertex_descriptor v
- = get(assignments, target(e, g));
-
- if (pq.contains(v))
- { // if v \in PQ then
- put(keys, v,
- get(keys, v)
- + get(weights, e)); // increasekey(PQ, v,
- // wA(v) + w(u, v))
- pq.update(v);
- }
- }
- }
- }
- }
-
- return boost::make_tuple(s, t, w);
- }
-
- /**
- * \brief Computes a min-cut of the input graph
- *
- * Computes a min-cut of the input graph using the Stoer-Wagner algorithm.
- *
- * \pre \p g is a connected, undirected graph
- * \pre <code>pq.empty()</code>
- * \param[in] g the input graph
- * \param[in] weights a readable property map from each edge to its weight
- * (a non-negative value) \param[out] parities a writable property map from
- * each vertex to a bool type object for distinguishing the two vertex sets
- * of the min-cut \param[out] assignments a read/write property map from
- * each vertex to a \c vertex_descriptor object. This map serves as work
- * space, and no particular meaning should be derived from property values
- * after completion of the algorithm.
- * \param[out] pq a keyed, updatable max-priority queue
- * \returns the cut weight of the min-cut
- * \see
- * http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.114.6687&rep=rep1&type=pdf
- * \see
- * http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.31.614&rep=rep1&type=pdf
- *
- * \author Daniel Trebbien
- * \date 2010-09-11
- */
- template < class UndirectedGraph, class WeightMap, class ParityMap,
- class VertexAssignmentMap, class KeyedUpdatablePriorityQueue,
- class IndexMap >
- typename boost::property_traits< WeightMap >::value_type
- stoer_wagner_min_cut(const UndirectedGraph& g, WeightMap weights,
- ParityMap parities, VertexAssignmentMap assignments,
- KeyedUpdatablePriorityQueue& pq, IndexMap index_map)
- {
- typedef
- typename boost::graph_traits< UndirectedGraph >::vertex_descriptor
- vertex_descriptor;
- typedef typename boost::property_traits< WeightMap >::value_type
- weight_type;
- typedef
- typename boost::graph_traits< UndirectedGraph >::vertices_size_type
- vertices_size_type;
- typedef typename boost::property_traits< ParityMap >::value_type
- parity_type;
-
- vertices_size_type n = num_vertices(g);
-
- std::set< vertex_descriptor > assignedVertices;
-
- // initialize `assignments` (all vertices are initially assigned to
- // themselves)
- BGL_FORALL_VERTICES_T(v, g, UndirectedGraph) { put(assignments, v, v); }
-
- vertex_descriptor s, t;
- weight_type bestW;
-
- boost::tie(s, t, bestW) = boost::detail::stoer_wagner_phase(
- g, assignments, assignedVertices, weights, pq);
- BOOST_ASSERT(s != t);
- BGL_FORALL_VERTICES_T(v, g, UndirectedGraph)
- {
- put(parities, v, parity_type(v == t ? 1 : 0));
- }
- put(assignments, t, s);
- assignedVertices.insert(t);
- --n;
-
- for (; n >= 2; --n)
- {
- weight_type w;
- boost::tie(s, t, w) = boost::detail::stoer_wagner_phase(
- g, assignments, assignedVertices, weights, pq);
- BOOST_ASSERT(s != t);
-
- if (w < bestW)
- {
- BGL_FORALL_VERTICES_T(v, g, UndirectedGraph)
- {
- put(parities, v,
- parity_type(get(assignments, v) == t ? 1 : 0));
-
- if (get(assignments, v)
- == t) // all vertices that were assigned to t are now
- // assigned to s
- put(assignments, v, s);
- }
-
- bestW = w;
- }
- else
- {
- BGL_FORALL_VERTICES_T(v, g, UndirectedGraph)
- {
- if (get(assignments, v)
- == t) // all vertices that were assigned to t are now
- // assigned to s
- put(assignments, v, s);
- }
- }
- put(assignments, t, s);
- assignedVertices.insert(t);
- }
-
- BOOST_ASSERT(pq.empty());
-
- return bestW;
- }
-} // end `namespace detail` within `namespace boost`
-
-template < class UndirectedGraph, class WeightMap, class ParityMap,
- class VertexAssignmentMap, class KeyedUpdatablePriorityQueue,
- class IndexMap >
-typename boost::property_traits< WeightMap >::value_type stoer_wagner_min_cut(
- const UndirectedGraph& g, WeightMap weights, ParityMap parities,
- VertexAssignmentMap assignments, KeyedUpdatablePriorityQueue& pq,
- IndexMap index_map)
-{
- BOOST_CONCEPT_ASSERT((boost::IncidenceGraphConcept< UndirectedGraph >));
- BOOST_CONCEPT_ASSERT((boost::VertexListGraphConcept< UndirectedGraph >));
- typedef typename boost::graph_traits< UndirectedGraph >::vertex_descriptor
- vertex_descriptor;
- typedef typename boost::graph_traits< UndirectedGraph >::vertices_size_type
- vertices_size_type;
- typedef typename boost::graph_traits< UndirectedGraph >::edge_descriptor
- edge_descriptor;
- BOOST_CONCEPT_ASSERT((boost::Convertible<
- typename boost::graph_traits< UndirectedGraph >::directed_category,
- boost::undirected_tag >));
- BOOST_CONCEPT_ASSERT(
- (boost::ReadablePropertyMapConcept< WeightMap, edge_descriptor >));
- // typedef typename boost::property_traits<WeightMap>::value_type
- // weight_type;
- BOOST_CONCEPT_ASSERT(
- (boost::WritablePropertyMapConcept< ParityMap, vertex_descriptor >));
- // typedef typename boost::property_traits<ParityMap>::value_type
- // parity_type;
- BOOST_CONCEPT_ASSERT(
- (boost::ReadWritePropertyMapConcept< VertexAssignmentMap,
- vertex_descriptor >));
- BOOST_CONCEPT_ASSERT((boost::Convertible< vertex_descriptor,
- typename boost::property_traits< VertexAssignmentMap >::value_type >));
- BOOST_CONCEPT_ASSERT(
- (boost::KeyedUpdatableQueueConcept< KeyedUpdatablePriorityQueue >));
-
- vertices_size_type n = num_vertices(g);
- if (n < 2)
- throw boost::bad_graph(
- "the input graph must have at least two vertices.");
- else if (!pq.empty())
- throw std::invalid_argument(
- "the max-priority queue must be empty initially.");
-
- return detail::stoer_wagner_min_cut(
- g, weights, parities, assignments, pq, index_map);
-}
-
-namespace graph
-{
- namespace detail
- {
- template < class UndirectedGraph, class WeightMap >
- struct stoer_wagner_min_cut_impl
- {
- typedef typename boost::property_traits< WeightMap >::value_type
- result_type;
- template < typename ArgPack >
- result_type operator()(const UndirectedGraph& g, WeightMap weights,
- const ArgPack& arg_pack) const
- {
- using namespace boost::graph::keywords;
- typedef typename boost::graph_traits<
- UndirectedGraph >::vertex_descriptor vertex_descriptor;
- typedef typename boost::property_traits< WeightMap >::value_type
- weight_type;
-
- typedef boost::detail::make_priority_queue_from_arg_pack_gen<
- boost::graph::keywords::tag::max_priority_queue,
- weight_type, vertex_descriptor,
- std::greater< weight_type > >
- gen_type;
-
- gen_type gen(
- choose_param(get_param(arg_pack, boost::distance_zero_t()),
- weight_type(0)));
-
- typename boost::result_of< gen_type(
- const UndirectedGraph&, const ArgPack&) >::type pq
- = gen(g, arg_pack);
-
- boost::dummy_property_map dummy_prop;
- return boost::stoer_wagner_min_cut(g, weights,
- arg_pack[_parity_map | dummy_prop],
- boost::detail::make_property_map_from_arg_pack_gen<
- tag::vertex_assignment_map, vertex_descriptor >(
- vertex_descriptor())(g, arg_pack),
- pq,
- boost::detail::override_const_property(
- arg_pack, _vertex_index_map, g, vertex_index));
- }
- };
- }
- BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(stoer_wagner_min_cut, 2, 4)
-}
-
-// Named parameter interface
-BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(stoer_wagner_min_cut, 2)
-namespace graph
-{
- // version without IndexMap kept for backwards compatibility
- // (but requires vertex_index_t to be defined in the graph)
- // Place after the macro to avoid compilation errors
- template < class UndirectedGraph, class WeightMap, class ParityMap,
- class VertexAssignmentMap, class KeyedUpdatablePriorityQueue >
- typename boost::property_traits< WeightMap >::value_type
- stoer_wagner_min_cut(const UndirectedGraph& g, WeightMap weights,
- ParityMap parities, VertexAssignmentMap assignments,
- KeyedUpdatablePriorityQueue& pq)
- {
-
- return stoer_wagner_min_cut(
- g, weights, parities, assignments, pq, get(vertex_index, g));
- }
-} // end `namespace graph`
-} // end `namespace boost`
-
-#include <boost/graph/iteration_macros_undef.hpp>
-
-#endif // !BOOST_GRAPH_STOER_WAGNER_MIN_CUT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/successive_shortest_path_nonnegative_weights.hpp b/contrib/restricted/boost/graph/include/boost/graph/successive_shortest_path_nonnegative_weights.hpp
deleted file mode 100644
index 8e1f5ad94a..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/successive_shortest_path_nonnegative_weights.hpp
+++ /dev/null
@@ -1,255 +0,0 @@
-//=======================================================================
-// Copyright 2013 University of Warsaw.
-// Authors: Piotr Wygocki
-//
-// 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)
-//=======================================================================
-//
-// This algorithm is described in "Network Flows: Theory, Algorithms, and
-// Applications"
-// by Ahuja, Magnanti, Orlin.
-
-#ifndef BOOST_GRAPH_SUCCESSIVE_SHORTEST_PATH_HPP
-#define BOOST_GRAPH_SUCCESSIVE_SHORTEST_PATH_HPP
-
-#include <numeric>
-
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/pending/indirect_cmp.hpp>
-#include <boost/graph/dijkstra_shortest_paths.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/graph/iteration_macros.hpp>
-#include <boost/graph/detail/augment.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < class Graph, class Weight, class Distance, class Reversed >
- class MapReducedWeight
- : public put_get_helper< typename property_traits< Weight >::value_type,
- MapReducedWeight< Graph, Weight, Distance, Reversed > >
- {
- typedef graph_traits< Graph > gtraits;
-
- public:
- typedef boost::readable_property_map_tag category;
- typedef typename property_traits< Weight >::value_type value_type;
- typedef value_type reference;
- typedef typename gtraits::edge_descriptor key_type;
- MapReducedWeight(const Graph& g, Weight w, Distance d, Reversed r)
- : g_(g), weight_(w), distance_(d), rev_(r)
- {
- }
-
- reference operator[](key_type v) const
- {
- return get(distance_, source(v, g_)) - get(distance_, target(v, g_))
- + get(weight_, v);
- }
-
- private:
- const Graph& g_;
- Weight weight_;
- Distance distance_;
- Reversed rev_;
- };
-
- template < class Graph, class Weight, class Distance, class Reversed >
- MapReducedWeight< Graph, Weight, Distance, Reversed > make_mapReducedWeight(
- const Graph& g, Weight w, Distance d, Reversed r)
- {
- return MapReducedWeight< Graph, Weight, Distance, Reversed >(
- g, w, d, r);
- }
-
-} // detail
-
-template < class Graph, class Capacity, class ResidualCapacity, class Reversed,
- class Pred, class Weight, class Distance, class Distance2,
- class VertexIndex >
-void successive_shortest_path_nonnegative_weights(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, Pred pred, Distance distance, Distance2 distance_prev)
-{
- filtered_graph< const Graph, is_residual_edge< ResidualCapacity > > gres
- = detail::residual_graph(g, residual_capacity);
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor;
-
- BGL_FORALL_EDGES_T(e, g, Graph)
- {
- put(residual_capacity, e, get(capacity, e));
- }
-
- BGL_FORALL_VERTICES_T(v, g, Graph) { put(distance_prev, v, 0); }
-
- while (true)
- {
- BGL_FORALL_VERTICES_T(v, g, Graph) { put(pred, v, edge_descriptor()); }
- dijkstra_shortest_paths(gres, s,
- weight_map(
- detail::make_mapReducedWeight(gres, weight, distance_prev, rev))
- .distance_map(distance)
- .vertex_index_map(index)
- .visitor(make_dijkstra_visitor(
- record_edge_predecessors(pred, on_edge_relaxed()))));
-
- if (get(pred, t) == edge_descriptor())
- {
- break;
- }
-
- BGL_FORALL_VERTICES_T(v, g, Graph)
- {
- put(distance_prev, v, get(distance_prev, v) + get(distance, v));
- }
-
- detail::augment(g, s, t, pred, residual_capacity, rev);
- }
-}
-
-// in this namespace argument dispatching tak place
-namespace detail
-{
-
- template < class Graph, class Capacity, class ResidualCapacity,
- class Weight, class Reversed, class Pred, class Distance,
- class Distance2, class VertexIndex >
- void successive_shortest_path_nonnegative_weights_dispatch3(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, Pred pred, Distance dist, Distance2 dist_pred)
- {
- successive_shortest_path_nonnegative_weights(g, s, t, capacity,
- residual_capacity, weight, rev, index, pred, dist, dist_pred);
- }
-
- // setting default distance map
- template < class Graph, class Capacity, class ResidualCapacity,
- class Weight, class Reversed, class Pred, class Distance,
- class VertexIndex >
- void successive_shortest_path_nonnegative_weights_dispatch3(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, Pred pred, Distance dist, param_not_found)
- {
- typedef typename property_traits< Weight >::value_type D;
-
- std::vector< D > d_map(num_vertices(g));
-
- successive_shortest_path_nonnegative_weights(g, s, t, capacity,
- residual_capacity, weight, rev, index, pred, dist,
- make_iterator_property_map(d_map.begin(), index));
- }
-
- template < class Graph, class P, class T, class R, class Capacity,
- class ResidualCapacity, class Weight, class Reversed, class Pred,
- class Distance, class VertexIndex >
- void successive_shortest_path_nonnegative_weights_dispatch2(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, Pred pred, Distance dist,
- const bgl_named_params< P, T, R >& params)
- {
- successive_shortest_path_nonnegative_weights_dispatch3(g, s, t,
- capacity, residual_capacity, weight, rev, index, pred, dist,
- get_param(params, vertex_distance2));
- }
-
- // setting default distance map
- template < class Graph, class P, class T, class R, class Capacity,
- class ResidualCapacity, class Weight, class Reversed, class Pred,
- class VertexIndex >
- void successive_shortest_path_nonnegative_weights_dispatch2(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, Pred pred, param_not_found,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename property_traits< Weight >::value_type D;
-
- std::vector< D > d_map(num_vertices(g));
-
- successive_shortest_path_nonnegative_weights_dispatch3(g, s, t,
- capacity, residual_capacity, weight, rev, index, pred,
- make_iterator_property_map(d_map.begin(), index),
- get_param(params, vertex_distance2));
- }
-
- template < class Graph, class P, class T, class R, class Capacity,
- class ResidualCapacity, class Weight, class Reversed, class Pred,
- class VertexIndex >
- void successive_shortest_path_nonnegative_weights_dispatch1(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, Pred pred, const bgl_named_params< P, T, R >& params)
- {
- successive_shortest_path_nonnegative_weights_dispatch2(g, s, t,
- capacity, residual_capacity, weight, rev, index, pred,
- get_param(params, vertex_distance), params);
- }
-
- // setting default predecessors map
- template < class Graph, class P, class T, class R, class Capacity,
- class ResidualCapacity, class Weight, class Reversed,
- class VertexIndex >
- void successive_shortest_path_nonnegative_weights_dispatch1(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t, Capacity capacity,
- ResidualCapacity residual_capacity, Weight weight, Reversed rev,
- VertexIndex index, param_not_found,
- const bgl_named_params< P, T, R >& params)
- {
- typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor;
- std::vector< edge_descriptor > pred_vec(num_vertices(g));
-
- successive_shortest_path_nonnegative_weights_dispatch2(g, s, t,
- capacity, residual_capacity, weight, rev, index,
- make_iterator_property_map(pred_vec.begin(), index),
- get_param(params, vertex_distance), params);
- }
-
-} // detail
-
-template < class Graph, class P, class T, class R >
-void successive_shortest_path_nonnegative_weights(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- const bgl_named_params< P, T, R >& params)
-{
-
- return detail::successive_shortest_path_nonnegative_weights_dispatch1(g, s,
- t,
- choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
- choose_pmap(get_param(params, edge_residual_capacity), g,
- edge_residual_capacity),
- choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
- choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
- choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
- get_param(params, vertex_predecessor), params);
-}
-
-template < class Graph >
-void successive_shortest_path_nonnegative_weights(Graph& g,
- typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t)
-{
- bgl_named_params< int, buffer_param_t > params(0);
- successive_shortest_path_nonnegative_weights(g, s, t, params);
-}
-
-} // boost
-#endif /* BOOST_GRAPH_SUCCESSIVE_SHORTEST_PATH_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/tiernan_all_cycles.hpp b/contrib/restricted/boost/graph/include/boost/graph/tiernan_all_cycles.hpp
deleted file mode 100644
index c24c87553f..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/tiernan_all_cycles.hpp
+++ /dev/null
@@ -1,372 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_CYCLE_HPP
-#define BOOST_GRAPH_CYCLE_HPP
-
-#include <vector>
-
-#include <boost/config.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/concept/assert.hpp>
-
-#include <boost/concept/detail/concept_def.hpp>
-namespace boost
-{
-namespace concepts
-{
- BOOST_concept(CycleVisitor, (Visitor)(Path)(Graph))
- {
- BOOST_CONCEPT_USAGE(CycleVisitor) { vis.cycle(p, g); }
-
- private:
- Visitor vis;
- Graph g;
- Path p;
- };
-} /* namespace concepts */
-using concepts::CycleVisitorConcept;
-} /* namespace boost */
-#include <boost/concept/detail/concept_undef.hpp>
-
-namespace boost
-{
-
-// The implementation of this algorithm is a reproduction of the Teirnan
-// approach for directed graphs: bibtex follows
-//
-// @article{362819,
-// author = {James C. Tiernan},
-// title = {An efficient search algorithm to find the elementary
-// circuits of a graph}, journal = {Commun. ACM}, volume = {13}, number
-// = {12}, year = {1970}, issn = {0001-0782}, pages = {722--726}, doi =
-// {http://doi.acm.org/10.1145/362814.362819},
-// publisher = {ACM Press},
-// address = {New York, NY, USA},
-// }
-//
-// It should be pointed out that the author does not provide a complete analysis
-// for either time or space. This is in part, due to the fact that it's a fairly
-// input sensitive problem related to the density and construction of the graph,
-// not just its size.
-//
-// I've also taken some liberties with the interpretation of the algorithm -
-// I've basically modernized it to use real data structures (no more arrays and
-// matrices). Oh... and there's explicit control structures - not just gotos.
-//
-// The problem is definitely NP-complete, an unbounded implementation of this
-// will probably run for quite a while on a large graph. The conclusions
-// of this paper also reference a Paton algorithm for undirected graphs as being
-// much more efficient (apparently based on spanning trees). Although not
-// implemented, it can be found here:
-//
-// @article{363232,
-// author = {Keith Paton},
-// title = {An algorithm for finding a fundamental set of cycles of a
-// graph}, journal = {Commun. ACM}, volume = {12}, number = {9}, year =
-// {1969}, issn = {0001-0782}, pages = {514--518}, doi =
-// {http://doi.acm.org/10.1145/363219.363232},
-// publisher = {ACM Press},
-// address = {New York, NY, USA},
-// }
-
-/**
- * The default cycle visitor provides an empty visit function for cycle
- * visitors.
- */
-struct cycle_visitor
-{
- template < typename Path, typename Graph >
- inline void cycle(const Path& p, const Graph& g)
- {
- }
-};
-
-/**
- * The min_max_cycle_visitor simultaneously records the minimum and maximum
- * cycles in a graph.
- */
-struct min_max_cycle_visitor
-{
- min_max_cycle_visitor(std::size_t& min_, std::size_t& max_)
- : minimum(min_), maximum(max_)
- {
- }
-
- template < typename Path, typename Graph >
- inline void cycle(const Path& p, const Graph& g)
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- std::size_t len = p.size();
- minimum = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum, len);
- maximum = max BOOST_PREVENT_MACRO_SUBSTITUTION(maximum, len);
- }
- std::size_t& minimum;
- std::size_t& maximum;
-};
-
-inline min_max_cycle_visitor find_min_max_cycle(
- std::size_t& min_, std::size_t& max_)
-{
- return min_max_cycle_visitor(min_, max_);
-}
-
-namespace detail
-{
- template < typename Graph, typename Path >
- inline bool is_vertex_in_path(const Graph&,
- typename graph_traits< Graph >::vertex_descriptor v, const Path& p)
- {
- return (std::find(p.begin(), p.end(), v) != p.end());
- }
-
- template < typename Graph, typename ClosedMatrix >
- inline bool is_path_closed(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor u,
- typename graph_traits< Graph >::vertex_descriptor v,
- const ClosedMatrix& closed)
- {
- // the path from u to v is closed if v can be found in the list
- // of closed vertices associated with u.
- typedef typename ClosedMatrix::const_reference Row;
- Row r = closed[get(vertex_index, g, u)];
- if (find(r.begin(), r.end(), v) != r.end())
- {
- return true;
- }
- return false;
- }
-
- template < typename Graph, typename Path, typename ClosedMatrix >
- inline bool can_extend_path(const Graph& g,
- typename graph_traits< Graph >::edge_descriptor e, const Path& p,
- const ClosedMatrix& m)
- {
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((VertexIndexGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- // get the vertices in question
- Vertex u = source(e, g), v = target(e, g);
-
- // conditions for allowing a traversal along this edge are:
- // 1. the index of v must be greater than that at which the
- // path is rooted (p.front()).
- // 2. the vertex v cannot already be in the path
- // 3. the vertex v cannot be closed to the vertex u
-
- bool indices
- = get(vertex_index, g, p.front()) < get(vertex_index, g, v);
- bool path = !is_vertex_in_path(g, v, p);
- bool closed = !is_path_closed(g, u, v, m);
- return indices && path && closed;
- }
-
- template < typename Graph, typename Path >
- inline bool can_wrap_path(const Graph& g, const Path& p)
- {
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::out_edge_iterator OutIterator;
-
- // iterate over the out-edges of the back, looking for the
- // front of the path. also, we can't travel along the same
- // edge that we did on the way here, but we don't quite have the
- // stringent requirements that we do in can_extend_path().
- Vertex u = p.back(), v = p.front();
- OutIterator i, end;
- for (boost::tie(i, end) = out_edges(u, g); i != end; ++i)
- {
- if ((target(*i, g) == v))
- {
- return true;
- }
- }
- return false;
- }
-
- template < typename Graph, typename Path, typename ClosedMatrix >
- inline typename graph_traits< Graph >::vertex_descriptor extend_path(
- const Graph& g, Path& p, ClosedMatrix& closed)
- {
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::out_edge_iterator OutIterator;
-
- // get the current vertex
- Vertex u = p.back();
- Vertex ret = graph_traits< Graph >::null_vertex();
-
- // AdjacencyIterator i, end;
- OutIterator i, end;
- for (boost::tie(i, end) = out_edges(u, g); i != end; ++i)
- {
- Vertex v = target(*i, g);
-
- // if we can actually extend along this edge,
- // then that's what we want to do
- if (can_extend_path(g, *i, p, closed))
- {
- p.push_back(v); // add the vertex to the path
- ret = v;
- break;
- }
- }
- return ret;
- }
-
- template < typename Graph, typename Path, typename ClosedMatrix >
- inline bool exhaust_paths(const Graph& g, Path& p, ClosedMatrix& closed)
- {
- BOOST_CONCEPT_ASSERT((GraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
-
- // if there's more than one vertex in the path, this closes
- // of some possible routes and returns true. otherwise, if there's
- // only one vertex left, the vertex has been used up
- if (p.size() > 1)
- {
- // get the last and second to last vertices, popping the last
- // vertex off the path
- Vertex last, prev;
- last = p.back();
- p.pop_back();
- prev = p.back();
-
- // reset the closure for the last vertex of the path and
- // indicate that the last vertex in p is now closed to
- // the next-to-last vertex in p
- closed[get(vertex_index, g, last)].clear();
- closed[get(vertex_index, g, prev)].push_back(last);
- return true;
- }
- else
- {
- return false;
- }
- }
-
- template < typename Graph, typename Visitor >
- inline void all_cycles_from_vertex(const Graph& g,
- typename graph_traits< Graph >::vertex_descriptor v, Visitor vis,
- std::size_t minlen, std::size_t maxlen)
- {
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef std::vector< Vertex > Path;
- BOOST_CONCEPT_ASSERT((CycleVisitorConcept< Visitor, Path, Graph >));
- typedef std::vector< Vertex > VertexList;
- typedef std::vector< VertexList > ClosedMatrix;
-
- Path p;
- ClosedMatrix closed(num_vertices(g), VertexList());
- Vertex null = graph_traits< Graph >::null_vertex();
-
- // each path investigation starts at the ith vertex
- p.push_back(v);
-
- while (1)
- {
- // extend the path until we've reached the end or the
- // maxlen-sized cycle
- Vertex j = null;
- while (((j = detail::extend_path(g, p, closed)) != null)
- && (p.size() < maxlen))
- ; // empty loop
-
- // if we're done extending the path and there's an edge
- // connecting the back to the front, then we should have
- // a cycle.
- if (detail::can_wrap_path(g, p) && p.size() >= minlen)
- {
- vis.cycle(p, g);
- }
-
- if (!detail::exhaust_paths(g, p, closed))
- {
- break;
- }
- }
- }
-
- // Select the minimum allowable length of a cycle based on the directedness
- // of the graph - 2 for directed, 3 for undirected.
- template < typename D > struct min_cycles
- {
- enum
- {
- value = 2
- };
- };
- template <> struct min_cycles< undirected_tag >
- {
- enum
- {
- value = 3
- };
- };
-} /* namespace detail */
-
-template < typename Graph, typename Visitor >
-inline void tiernan_all_cycles(
- const Graph& g, Visitor vis, std::size_t minlen, std::size_t maxlen)
-{
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
-
- VertexIterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- {
- detail::all_cycles_from_vertex(g, *i, vis, minlen, maxlen);
- }
-}
-
-template < typename Graph, typename Visitor >
-inline void tiernan_all_cycles(const Graph& g, Visitor vis, std::size_t maxlen)
-{
- typedef typename graph_traits< Graph >::directed_category Dir;
- tiernan_all_cycles(g, vis, detail::min_cycles< Dir >::value, maxlen);
-}
-
-template < typename Graph, typename Visitor >
-inline void tiernan_all_cycles(const Graph& g, Visitor vis)
-{
- typedef typename graph_traits< Graph >::directed_category Dir;
- tiernan_all_cycles(g, vis, detail::min_cycles< Dir >::value,
- (std::numeric_limits< std::size_t >::max)());
-}
-
-template < typename Graph >
-inline std::pair< std::size_t, std::size_t > tiernan_girth_and_circumference(
- const Graph& g)
-{
- std::size_t min_ = (std::numeric_limits< std::size_t >::max)(), max_ = 0;
- tiernan_all_cycles(g, find_min_max_cycle(min_, max_));
-
- // if this is the case, the graph is acyclic...
- if (max_ == 0)
- max_ = min_;
-
- return std::make_pair(min_, max_);
-}
-
-template < typename Graph > inline std::size_t tiernan_girth(const Graph& g)
-{
- return tiernan_girth_and_circumference(g).first;
-}
-
-template < typename Graph >
-inline std::size_t tiernan_circumference(const Graph& g)
-{
- return tiernan_girth_and_circumference(g).second;
-}
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/topology.hpp b/contrib/restricted/boost/graph/include/boost/graph/topology.hpp
deleted file mode 100644
index 8136ba965e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/topology.hpp
+++ /dev/null
@@ -1,700 +0,0 @@
-// Copyright 2009 The Trustees of Indiana University.
-
-// 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)
-
-// Authors: Jeremiah Willcock
-// Douglas Gregor
-// Andrew Lumsdaine
-#ifndef BOOST_GRAPH_TOPOLOGY_HPP
-#define BOOST_GRAPH_TOPOLOGY_HPP
-
-#include <boost/config/no_tr1/cmath.hpp>
-#include <cmath>
-#include <boost/random/uniform_01.hpp>
-#include <boost/random/linear_congruential.hpp>
-#include <boost/math/constants/constants.hpp> // For root_two
-#include <boost/algorithm/minmax.hpp>
-#include <boost/config.hpp> // For BOOST_STATIC_CONSTANT
-#include <boost/math/special_functions/hypot.hpp>
-
-// Classes and concepts to represent points in a space, with distance and move
-// operations (used for Gurson-Atun layout), plus other things like bounding
-// boxes used for other layout algorithms.
-
-namespace boost
-{
-
-/***********************************************************
- * Topologies *
- ***********************************************************/
-template < std::size_t Dims > class convex_topology
-{
-public: // For VisualAge C++
- struct point
- {
- BOOST_STATIC_CONSTANT(std::size_t, dimensions = Dims);
- point() {}
- double& operator[](std::size_t i) { return values[i]; }
- const double& operator[](std::size_t i) const { return values[i]; }
-
- private:
- double values[Dims];
- };
-
-public: // For VisualAge C++
- struct point_difference
- {
- BOOST_STATIC_CONSTANT(std::size_t, dimensions = Dims);
- point_difference()
- {
- for (std::size_t i = 0; i < Dims; ++i)
- values[i] = 0.;
- }
- double& operator[](std::size_t i) { return values[i]; }
- const double& operator[](std::size_t i) const { return values[i]; }
-
- friend point_difference operator+(
- const point_difference& a, const point_difference& b)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] + b[i];
- return result;
- }
-
- friend point_difference& operator+=(
- point_difference& a, const point_difference& b)
- {
- for (std::size_t i = 0; i < Dims; ++i)
- a[i] += b[i];
- return a;
- }
-
- friend point_difference operator-(const point_difference& a)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = -a[i];
- return result;
- }
-
- friend point_difference operator-(
- const point_difference& a, const point_difference& b)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] - b[i];
- return result;
- }
-
- friend point_difference& operator-=(
- point_difference& a, const point_difference& b)
- {
- for (std::size_t i = 0; i < Dims; ++i)
- a[i] -= b[i];
- return a;
- }
-
- friend point_difference operator*(
- const point_difference& a, const point_difference& b)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] * b[i];
- return result;
- }
-
- friend point_difference operator*(const point_difference& a, double b)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] * b;
- return result;
- }
-
- friend point_difference operator*(double a, const point_difference& b)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a * b[i];
- return result;
- }
-
- friend point_difference operator/(
- const point_difference& a, const point_difference& b)
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = (b[i] == 0.) ? 0. : a[i] / b[i];
- return result;
- }
-
- friend double dot(const point_difference& a, const point_difference& b)
- {
- double result = 0;
- for (std::size_t i = 0; i < Dims; ++i)
- result += a[i] * b[i];
- return result;
- }
-
- private:
- double values[Dims];
- };
-
-public:
- typedef point point_type;
- typedef point_difference point_difference_type;
-
- double distance(point a, point b) const
- {
- double dist = 0.;
- for (std::size_t i = 0; i < Dims; ++i)
- {
- double diff = b[i] - a[i];
- dist = boost::math::hypot(dist, diff);
- }
- // Exact properties of the distance are not important, as long as
- // < on what this returns matches real distances; l_2 is used because
- // Fruchterman-Reingold also uses this code and it relies on l_2.
- return dist;
- }
-
- point move_position_toward(point a, double fraction, point b) const
- {
- point result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] + (b[i] - a[i]) * fraction;
- return result;
- }
-
- point_difference difference(point a, point b) const
- {
- point_difference result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] - b[i];
- return result;
- }
-
- point adjust(point a, point_difference delta) const
- {
- point result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = a[i] + delta[i];
- return result;
- }
-
- point pointwise_min(point a, point b) const
- {
- BOOST_USING_STD_MIN();
- point result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = min BOOST_PREVENT_MACRO_SUBSTITUTION(a[i], b[i]);
- return result;
- }
-
- point pointwise_max(point a, point b) const
- {
- BOOST_USING_STD_MAX();
- point result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = max BOOST_PREVENT_MACRO_SUBSTITUTION(a[i], b[i]);
- return result;
- }
-
- double norm(point_difference delta) const
- {
- double n = 0.;
- for (std::size_t i = 0; i < Dims; ++i)
- n = boost::math::hypot(n, delta[i]);
- return n;
- }
-
- double volume(point_difference delta) const
- {
- double n = 1.;
- for (std::size_t i = 0; i < Dims; ++i)
- n *= delta[i];
- return n;
- }
-};
-
-template < std::size_t Dims, typename RandomNumberGenerator = minstd_rand >
-class hypercube_topology : public convex_topology< Dims >
-{
- typedef uniform_01< RandomNumberGenerator, double > rand_t;
-
-public:
- typedef typename convex_topology< Dims >::point_type point_type;
- typedef typename convex_topology< Dims >::point_difference_type
- point_difference_type;
-
- explicit hypercube_topology(double scaling = 1.0)
- : gen_ptr(new RandomNumberGenerator)
- , rand(new rand_t(*gen_ptr))
- , scaling(scaling)
- {
- }
-
- hypercube_topology(RandomNumberGenerator& gen, double scaling = 1.0)
- : gen_ptr(), rand(new rand_t(gen)), scaling(scaling)
- {
- }
-
- point_type random_point() const
- {
- point_type p;
- for (std::size_t i = 0; i < Dims; ++i)
- p[i] = (*rand)() * scaling;
- return p;
- }
-
- point_type bound(point_type a) const
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- point_type p;
- for (std::size_t i = 0; i < Dims; ++i)
- p[i] = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- scaling, max BOOST_PREVENT_MACRO_SUBSTITUTION(-scaling, a[i]));
- return p;
- }
-
- double distance_from_boundary(point_type a) const
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::abs;
-#endif
- BOOST_STATIC_ASSERT(Dims >= 1);
- double dist = abs(scaling - a[0]);
- for (std::size_t i = 1; i < Dims; ++i)
- dist = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- dist, abs(scaling - a[i]));
- return dist;
- }
-
- point_type center() const
- {
- point_type result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = scaling * .5;
- return result;
- }
-
- point_type origin() const
- {
- point_type result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = 0;
- return result;
- }
-
- point_difference_type extent() const
- {
- point_difference_type result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = scaling;
- return result;
- }
-
-private:
- shared_ptr< RandomNumberGenerator > gen_ptr;
- shared_ptr< rand_t > rand;
- double scaling;
-};
-
-template < typename RandomNumberGenerator = minstd_rand >
-class square_topology : public hypercube_topology< 2, RandomNumberGenerator >
-{
- typedef hypercube_topology< 2, RandomNumberGenerator > inherited;
-
-public:
- explicit square_topology(double scaling = 1.0) : inherited(scaling) {}
-
- square_topology(RandomNumberGenerator& gen, double scaling = 1.0)
- : inherited(gen, scaling)
- {
- }
-};
-
-template < typename RandomNumberGenerator = minstd_rand >
-class rectangle_topology : public convex_topology< 2 >
-{
- typedef uniform_01< RandomNumberGenerator, double > rand_t;
-
-public:
- rectangle_topology(double left, double top, double right, double bottom)
- : gen_ptr(new RandomNumberGenerator)
- , rand(new rand_t(*gen_ptr))
- , left(std::min BOOST_PREVENT_MACRO_SUBSTITUTION(left, right))
- , top(std::min BOOST_PREVENT_MACRO_SUBSTITUTION(top, bottom))
- , right(std::max BOOST_PREVENT_MACRO_SUBSTITUTION(left, right))
- , bottom(std::max BOOST_PREVENT_MACRO_SUBSTITUTION(top, bottom))
- {
- }
-
- rectangle_topology(RandomNumberGenerator& gen, double left, double top,
- double right, double bottom)
- : gen_ptr()
- , rand(new rand_t(gen))
- , left(std::min BOOST_PREVENT_MACRO_SUBSTITUTION(left, right))
- , top(std::min BOOST_PREVENT_MACRO_SUBSTITUTION(top, bottom))
- , right(std::max BOOST_PREVENT_MACRO_SUBSTITUTION(left, right))
- , bottom(std::max BOOST_PREVENT_MACRO_SUBSTITUTION(top, bottom))
- {
- }
-
- typedef typename convex_topology< 2 >::point_type point_type;
- typedef typename convex_topology< 2 >::point_difference_type
- point_difference_type;
-
- point_type random_point() const
- {
- point_type p;
- p[0] = (*rand)() * (right - left) + left;
- p[1] = (*rand)() * (bottom - top) + top;
- return p;
- }
-
- point_type bound(point_type a) const
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- point_type p;
- p[0] = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- right, max BOOST_PREVENT_MACRO_SUBSTITUTION(left, a[0]));
- p[1] = min BOOST_PREVENT_MACRO_SUBSTITUTION(
- bottom, max BOOST_PREVENT_MACRO_SUBSTITUTION(top, a[1]));
- return p;
- }
-
- double distance_from_boundary(point_type a) const
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::abs;
-#endif
- double dist = abs(left - a[0]);
- dist = min BOOST_PREVENT_MACRO_SUBSTITUTION(dist, abs(right - a[0]));
- dist = min BOOST_PREVENT_MACRO_SUBSTITUTION(dist, abs(top - a[1]));
- dist = min BOOST_PREVENT_MACRO_SUBSTITUTION(dist, abs(bottom - a[1]));
- return dist;
- }
-
- point_type center() const
- {
- point_type result;
- result[0] = (left + right) / 2.;
- result[1] = (top + bottom) / 2.;
- return result;
- }
-
- point_type origin() const
- {
- point_type result;
- result[0] = left;
- result[1] = top;
- return result;
- }
-
- point_difference_type extent() const
- {
- point_difference_type result;
- result[0] = right - left;
- result[1] = bottom - top;
- return result;
- }
-
-private:
- shared_ptr< RandomNumberGenerator > gen_ptr;
- shared_ptr< rand_t > rand;
- double left, top, right, bottom;
-};
-
-template < typename RandomNumberGenerator = minstd_rand >
-class cube_topology : public hypercube_topology< 3, RandomNumberGenerator >
-{
- typedef hypercube_topology< 3, RandomNumberGenerator > inherited;
-
-public:
- explicit cube_topology(double scaling = 1.0) : inherited(scaling) {}
-
- cube_topology(RandomNumberGenerator& gen, double scaling = 1.0)
- : inherited(gen, scaling)
- {
- }
-};
-
-template < std::size_t Dims, typename RandomNumberGenerator = minstd_rand >
-class ball_topology : public convex_topology< Dims >
-{
- typedef uniform_01< RandomNumberGenerator, double > rand_t;
-
-public:
- typedef typename convex_topology< Dims >::point_type point_type;
- typedef typename convex_topology< Dims >::point_difference_type
- point_difference_type;
-
- explicit ball_topology(double radius = 1.0)
- : gen_ptr(new RandomNumberGenerator)
- , rand(new rand_t(*gen_ptr))
- , radius(radius)
- {
- }
-
- ball_topology(RandomNumberGenerator& gen, double radius = 1.0)
- : gen_ptr(), rand(new rand_t(gen)), radius(radius)
- {
- }
-
- point_type random_point() const
- {
- point_type p;
- double dist_sum;
- do
- {
- dist_sum = 0.0;
- for (std::size_t i = 0; i < Dims; ++i)
- {
- double x = (*rand)() * 2 * radius - radius;
- p[i] = x;
- dist_sum += x * x;
- }
- } while (dist_sum > radius * radius);
- return p;
- }
-
- point_type bound(point_type a) const
- {
- BOOST_USING_STD_MIN();
- BOOST_USING_STD_MAX();
- double r = 0.;
- for (std::size_t i = 0; i < Dims; ++i)
- r = boost::math::hypot(r, a[i]);
- if (r <= radius)
- return a;
- double scaling_factor = radius / r;
- point_type p;
- for (std::size_t i = 0; i < Dims; ++i)
- p[i] = a[i] * scaling_factor;
- return p;
- }
-
- double distance_from_boundary(point_type a) const
- {
- double r = 0.;
- for (std::size_t i = 0; i < Dims; ++i)
- r = boost::math::hypot(r, a[i]);
- return radius - r;
- }
-
- point_type center() const
- {
- point_type result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = 0;
- return result;
- }
-
- point_type origin() const
- {
- point_type result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = -radius;
- return result;
- }
-
- point_difference_type extent() const
- {
- point_difference_type result;
- for (std::size_t i = 0; i < Dims; ++i)
- result[i] = 2. * radius;
- return result;
- }
-
-private:
- shared_ptr< RandomNumberGenerator > gen_ptr;
- shared_ptr< rand_t > rand;
- double radius;
-};
-
-template < typename RandomNumberGenerator = minstd_rand >
-class circle_topology : public ball_topology< 2, RandomNumberGenerator >
-{
- typedef ball_topology< 2, RandomNumberGenerator > inherited;
-
-public:
- explicit circle_topology(double radius = 1.0) : inherited(radius) {}
-
- circle_topology(RandomNumberGenerator& gen, double radius = 1.0)
- : inherited(gen, radius)
- {
- }
-};
-
-template < typename RandomNumberGenerator = minstd_rand >
-class sphere_topology : public ball_topology< 3, RandomNumberGenerator >
-{
- typedef ball_topology< 3, RandomNumberGenerator > inherited;
-
-public:
- explicit sphere_topology(double radius = 1.0) : inherited(radius) {}
-
- sphere_topology(RandomNumberGenerator& gen, double radius = 1.0)
- : inherited(gen, radius)
- {
- }
-};
-
-template < typename RandomNumberGenerator = minstd_rand > class heart_topology
-{
- // Heart is defined as the union of three shapes:
- // Square w/ corners (+-1000, -1000), (0, 0), (0, -2000)
- // Circle centered at (-500, -500) radius 500*sqrt(2)
- // Circle centered at (500, -500) radius 500*sqrt(2)
- // Bounding box (-1000, -2000) - (1000, 500*(sqrt(2) - 1))
-
- struct point
- {
- point()
- {
- values[0] = 0.0;
- values[1] = 0.0;
- }
- point(double x, double y)
- {
- values[0] = x;
- values[1] = y;
- }
-
- double& operator[](std::size_t i) { return values[i]; }
- double operator[](std::size_t i) const { return values[i]; }
-
- private:
- double values[2];
- };
-
- bool in_heart(point p) const
- {
-#ifndef BOOST_NO_STDC_NAMESPACE
- using std::abs;
-#endif
-
- if (p[1] < abs(p[0]) - 2000)
- return false; // Bottom
- if (p[1] <= -1000)
- return true; // Diagonal of square
- if (boost::math::hypot(p[0] - -500, p[1] - -500)
- <= 500. * boost::math::constants::root_two< double >())
- return true; // Left circle
- if (boost::math::hypot(p[0] - 500, p[1] - -500)
- <= 500. * boost::math::constants::root_two< double >())
- return true; // Right circle
- return false;
- }
-
- bool segment_within_heart(point p1, point p2) const
- {
- // Assumes that p1 and p2 are within the heart
- if ((p1[0] < 0) == (p2[0] < 0))
- return true; // Same side of symmetry line
- if (p1[0] == p2[0])
- return true; // Vertical
- double slope = (p2[1] - p1[1]) / (p2[0] - p1[0]);
- double intercept = p1[1] - p1[0] * slope;
- if (intercept > 0)
- return false; // Crosses between circles
- return true;
- }
-
- typedef uniform_01< RandomNumberGenerator, double > rand_t;
-
-public:
- typedef point point_type;
-
- heart_topology()
- : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr))
- {
- }
-
- heart_topology(RandomNumberGenerator& gen)
- : gen_ptr(), rand(new rand_t(gen))
- {
- }
-
- point random_point() const
- {
- point result;
- do
- {
- result[0] = (*rand)()
- * (1000
- + 1000 * boost::math::constants::root_two< double >())
- - (500 + 500 * boost::math::constants::root_two< double >());
- result[1] = (*rand)()
- * (2000
- + 500
- * (boost::math::constants::root_two< double >()
- - 1))
- - 2000;
- } while (!in_heart(result));
- return result;
- }
-
- // Not going to provide clipping to bounding region or distance from
- // boundary
-
- double distance(point a, point b) const
- {
- if (segment_within_heart(a, b))
- {
- // Straight line
- return boost::math::hypot(b[0] - a[0], b[1] - a[1]);
- }
- else
- {
- // Straight line bending around (0, 0)
- return boost::math::hypot(a[0], a[1])
- + boost::math::hypot(b[0], b[1]);
- }
- }
-
- point move_position_toward(point a, double fraction, point b) const
- {
- if (segment_within_heart(a, b))
- {
- // Straight line
- return point(a[0] + (b[0] - a[0]) * fraction,
- a[1] + (b[1] - a[1]) * fraction);
- }
- else
- {
- double distance_to_point_a = boost::math::hypot(a[0], a[1]);
- double distance_to_point_b = boost::math::hypot(b[0], b[1]);
- double location_of_point = distance_to_point_a
- / (distance_to_point_a + distance_to_point_b);
- if (fraction < location_of_point)
- return point(a[0] * (1 - fraction / location_of_point),
- a[1] * (1 - fraction / location_of_point));
- else
- return point(b[0]
- * ((fraction - location_of_point)
- / (1 - location_of_point)),
- b[1]
- * ((fraction - location_of_point)
- / (1 - location_of_point)));
- }
- }
-
-private:
- shared_ptr< RandomNumberGenerator > gen_ptr;
- shared_ptr< rand_t > rand;
-};
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_TOPOLOGY_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/transitive_closure.hpp b/contrib/restricted/boost/graph/include/boost/graph/transitive_closure.hpp
deleted file mode 100644
index fa8a7cd9e7..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/transitive_closure.hpp
+++ /dev/null
@@ -1,392 +0,0 @@
-// Copyright (C) 2001 Vladimir Prus <ghost@cs.msu.su>
-// Copyright (C) 2001 Jeremy Siek <jsiek@cs.indiana.edu>
-// 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)
-
-// NOTE: this final is generated by libs/graph/doc/transitive_closure.w
-
-#ifndef BOOST_GRAPH_TRANSITIVE_CLOSURE_HPP
-#define BOOST_GRAPH_TRANSITIVE_CLOSURE_HPP
-
-#include <vector>
-#include <algorithm> // for std::min and std::max
-#include <functional>
-#include <boost/config.hpp>
-#include <boost/bind/bind.hpp>
-#include <boost/graph/strong_components.hpp>
-#include <boost/graph/topological_sort.hpp>
-#include <boost/graph/graph_concepts.hpp>
-#include <boost/graph/named_function_params.hpp>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
- inline void union_successor_sets(const std::vector< std::size_t >& s1,
- const std::vector< std::size_t >& s2, std::vector< std::size_t >& s3)
- {
- BOOST_USING_STD_MIN();
- for (std::size_t k = 0; k < s1.size(); ++k)
- s3[k] = min BOOST_PREVENT_MACRO_SUBSTITUTION(s1[k], s2[k]);
- }
-} // namespace detail
-
-namespace detail
-{
- template < typename TheContainer, typename ST = std::size_t,
- typename VT = typename TheContainer::value_type >
- struct subscript_t
- {
- typedef ST argument_type;
- typedef VT& result_type;
-
- subscript_t(TheContainer& c) : container(&c) {}
- VT& operator()(const ST& i) const { return (*container)[i]; }
-
- protected:
- TheContainer* container;
- };
- template < typename TheContainer >
- subscript_t< TheContainer > subscript(TheContainer& c)
- {
- return subscript_t< TheContainer >(c);
- }
-} // namespace detail
-
-template < typename Graph, typename GraphTC, typename G_to_TC_VertexMap,
- typename VertexIndexMap >
-void transitive_closure(const Graph& g, GraphTC& tc,
- G_to_TC_VertexMap g_to_tc_map, VertexIndexMap index_map)
-{
- if (num_vertices(g) == 0)
- return;
- typedef typename graph_traits< Graph >::vertex_descriptor vertex;
- typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator;
- typedef typename property_traits< VertexIndexMap >::value_type size_type;
- typedef
- typename graph_traits< Graph >::adjacency_iterator adjacency_iterator;
-
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((AdjacencyGraphConcept< Graph >));
- BOOST_CONCEPT_ASSERT((VertexMutableGraphConcept< GraphTC >));
- BOOST_CONCEPT_ASSERT((EdgeMutableGraphConcept< GraphTC >));
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< VertexIndexMap, vertex >));
-
- typedef size_type cg_vertex;
- std::vector< cg_vertex > component_number_vec(num_vertices(g));
- iterator_property_map< cg_vertex*, VertexIndexMap, cg_vertex, cg_vertex& >
- component_number(&component_number_vec[0], index_map);
-
- const cg_vertex num_scc
- = strong_components(g, component_number, vertex_index_map(index_map));
-
- std::vector< std::vector< vertex > > components;
- build_component_lists(g, num_scc, component_number, components);
-
- typedef boost::adjacency_list< boost::vecS, boost::vecS, boost::directedS >
- CG_t;
- CG_t CG(num_scc);
- for (cg_vertex s = 0; s < components.size(); ++s)
- {
- std::vector< cg_vertex > adj;
- for (size_type i = 0; i < components[s].size(); ++i)
- {
- vertex u = components[s][i];
- adjacency_iterator v, v_end;
- for (boost::tie(v, v_end) = adjacent_vertices(u, g); v != v_end;
- ++v)
- {
- cg_vertex t = component_number[*v];
- if (s != t) // Avoid loops in the condensation graph
- adj.push_back(t);
- }
- }
- std::sort(adj.begin(), adj.end());
- const typename std::vector< cg_vertex >::iterator di
- = std::unique(adj.begin(), adj.end());
-
- for (typename std::vector< cg_vertex >::const_iterator i = adj.begin();
- i != di; ++i)
- {
- add_edge(s, *i, CG);
- }
- }
-
- std::vector< cg_vertex > topo_order;
- std::vector< cg_vertex > topo_number(num_vertices(CG));
- topological_sort(CG, std::back_inserter(topo_order),
- vertex_index_map(identity_property_map()));
- std::reverse(topo_order.begin(), topo_order.end());
- size_type n = 0;
- for (typename std::vector< cg_vertex >::iterator iter = topo_order.begin();
- iter != topo_order.end(); ++iter)
- topo_number[*iter] = n++;
-
- std::vector< std::vector< cg_vertex > > CG_vec(num_vertices(CG));
- for (size_type i = 0; i < num_vertices(CG); ++i)
- {
- using namespace boost::placeholders;
-
- typedef typename boost::graph_traits< CG_t >::adjacency_iterator
- cg_adj_iter;
- std::pair< cg_adj_iter, cg_adj_iter > pr = adjacent_vertices(i, CG);
- CG_vec[i].assign(pr.first, pr.second);
- std::sort(CG_vec[i].begin(), CG_vec[i].end(),
- boost::bind(std::less< cg_vertex >(),
- boost::bind(detail::subscript(topo_number), _1),
- boost::bind(detail::subscript(topo_number), _2)));
- }
-
- std::vector< std::vector< cg_vertex > > chains;
- {
- std::vector< cg_vertex > in_a_chain(CG_vec.size());
- for (typename std::vector< cg_vertex >::iterator i = topo_order.begin();
- i != topo_order.end(); ++i)
- {
- cg_vertex v = *i;
- if (!in_a_chain[v])
- {
- chains.resize(chains.size() + 1);
- std::vector< cg_vertex >& chain = chains.back();
- for (;;)
- {
- chain.push_back(v);
- in_a_chain[v] = true;
-
- typename std::vector< cg_vertex >::const_iterator next
- #ifdef __cpp_lib_not_fn
- = std::find_if(CG_vec[v].begin(), CG_vec[v].end(),
- std::not_fn(detail::subscript(in_a_chain)));
- #else
- = std::find_if(CG_vec[v].begin(), CG_vec[v].end(),
- std::not1(detail::subscript(in_a_chain)));
- #endif
-
- if (next != CG_vec[v].end())
- v = *next;
- else
- break; // end of chain, dead-end
- }
- }
- }
- }
- std::vector< size_type > chain_number(CG_vec.size());
- std::vector< size_type > pos_in_chain(CG_vec.size());
- for (size_type i = 0; i < chains.size(); ++i)
- for (size_type j = 0; j < chains[i].size(); ++j)
- {
- cg_vertex v = chains[i][j];
- chain_number[v] = i;
- pos_in_chain[v] = j;
- }
-
- cg_vertex inf = (std::numeric_limits< cg_vertex >::max)();
- std::vector< std::vector< cg_vertex > > successors(
- CG_vec.size(), std::vector< cg_vertex >(chains.size(), inf));
- for (typename std::vector< cg_vertex >::reverse_iterator i
- = topo_order.rbegin();
- i != topo_order.rend(); ++i)
- {
- cg_vertex u = *i;
- typename std::vector< cg_vertex >::const_iterator adj, adj_last;
- for (adj = CG_vec[u].begin(), adj_last = CG_vec[u].end();
- adj != adj_last; ++adj)
- {
- cg_vertex v = *adj;
- if (topo_number[v] < successors[u][chain_number[v]])
- {
- // Succ(u) = Succ(u) U Succ(v)
- detail::union_successor_sets(
- successors[u], successors[v], successors[u]);
- // Succ(u) = Succ(u) U {v}
- successors[u][chain_number[v]] = topo_number[v];
- }
- }
- }
-
- for (size_type i = 0; i < CG_vec.size(); ++i)
- CG_vec[i].clear();
- for (size_type i = 0; i < CG_vec.size(); ++i)
- for (size_type j = 0; j < chains.size(); ++j)
- {
- size_type topo_num = successors[i][j];
- if (topo_num < inf)
- {
- cg_vertex v = topo_order[topo_num];
- for (size_type k = pos_in_chain[v]; k < chains[j].size(); ++k)
- CG_vec[i].push_back(chains[j][k]);
- }
- }
-
- // Add vertices to the transitive closure graph
- {
- vertex_iterator i, i_end;
- for (boost::tie(i, i_end) = vertices(g); i != i_end; ++i)
- g_to_tc_map[*i] = add_vertex(tc);
- }
- // Add edges between all the vertices in two adjacent SCCs
- typename std::vector< std::vector< cg_vertex > >::const_iterator si, si_end;
- for (si = CG_vec.begin(), si_end = CG_vec.end(); si != si_end; ++si)
- {
- cg_vertex s = si - CG_vec.begin();
- typename std::vector< cg_vertex >::const_iterator i, i_end;
- for (i = CG_vec[s].begin(), i_end = CG_vec[s].end(); i != i_end; ++i)
- {
- cg_vertex t = *i;
- for (size_type k = 0; k < components[s].size(); ++k)
- for (size_type l = 0; l < components[t].size(); ++l)
- add_edge(g_to_tc_map[components[s][k]],
- g_to_tc_map[components[t][l]], tc);
- }
- }
- // Add edges connecting all vertices in a SCC
- for (size_type i = 0; i < components.size(); ++i)
- if (components[i].size() > 1)
- for (size_type k = 0; k < components[i].size(); ++k)
- for (size_type l = 0; l < components[i].size(); ++l)
- {
- vertex u = components[i][k], v = components[i][l];
- add_edge(g_to_tc_map[u], g_to_tc_map[v], tc);
- }
-
- // Find loopbacks in the original graph.
- // Need to add it to transitive closure.
- {
- vertex_iterator i, i_end;
- for (boost::tie(i, i_end) = vertices(g); i != i_end; ++i)
- {
- adjacency_iterator ab, ae;
- for (boost::tie(ab, ae) = adjacent_vertices(*i, g); ab != ae; ++ab)
- {
- if (*ab == *i)
- if (components[component_number[*i]].size() == 1)
- add_edge(g_to_tc_map[*i], g_to_tc_map[*i], tc);
- }
- }
- }
-}
-
-template < typename Graph, typename GraphTC >
-void transitive_closure(const Graph& g, GraphTC& tc)
-{
- if (num_vertices(g) == 0)
- return;
- typedef typename property_map< Graph, vertex_index_t >::const_type
- VertexIndexMap;
- VertexIndexMap index_map = get(vertex_index, g);
-
- typedef typename graph_traits< GraphTC >::vertex_descriptor tc_vertex;
- std::vector< tc_vertex > to_tc_vec(num_vertices(g));
- iterator_property_map< tc_vertex*, VertexIndexMap, tc_vertex, tc_vertex& >
- g_to_tc_map(&to_tc_vec[0], index_map);
-
- transitive_closure(g, tc, g_to_tc_map, index_map);
-}
-
-namespace detail
-{
- template < typename Graph, typename GraphTC, typename G_to_TC_VertexMap,
- typename VertexIndexMap >
- void transitive_closure_dispatch(const Graph& g, GraphTC& tc,
- G_to_TC_VertexMap g_to_tc_map, VertexIndexMap index_map)
- {
- typedef typename graph_traits< GraphTC >::vertex_descriptor tc_vertex;
- typename std::vector< tc_vertex >::size_type n
- = is_default_param(g_to_tc_map) ? num_vertices(g) : 1;
- std::vector< tc_vertex > to_tc_vec(n);
-
- transitive_closure(g, tc,
- choose_param(g_to_tc_map,
- make_iterator_property_map(
- to_tc_vec.begin(), index_map, to_tc_vec[0])),
- index_map);
- }
-} // namespace detail
-
-template < typename Graph, typename GraphTC, typename P, typename T,
- typename R >
-void transitive_closure(
- const Graph& g, GraphTC& tc, const bgl_named_params< P, T, R >& params)
-{
- if (num_vertices(g) == 0)
- return;
- detail::transitive_closure_dispatch(g, tc,
- get_param(params, orig_to_copy_t()),
- choose_const_pmap(get_param(params, vertex_index), g, vertex_index));
-}
-
-template < typename G > void warshall_transitive_closure(G& g)
-{
- typedef typename graph_traits< G >::vertex_iterator vertex_iterator;
-
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< G >));
- BOOST_CONCEPT_ASSERT((EdgeMutableGraphConcept< G >));
-
- // Matrix form:
- // for k
- // for i
- // if A[i,k]
- // for j
- // A[i,j] = A[i,j] | A[k,j]
- vertex_iterator ki, ke, ii, ie, ji, je;
- for (boost::tie(ki, ke) = vertices(g); ki != ke; ++ki)
- for (boost::tie(ii, ie) = vertices(g); ii != ie; ++ii)
- if (edge(*ii, *ki, g).second)
- for (boost::tie(ji, je) = vertices(g); ji != je; ++ji)
- if (!edge(*ii, *ji, g).second && edge(*ki, *ji, g).second)
- {
- add_edge(*ii, *ji, g);
- }
-}
-
-template < typename G > void warren_transitive_closure(G& g)
-{
- using namespace boost;
- typedef typename graph_traits< G >::vertex_iterator vertex_iterator;
-
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< G >));
- BOOST_CONCEPT_ASSERT((EdgeMutableGraphConcept< G >));
-
- // Make sure second loop will work
- if (num_vertices(g) == 0)
- return;
-
- // for i = 2 to n
- // for k = 1 to i - 1
- // if A[i,k]
- // for j = 1 to n
- // A[i,j] = A[i,j] | A[k,j]
-
- vertex_iterator ic, ie, jc, je, kc, ke;
- for (boost::tie(ic, ie) = vertices(g), ++ic; ic != ie; ++ic)
- for (boost::tie(kc, ke) = vertices(g); *kc != *ic; ++kc)
- if (edge(*ic, *kc, g).second)
- for (boost::tie(jc, je) = vertices(g); jc != je; ++jc)
- if (!edge(*ic, *jc, g).second && edge(*kc, *jc, g).second)
- {
- add_edge(*ic, *jc, g);
- }
- // for i = 1 to n - 1
- // for k = i + 1 to n
- // if A[i,k]
- // for j = 1 to n
- // A[i,j] = A[i,j] | A[k,j]
-
- for (boost::tie(ic, ie) = vertices(g), --ie; ic != ie; ++ic)
- for (kc = ic, ke = ie, ++kc; kc != ke; ++kc)
- if (edge(*ic, *kc, g).second)
- for (boost::tie(jc, je) = vertices(g); jc != je; ++jc)
- if (!edge(*ic, *jc, g).second && edge(*kc, *jc, g).second)
- {
- add_edge(*ic, *jc, g);
- }
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_TRANSITIVE_CLOSURE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/transitive_reduction.hpp b/contrib/restricted/boost/graph/include/boost/graph/transitive_reduction.hpp
deleted file mode 100644
index 32cb384aaa..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/transitive_reduction.hpp
+++ /dev/null
@@ -1,137 +0,0 @@
-// (C) Copyright 2009 Eric Bose-Wolf
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_TRANSITIVE_REDUCTION_HPP
-#define BOOST_GRAPH_TRANSITIVE_REDUCTION_HPP
-
-#include <vector>
-#include <algorithm> //std::find
-#include <boost/concept/requires.hpp>
-#include <boost/concept_check.hpp>
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/topological_sort.hpp>
-
-// also I didn't got all of the concepts thin. Am I suppose to check
-// for all concepts, which are needed for functions I call? (As if I
-// wouldn't do that, the users would see the functions called by
-// complaining about missings concepts, which would be clearly an error
-// message revealing internal implementation and should therefore be avoided?)
-
-// the pseudocode which I followed implementing this algorithmn was taken
-// from the german book Algorithmische Graphentheorie by Volker Turau
-// it is proposed to be of O(n + nm_red ) where n is the number
-// of vertices and m_red is the number of edges in the transitive
-// reduction, but I think my implementation spoiled this up at some point
-// indicated below.
-
-namespace boost
-{
-
-template < typename Graph, typename GraphTR, typename G_to_TR_VertexMap,
- typename VertexIndexMap >
-BOOST_CONCEPT_REQUIRES(
- ((VertexListGraphConcept< Graph >))((IncidenceGraphConcept< Graph >))(
- (MutableGraphConcept< GraphTR >))(
- (ReadablePropertyMapConcept< VertexIndexMap,
- typename graph_traits< Graph >::vertex_descriptor >))(
- (Integer< typename property_traits< VertexIndexMap >::value_type >))(
- (LvaluePropertyMapConcept< G_to_TR_VertexMap,
- typename graph_traits< Graph >::vertex_descriptor >)),
- (void))
-transitive_reduction(const Graph& g, GraphTR& tr, G_to_TR_VertexMap g_to_tr_map,
- VertexIndexMap g_index_map)
-{
- typedef typename graph_traits< Graph >::vertex_descriptor Vertex;
- typedef typename graph_traits< Graph >::vertex_iterator VertexIterator;
- typedef typename std::vector< Vertex >::size_type size_type;
-
- std::vector< Vertex > topo_order;
- topological_sort(g, std::back_inserter(topo_order));
-
- std::vector< size_type > topo_number_storage(num_vertices(g));
-
- iterator_property_map< size_type*, VertexIndexMap, size_type, size_type& >
- topo_number(&topo_number_storage[0], g_index_map);
-
- {
- typename std::vector< Vertex >::reverse_iterator it
- = topo_order.rbegin();
- size_type n = 0;
- for (; it != topo_order.rend(); ++it, ++n)
- {
- topo_number[*it] = n;
- }
- }
-
- std::vector< std::vector< bool > > edge_in_closure(
- num_vertices(g), std::vector< bool >(num_vertices(g), false));
- {
- typename std::vector< Vertex >::reverse_iterator it
- = topo_order.rbegin();
- for (; it != topo_order.rend(); ++it)
- {
- g_to_tr_map[*it] = add_vertex(tr);
- }
- }
-
- typename std::vector< Vertex >::iterator it = topo_order.begin(),
- end = topo_order.end();
- for (; it != end; ++it)
- {
- size_type i = topo_number[*it];
- edge_in_closure[i][i] = true;
- std::vector< Vertex > neighbors;
-
- // I have to collect the successors of *it and traverse them in
- // ascending topological order. I didn't know a better way, how to
- // do that. So what I'm doint is, collection the successors of *it here
- {
- typename Graph::out_edge_iterator oi, oi_end;
- for (boost::tie(oi, oi_end) = out_edges(*it, g); oi != oi_end; ++oi)
- {
- neighbors.push_back(target(*oi, g));
- }
- }
-
- {
- // and run through all vertices in topological order
- typename std::vector< Vertex >::reverse_iterator rit
- = topo_order.rbegin(),
- rend = topo_order.rend();
- for (; rit != rend; ++rit)
- {
- // looking if they are successors of *it
- if (std::find(neighbors.begin(), neighbors.end(), *rit)
- != neighbors.end())
- {
- size_type j = topo_number[*rit];
- if (not edge_in_closure[i][j])
- {
- for (size_type k = j; k < num_vertices(g); ++k)
- {
- if (not edge_in_closure[i][k])
- {
- // here we need edge_in_closure to be in
- // topological order,
- edge_in_closure[i][k] = edge_in_closure[j][k];
- }
- }
- // therefore we only access edge_in_closure only through
- // topo_number property_map
- add_edge(g_to_tr_map[*it], g_to_tr_map[*rit], tr);
- } // if ( not edge_in_
- } // if (find (
- } // for( typename vector<Vertex>::reverse_iterator
- } // {
-
- } // for( typename vector<Vertex>::iterator
-
-} // void transitive_reduction
-
-} // namespace boost
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/tree_traits.hpp b/contrib/restricted/boost/graph/include/boost/graph/tree_traits.hpp
deleted file mode 100644
index e27396ebfd..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/tree_traits.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// (C) Copyright Jeremy Siek 1999.
-// 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_TREE_STRUCTURE_HPP
-#define BOOST_TREE_STRUCTURE_HPP
-
-#include <boost/tuple/tuple.hpp> //For boost::tie()
-
-namespace boost
-{
-
-template < class T > struct tree_traits
-{
- typedef typename T::node_descriptor node_descriptor;
- typedef typename T::children_iterator children_iterator;
-};
-
-template < class Tree, class TreeVisitor >
-void traverse_tree(typename tree_traits< Tree >::node_descriptor v, Tree& t,
- TreeVisitor visitor)
-{
- visitor.preorder(v, t);
- typename tree_traits< Tree >::children_iterator i, end;
- boost::tie(i, end) = children(v, t);
- if (i != end)
- {
- traverse_tree(*i++, t, visitor);
- visitor.inorder(v, t);
- while (i != end)
- traverse_tree(*i++, t, visitor);
- }
- else
- visitor.inorder(v, t);
- visitor.postorder(v, t);
-}
-
-struct null_tree_visitor
-{
- template < typename Node, typename Tree > void preorder(Node, Tree&) {}
- template < typename Node, typename Tree > void inorder(Node, Tree&) {}
- template < typename Node, typename Tree > void postorder(Node, Tree&) {}
-};
-
-} /* namespace boost */
-
-#endif /* BOOST_TREE_STRUCTURE_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/graph/two_graphs_common_spanning_trees.hpp b/contrib/restricted/boost/graph/include/boost/graph/two_graphs_common_spanning_trees.hpp
deleted file mode 100644
index a41dc84b21..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/two_graphs_common_spanning_trees.hpp
+++ /dev/null
@@ -1,852 +0,0 @@
-// Copyright (C) 2012, Michele Caini.
-// 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)
-
-// Two Graphs Common Spanning Trees Algorithm
-// Based on academic article of Mint, Read and Tarjan
-// Efficient Algorithm for Common Spanning Tree Problem
-// Electron. Lett., 28 April 1983, Volume 19, Issue 9, p.346-347
-
-#ifndef BOOST_GRAPH_TWO_GRAPHS_COMMON_SPANNING_TREES_HPP
-#define BOOST_GRAPH_TWO_GRAPHS_COMMON_SPANNING_TREES_HPP
-
-#include <boost/config.hpp>
-
-#include <boost/bimap.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/concept/requires.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/undirected_dfs.hpp>
-#include <boost/graph/connected_components.hpp>
-#include <boost/graph/filtered_graph.hpp>
-#include <vector>
-#include <stack>
-#include <map>
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < typename TreeMap, typename PredMap, typename DistMap,
- typename LowMap, typename Buffer >
- struct bridges_visitor : public default_dfs_visitor
- {
- bridges_visitor(TreeMap tree, PredMap pred, DistMap dist, LowMap low,
- Buffer& buffer)
- : mTree(tree), mPred(pred), mDist(dist), mLow(low), mBuffer(buffer)
- {
- mNum = -1;
- }
-
- template < typename Vertex, typename Graph >
- void initialize_vertex(const Vertex& u, const Graph& g)
- {
- put(mPred, u, u);
- put(mDist, u, -1);
- }
-
- template < typename Vertex, typename Graph >
- void discover_vertex(const Vertex& u, const Graph& g)
- {
- put(mDist, u, ++mNum);
- put(mLow, u, get(mDist, u));
- }
-
- template < typename Edge, typename Graph >
- void tree_edge(const Edge& e, const Graph& g)
- {
- put(mPred, target(e, g), source(e, g));
- put(mTree, target(e, g), e);
- }
-
- template < typename Edge, typename Graph >
- void back_edge(const Edge& e, const Graph& g)
- {
- put(mLow, source(e, g),
- (std::min)(get(mLow, source(e, g)), get(mDist, target(e, g))));
- }
-
- template < typename Vertex, typename Graph >
- void finish_vertex(const Vertex& u, const Graph& g)
- {
- Vertex parent = get(mPred, u);
- if (get(mLow, u) > get(mDist, parent))
- mBuffer.push(get(mTree, u));
- put(mLow, parent, (std::min)(get(mLow, parent), get(mLow, u)));
- }
-
- TreeMap mTree;
- PredMap mPred;
- DistMap mDist;
- LowMap mLow;
- Buffer& mBuffer;
- int mNum;
- };
-
- template < typename Buffer >
- struct cycle_finder : public base_visitor< cycle_finder< Buffer > >
- {
- typedef on_back_edge event_filter;
- cycle_finder() : mBuffer(0) {}
- cycle_finder(Buffer* buffer) : mBuffer(buffer) {}
- template < typename Edge, typename Graph >
- void operator()(const Edge& e, const Graph& g)
- {
- if (mBuffer)
- mBuffer->push(e);
- }
- Buffer* mBuffer;
- };
-
- template < typename DeletedMap > struct deleted_edge_status
- {
- deleted_edge_status() {}
- deleted_edge_status(DeletedMap map) : mMap(map) {}
- template < typename Edge > bool operator()(const Edge& e) const
- {
- return (!get(mMap, e));
- }
- DeletedMap mMap;
- };
-
- template < typename InLMap > struct inL_edge_status
- {
- inL_edge_status() {}
- inL_edge_status(InLMap map) : mMap(map) {}
- template < typename Edge > bool operator()(const Edge& e) const
- {
- return get(mMap, e);
- }
- InLMap mMap;
- };
-
- template < typename Graph, typename Func, typename Seq, typename Map >
- void rec_two_graphs_common_spanning_trees(const Graph& iG,
- bimap< bimaps::set_of< int >,
- bimaps::set_of< typename graph_traits< Graph >::edge_descriptor > >
- iG_bimap,
- Map aiG_inL, Map diG, const Graph& vG,
- bimap< bimaps::set_of< int >,
- bimaps::set_of< typename graph_traits< Graph >::edge_descriptor > >
- vG_bimap,
- Map avG_inL, Map dvG, Func func, Seq inL)
- {
- typedef graph_traits< Graph > GraphTraits;
-
- typedef typename GraphTraits::vertex_descriptor vertex_descriptor;
- typedef typename GraphTraits::edge_descriptor edge_descriptor;
-
- typedef typename Seq::size_type seq_size_type;
-
- int edges = num_vertices(iG) - 1;
- //
- // [ Michele Caini ]
- //
- // Using the condition (edges != 0) leads to the accidental submission
- // of
- // sub-graphs ((V-1+1)-fake-tree, named here fat-tree).
- // Remove this condition is a workaround for the problem of fat-trees.
- // Please do not add that condition, even if it improves performance.
- //
- // Here is proposed the previous guard (that was wrong):
- // for(seq_size_type i = 0; (i < inL.size()) && (edges != 0); ++i)
- //
- {
- for (seq_size_type i = 0; i < inL.size(); ++i)
- if (inL[i])
- --edges;
-
- if (edges < 0)
- return;
- }
-
- bool is_tree = (edges == 0);
- if (is_tree)
- {
- func(inL);
- }
- else
- {
- std::map< vertex_descriptor, default_color_type > vertex_color;
- std::map< edge_descriptor, default_color_type > edge_color;
-
- std::stack< edge_descriptor > iG_buf, vG_buf;
- bool found = false;
-
- seq_size_type m;
- for (seq_size_type j = 0; j < inL.size() && !found; ++j)
- {
- if (!inL[j] && !get(diG, iG_bimap.left.at(j))
- && !get(dvG, vG_bimap.left.at(j)))
- {
- put(aiG_inL, iG_bimap.left.at(j), true);
- put(avG_inL, vG_bimap.left.at(j), true);
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::inL_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(aiG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&iG_buf)),
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(
- edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::inL_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(avG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&vG_buf)),
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(
- edge_color));
-
- if (iG_buf.empty() && vG_buf.empty())
- {
- inL[j] = true;
- found = true;
- m = j;
- }
- else
- {
- while (!iG_buf.empty())
- iG_buf.pop();
- while (!vG_buf.empty())
- vG_buf.pop();
- put(aiG_inL, iG_bimap.left.at(j), false);
- put(avG_inL, vG_bimap.left.at(j), false);
- }
- }
- }
-
- if (found)
- {
-
- std::stack< edge_descriptor > iG_buf_copy, vG_buf_copy;
- for (seq_size_type j = 0; j < inL.size(); ++j)
- {
- if (!inL[j] && !get(diG, iG_bimap.left.at(j))
- && !get(dvG, vG_bimap.left.at(j)))
- {
-
- put(aiG_inL, iG_bimap.left.at(j), true);
- put(avG_inL, vG_bimap.left.at(j), true);
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::inL_edge_status<
- associative_property_map<
- std::map< edge_descriptor, bool > > >(
- aiG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&iG_buf)),
- associative_property_map< std::map<
- vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map< std::map< edge_descriptor,
- default_color_type > >(edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::inL_edge_status<
- associative_property_map<
- std::map< edge_descriptor, bool > > >(
- avG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&vG_buf)),
- associative_property_map< std::map<
- vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map< std::map< edge_descriptor,
- default_color_type > >(edge_color));
-
- if (!iG_buf.empty() || !vG_buf.empty())
- {
- while (!iG_buf.empty())
- iG_buf.pop();
- while (!vG_buf.empty())
- vG_buf.pop();
- put(diG, iG_bimap.left.at(j), true);
- put(dvG, vG_bimap.left.at(j), true);
- iG_buf_copy.push(iG_bimap.left.at(j));
- vG_buf_copy.push(vG_bimap.left.at(j));
- }
-
- put(aiG_inL, iG_bimap.left.at(j), false);
- put(avG_inL, vG_bimap.left.at(j), false);
- }
- }
-
- // REC
- detail::rec_two_graphs_common_spanning_trees< Graph, Func, Seq,
- Map >(iG, iG_bimap, aiG_inL, diG, vG, vG_bimap, aiG_inL,
- dvG, func, inL);
-
- while (!iG_buf_copy.empty())
- {
- put(diG, iG_buf_copy.top(), false);
- put(dvG,
- vG_bimap.left.at(iG_bimap.right.at(iG_buf_copy.top())),
- false);
- iG_buf_copy.pop();
- }
- while (!vG_buf_copy.empty())
- {
- put(dvG, vG_buf_copy.top(), false);
- put(diG,
- iG_bimap.left.at(vG_bimap.right.at(vG_buf_copy.top())),
- false);
- vG_buf_copy.pop();
- }
-
- inL[m] = false;
- put(aiG_inL, iG_bimap.left.at(m), false);
- put(avG_inL, vG_bimap.left.at(m), false);
-
- put(diG, iG_bimap.left.at(m), true);
- put(dvG, vG_bimap.left.at(m), true);
-
- std::map< vertex_descriptor, edge_descriptor > tree_map;
- std::map< vertex_descriptor, vertex_descriptor > pred_map;
- std::map< vertex_descriptor, int > dist_map, low_map;
-
- detail::bridges_visitor<
- associative_property_map<
- std::map< vertex_descriptor, edge_descriptor > >,
- associative_property_map<
- std::map< vertex_descriptor, vertex_descriptor > >,
- associative_property_map<
- std::map< vertex_descriptor, int > >,
- associative_property_map<
- std::map< vertex_descriptor, int > >,
- std::stack< edge_descriptor > >
- iG_vis(associative_property_map<
- std::map< vertex_descriptor, edge_descriptor > >(
- tree_map),
- associative_property_map<
- std::map< vertex_descriptor, vertex_descriptor > >(
- pred_map),
- associative_property_map<
- std::map< vertex_descriptor, int > >(dist_map),
- associative_property_map<
- std::map< vertex_descriptor, int > >(low_map),
- iG_buf),
- vG_vis(associative_property_map<
- std::map< vertex_descriptor, edge_descriptor > >(
- tree_map),
- associative_property_map<
- std::map< vertex_descriptor, vertex_descriptor > >(
- pred_map),
- associative_property_map<
- std::map< vertex_descriptor, int > >(dist_map),
- associative_property_map<
- std::map< vertex_descriptor, int > >(low_map),
- vG_buf);
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::deleted_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(diG)),
- iG_vis,
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(
- edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::deleted_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(dvG)),
- vG_vis,
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(
- edge_color));
-
- found = false;
- std::stack< edge_descriptor > iG_buf_tmp, vG_buf_tmp;
- while (!iG_buf.empty() && !found)
- {
- if (!inL[iG_bimap.right.at(iG_buf.top())])
- {
- put(aiG_inL, iG_buf.top(), true);
- put(avG_inL,
- vG_bimap.left.at(iG_bimap.right.at(iG_buf.top())),
- true);
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::inL_edge_status<
- associative_property_map<
- std::map< edge_descriptor, bool > > >(
- aiG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&iG_buf_tmp)),
- associative_property_map< std::map<
- vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map< std::map< edge_descriptor,
- default_color_type > >(edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::inL_edge_status<
- associative_property_map<
- std::map< edge_descriptor, bool > > >(
- avG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&vG_buf_tmp)),
- associative_property_map< std::map<
- vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map< std::map< edge_descriptor,
- default_color_type > >(edge_color));
-
- if (!iG_buf_tmp.empty() || !vG_buf_tmp.empty())
- {
- found = true;
- }
- else
- {
- while (!iG_buf_tmp.empty())
- iG_buf_tmp.pop();
- while (!vG_buf_tmp.empty())
- vG_buf_tmp.pop();
- iG_buf_copy.push(iG_buf.top());
- }
-
- put(aiG_inL, iG_buf.top(), false);
- put(avG_inL,
- vG_bimap.left.at(iG_bimap.right.at(iG_buf.top())),
- false);
- }
- iG_buf.pop();
- }
- while (!vG_buf.empty() && !found)
- {
- if (!inL[vG_bimap.right.at(vG_buf.top())])
- {
- put(avG_inL, vG_buf.top(), true);
- put(aiG_inL,
- iG_bimap.left.at(vG_bimap.right.at(vG_buf.top())),
- true);
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::inL_edge_status<
- associative_property_map<
- std::map< edge_descriptor, bool > > >(
- aiG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&iG_buf_tmp)),
- associative_property_map< std::map<
- vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map< std::map< edge_descriptor,
- default_color_type > >(edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::inL_edge_status<
- associative_property_map<
- std::map< edge_descriptor, bool > > >(
- avG_inL)),
- make_dfs_visitor(detail::cycle_finder<
- std::stack< edge_descriptor > >(&vG_buf_tmp)),
- associative_property_map< std::map<
- vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map< std::map< edge_descriptor,
- default_color_type > >(edge_color));
-
- if (!iG_buf_tmp.empty() || !vG_buf_tmp.empty())
- {
- found = true;
- }
- else
- {
- while (!iG_buf_tmp.empty())
- iG_buf_tmp.pop();
- while (!vG_buf_tmp.empty())
- vG_buf_tmp.pop();
- vG_buf_copy.push(vG_buf.top());
- }
-
- put(avG_inL, vG_buf.top(), false);
- put(aiG_inL,
- iG_bimap.left.at(vG_bimap.right.at(vG_buf.top())),
- false);
- }
- vG_buf.pop();
- }
-
- if (!found)
- {
-
- while (!iG_buf_copy.empty())
- {
- inL[iG_bimap.right.at(iG_buf_copy.top())] = true;
- put(aiG_inL, iG_buf_copy.top(), true);
- put(avG_inL,
- vG_bimap.left.at(
- iG_bimap.right.at(iG_buf_copy.top())),
- true);
- iG_buf.push(iG_buf_copy.top());
- iG_buf_copy.pop();
- }
- while (!vG_buf_copy.empty())
- {
- inL[vG_bimap.right.at(vG_buf_copy.top())] = true;
- put(avG_inL, vG_buf_copy.top(), true);
- put(aiG_inL,
- iG_bimap.left.at(
- vG_bimap.right.at(vG_buf_copy.top())),
- true);
- vG_buf.push(vG_buf_copy.top());
- vG_buf_copy.pop();
- }
-
- // REC
- detail::rec_two_graphs_common_spanning_trees< Graph, Func,
- Seq, Map >(iG, iG_bimap, aiG_inL, diG, vG, vG_bimap,
- aiG_inL, dvG, func, inL);
-
- while (!iG_buf.empty())
- {
- inL[iG_bimap.right.at(iG_buf.top())] = false;
- put(aiG_inL, iG_buf.top(), false);
- put(avG_inL,
- vG_bimap.left.at(iG_bimap.right.at(iG_buf.top())),
- false);
- iG_buf.pop();
- }
- while (!vG_buf.empty())
- {
- inL[vG_bimap.right.at(vG_buf.top())] = false;
- put(avG_inL, vG_buf.top(), false);
- put(aiG_inL,
- iG_bimap.left.at(vG_bimap.right.at(vG_buf.top())),
- false);
- vG_buf.pop();
- }
- }
-
- put(diG, iG_bimap.left.at(m), false);
- put(dvG, vG_bimap.left.at(m), false);
- }
- }
- }
-
-} // namespace detail
-
-template < typename Coll, typename Seq > struct tree_collector
-{
-
-public:
- BOOST_CONCEPT_ASSERT((BackInsertionSequence< Coll >));
- BOOST_CONCEPT_ASSERT((RandomAccessContainer< Seq >));
- BOOST_CONCEPT_ASSERT((CopyConstructible< Seq >));
-
- typedef typename Coll::value_type coll_value_type;
- typedef typename Seq::value_type seq_value_type;
-
- BOOST_STATIC_ASSERT((is_same< coll_value_type, Seq >::value));
- BOOST_STATIC_ASSERT((is_same< seq_value_type, bool >::value));
-
- tree_collector(Coll& seqs) : mSeqs(seqs) {}
-
- inline void operator()(Seq seq) { mSeqs.push_back(seq); }
-
-private:
- Coll& mSeqs;
-};
-
-template < typename Graph, typename Order, typename Func, typename Seq >
-BOOST_CONCEPT_REQUIRES(
- ((RandomAccessContainer< Order >))((IncidenceGraphConcept< Graph >))(
- (UnaryFunction< Func, void, Seq >))(
- (Mutable_RandomAccessContainer< Seq >))(
- (VertexAndEdgeListGraphConcept< Graph >)),
- (void))
-two_graphs_common_spanning_trees(const Graph& iG, Order iG_map, const Graph& vG,
- Order vG_map, Func func, Seq inL)
-{
- typedef graph_traits< Graph > GraphTraits;
-
- typedef typename GraphTraits::directed_category directed_category;
- typedef typename GraphTraits::vertex_descriptor vertex_descriptor;
- typedef typename GraphTraits::edge_descriptor edge_descriptor;
-
- typedef typename GraphTraits::edges_size_type edges_size_type;
- typedef typename GraphTraits::edge_iterator edge_iterator;
-
- typedef typename Seq::value_type seq_value_type;
- typedef typename Seq::size_type seq_size_type;
-
- typedef typename Order::value_type order_value_type;
- typedef typename Order::size_type order_size_type;
-
- BOOST_STATIC_ASSERT((is_same< order_value_type, edge_descriptor >::value));
- BOOST_CONCEPT_ASSERT((Convertible< order_size_type, edges_size_type >));
-
- BOOST_CONCEPT_ASSERT((Convertible< seq_size_type, edges_size_type >));
- BOOST_STATIC_ASSERT((is_same< seq_value_type, bool >::value));
-
- BOOST_STATIC_ASSERT((is_same< directed_category, undirected_tag >::value));
-
- if (num_vertices(iG) != num_vertices(vG))
- return;
-
- if (inL.size() != num_edges(iG) || inL.size() != num_edges(vG))
- return;
-
- if (iG_map.size() != num_edges(iG) || vG_map.size() != num_edges(vG))
- return;
-
- typedef bimaps::bimap< bimaps::set_of< int >,
- bimaps::set_of< order_value_type > >
- bimap_type;
- typedef typename bimap_type::value_type bimap_value;
-
- bimap_type iG_bimap, vG_bimap;
- for (order_size_type i = 0; i < iG_map.size(); ++i)
- iG_bimap.insert(bimap_value(i, iG_map[i]));
- for (order_size_type i = 0; i < vG_map.size(); ++i)
- vG_bimap.insert(bimap_value(i, vG_map[i]));
-
- edge_iterator current, last;
- boost::tuples::tie(current, last) = edges(iG);
- for (; current != last; ++current)
- if (iG_bimap.right.find(*current) == iG_bimap.right.end())
- return;
- boost::tuples::tie(current, last) = edges(vG);
- for (; current != last; ++current)
- if (vG_bimap.right.find(*current) == vG_bimap.right.end())
- return;
-
- std::stack< edge_descriptor > iG_buf, vG_buf;
-
- std::map< vertex_descriptor, edge_descriptor > tree_map;
- std::map< vertex_descriptor, vertex_descriptor > pred_map;
- std::map< vertex_descriptor, int > dist_map, low_map;
-
- detail::bridges_visitor< associative_property_map< std::map<
- vertex_descriptor, edge_descriptor > >,
- associative_property_map<
- std::map< vertex_descriptor, vertex_descriptor > >,
- associative_property_map< std::map< vertex_descriptor, int > >,
- associative_property_map< std::map< vertex_descriptor, int > >,
- std::stack< edge_descriptor > >
- iG_vis(associative_property_map<
- std::map< vertex_descriptor, edge_descriptor > >(tree_map),
- associative_property_map<
- std::map< vertex_descriptor, vertex_descriptor > >(pred_map),
- associative_property_map< std::map< vertex_descriptor, int > >(
- dist_map),
- associative_property_map< std::map< vertex_descriptor, int > >(low_map),
- iG_buf),
- vG_vis(associative_property_map<
- std::map< vertex_descriptor, edge_descriptor > >(tree_map),
- associative_property_map<
- std::map< vertex_descriptor, vertex_descriptor > >(pred_map),
- associative_property_map< std::map< vertex_descriptor, int > >(
- dist_map),
- associative_property_map< std::map< vertex_descriptor, int > >(
- low_map),
- vG_buf);
-
- std::map< vertex_descriptor, default_color_type > vertex_color;
- std::map< edge_descriptor, default_color_type > edge_color;
-
- undirected_dfs(iG, iG_vis,
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(edge_color));
- undirected_dfs(vG, vG_vis,
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(edge_color));
-
- while (!iG_buf.empty())
- {
- inL[iG_bimap.right.at(iG_buf.top())] = true;
- iG_buf.pop();
- }
- while (!vG_buf.empty())
- {
- inL[vG_bimap.right.at(vG_buf.top())] = true;
- vG_buf.pop();
- }
-
- std::map< edge_descriptor, bool > iG_inL, vG_inL;
- associative_property_map< std::map< edge_descriptor, bool > > aiG_inL(
- iG_inL),
- avG_inL(vG_inL);
-
- for (seq_size_type i = 0; i < inL.size(); ++i)
- {
- if (inL[i])
- {
- put(aiG_inL, iG_bimap.left.at(i), true);
- put(avG_inL, vG_bimap.left.at(i), true);
- }
- else
- {
- put(aiG_inL, iG_bimap.left.at(i), false);
- put(avG_inL, vG_bimap.left.at(i), false);
- }
- }
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::inL_edge_status<
- associative_property_map< std::map< edge_descriptor, bool > > >(
- aiG_inL)),
- make_dfs_visitor(
- detail::cycle_finder< std::stack< edge_descriptor > >(&iG_buf)),
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::inL_edge_status<
- associative_property_map< std::map< edge_descriptor, bool > > >(
- avG_inL)),
- make_dfs_visitor(
- detail::cycle_finder< std::stack< edge_descriptor > >(&vG_buf)),
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(edge_color));
-
- if (iG_buf.empty() && vG_buf.empty())
- {
-
- std::map< edge_descriptor, bool > iG_deleted, vG_deleted;
- associative_property_map< std::map< edge_descriptor, bool > > diG(
- iG_deleted);
- associative_property_map< std::map< edge_descriptor, bool > > dvG(
- vG_deleted);
-
- boost::tuples::tie(current, last) = edges(iG);
- for (; current != last; ++current)
- put(diG, *current, false);
- boost::tuples::tie(current, last) = edges(vG);
- for (; current != last; ++current)
- put(dvG, *current, false);
-
- for (seq_size_type j = 0; j < inL.size(); ++j)
- {
- if (!inL[j])
- {
- put(aiG_inL, iG_bimap.left.at(j), true);
- put(avG_inL, vG_bimap.left.at(j), true);
-
- undirected_dfs(
- make_filtered_graph(iG,
- detail::inL_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(aiG_inL)),
- make_dfs_visitor(
- detail::cycle_finder< std::stack< edge_descriptor > >(
- &iG_buf)),
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(
- edge_color));
- undirected_dfs(
- make_filtered_graph(vG,
- detail::inL_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(avG_inL)),
- make_dfs_visitor(
- detail::cycle_finder< std::stack< edge_descriptor > >(
- &vG_buf)),
- associative_property_map<
- std::map< vertex_descriptor, default_color_type > >(
- vertex_color),
- associative_property_map<
- std::map< edge_descriptor, default_color_type > >(
- edge_color));
-
- if (!iG_buf.empty() || !vG_buf.empty())
- {
- while (!iG_buf.empty())
- iG_buf.pop();
- while (!vG_buf.empty())
- vG_buf.pop();
- put(diG, iG_bimap.left.at(j), true);
- put(dvG, vG_bimap.left.at(j), true);
- }
-
- put(aiG_inL, iG_bimap.left.at(j), false);
- put(avG_inL, vG_bimap.left.at(j), false);
- }
- }
-
- int cc = 0;
-
- std::map< vertex_descriptor, int > com_map;
- cc += connected_components(
- make_filtered_graph(iG,
- detail::deleted_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(diG)),
- associative_property_map< std::map< vertex_descriptor, int > >(
- com_map));
- cc += connected_components(
- make_filtered_graph(vG,
- detail::deleted_edge_status< associative_property_map<
- std::map< edge_descriptor, bool > > >(dvG)),
- associative_property_map< std::map< vertex_descriptor, int > >(
- com_map));
-
- if (cc != 2)
- return;
-
- // REC
- detail::rec_two_graphs_common_spanning_trees< Graph, Func, Seq,
- associative_property_map< std::map< edge_descriptor, bool > > >(
- iG, iG_bimap, aiG_inL, diG, vG, vG_bimap, aiG_inL, dvG, func, inL);
- }
-}
-
-template < typename Graph, typename Func, typename Seq >
-BOOST_CONCEPT_REQUIRES(
- ((IncidenceGraphConcept< Graph >))((EdgeListGraphConcept< Graph >)), (void))
-two_graphs_common_spanning_trees(
- const Graph& iG, const Graph& vG, Func func, Seq inL)
-{
- typedef graph_traits< Graph > GraphTraits;
-
- typedef typename GraphTraits::edge_descriptor edge_descriptor;
- typedef typename GraphTraits::edge_iterator edge_iterator;
-
- std::vector< edge_descriptor > iGO, vGO;
- edge_iterator curr, last;
-
- boost::tuples::tie(curr, last) = edges(iG);
- for (; curr != last; ++curr)
- iGO.push_back(*curr);
-
- boost::tuples::tie(curr, last) = edges(vG);
- for (; curr != last; ++curr)
- vGO.push_back(*curr);
-
- two_graphs_common_spanning_trees(iG, iGO, vG, vGO, func, inL);
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_TWO_GRAPHS_COMMON_SPANNING_TREES_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/undirected_dfs.hpp b/contrib/restricted/boost/graph/include/boost/graph/undirected_dfs.hpp
deleted file mode 100644
index 62088c87fb..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/undirected_dfs.hpp
+++ /dev/null
@@ -1,269 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_UNDIRECTED_DFS_HPP
-#define BOOST_GRAPH_UNDIRECTED_DFS_HPP
-
-#include <boost/graph/depth_first_search.hpp>
-#include <vector>
-#include <boost/concept/assert.hpp>
-
-namespace boost
-{
-
-namespace detail
-{
-
-// Define BOOST_RECURSIVE_DFS to use older, recursive version.
-// It is retained for a while in order to perform performance
-// comparison.
-#ifndef BOOST_RECURSIVE_DFS
-
- template < typename IncidenceGraph, typename DFSVisitor,
- typename VertexColorMap, typename EdgeColorMap >
- void undir_dfv_impl(const IncidenceGraph& g,
- typename graph_traits< IncidenceGraph >::vertex_descriptor u,
- DFSVisitor& vis, VertexColorMap vertex_color, EdgeColorMap edge_color)
- {
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< IncidenceGraph >));
- BOOST_CONCEPT_ASSERT((DFSVisitorConcept< DFSVisitor, IncidenceGraph >));
- typedef
- typename graph_traits< IncidenceGraph >::vertex_descriptor Vertex;
- typedef typename graph_traits< IncidenceGraph >::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< VertexColorMap, Vertex >));
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< EdgeColorMap, Edge >));
- typedef
- typename property_traits< VertexColorMap >::value_type ColorValue;
- typedef
- typename property_traits< EdgeColorMap >::value_type EColorValue;
- BOOST_CONCEPT_ASSERT((ColorValueConcept< ColorValue >));
- BOOST_CONCEPT_ASSERT((ColorValueConcept< EColorValue >));
- typedef color_traits< ColorValue > Color;
- typedef color_traits< EColorValue > EColor;
- typedef typename graph_traits< IncidenceGraph >::out_edge_iterator Iter;
- typedef std::pair< Vertex,
- std::pair< boost::optional< Edge >, std::pair< Iter, Iter > > >
- VertexInfo;
-
- std::vector< VertexInfo > stack;
-
- put(vertex_color, u, Color::gray());
- vis.discover_vertex(u, g);
- stack.push_back(std::make_pair(
- u, std::make_pair(boost::optional< Edge >(), out_edges(u, g))));
- while (!stack.empty())
- {
- VertexInfo& back = stack.back();
- u = back.first;
- boost::optional< Edge > src_e = back.second.first;
- Iter ei = back.second.second.first,
- ei_end = back.second.second.second;
- stack.pop_back();
- while (ei != ei_end)
- {
- Vertex v = target(*ei, g);
- vis.examine_edge(*ei, g);
- ColorValue v_color = get(vertex_color, v);
- EColorValue uv_color = get(edge_color, *ei);
- put(edge_color, *ei, EColor::black());
- if (v_color == Color::white())
- {
- vis.tree_edge(*ei, g);
- src_e = *ei;
- stack.push_back(std::make_pair(u,
- std::make_pair(src_e, std::make_pair(++ei, ei_end))));
- u = v;
- put(vertex_color, u, Color::gray());
- vis.discover_vertex(u, g);
- boost::tie(ei, ei_end) = out_edges(u, g);
- }
- else if (v_color == Color::gray())
- {
- if (uv_color == EColor::white())
- vis.back_edge(*ei, g);
- call_finish_edge(vis, *ei, g);
- ++ei;
- }
- else
- { // if (v_color == Color::black())
- call_finish_edge(vis, *ei, g);
- ++ei;
- }
- }
- put(vertex_color, u, Color::black());
- vis.finish_vertex(u, g);
- if (src_e)
- call_finish_edge(vis, src_e.get(), g);
- }
- }
-
-#else // BOOST_RECURSIVE_DFS
-
- template < typename IncidenceGraph, typename DFSVisitor,
- typename VertexColorMap, typename EdgeColorMap >
- void undir_dfv_impl(const IncidenceGraph& g,
- typename graph_traits< IncidenceGraph >::vertex_descriptor u,
- DFSVisitor& vis, // pass-by-reference here, important!
- VertexColorMap vertex_color, EdgeColorMap edge_color)
- {
- BOOST_CONCEPT_ASSERT((IncidenceGraphConcept< IncidenceGraph >));
- BOOST_CONCEPT_ASSERT((DFSVisitorConcept< DFSVisitor, IncidenceGraph >));
- typedef
- typename graph_traits< IncidenceGraph >::vertex_descriptor Vertex;
- typedef typename graph_traits< IncidenceGraph >::edge_descriptor Edge;
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< VertexColorMap, Vertex >));
- BOOST_CONCEPT_ASSERT(
- (ReadWritePropertyMapConcept< EdgeColorMap, Edge >));
- typedef
- typename property_traits< VertexColorMap >::value_type ColorValue;
- typedef
- typename property_traits< EdgeColorMap >::value_type EColorValue;
- BOOST_CONCEPT_ASSERT((ColorValueConcept< ColorValue >));
- BOOST_CONCEPT_ASSERT((ColorValueConcept< EColorValue >));
- typedef color_traits< ColorValue > Color;
- typedef color_traits< EColorValue > EColor;
- typename graph_traits< IncidenceGraph >::out_edge_iterator ei, ei_end;
-
- put(vertex_color, u, Color::gray());
- vis.discover_vertex(u, g);
- for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei)
- {
- Vertex v = target(*ei, g);
- vis.examine_edge(*ei, g);
- ColorValue v_color = get(vertex_color, v);
- EColorValue uv_color = get(edge_color, *ei);
- put(edge_color, *ei, EColor::black());
- if (v_color == Color::white())
- {
- vis.tree_edge(*ei, g);
- undir_dfv_impl(g, v, vis, vertex_color, edge_color);
- }
- else if (v_color == Color::gray() && uv_color == EColor::white())
- vis.back_edge(*ei, g);
- call_finish_edge(vis, *ei, g);
- }
- put(vertex_color, u, Color::black());
- vis.finish_vertex(u, g);
- }
-
-#endif // ! BOOST_RECURSIVE_DFS
-
-} // namespace detail
-
-template < typename Graph, typename DFSVisitor, typename VertexColorMap,
- typename EdgeColorMap, typename Vertex >
-void undirected_dfs(const Graph& g, DFSVisitor vis, VertexColorMap vertex_color,
- EdgeColorMap edge_color, Vertex start_vertex)
-{
- BOOST_CONCEPT_ASSERT((DFSVisitorConcept< DFSVisitor, Graph >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< Graph >));
-
- typedef typename property_traits< VertexColorMap >::value_type ColorValue;
- typedef color_traits< ColorValue > Color;
-
- typename graph_traits< Graph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- put(vertex_color, *ui, Color::white());
- vis.initialize_vertex(*ui, g);
- }
- typename graph_traits< Graph >::edge_iterator ei, ei_end;
- for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
- put(edge_color, *ei, Color::white());
-
- if (start_vertex != *vertices(g).first)
- {
- vis.start_vertex(start_vertex, g);
- detail::undir_dfv_impl(g, start_vertex, vis, vertex_color, edge_color);
- }
-
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- ColorValue u_color = get(vertex_color, *ui);
- if (u_color == Color::white())
- {
- vis.start_vertex(*ui, g);
- detail::undir_dfv_impl(g, *ui, vis, vertex_color, edge_color);
- }
- }
-}
-
-template < typename Graph, typename DFSVisitor, typename VertexColorMap,
- typename EdgeColorMap >
-void undirected_dfs(const Graph& g, DFSVisitor vis, VertexColorMap vertex_color,
- EdgeColorMap edge_color)
-{
- undirected_dfs(g, vis, vertex_color, edge_color, *vertices(g).first);
-}
-
-namespace detail
-{
- template < typename VertexColorMap > struct udfs_dispatch
- {
-
- template < typename Graph, typename Vertex, typename DFSVisitor,
- typename EdgeColorMap, typename P, typename T, typename R >
- static void apply(const Graph& g, DFSVisitor vis, Vertex start_vertex,
- const bgl_named_params< P, T, R >&, EdgeColorMap edge_color,
- VertexColorMap vertex_color)
- {
- undirected_dfs(g, vis, vertex_color, edge_color, start_vertex);
- }
- };
-
- template <> struct udfs_dispatch< param_not_found >
- {
- template < typename Graph, typename Vertex, typename DFSVisitor,
- typename EdgeColorMap, typename P, typename T, typename R >
- static void apply(const Graph& g, DFSVisitor vis, Vertex start_vertex,
- const bgl_named_params< P, T, R >& params, EdgeColorMap edge_color,
- param_not_found)
- {
- std::vector< default_color_type > color_vec(num_vertices(g));
- default_color_type c = white_color; // avoid warning about un-init
- undirected_dfs(g, vis,
- make_iterator_property_map(color_vec.begin(),
- choose_const_pmap(
- get_param(params, vertex_index), g, vertex_index),
- c),
- edge_color, start_vertex);
- }
- };
-
-} // namespace detail
-
-// Named Parameter Variant
-template < typename Graph, typename P, typename T, typename R >
-void undirected_dfs(const Graph& g, const bgl_named_params< P, T, R >& params)
-{
- typedef typename get_param_type< vertex_color_t,
- bgl_named_params< P, T, R > >::type C;
- detail::udfs_dispatch< C >::apply(g,
- choose_param(
- get_param(params, graph_visitor), make_dfs_visitor(null_visitor())),
- choose_param(get_param(params, root_vertex_t()), *vertices(g).first),
- params, get_param(params, edge_color), get_param(params, vertex_color));
-}
-
-template < typename IncidenceGraph, typename DFSVisitor,
- typename VertexColorMap, typename EdgeColorMap >
-void undirected_depth_first_visit(const IncidenceGraph& g,
- typename graph_traits< IncidenceGraph >::vertex_descriptor u,
- DFSVisitor vis, VertexColorMap vertex_color, EdgeColorMap edge_color)
-{
- detail::undir_dfv_impl(g, u, vis, vertex_color, edge_color);
-}
-
-} // namespace boost
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/undirected_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/undirected_graph.hpp
deleted file mode 100644
index ec1bbbba61..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/undirected_graph.hpp
+++ /dev/null
@@ -1,822 +0,0 @@
-// (C) Copyright 2007-2009 Andrew Sutton
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0 (See accompanying file
-// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GRAPH_UNDIRECTED_GRAPH_HPP
-#define BOOST_GRAPH_UNDIRECTED_GRAPH_HPP
-
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/property.hpp>
-#include <boost/property_map/transform_value_property_map.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/mpl/if.hpp>
-
-namespace boost
-{
-struct undirected_graph_tag
-{
-};
-
-/**
- * The undirected_graph class template is a simplified version of the BGL
- * adjacency list. This class is provided for ease of use, but may not
- * perform as well as custom-defined adjacency list classes. Instances of
- * this template model the VertexIndexGraph, and EdgeIndexGraph concepts. The
- * graph is also fully mutable, supporting both insertions and removals of
- * vertices and edges.
- *
- * @note Special care must be taken when removing vertices or edges since
- * those operations can invalidate the numbering of vertices.
- */
-template < typename VertexProp = no_property, typename EdgeProp = no_property,
- typename GraphProp = no_property >
-class undirected_graph
-{
-public:
- typedef GraphProp graph_property_type;
- typedef VertexProp vertex_property_type;
- typedef EdgeProp edge_property_type;
- typedef typename lookup_one_property< GraphProp, graph_bundle_t >::type
- graph_bundled;
- typedef typename lookup_one_property< VertexProp, vertex_bundle_t >::type
- vertex_bundled;
- typedef typename lookup_one_property< EdgeProp, edge_bundle_t >::type
- edge_bundled;
-
-public:
- // Embed indices into the vertex type.
- typedef property< vertex_index_t, unsigned, vertex_property_type >
- internal_vertex_property;
- typedef property< edge_index_t, unsigned, edge_property_type >
- internal_edge_property;
-
-public:
- typedef adjacency_list< listS, listS, undirectedS, internal_vertex_property,
- internal_edge_property, GraphProp, listS >
- graph_type;
-
-private:
- // storage selectors
- typedef typename graph_type::vertex_list_selector vertex_list_selector;
- typedef typename graph_type::edge_list_selector edge_list_selector;
- typedef typename graph_type::out_edge_list_selector out_edge_list_selector;
- typedef typename graph_type::directed_selector directed_selector;
-
-public:
- // more commonly used graph types
- typedef typename graph_type::stored_vertex stored_vertex;
- typedef typename graph_type::vertices_size_type vertices_size_type;
- typedef typename graph_type::edges_size_type edges_size_type;
- typedef typename graph_type::degree_size_type degree_size_type;
- typedef typename graph_type::vertex_descriptor vertex_descriptor;
- typedef typename graph_type::edge_descriptor edge_descriptor;
-
- // iterator types
- typedef typename graph_type::vertex_iterator vertex_iterator;
- typedef typename graph_type::edge_iterator edge_iterator;
- typedef typename graph_type::out_edge_iterator out_edge_iterator;
- typedef typename graph_type::in_edge_iterator in_edge_iterator;
- typedef typename graph_type::adjacency_iterator adjacency_iterator;
-
- // miscellaneous types
- typedef undirected_graph_tag graph_tag;
- typedef typename graph_type::directed_category directed_category;
- typedef typename graph_type::edge_parallel_category edge_parallel_category;
- typedef typename graph_type::traversal_category traversal_category;
-
- typedef std::size_t vertex_index_type;
- typedef std::size_t edge_index_type;
-
- inline undirected_graph(GraphProp const& p = GraphProp())
- : m_graph(p)
- , m_num_vertices(0)
- , m_num_edges(0)
- , m_max_vertex_index(0)
- , m_max_edge_index(0)
- {
- }
-
- inline undirected_graph(undirected_graph const& x)
- : m_graph(x.m_graph)
- , m_num_vertices(x.m_num_vertices)
- , m_num_edges(x.m_num_edges)
- , m_max_vertex_index(x.m_max_vertex_index)
- , m_max_edge_index(x.m_max_edge_index)
- {
- }
-
- inline undirected_graph(
- vertices_size_type n, GraphProp const& p = GraphProp())
- : m_graph(n, p)
- , m_num_vertices(n)
- , m_num_edges(0)
- , m_max_vertex_index(n)
- , m_max_edge_index(0)
- {
- renumber_vertex_indices();
- }
-
- template < typename EdgeIterator >
- inline undirected_graph(EdgeIterator f, EdgeIterator l,
- vertices_size_type n, edges_size_type m = 0,
- GraphProp const& p = GraphProp())
- : m_graph(f, l, n, m, p)
- , m_num_vertices(n)
- , m_num_edges(0)
- , m_max_vertex_index(n)
- , m_max_edge_index(0)
- {
- // Unfortunately, we have to renumber to ensure correct indexing.
- renumber_indices();
-
- // Can't always guarantee that the number of edges is actually
- // m if distance(f, l) != m (or is undefined).
- m_num_edges = m_max_edge_index = boost::num_edges(m_graph);
- }
-
- undirected_graph& operator=(undirected_graph const& g)
- {
- if (&g != this)
- {
- m_graph = g.m_graph;
- m_num_vertices = g.m_num_vertices;
- m_num_edges = g.m_num_edges;
- m_max_vertex_index = g.m_max_vertex_index;
- }
- return *this;
- }
-
- // The impl_() methods are not part of the public interface.
- graph_type& impl() { return m_graph; }
-
- graph_type const& impl() const { return m_graph; }
-
- // The following methods are not part of the public interface
- vertices_size_type num_vertices() const { return m_num_vertices; }
-
-private:
- // This helper function manages the attribution of vertex indices.
- vertex_descriptor make_index(vertex_descriptor v)
- {
- boost::put(vertex_index, m_graph, v, m_max_vertex_index);
- m_num_vertices++;
- m_max_vertex_index++;
- return v;
- }
-
-public:
- vertex_descriptor add_vertex()
- {
- return make_index(boost::add_vertex(m_graph));
- }
-
- vertex_descriptor add_vertex(vertex_property_type const& p)
- {
- return make_index(
- boost::add_vertex(internal_vertex_property(0u, p), m_graph));
- }
-
- void clear_vertex(vertex_descriptor v)
- {
- std::pair< out_edge_iterator, out_edge_iterator > p
- = boost::out_edges(v, m_graph);
- m_num_edges -= std::distance(p.first, p.second);
- boost::clear_vertex(v, m_graph);
- }
-
- void remove_vertex(vertex_descriptor v)
- {
- boost::remove_vertex(v, m_graph);
- --m_num_vertices;
- }
-
- edges_size_type num_edges() const { return m_num_edges; }
-
-private:
- // A helper fucntion for managing edge index attributes.
- std::pair< edge_descriptor, bool > const& make_index(
- std::pair< edge_descriptor, bool > const& x)
- {
- if (x.second)
- {
- boost::put(edge_index, m_graph, x.first, m_max_edge_index);
- ++m_num_edges;
- ++m_max_edge_index;
- }
- return x;
- }
-
-public:
- std::pair< edge_descriptor, bool > add_edge(
- vertex_descriptor u, vertex_descriptor v)
- {
- return make_index(boost::add_edge(u, v, m_graph));
- }
-
- std::pair< edge_descriptor, bool > add_edge(
- vertex_descriptor u, vertex_descriptor v, edge_property_type const& p)
- {
- return make_index(
- boost::add_edge(u, v, internal_edge_property(0u, p), m_graph));
- }
-
- void remove_edge(vertex_descriptor u, vertex_descriptor v)
- {
- // find all edges, (u, v)
- std::vector< edge_descriptor > edges;
- out_edge_iterator i, i_end;
- for (boost::tie(i, i_end) = boost::out_edges(u, m_graph); i != i_end;
- ++i)
- {
- if (boost::target(*i, m_graph) == v)
- {
- edges.push_back(*i);
- }
- }
- // remove all edges, (u, v)
- typename std::vector< edge_descriptor >::iterator j = edges.begin(),
- j_end = edges.end();
- for (; j != j_end; ++j)
- {
- remove_edge(*j);
- }
- }
-
- void remove_edge(edge_iterator i) { remove_edge(*i); }
-
- void remove_edge(edge_descriptor e)
- {
- boost::remove_edge(e, m_graph);
- --m_num_edges;
- }
-
- vertex_index_type max_vertex_index() const { return m_max_vertex_index; }
-
- void renumber_vertex_indices()
- {
- vertex_iterator i, i_end;
- boost::tie(i, i_end) = vertices(m_graph);
- m_max_vertex_index = renumber_vertex_indices(i, i_end, 0);
- }
-
- void remove_vertex_and_renumber_indices(vertex_iterator i)
- {
- vertex_iterator j = next(i), end = vertices(m_graph).second;
- vertex_index_type n = get(vertex_index, m_graph, *i);
-
- // remove the offending vertex and renumber everything after
- remove_vertex(*i);
- m_max_vertex_index = renumber_vertex_indices(j, end, n);
- }
-
- edge_index_type max_edge_index() const { return m_max_edge_index; }
-
- void renumber_edge_indices()
- {
- edge_iterator i, end;
- boost::tie(i, end) = edges(m_graph);
- m_max_edge_index = renumber_edge_indices(i, end, 0);
- }
-
- void remove_edge_and_renumber_indices(edge_iterator i)
- {
- edge_iterator j = next(i), end = edges(m_graph.second);
- edge_index_type n = get(edge_index, m_graph, *i);
-
- // remove the edge and renumber everything after it
- remove_edge(*i);
- m_max_edge_index = renumber_edge_indices(j, end, n);
- }
-
- void renumber_indices()
- {
- renumber_vertex_indices();
- renumber_edge_indices();
- }
-
- // bundled property support
-#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
- vertex_bundled& operator[](vertex_descriptor v) { return m_graph[v]; }
-
- vertex_bundled const& operator[](vertex_descriptor v) const
- {
- return m_graph[v];
- }
-
- edge_bundled& operator[](edge_descriptor e) { return m_graph[e]; }
-
- edge_bundled const& operator[](edge_descriptor e) const
- {
- return m_graph[e];
- }
-
- graph_bundled& operator[](graph_bundle_t) { return get_property(*this); }
-
- graph_bundled const& operator[](graph_bundle_t) const
- {
- return get_property(*this);
- }
-#endif
-
- // Graph concepts
- static vertex_descriptor null_vertex() { return graph_type::null_vertex(); }
-
- void clear()
- {
- m_graph.clear();
- m_num_vertices = m_max_vertex_index = 0;
- m_num_edges = m_max_edge_index = 0;
- }
-
- void swap(undirected_graph& g)
- {
- m_graph.swap(g.m_graph);
- std::swap(m_num_vertices, g.m_num_vertices);
- std::swap(m_max_vertex_index, g.m_max_vertex_index);
- std::swap(m_num_edges, g.m_num_edges);
- std::swap(m_max_edge_index, g.m_max_edge_index);
- }
-
-private:
- vertices_size_type renumber_vertex_indices(
- vertex_iterator i, vertex_iterator end, vertices_size_type n)
- {
- typedef
- typename property_map< graph_type, vertex_index_t >::type IndexMap;
- IndexMap indices = get(vertex_index, m_graph);
- for (; i != end; ++i)
- {
- indices[*i] = n++;
- }
- return n;
- }
-
- edges_size_type renumber_edge_indices(
- edge_iterator i, edge_iterator end, edges_size_type n)
- {
- typedef
- typename property_map< graph_type, edge_index_t >::type IndexMap;
- IndexMap indices = get(edge_index, m_graph);
- for (; i != end; ++i)
- {
- indices[*i] = n++;
- }
- return n;
- }
-
- graph_type m_graph;
- vertices_size_type m_num_vertices;
- edges_size_type m_num_edges;
- vertex_index_type m_max_vertex_index;
- edge_index_type m_max_edge_index;
-};
-
-#define UNDIRECTED_GRAPH_PARAMS typename VP, typename EP, typename GP
-#define UNDIRECTED_GRAPH undirected_graph< VP, EP, GP >
-
-// IncidenceGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::vertex_descriptor source(
- typename UNDIRECTED_GRAPH::edge_descriptor e, UNDIRECTED_GRAPH const& g)
-{
- return source(e, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::vertex_descriptor target(
- typename UNDIRECTED_GRAPH::edge_descriptor e, UNDIRECTED_GRAPH const& g)
-{
- return target(e, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::degree_size_type out_degree(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return out_degree(v, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::out_edge_iterator,
- typename UNDIRECTED_GRAPH::out_edge_iterator >
-out_edges(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return out_edges(v, g.impl());
-}
-
-// BidirectionalGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::degree_size_type in_degree(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return in_degree(v, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::in_edge_iterator,
- typename UNDIRECTED_GRAPH::in_edge_iterator >
-in_edges(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return in_edges(v, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::out_edge_iterator,
- typename UNDIRECTED_GRAPH::out_edge_iterator >
-incident_edges(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return out_edges(v, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::degree_size_type degree(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return degree(v, g.impl());
-}
-
-// AdjacencyGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::adjacency_iterator,
- typename UNDIRECTED_GRAPH::adjacency_iterator >
-adjacent_vertices(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return adjacent_vertices(v, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-typename UNDIRECTED_GRAPH::vertex_descriptor vertex(
- typename UNDIRECTED_GRAPH::vertices_size_type n, UNDIRECTED_GRAPH const& g)
-{
- return vertex(n, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-std::pair< typename UNDIRECTED_GRAPH::edge_descriptor, bool > edge(
- typename UNDIRECTED_GRAPH::vertex_descriptor u,
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return edge(u, v, g.impl());
-}
-
-// VertexListGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::vertices_size_type num_vertices(
- UNDIRECTED_GRAPH const& g)
-{
- return g.num_vertices();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::vertex_iterator,
- typename UNDIRECTED_GRAPH::vertex_iterator >
-vertices(UNDIRECTED_GRAPH const& g)
-{
- return vertices(g.impl());
-}
-
-// EdgeListGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::edges_size_type num_edges(
- UNDIRECTED_GRAPH const& g)
-{
- return g.num_edges();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::edge_iterator,
- typename UNDIRECTED_GRAPH::edge_iterator >
-edges(UNDIRECTED_GRAPH const& g)
-{
- return edges(g.impl());
-}
-
-// MutableGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::vertex_descriptor add_vertex(
- UNDIRECTED_GRAPH& g)
-{
- return g.add_vertex();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::vertex_descriptor add_vertex(
- typename UNDIRECTED_GRAPH::vertex_property_type const& p,
- UNDIRECTED_GRAPH& g)
-{
- return g.add_vertex(p);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void clear_vertex(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH& g)
-{
- return g.clear_vertex(v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void remove_vertex(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH& g)
-{
- return g.remove_vertex(v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::edge_descriptor, bool > add_edge(
- typename UNDIRECTED_GRAPH::vertex_descriptor u,
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH& g)
-{
- return g.add_edge(u, v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline std::pair< typename UNDIRECTED_GRAPH::edge_descriptor, bool > add_edge(
- typename UNDIRECTED_GRAPH::vertex_descriptor u,
- typename UNDIRECTED_GRAPH::vertex_descriptor v,
- typename UNDIRECTED_GRAPH::edge_property_type const& p, UNDIRECTED_GRAPH& g)
-{
- return g.add_edge(u, v, p);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void remove_edge(typename UNDIRECTED_GRAPH::vertex_descriptor u,
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH& g)
-{
- return g.remove_edge(u, v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void remove_edge(
- typename UNDIRECTED_GRAPH::edge_descriptor e, UNDIRECTED_GRAPH& g)
-{
- return g.remove_edge(e);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void remove_edge(
- typename UNDIRECTED_GRAPH::edge_iterator i, UNDIRECTED_GRAPH& g)
-{
- return g.remove_edge(i);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_edge_if(Predicate pred, UNDIRECTED_GRAPH& g)
-{
- return remove_edge_if(pred, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_incident_edge_if(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, Predicate pred,
- UNDIRECTED_GRAPH& g)
-{
- return remove_out_edge_if(v, pred, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_out_edge_if(typename UNDIRECTED_GRAPH::vertex_descriptor v,
- Predicate pred, UNDIRECTED_GRAPH& g)
-{
- return remove_out_edge_if(v, pred, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Predicate >
-inline void remove_in_edge_if(typename UNDIRECTED_GRAPH::vertex_descriptor v,
- Predicate pred, UNDIRECTED_GRAPH& g)
-{
- return remove_in_edge_if(v, pred, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Property >
-struct property_map< UNDIRECTED_GRAPH, Property >
-: property_map< typename UNDIRECTED_GRAPH::graph_type, Property >
-{
-};
-
-template < UNDIRECTED_GRAPH_PARAMS >
-struct property_map< UNDIRECTED_GRAPH, vertex_all_t >
-{
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename UNDIRECTED_GRAPH::graph_type,
- vertex_all_t >::const_type >
- const_type;
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename UNDIRECTED_GRAPH::graph_type,
- vertex_all_t >::type >
- type;
-};
-
-template < UNDIRECTED_GRAPH_PARAMS >
-struct property_map< UNDIRECTED_GRAPH, edge_all_t >
-{
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename UNDIRECTED_GRAPH::graph_type,
- edge_all_t >::const_type >
- const_type;
- typedef transform_value_property_map< detail::remove_first_property,
- typename property_map< typename UNDIRECTED_GRAPH::graph_type,
- edge_all_t >::type >
- type;
-};
-
-// PropertyGraph concepts
-template < UNDIRECTED_GRAPH_PARAMS, typename Property >
-inline typename property_map< UNDIRECTED_GRAPH, Property >::type get(
- Property p, UNDIRECTED_GRAPH& g)
-{
- return get(p, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Property >
-inline typename property_map< UNDIRECTED_GRAPH, Property >::const_type get(
- Property p, UNDIRECTED_GRAPH const& g)
-{
- return get(p, g.impl());
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename property_map< UNDIRECTED_GRAPH, vertex_all_t >::type get(
- vertex_all_t, UNDIRECTED_GRAPH& g)
-{
- return typename property_map< UNDIRECTED_GRAPH, vertex_all_t >::type(
- detail::remove_first_property(), get(vertex_all, g.impl()));
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename property_map< UNDIRECTED_GRAPH, vertex_all_t >::const_type get(
- vertex_all_t, UNDIRECTED_GRAPH const& g)
-{
- return typename property_map< UNDIRECTED_GRAPH, vertex_all_t >::const_type(
- detail::remove_first_property(), get(vertex_all, g.impl()));
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename property_map< UNDIRECTED_GRAPH, edge_all_t >::type get(
- edge_all_t, UNDIRECTED_GRAPH& g)
-{
- return typename property_map< UNDIRECTED_GRAPH, edge_all_t >::type(
- detail::remove_first_property(), get(edge_all, g.impl()));
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename property_map< UNDIRECTED_GRAPH, edge_all_t >::const_type get(
- edge_all_t, UNDIRECTED_GRAPH const& g)
-{
- return typename property_map< UNDIRECTED_GRAPH, edge_all_t >::const_type(
- detail::remove_first_property(), get(edge_all, g.impl()));
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Property, typename Key >
-inline typename property_traits< typename property_map<
- typename UNDIRECTED_GRAPH::graph_type, Property >::const_type >::value_type
-get(Property p, UNDIRECTED_GRAPH const& g, Key const& k)
-{
- return get(p, g.impl(), k);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Key >
-inline typename property_traits<
- typename property_map< typename UNDIRECTED_GRAPH::graph_type,
- vertex_all_t >::const_type >::value_type
-get(vertex_all_t, UNDIRECTED_GRAPH const& g, Key const& k)
-{
- return get(vertex_all, g.impl(), k).m_base;
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Key >
-inline typename property_traits<
- typename property_map< typename UNDIRECTED_GRAPH::graph_type,
- edge_all_t >::const_type >::value_type
-get(edge_all_t, UNDIRECTED_GRAPH const& g, Key const& k)
-{
- return get(edge_all, g.impl(), k).m_base;
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Property, typename Key,
- typename Value >
-inline void put(Property p, UNDIRECTED_GRAPH& g, Key const& k, Value const& v)
-{
- put(p, g.impl(), k, v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Key, typename Value >
-inline void put(vertex_all_t, UNDIRECTED_GRAPH& g, Key const& k, Value const& v)
-{
- put(vertex_all, g.impl(), k,
- typename UNDIRECTED_GRAPH::internal_vertex_property(
- get(vertex_index, g.impl(), k), v));
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, typename Key, typename Value >
-inline void put(edge_all_t, UNDIRECTED_GRAPH& g, Key const& k, Value const& v)
-{
- put(edge_all, g.impl(), k,
- typename UNDIRECTED_GRAPH::internal_vertex_property(
- get(edge_index, g.impl(), k), v));
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Property >
-inline typename graph_property< UNDIRECTED_GRAPH, Property >::type&
-get_property(UNDIRECTED_GRAPH& g, Property p)
-{
- return get_property(g.impl(), p);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Property >
-inline typename graph_property< UNDIRECTED_GRAPH, Property >::type const&
-get_property(UNDIRECTED_GRAPH const& g, Property p)
-{
- return get_property(g.impl(), p);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS, class Property, class Value >
-inline void set_property(UNDIRECTED_GRAPH& g, Property p, Value v)
-{
- return set_property(g.impl(), p, v);
-}
-
-// Indexed Vertex graph
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::vertex_index_type get_vertex_index(
- typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return get(vertex_index, g, v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-typename UNDIRECTED_GRAPH::vertex_index_type max_vertex_index(
- UNDIRECTED_GRAPH const& g)
-{
- return g.max_vertex_index();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void renumber_vertex_indices(UNDIRECTED_GRAPH& g)
-{
- g.renumber_vertex_indices();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void remove_vertex_and_renumber_indices(
- typename UNDIRECTED_GRAPH::vertex_iterator i, UNDIRECTED_GRAPH& g)
-{
- g.remove_vertex_and_renumber_indices(i);
-}
-
-// Edge index management
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline typename UNDIRECTED_GRAPH::edge_index_type get_edge_index(
- typename UNDIRECTED_GRAPH::edge_descriptor v, UNDIRECTED_GRAPH const& g)
-{
- return get(edge_index, g, v);
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-typename UNDIRECTED_GRAPH::edge_index_type max_edge_index(
- UNDIRECTED_GRAPH const& g)
-{
- return g.max_edge_index();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void renumber_edge_indices(UNDIRECTED_GRAPH& g)
-{
- g.renumber_edge_indices();
-}
-
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void remove_edge_and_renumber_indices(
- typename UNDIRECTED_GRAPH::edge_iterator i, UNDIRECTED_GRAPH& g)
-{
- g.remove_edge_and_renumber_indices(i);
-}
-
-// Index management
-template < UNDIRECTED_GRAPH_PARAMS >
-inline void renumber_indices(UNDIRECTED_GRAPH& g)
-{
- g.renumber_indices();
-}
-
-// Mutability Traits
-template < UNDIRECTED_GRAPH_PARAMS >
-struct graph_mutability_traits< UNDIRECTED_GRAPH >
-{
- typedef mutable_property_graph_tag category;
-};
-
-#undef UNDIRECTED_GRAPH_PARAMS
-#undef UNDIRECTED_GRAPH
-
-} /* namespace boost */
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/graph/vector_as_graph.hpp b/contrib/restricted/boost/graph/include/boost/graph/vector_as_graph.hpp
deleted file mode 100644
index 444df87674..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/vector_as_graph.hpp
+++ /dev/null
@@ -1,334 +0,0 @@
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Copyright 2006 The Trustees of Indiana University.
-// Copyright (C) 2001 Vladimir Prus <ghost@cs.msu.su>
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Douglas Gregor
-//
-// 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)
-//=======================================================================
-
-// The mutating functions (add_edge, etc.) were added by Vladimir Prus.
-
-#ifndef BOOST_VECTOR_AS_GRAPH_HPP
-#define BOOST_VECTOR_AS_GRAPH_HPP
-
-#include <cassert>
-#include <utility>
-#include <vector>
-#include <cstddef>
-#include <iterator>
-#include <boost/iterator/counting_iterator.hpp>
-#include <boost/range/irange.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/property_map/property_map.hpp>
-#include <boost/graph/properties.hpp>
-#include <algorithm>
-
-/*
- This module implements the VertexListGraph concept using a
- std::vector as the "back-bone" of the graph (the vector *is* the
- graph object). The edge-lists type of the graph is templated, so the
- user can choose any STL container, so long as the value_type of the
- container is convertible to the size_type of the vector. For now any
- graph properties must be stored seperately.
-
- This module requires the C++ compiler to support partial
- specialization for the graph_traits class, so this is not portable
- to VC++.
-
-*/
-
-namespace boost
-{
-namespace detail
-{
- template < class EdgeList > struct val_out_edge_ret;
- template < class EdgeList > struct val_out_edge_iter;
- template < class EdgeList > struct val_edge;
-}
-}
-
-namespace boost
-{
-
-struct vector_as_graph_traversal_tag : public vertex_list_graph_tag,
- public adjacency_graph_tag,
- public incidence_graph_tag
-{
-};
-
-template < class EdgeList > struct graph_traits< std::vector< EdgeList > >
-{
- typedef typename EdgeList::value_type V;
- typedef V vertex_descriptor;
- typedef typename detail::val_edge< EdgeList >::type edge_descriptor;
- typedef typename EdgeList::const_iterator adjacency_iterator;
- typedef
- typename detail::val_out_edge_iter< EdgeList >::type out_edge_iterator;
- typedef void in_edge_iterator;
- typedef void edge_iterator;
- typedef counting_iterator< V > vertex_iterator;
- typedef directed_tag directed_category;
- typedef allow_parallel_edge_tag edge_parallel_category;
- typedef vector_as_graph_traversal_tag traversal_category;
- typedef typename std::vector< EdgeList >::size_type vertices_size_type;
- typedef void edges_size_type;
- typedef typename EdgeList::size_type degree_size_type;
- static V null_vertex() { return V(-1); }
-};
-template < class EdgeList > struct edge_property_type< std::vector< EdgeList > >
-{
- typedef void type;
-};
-template < class EdgeList >
-struct vertex_property_type< std::vector< EdgeList > >
-{
- typedef void type;
-};
-template < class EdgeList >
-struct graph_property_type< std::vector< EdgeList > >
-{
- typedef void type;
-};
-}
-
-namespace boost
-{
-
-namespace detail
-{
-
- // "val" is short for Vector Adjacency List
-
- template < class EdgeList > struct val_edge
- {
- typedef typename EdgeList::value_type V;
- typedef std::pair< V, V > type;
- };
-
- // need rewrite this using boost::iterator_adaptor
- template < class V, class Iter > class val_out_edge_iterator
- {
- typedef val_out_edge_iterator self;
- typedef std::pair< V, V > Edge;
-
- public:
- typedef std::input_iterator_tag iterator_category;
- typedef std::pair< V, V > value_type;
- typedef std::ptrdiff_t difference_type;
- typedef std::pair< V, V >* pointer;
- typedef const std::pair< V, V > reference;
- val_out_edge_iterator() {}
- val_out_edge_iterator(V s, Iter i) : _source(s), _iter(i) {}
- Edge operator*() const { return Edge(_source, *_iter); }
- self& operator++()
- {
- ++_iter;
- return *this;
- }
- self operator++(int)
- {
- self t = *this;
- ++_iter;
- return t;
- }
- bool operator==(const self& x) const { return _iter == x._iter; }
- bool operator!=(const self& x) const { return _iter != x._iter; }
-
- protected:
- V _source;
- Iter _iter;
- };
-
- template < class EdgeList > struct val_out_edge_iter
- {
- typedef typename EdgeList::value_type V;
- typedef typename EdgeList::const_iterator Iter;
- typedef val_out_edge_iterator< V, Iter > type;
- };
-
- template < class EdgeList > struct val_out_edge_ret
- {
- typedef typename val_out_edge_iter< EdgeList >::type IncIter;
- typedef std::pair< IncIter, IncIter > type;
- };
-
-} // namesapce detail
-
-template < class EdgeList, class Alloc >
-typename detail::val_out_edge_ret< EdgeList >::type out_edges(
- typename EdgeList::value_type v, const std::vector< EdgeList, Alloc >& g)
-{
- typedef typename detail::val_out_edge_iter< EdgeList >::type Iter;
- typedef typename detail::val_out_edge_ret< EdgeList >::type return_type;
- return return_type(Iter(v, g[v].begin()), Iter(v, g[v].end()));
-}
-
-template < class EdgeList, class Alloc >
-typename EdgeList::size_type out_degree(
- typename EdgeList::value_type v, const std::vector< EdgeList, Alloc >& g)
-{
- return g[v].size();
-}
-
-template < class EdgeList, class Alloc >
-std::pair< typename EdgeList::const_iterator,
- typename EdgeList::const_iterator >
-adjacent_vertices(
- typename EdgeList::value_type v, const std::vector< EdgeList, Alloc >& g)
-{
- return std::make_pair(g[v].begin(), g[v].end());
-}
-
-// source() and target() already provided for pairs in graph_traits.hpp
-
-template < class EdgeList, class Alloc >
-std::pair< boost::counting_iterator< typename EdgeList::value_type >,
- boost::counting_iterator< typename EdgeList::value_type > >
-vertices(const std::vector< EdgeList, Alloc >& v)
-{
- typedef boost::counting_iterator< typename EdgeList::value_type > Iter;
- return std::make_pair(Iter(0), Iter(v.size()));
-}
-
-template < class EdgeList, class Alloc >
-typename std::vector< EdgeList, Alloc >::size_type num_vertices(
- const std::vector< EdgeList, Alloc >& v)
-{
- return v.size();
-}
-
-template < class EdgeList, class Allocator >
-typename std::pair< typename detail::val_edge< EdgeList >::type, bool >
-add_edge(typename EdgeList::value_type u, typename EdgeList::value_type v,
- std::vector< EdgeList, Allocator >& g)
-{
- typedef typename detail::val_edge< EdgeList >::type edge_type;
- g[u].insert(g[u].end(), v);
- return std::make_pair(edge_type(u, v), true);
-}
-
-template < class EdgeList, class Allocator >
-typename std::pair< typename detail::val_edge< EdgeList >::type, bool > edge(
- typename EdgeList::value_type u, typename EdgeList::value_type v,
- std::vector< EdgeList, Allocator >& g)
-{
- typedef typename detail::val_edge< EdgeList >::type edge_type;
- typename EdgeList::iterator i = g[u].begin(), end = g[u].end();
- for (; i != end; ++i)
- if (*i == v)
- return std::make_pair(edge_type(u, v), true);
- return std::make_pair(edge_type(), false);
-}
-
-template < class EdgeList, class Allocator >
-void remove_edge(typename EdgeList::value_type u,
- typename EdgeList::value_type v, std::vector< EdgeList, Allocator >& g)
-{
- typename EdgeList::iterator i = std::remove(g[u].begin(), g[u].end(), v);
- if (i != g[u].end())
- g[u].erase(i, g[u].end());
-}
-
-template < class EdgeList, class Allocator >
-void remove_edge(typename detail::val_edge< EdgeList >::type e,
- std::vector< EdgeList, Allocator >& g)
-{
- typename EdgeList::value_type u, v;
- u = e.first;
- v = e.second;
- // FIXME: edge type does not fully specify the edge to be deleted
- typename EdgeList::iterator i = std::remove(g[u].begin(), g[u].end(), v);
- if (i != g[u].end())
- g[u].erase(i, g[u].end());
-}
-
-template < class EdgeList, class Allocator, class Predicate >
-void remove_edge_if(Predicate p, std::vector< EdgeList, Allocator >& g)
-{
- for (std::size_t u = 0; u < g.size(); ++u)
- {
- // Oops! gcc gets internal compiler error on compose_.......
-
- typedef typename EdgeList::iterator iterator;
- iterator b = g[u].begin(), e = g[u].end();
-
- if (!g[u].empty())
- {
-
- for (; b != e;)
- {
- if (p(std::make_pair(u, *b)))
- {
- --e;
- if (b == e)
- break;
- else
- iter_swap(b, e);
- }
- else
- {
- ++b;
- }
- }
- }
-
- if (e != g[u].end())
- g[u].erase(e, g[u].end());
- }
-}
-
-template < class EdgeList, class Allocator >
-typename EdgeList::value_type add_vertex(std::vector< EdgeList, Allocator >& g)
-{
- g.resize(g.size() + 1);
- return g.size() - 1;
-}
-
-template < class EdgeList, class Allocator >
-void clear_vertex(
- typename EdgeList::value_type u, std::vector< EdgeList, Allocator >& g)
-{
- g[u].clear();
- for (std::size_t i = 0; i < g.size(); ++i)
- remove_edge(i, u, g);
-}
-
-template < class EdgeList, class Allocator >
-void remove_vertex(
- typename EdgeList::value_type u, std::vector< EdgeList, Allocator >& g)
-{
- typedef typename EdgeList::iterator iterator;
- clear_vertex(u, g);
- g.erase(g.begin() + u);
- for (std::size_t i = 0; i < g.size(); ++i)
- for (iterator it = g[i].begin(); it != g[i].end(); ++it)
- // after clear_vertex *it is never equal to u
- if (*it > u)
- --*it;
-}
-
-template < typename EdgeList, typename Allocator >
-struct property_map< std::vector< EdgeList, Allocator >, vertex_index_t >
-{
- typedef identity_property_map type;
- typedef type const_type;
-};
-
-template < typename EdgeList, typename Allocator >
-identity_property_map get(
- vertex_index_t, const std::vector< EdgeList, Allocator >&)
-{
- return identity_property_map();
-}
-
-template < typename EdgeList, typename Allocator >
-identity_property_map get(vertex_index_t, std::vector< EdgeList, Allocator >&)
-{
- return identity_property_map();
-}
-} // namespace boost
-
-#endif // BOOST_VECTOR_AS_GRAPH_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/vertex_and_edge_range.hpp b/contrib/restricted/boost/graph/include/boost/graph/vertex_and_edge_range.hpp
deleted file mode 100644
index c9e217bd72..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/vertex_and_edge_range.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-
-#ifndef BOOST_GRAPH_VERTEX_AND_EDGE_RANGE_HPP
-#define BOOST_GRAPH_VERTEX_AND_EDGE_RANGE_HPP
-
-#include <boost/graph/graph_traits.hpp>
-#include <iterator>
-
-namespace boost
-{
-
-namespace graph
-{
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- class vertex_and_edge_range
- {
- typedef graph_traits< Graph > traits_type;
-
- public:
- typedef typename traits_type::directed_category directed_category;
- typedef
- typename traits_type::edge_parallel_category edge_parallel_category;
- struct traversal_category : public virtual vertex_list_graph_tag,
- public virtual edge_list_graph_tag
- {
- };
-
- typedef std::size_t vertices_size_type;
- typedef VertexIterator vertex_iterator;
- typedef typename std::iterator_traits< VertexIterator >::value_type
- vertex_descriptor;
-
- typedef EdgeIterator edge_iterator;
- typedef typename std::iterator_traits< EdgeIterator >::value_type
- edge_descriptor;
-
- typedef std::size_t edges_size_type;
-
- typedef void adjacency_iterator;
- typedef void out_edge_iterator;
- typedef void in_edge_iterator;
- typedef void degree_size_type;
-
- static vertex_descriptor null_vertex()
- {
- return traits_type::null_vertex();
- }
-
- vertex_and_edge_range(const Graph& g, VertexIterator first_v,
- VertexIterator last_v, vertices_size_type n, EdgeIterator first_e,
- EdgeIterator last_e, edges_size_type m)
- : g(&g)
- , first_vertex(first_v)
- , last_vertex(last_v)
- , m_num_vertices(n)
- , first_edge(first_e)
- , last_edge(last_e)
- , m_num_edges(m)
- {
- }
-
- vertex_and_edge_range(const Graph& g, VertexIterator first_v,
- VertexIterator last_v, EdgeIterator first_e, EdgeIterator last_e)
- : g(&g)
- , first_vertex(first_v)
- , last_vertex(last_v)
- , first_edge(first_e)
- , last_edge(last_e)
- {
- m_num_vertices = std::distance(first_v, last_v);
- m_num_edges = std::distance(first_e, last_e);
- }
-
- const Graph* g;
- vertex_iterator first_vertex;
- vertex_iterator last_vertex;
- vertices_size_type m_num_vertices;
- edge_iterator first_edge;
- edge_iterator last_edge;
- edges_size_type m_num_edges;
- };
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline std::pair< VertexIterator, VertexIterator > vertices(
- const vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >& g)
- {
- return std::make_pair(g.first_vertex, g.last_vertex);
- }
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline typename vertex_and_edge_range< Graph, VertexIterator,
- EdgeIterator >::vertices_size_type
- num_vertices(
- const vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >& g)
- {
- return g.m_num_vertices;
- }
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline std::pair< EdgeIterator, EdgeIterator > edges(
- const vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >& g)
- {
- return std::make_pair(g.first_edge, g.last_edge);
- }
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline typename vertex_and_edge_range< Graph, VertexIterator,
- EdgeIterator >::edges_size_type
- num_edges(
- const vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >& g)
- {
- return g.m_num_edges;
- }
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline typename vertex_and_edge_range< Graph, VertexIterator,
- EdgeIterator >::vertex_descriptor
- source(typename vertex_and_edge_range< Graph, VertexIterator,
- EdgeIterator >::edge_descriptor e,
- const vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >& g)
- {
- return source(e, *g.g);
- }
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline typename vertex_and_edge_range< Graph, VertexIterator,
- EdgeIterator >::vertex_descriptor
- target(typename vertex_and_edge_range< Graph, VertexIterator,
- EdgeIterator >::edge_descriptor e,
- const vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >& g)
- {
- return target(e, *g.g);
- }
-
- template < typename Graph, typename VertexIterator, typename EdgeIterator >
- inline vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >
- make_vertex_and_edge_range(const Graph& g, VertexIterator first_v,
- VertexIterator last_v, EdgeIterator first_e, EdgeIterator last_e)
- {
- typedef vertex_and_edge_range< Graph, VertexIterator, EdgeIterator >
- result_type;
- return result_type(g, first_v, last_v, first_e, last_e);
- }
-
-} // end namespace graph
-
-using graph::make_vertex_and_edge_range;
-using graph::vertex_and_edge_range;
-
-} // end namespace boost
-#endif // BOOST_GRAPH_VERTEX_AND_EDGE_RANGE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/vf2_sub_graph_iso.hpp b/contrib/restricted/boost/graph/include/boost/graph/vf2_sub_graph_iso.hpp
deleted file mode 100644
index 77f7496bd1..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/vf2_sub_graph_iso.hpp
+++ /dev/null
@@ -1,1301 +0,0 @@
-//=======================================================================
-// Copyright (C) 2012 Flavio De Lorenzi (fdlorenzi@gmail.com)
-// Copyright (C) 2013 Jakob Lykke Andersen, University of Southern Denmark
-// (jlandersen@imada.sdu.dk)
-//
-// The algorithm implemented here is derived from original ideas by
-// Pasquale Foggia and colaborators. For further information see
-// e.g. Cordella et al. 2001, 2004.
-//
-// 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)
-//=======================================================================
-
-// Revision History:
-// 8 April 2013: Fixed a typo in vf2_print_callback. (Flavio De Lorenzi)
-
-#ifndef BOOST_VF2_SUB_GRAPH_ISO_HPP
-#define BOOST_VF2_SUB_GRAPH_ISO_HPP
-
-#include <iostream>
-#include <iomanip>
-#include <iterator>
-#include <vector>
-#include <utility>
-
-#include <boost/assert.hpp>
-#include <boost/concept/assert.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/graph/graph_utility.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/mcgregor_common_subgraphs.hpp> // for always_equivalent
-#include <boost/graph/named_function_params.hpp>
-#include <boost/type_traits/has_less.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/range/algorithm/sort.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/utility/enable_if.hpp>
-
-#ifndef BOOST_GRAPH_ITERATION_MACROS_HPP
-#define BOOST_ISO_INCLUDED_ITER_MACROS // local macro, see bottom of file
-#include <boost/graph/iteration_macros.hpp>
-#endif
-
-namespace boost
-{
-
-// Default print_callback
-template < typename Graph1, typename Graph2 > struct vf2_print_callback
-{
-
- vf2_print_callback(const Graph1& graph1, const Graph2& graph2)
- : graph1_(graph1), graph2_(graph2)
- {
- }
-
- template < typename CorrespondenceMap1To2, typename CorrespondenceMap2To1 >
- bool operator()(CorrespondenceMap1To2 f, CorrespondenceMap2To1) const
- {
-
- // Print (sub)graph isomorphism map
- BGL_FORALL_VERTICES_T(v, graph1_, Graph1)
- std::cout << '(' << get(vertex_index_t(), graph1_, v) << ", "
- << get(vertex_index_t(), graph2_, get(f, v)) << ") ";
-
- std::cout << std::endl;
-
- return true;
- }
-
-private:
- const Graph1& graph1_;
- const Graph2& graph2_;
-};
-
-namespace detail
-{
-
- // State associated with a single graph (graph_this)
- template < typename GraphThis, typename GraphOther, typename IndexMapThis,
- typename IndexMapOther >
- class base_state
- {
-
- typedef typename graph_traits< GraphThis >::vertex_descriptor
- vertex_this_type;
- typedef typename graph_traits< GraphOther >::vertex_descriptor
- vertex_other_type;
-
- typedef
- typename graph_traits< GraphThis >::vertices_size_type size_type;
-
- const GraphThis& graph_this_;
- const GraphOther& graph_other_;
-
- IndexMapThis index_map_this_;
- IndexMapOther index_map_other_;
-
- std::vector< vertex_other_type > core_vec_;
- typedef iterator_property_map<
- typename std::vector< vertex_other_type >::iterator, IndexMapThis,
- vertex_other_type, vertex_other_type& >
- core_map_type;
- core_map_type core_;
-
- std::vector< size_type > in_vec_, out_vec_;
- typedef iterator_property_map<
- typename std::vector< size_type >::iterator, IndexMapThis,
- size_type, size_type& >
- in_out_map_type;
- in_out_map_type in_, out_;
-
- size_type term_in_count_, term_out_count_, term_both_count_,
- core_count_;
-
- // Forbidden
- base_state(const base_state&);
- base_state& operator=(const base_state&);
-
- public:
- base_state(const GraphThis& graph_this, const GraphOther& graph_other,
- IndexMapThis index_map_this, IndexMapOther index_map_other)
- : graph_this_(graph_this)
- , graph_other_(graph_other)
- , index_map_this_(index_map_this)
- , index_map_other_(index_map_other)
- , core_vec_(num_vertices(graph_this_),
- graph_traits< GraphOther >::null_vertex())
- , core_(core_vec_.begin(), index_map_this_)
- , in_vec_(num_vertices(graph_this_), 0)
- , out_vec_(num_vertices(graph_this_), 0)
- , in_(in_vec_.begin(), index_map_this_)
- , out_(out_vec_.begin(), index_map_this_)
- , term_in_count_(0)
- , term_out_count_(0)
- , term_both_count_(0)
- , core_count_(0)
- {
- }
-
- // Adds a vertex pair to the state of graph graph_this
- void push(
- const vertex_this_type& v_this, const vertex_other_type& v_other)
- {
-
- ++core_count_;
-
- put(core_, v_this, v_other);
-
- if (!get(in_, v_this))
- {
- put(in_, v_this, core_count_);
- ++term_in_count_;
- if (get(out_, v_this))
- ++term_both_count_;
- }
-
- if (!get(out_, v_this))
- {
- put(out_, v_this, core_count_);
- ++term_out_count_;
- if (get(in_, v_this))
- ++term_both_count_;
- }
-
- BGL_FORALL_INEDGES_T(v_this, e, graph_this_, GraphThis)
- {
- vertex_this_type w = source(e, graph_this_);
- if (!get(in_, w))
- {
- put(in_, w, core_count_);
- ++term_in_count_;
- if (get(out_, w))
- ++term_both_count_;
- }
- }
-
- BGL_FORALL_OUTEDGES_T(v_this, e, graph_this_, GraphThis)
- {
- vertex_this_type w = target(e, graph_this_);
- if (!get(out_, w))
- {
- put(out_, w, core_count_);
- ++term_out_count_;
- if (get(in_, w))
- ++term_both_count_;
- }
- }
- }
-
- // Removes vertex pair from state of graph_this
- void pop(const vertex_this_type& v_this, const vertex_other_type&)
- {
-
- if (!core_count_)
- return;
-
- if (get(in_, v_this) == core_count_)
- {
- put(in_, v_this, 0);
- --term_in_count_;
- if (get(out_, v_this))
- --term_both_count_;
- }
-
- BGL_FORALL_INEDGES_T(v_this, e, graph_this_, GraphThis)
- {
- vertex_this_type w = source(e, graph_this_);
- if (get(in_, w) == core_count_)
- {
- put(in_, w, 0);
- --term_in_count_;
- if (get(out_, w))
- --term_both_count_;
- }
- }
-
- if (get(out_, v_this) == core_count_)
- {
- put(out_, v_this, 0);
- --term_out_count_;
- if (get(in_, v_this))
- --term_both_count_;
- }
-
- BGL_FORALL_OUTEDGES_T(v_this, e, graph_this_, GraphThis)
- {
- vertex_this_type w = target(e, graph_this_);
- if (get(out_, w) == core_count_)
- {
- put(out_, w, 0);
- --term_out_count_;
- if (get(in_, w))
- --term_both_count_;
- }
- }
- put(core_, v_this, graph_traits< GraphOther >::null_vertex());
-
- --core_count_;
- }
-
- // Returns true if the in-terminal set is not empty
- bool term_in() const { return core_count_ < term_in_count_; }
-
- // Returns true if vertex belongs to the in-terminal set
- bool term_in(const vertex_this_type& v) const
- {
- return (get(in_, v) > 0)
- && (get(core_, v) == graph_traits< GraphOther >::null_vertex());
- }
-
- // Returns true if the out-terminal set is not empty
- bool term_out() const { return core_count_ < term_out_count_; }
-
- // Returns true if vertex belongs to the out-terminal set
- bool term_out(const vertex_this_type& v) const
- {
- return (get(out_, v) > 0)
- && (get(core_, v) == graph_traits< GraphOther >::null_vertex());
- }
-
- // Returns true of both (in- and out-terminal) sets are not empty
- bool term_both() const { return core_count_ < term_both_count_; }
-
- // Returns true if vertex belongs to both (in- and out-terminal) sets
- bool term_both(const vertex_this_type& v) const
- {
- return (get(in_, v) > 0) && (get(out_, v) > 0)
- && (get(core_, v) == graph_traits< GraphOther >::null_vertex());
- }
-
- // Returns true if vertex belongs to the core map, i.e. it is in the
- // present mapping
- bool in_core(const vertex_this_type& v) const
- {
- return get(core_, v) != graph_traits< GraphOther >::null_vertex();
- }
-
- // Returns the number of vertices in the mapping
- size_type count() const { return core_count_; }
-
- // Returns the image (in graph_other) of vertex v (in graph_this)
- vertex_other_type core(const vertex_this_type& v) const
- {
- return get(core_, v);
- }
-
- // Returns the mapping
- core_map_type get_map() const { return core_; }
-
- // Returns the "time" (or depth) when vertex was added to the
- // in-terminal set
- size_type in_depth(const vertex_this_type& v) const
- {
- return get(in_, v);
- }
-
- // Returns the "time" (or depth) when vertex was added to the
- // out-terminal set
- size_type out_depth(const vertex_this_type& v) const
- {
- return get(out_, v);
- }
-
- // Returns the terminal set counts
- boost::tuple< size_type, size_type, size_type > term_set() const
- {
- return boost::make_tuple(
- term_in_count_, term_out_count_, term_both_count_);
- }
- };
-
- // Function object that checks whether a valid edge
- // exists. For multi-graphs matched edges are excluded
- template < typename Graph, typename Enable = void >
- struct equivalent_edge_exists
- {
- typedef
- typename boost::graph_traits< Graph >::edge_descriptor edge_type;
-
- BOOST_CONCEPT_ASSERT((LessThanComparable< edge_type >));
-
- template < typename EdgePredicate >
- bool operator()(typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- EdgePredicate is_valid_edge, const Graph& g)
- {
-
- BGL_FORALL_OUTEDGES_T(s, e, g, Graph)
- {
- if ((target(e, g) == t) && is_valid_edge(e)
- && (matched_edges_.find(e) == matched_edges_.end()))
- {
- matched_edges_.insert(e);
- return true;
- }
- }
-
- return false;
- }
-
- private:
- std::set< edge_type > matched_edges_;
- };
-
- template < typename Graph >
- struct equivalent_edge_exists< Graph,
- typename boost::disable_if< is_multigraph< Graph > >::type >
- {
- template < typename EdgePredicate >
- bool operator()(typename graph_traits< Graph >::vertex_descriptor s,
- typename graph_traits< Graph >::vertex_descriptor t,
- EdgePredicate is_valid_edge, const Graph& g)
- {
-
- typename graph_traits< Graph >::edge_descriptor e;
- bool found;
- boost::tie(e, found) = edge(s, t, g);
- if (!found)
- return false;
- else if (is_valid_edge(e))
- return true;
-
- return false;
- }
- };
-
- // Generates a predicate for edge e1 given a binary predicate and a
- // fixed edge e2
- template < typename Graph1, typename Graph2,
- typename EdgeEquivalencePredicate >
- struct edge1_predicate
- {
-
- edge1_predicate(EdgeEquivalencePredicate edge_comp,
- typename graph_traits< Graph2 >::edge_descriptor e2)
- : edge_comp_(edge_comp), e2_(e2)
- {
- }
-
- bool operator()(typename graph_traits< Graph1 >::edge_descriptor e1)
- {
- return edge_comp_(e1, e2_);
- }
-
- EdgeEquivalencePredicate edge_comp_;
- typename graph_traits< Graph2 >::edge_descriptor e2_;
- };
-
- // Generates a predicate for edge e2 given given a binary predicate and a
- // fixed edge e1
- template < typename Graph1, typename Graph2,
- typename EdgeEquivalencePredicate >
- struct edge2_predicate
- {
-
- edge2_predicate(EdgeEquivalencePredicate edge_comp,
- typename graph_traits< Graph1 >::edge_descriptor e1)
- : edge_comp_(edge_comp), e1_(e1)
- {
- }
-
- bool operator()(typename graph_traits< Graph2 >::edge_descriptor e2)
- {
- return edge_comp_(e1_, e2);
- }
-
- EdgeEquivalencePredicate edge_comp_;
- typename graph_traits< Graph1 >::edge_descriptor e1_;
- };
-
- enum problem_selector
- {
- subgraph_mono,
- subgraph_iso,
- isomorphism
- };
-
- // The actual state associated with both graphs
- template < typename Graph1, typename Graph2, typename IndexMap1,
- typename IndexMap2, typename EdgeEquivalencePredicate,
- typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback,
- problem_selector problem_selection >
- class state
- {
-
- typedef typename graph_traits< Graph1 >::vertex_descriptor vertex1_type;
- typedef typename graph_traits< Graph2 >::vertex_descriptor vertex2_type;
-
- typedef typename graph_traits< Graph1 >::edge_descriptor edge1_type;
- typedef typename graph_traits< Graph2 >::edge_descriptor edge2_type;
-
- typedef typename graph_traits< Graph1 >::vertices_size_type
- graph1_size_type;
- typedef typename graph_traits< Graph2 >::vertices_size_type
- graph2_size_type;
-
- const Graph1& graph1_;
- const Graph2& graph2_;
-
- IndexMap1 index_map1_;
-
- EdgeEquivalencePredicate edge_comp_;
- VertexEquivalencePredicate vertex_comp_;
-
- base_state< Graph1, Graph2, IndexMap1, IndexMap2 > state1_;
- base_state< Graph2, Graph1, IndexMap2, IndexMap1 > state2_;
-
- // Three helper functions used in Feasibility and Valid functions to
- // test terminal set counts when testing for:
- // - graph sub-graph monomorphism, or
- inline bool comp_term_sets(graph1_size_type a, graph2_size_type b,
- boost::mpl::int_< subgraph_mono >) const
- {
- return a <= b;
- }
-
- // - graph sub-graph isomorphism, or
- inline bool comp_term_sets(graph1_size_type a, graph2_size_type b,
- boost::mpl::int_< subgraph_iso >) const
- {
- return a <= b;
- }
-
- // - graph isomorphism
- inline bool comp_term_sets(graph1_size_type a, graph2_size_type b,
- boost::mpl::int_< isomorphism >) const
- {
- return a == b;
- }
-
- // Forbidden
- state(const state&);
- state& operator=(const state&);
-
- public:
- state(const Graph1& graph1, const Graph2& graph2, IndexMap1 index_map1,
- IndexMap2 index_map2, EdgeEquivalencePredicate edge_comp,
- VertexEquivalencePredicate vertex_comp)
- : graph1_(graph1)
- , graph2_(graph2)
- , index_map1_(index_map1)
- , edge_comp_(edge_comp)
- , vertex_comp_(vertex_comp)
- , state1_(graph1, graph2, index_map1, index_map2)
- , state2_(graph2, graph1, index_map2, index_map1)
- {
- }
-
- // Add vertex pair to the state
- void push(const vertex1_type& v, const vertex2_type& w)
- {
- state1_.push(v, w);
- state2_.push(w, v);
- }
-
- // Remove vertex pair from state
- void pop(const vertex1_type& v, const vertex2_type&)
- {
- vertex2_type w = state1_.core(v);
- state1_.pop(v, w);
- state2_.pop(w, v);
- }
-
- // Checks the feasibility of a new vertex pair
- bool feasible(const vertex1_type& v_new, const vertex2_type& w_new)
- {
-
- if (!vertex_comp_(v_new, w_new))
- return false;
-
- // graph1
- graph1_size_type term_in1_count = 0, term_out1_count = 0,
- rest1_count = 0;
-
- {
- equivalent_edge_exists< Graph2 > edge2_exists;
-
- BGL_FORALL_INEDGES_T(v_new, e1, graph1_, Graph1)
- {
- vertex1_type v = source(e1, graph1_);
-
- if (state1_.in_core(v) || (v == v_new))
- {
- vertex2_type w = w_new;
- if (v != v_new)
- w = state1_.core(v);
- if (!edge2_exists(w, w_new,
- edge2_predicate< Graph1, Graph2,
- EdgeEquivalencePredicate >(edge_comp_, e1),
- graph2_))
- return false;
- }
- else
- {
- if (0 < state1_.in_depth(v))
- ++term_in1_count;
- if (0 < state1_.out_depth(v))
- ++term_out1_count;
- if ((state1_.in_depth(v) == 0)
- && (state1_.out_depth(v) == 0))
- ++rest1_count;
- }
- }
- }
-
- {
- equivalent_edge_exists< Graph2 > edge2_exists;
-
- BGL_FORALL_OUTEDGES_T(v_new, e1, graph1_, Graph1)
- {
- vertex1_type v = target(e1, graph1_);
- if (state1_.in_core(v) || (v == v_new))
- {
- vertex2_type w = w_new;
- if (v != v_new)
- w = state1_.core(v);
-
- if (!edge2_exists(w_new, w,
- edge2_predicate< Graph1, Graph2,
- EdgeEquivalencePredicate >(edge_comp_, e1),
- graph2_))
- return false;
- }
- else
- {
- if (0 < state1_.in_depth(v))
- ++term_in1_count;
- if (0 < state1_.out_depth(v))
- ++term_out1_count;
- if ((state1_.in_depth(v) == 0)
- && (state1_.out_depth(v) == 0))
- ++rest1_count;
- }
- }
- }
-
- // graph2
- graph2_size_type term_out2_count = 0, term_in2_count = 0,
- rest2_count = 0;
-
- {
- equivalent_edge_exists< Graph1 > edge1_exists;
-
- BGL_FORALL_INEDGES_T(w_new, e2, graph2_, Graph2)
- {
- vertex2_type w = source(e2, graph2_);
- if (state2_.in_core(w) || (w == w_new))
- {
- if (problem_selection != subgraph_mono)
- {
- vertex1_type v = v_new;
- if (w != w_new)
- v = state2_.core(w);
-
- if (!edge1_exists(v, v_new,
- edge1_predicate< Graph1, Graph2,
- EdgeEquivalencePredicate >(
- edge_comp_, e2),
- graph1_))
- return false;
- }
- }
- else
- {
- if (0 < state2_.in_depth(w))
- ++term_in2_count;
- if (0 < state2_.out_depth(w))
- ++term_out2_count;
- if ((state2_.in_depth(w) == 0)
- && (state2_.out_depth(w) == 0))
- ++rest2_count;
- }
- }
- }
-
- {
- equivalent_edge_exists< Graph1 > edge1_exists;
-
- BGL_FORALL_OUTEDGES_T(w_new, e2, graph2_, Graph2)
- {
- vertex2_type w = target(e2, graph2_);
- if (state2_.in_core(w) || (w == w_new))
- {
- if (problem_selection != subgraph_mono)
- {
- vertex1_type v = v_new;
- if (w != w_new)
- v = state2_.core(w);
-
- if (!edge1_exists(v_new, v,
- edge1_predicate< Graph1, Graph2,
- EdgeEquivalencePredicate >(
- edge_comp_, e2),
- graph1_))
- return false;
- }
- }
- else
- {
- if (0 < state2_.in_depth(w))
- ++term_in2_count;
- if (0 < state2_.out_depth(w))
- ++term_out2_count;
- if ((state2_.in_depth(w) == 0)
- && (state2_.out_depth(w) == 0))
- ++rest2_count;
- }
- }
- }
-
- if (problem_selection != subgraph_mono)
- { // subgraph_iso and isomorphism
- return comp_term_sets(term_in1_count, term_in2_count,
- boost::mpl::int_< problem_selection >())
- && comp_term_sets(term_out1_count, term_out2_count,
- boost::mpl::int_< problem_selection >())
- && comp_term_sets(rest1_count, rest2_count,
- boost::mpl::int_< problem_selection >());
- }
- else
- { // subgraph_mono
- return comp_term_sets(term_in1_count, term_in2_count,
- boost::mpl::int_< problem_selection >())
- && comp_term_sets(term_out1_count, term_out2_count,
- boost::mpl::int_< problem_selection >())
- && comp_term_sets(
- term_in1_count + term_out1_count + rest1_count,
- term_in2_count + term_out2_count + rest2_count,
- boost::mpl::int_< problem_selection >());
- }
- }
-
- // Returns true if vertex v in graph1 is a possible candidate to
- // be added to the current state
- bool possible_candidate1(const vertex1_type& v) const
- {
- if (state1_.term_both() && state2_.term_both())
- return state1_.term_both(v);
- else if (state1_.term_out() && state2_.term_out())
- return state1_.term_out(v);
- else if (state1_.term_in() && state2_.term_in())
- return state1_.term_in(v);
- else
- return !state1_.in_core(v);
- }
-
- // Returns true if vertex w in graph2 is a possible candidate to
- // be added to the current state
- bool possible_candidate2(const vertex2_type& w) const
- {
- if (state1_.term_both() && state2_.term_both())
- return state2_.term_both(w);
- else if (state1_.term_out() && state2_.term_out())
- return state2_.term_out(w);
- else if (state1_.term_in() && state2_.term_in())
- return state2_.term_in(w);
- else
- return !state2_.in_core(w);
- }
-
- // Returns true if a mapping was found
- bool success() const
- {
- return state1_.count() == num_vertices(graph1_);
- }
-
- // Returns true if a state is valid
- bool valid() const
- {
- boost::tuple< graph1_size_type, graph1_size_type, graph1_size_type >
- term1;
- boost::tuple< graph2_size_type, graph2_size_type, graph2_size_type >
- term2;
-
- term1 = state1_.term_set();
- term2 = state2_.term_set();
-
- return comp_term_sets(boost::get< 0 >(term1),
- boost::get< 0 >(term2),
- boost::mpl::int_< problem_selection >())
- && comp_term_sets(boost::get< 1 >(term1),
- boost::get< 1 >(term2),
- boost::mpl::int_< problem_selection >())
- && comp_term_sets(boost::get< 2 >(term1),
- boost::get< 2 >(term2),
- boost::mpl::int_< problem_selection >());
- }
-
- // Calls the user_callback with a graph (sub)graph mapping
- bool call_back(SubGraphIsoMapCallback user_callback) const
- {
- return user_callback(state1_.get_map(), state2_.get_map());
- }
- };
-
- // Data structure to keep info used for back tracking during
- // matching process
- template < typename Graph1, typename Graph2, typename VertexOrder1 >
- struct vf2_match_continuation
- {
- typename VertexOrder1::const_iterator graph1_verts_iter;
- typename graph_traits< Graph2 >::vertex_iterator graph2_verts_iter;
- };
-
- // Non-recursive method that explores state space using a depth-first
- // search strategy. At each depth possible pairs candidate are compute
- // and tested for feasibility to extend the mapping. If a complete
- // mapping is found, the mapping is output to user_callback in the form
- // of a correspondence map (graph1 to graph2). Returning false from the
- // user_callback will terminate the search. Function match will return
- // true if the entire search space was explored.
- template < typename Graph1, typename Graph2, typename IndexMap1,
- typename IndexMap2, typename VertexOrder1,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphIsoMapCallback, problem_selector problem_selection >
- bool match(const Graph1& graph1, const Graph2& graph2,
- SubGraphIsoMapCallback user_callback, const VertexOrder1& vertex_order1,
- state< Graph1, Graph2, IndexMap1, IndexMap2, EdgeEquivalencePredicate,
- VertexEquivalencePredicate, SubGraphIsoMapCallback,
- problem_selection >& s)
- {
-
- typename VertexOrder1::const_iterator graph1_verts_iter;
-
- typedef typename graph_traits< Graph2 >::vertex_iterator
- vertex2_iterator_type;
- vertex2_iterator_type graph2_verts_iter, graph2_verts_iter_end;
-
- typedef vf2_match_continuation< Graph1, Graph2, VertexOrder1 >
- match_continuation_type;
- std::vector< match_continuation_type > k;
- bool found_match = false;
-
- recur:
- if (s.success())
- {
- if (!s.call_back(user_callback))
- return true;
- found_match = true;
-
- goto back_track;
- }
-
- if (!s.valid())
- goto back_track;
-
- graph1_verts_iter = vertex_order1.begin();
- while (graph1_verts_iter != vertex_order1.end()
- && !s.possible_candidate1(*graph1_verts_iter))
- {
- ++graph1_verts_iter;
- }
-
- boost::tie(graph2_verts_iter, graph2_verts_iter_end) = vertices(graph2);
- while (graph2_verts_iter != graph2_verts_iter_end)
- {
- if (s.possible_candidate2(*graph2_verts_iter))
- {
- if (s.feasible(*graph1_verts_iter, *graph2_verts_iter))
- {
- match_continuation_type kk;
- kk.graph1_verts_iter = graph1_verts_iter;
- kk.graph2_verts_iter = graph2_verts_iter;
- k.push_back(kk);
-
- s.push(*graph1_verts_iter, *graph2_verts_iter);
- goto recur;
- }
- }
- graph2_loop:
- ++graph2_verts_iter;
- }
-
- back_track:
- if (k.empty())
- return found_match;
-
- const match_continuation_type kk = k.back();
- graph1_verts_iter = kk.graph1_verts_iter;
- graph2_verts_iter = kk.graph2_verts_iter;
- k.pop_back();
-
- s.pop(*graph1_verts_iter, *graph2_verts_iter);
-
- goto graph2_loop;
- }
-
- // Used to sort nodes by in/out degrees
- template < typename Graph > struct vertex_in_out_degree_cmp
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_type;
-
- vertex_in_out_degree_cmp(const Graph& graph) : graph_(graph) {}
-
- bool operator()(const vertex_type& v, const vertex_type& w) const
- {
- // lexicographical comparison
- return std::make_pair(in_degree(v, graph_), out_degree(v, graph_))
- < std::make_pair(in_degree(w, graph_), out_degree(w, graph_));
- }
-
- const Graph& graph_;
- };
-
- // Used to sort nodes by multiplicity of in/out degrees
- template < typename Graph, typename FrequencyMap >
- struct vertex_frequency_degree_cmp
- {
- typedef typename graph_traits< Graph >::vertex_descriptor vertex_type;
-
- vertex_frequency_degree_cmp(const Graph& graph, FrequencyMap freq)
- : graph_(graph), freq_(freq)
- {
- }
-
- bool operator()(const vertex_type& v, const vertex_type& w) const
- {
- // lexicographical comparison
- return std::make_pair(
- freq_[v], in_degree(v, graph_) + out_degree(v, graph_))
- < std::make_pair(
- freq_[w], in_degree(w, graph_) + out_degree(w, graph_));
- }
-
- const Graph& graph_;
- FrequencyMap freq_;
- };
-
- // Sorts vertices of a graph by multiplicity of in/out degrees
- template < typename Graph, typename IndexMap, typename VertexOrder >
- void sort_vertices(
- const Graph& graph, IndexMap index_map, VertexOrder& order)
- {
- typedef typename graph_traits< Graph >::vertices_size_type size_type;
-
- boost::range::sort(order, vertex_in_out_degree_cmp< Graph >(graph));
-
- std::vector< size_type > freq_vec(num_vertices(graph), 0);
- typedef iterator_property_map<
- typename std::vector< size_type >::iterator, IndexMap, size_type,
- size_type& >
- frequency_map_type;
-
- frequency_map_type freq
- = make_iterator_property_map(freq_vec.begin(), index_map);
-
- typedef typename VertexOrder::iterator order_iterator;
-
- for (order_iterator order_iter = order.begin();
- order_iter != order.end();)
- {
- size_type count = 0;
- for (order_iterator count_iter = order_iter;
- (count_iter != order.end())
- && (in_degree(*order_iter, graph)
- == in_degree(*count_iter, graph))
- && (out_degree(*order_iter, graph)
- == out_degree(*count_iter, graph));
- ++count_iter)
- ++count;
-
- for (size_type i = 0; i < count; ++i)
- {
- freq[*order_iter] = count;
- ++order_iter;
- }
- }
-
- boost::range::sort(order,
- vertex_frequency_degree_cmp< Graph, frequency_map_type >(
- graph, freq));
- }
-
- // Enumerates all graph sub-graph mono-/iso-morphism mappings between graphs
- // graph_small and graph_large. Continues until user_callback returns true
- // or the search space has been fully explored.
- template < problem_selector problem_selection, typename GraphSmall,
- typename GraphLarge, typename IndexMapSmall, typename IndexMapLarge,
- typename VertexOrderSmall, typename EdgeEquivalencePredicate,
- typename VertexEquivalencePredicate, typename SubGraphIsoMapCallback >
- bool vf2_subgraph_morphism(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback,
- IndexMapSmall index_map_small, IndexMapLarge index_map_large,
- const VertexOrderSmall& vertex_order_small,
- EdgeEquivalencePredicate edge_comp,
- VertexEquivalencePredicate vertex_comp)
- {
-
- // Graph requirements
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< GraphSmall >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< GraphSmall >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< GraphSmall >));
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< GraphSmall >));
-
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< GraphLarge >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< GraphLarge >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< GraphLarge >));
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< GraphLarge >));
-
- typedef typename graph_traits< GraphSmall >::vertex_descriptor
- vertex_small_type;
- typedef typename graph_traits< GraphLarge >::vertex_descriptor
- vertex_large_type;
-
- typedef typename graph_traits< GraphSmall >::vertices_size_type
- size_type_small;
- typedef typename graph_traits< GraphLarge >::vertices_size_type
- size_type_large;
-
- // Property map requirements
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< IndexMapSmall, vertex_small_type >));
- typedef typename property_traits< IndexMapSmall >::value_type
- IndexMapSmallValue;
- BOOST_STATIC_ASSERT(
- (is_convertible< IndexMapSmallValue, size_type_small >::value));
-
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< IndexMapLarge, vertex_large_type >));
- typedef typename property_traits< IndexMapLarge >::value_type
- IndexMapLargeValue;
- BOOST_STATIC_ASSERT(
- (is_convertible< IndexMapLargeValue, size_type_large >::value));
-
- // Edge & vertex requirements
- typedef typename graph_traits< GraphSmall >::edge_descriptor
- edge_small_type;
- typedef typename graph_traits< GraphLarge >::edge_descriptor
- edge_large_type;
-
- BOOST_CONCEPT_ASSERT((BinaryPredicateConcept< EdgeEquivalencePredicate,
- edge_small_type, edge_large_type >));
-
- BOOST_CONCEPT_ASSERT(
- (BinaryPredicateConcept< VertexEquivalencePredicate,
- vertex_small_type, vertex_large_type >));
-
- // Vertex order requirements
- BOOST_CONCEPT_ASSERT((ContainerConcept< VertexOrderSmall >));
- typedef typename VertexOrderSmall::value_type order_value_type;
- BOOST_STATIC_ASSERT(
- (is_same< vertex_small_type, order_value_type >::value));
- BOOST_ASSERT(num_vertices(graph_small) == vertex_order_small.size());
-
- if (num_vertices(graph_small) > num_vertices(graph_large))
- return false;
-
- typename graph_traits< GraphSmall >::edges_size_type num_edges_small
- = num_edges(graph_small);
- typename graph_traits< GraphLarge >::edges_size_type num_edges_large
- = num_edges(graph_large);
-
- // Double the number of edges for undirected graphs: each edge counts as
- // in-edge and out-edge
- if (is_undirected(graph_small))
- num_edges_small *= 2;
- if (is_undirected(graph_large))
- num_edges_large *= 2;
- if (num_edges_small > num_edges_large)
- return false;
-
- detail::state< GraphSmall, GraphLarge, IndexMapSmall, IndexMapLarge,
- EdgeEquivalencePredicate, VertexEquivalencePredicate,
- SubGraphIsoMapCallback, problem_selection >
- s(graph_small, graph_large, index_map_small, index_map_large,
- edge_comp, vertex_comp);
-
- return detail::match(
- graph_small, graph_large, user_callback, vertex_order_small, s);
- }
-
-} // namespace detail
-
-// Returns vertex order (vertices sorted by multiplicity of in/out degrees)
-template < typename Graph >
-std::vector< typename graph_traits< Graph >::vertex_descriptor >
-vertex_order_by_mult(const Graph& graph)
-{
-
- std::vector< typename graph_traits< Graph >::vertex_descriptor >
- vertex_order;
- std::copy(vertices(graph).first, vertices(graph).second,
- std::back_inserter(vertex_order));
-
- detail::sort_vertices(graph, get(vertex_index, graph), vertex_order);
- return vertex_order;
-}
-
-// Enumerates all graph sub-graph monomorphism mappings between graphs
-// graph_small and graph_large. Continues until user_callback returns true or
-// the search space has been fully explored.
-template < typename GraphSmall, typename GraphLarge, typename IndexMapSmall,
- typename IndexMapLarge, typename VertexOrderSmall,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphIsoMapCallback >
-bool vf2_subgraph_mono(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback,
- IndexMapSmall index_map_small, IndexMapLarge index_map_large,
- const VertexOrderSmall& vertex_order_small,
- EdgeEquivalencePredicate edge_comp, VertexEquivalencePredicate vertex_comp)
-{
- return detail::vf2_subgraph_morphism< detail::subgraph_mono >(graph_small,
- graph_large, user_callback, index_map_small, index_map_large,
- vertex_order_small, edge_comp, vertex_comp);
-}
-
-// All default interface for vf2_subgraph_iso
-template < typename GraphSmall, typename GraphLarge,
- typename SubGraphIsoMapCallback >
-bool vf2_subgraph_mono(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback)
-{
- return vf2_subgraph_mono(graph_small, graph_large, user_callback,
- get(vertex_index, graph_small), get(vertex_index, graph_large),
- vertex_order_by_mult(graph_small), always_equivalent(),
- always_equivalent());
-}
-
-// Named parameter interface of vf2_subgraph_iso
-template < typename GraphSmall, typename GraphLarge, typename VertexOrderSmall,
- typename SubGraphIsoMapCallback, typename Param, typename Tag,
- typename Rest >
-bool vf2_subgraph_mono(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback,
- const VertexOrderSmall& vertex_order_small,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
- return vf2_subgraph_mono(graph_small, graph_large, user_callback,
- choose_const_pmap(
- get_param(params, vertex_index1), graph_small, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph_large, vertex_index),
- vertex_order_small,
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()));
-}
-
-// Enumerates all graph sub-graph isomorphism mappings between graphs
-// graph_small and graph_large. Continues until user_callback returns true or
-// the search space has been fully explored.
-template < typename GraphSmall, typename GraphLarge, typename IndexMapSmall,
- typename IndexMapLarge, typename VertexOrderSmall,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename SubGraphIsoMapCallback >
-bool vf2_subgraph_iso(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback,
- IndexMapSmall index_map_small, IndexMapLarge index_map_large,
- const VertexOrderSmall& vertex_order_small,
- EdgeEquivalencePredicate edge_comp, VertexEquivalencePredicate vertex_comp)
-{
- return detail::vf2_subgraph_morphism< detail::subgraph_iso >(graph_small,
- graph_large, user_callback, index_map_small, index_map_large,
- vertex_order_small, edge_comp, vertex_comp);
-}
-
-// All default interface for vf2_subgraph_iso
-template < typename GraphSmall, typename GraphLarge,
- typename SubGraphIsoMapCallback >
-bool vf2_subgraph_iso(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback)
-{
-
- return vf2_subgraph_iso(graph_small, graph_large, user_callback,
- get(vertex_index, graph_small), get(vertex_index, graph_large),
- vertex_order_by_mult(graph_small), always_equivalent(),
- always_equivalent());
-}
-
-// Named parameter interface of vf2_subgraph_iso
-template < typename GraphSmall, typename GraphLarge, typename VertexOrderSmall,
- typename SubGraphIsoMapCallback, typename Param, typename Tag,
- typename Rest >
-bool vf2_subgraph_iso(const GraphSmall& graph_small,
- const GraphLarge& graph_large, SubGraphIsoMapCallback user_callback,
- const VertexOrderSmall& vertex_order_small,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
-
- return vf2_subgraph_iso(graph_small, graph_large, user_callback,
- choose_const_pmap(
- get_param(params, vertex_index1), graph_small, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph_large, vertex_index),
- vertex_order_small,
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()));
-}
-
-// Enumerates all isomorphism mappings between graphs graph1_ and graph2_.
-// Continues until user_callback returns true or the search space has been
-// fully explored.
-template < typename Graph1, typename Graph2, typename IndexMap1,
- typename IndexMap2, typename VertexOrder1,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate,
- typename GraphIsoMapCallback >
-bool vf2_graph_iso(const Graph1& graph1, const Graph2& graph2,
- GraphIsoMapCallback user_callback, IndexMap1 index_map1,
- IndexMap2 index_map2, const VertexOrder1& vertex_order1,
- EdgeEquivalencePredicate edge_comp, VertexEquivalencePredicate vertex_comp)
-{
-
- // Graph requirements
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph1 >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph1 >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< Graph1 >));
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< Graph1 >));
-
- BOOST_CONCEPT_ASSERT((BidirectionalGraphConcept< Graph2 >));
- BOOST_CONCEPT_ASSERT((VertexListGraphConcept< Graph2 >));
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< Graph2 >));
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< Graph2 >));
-
- typedef typename graph_traits< Graph1 >::vertex_descriptor vertex1_type;
- typedef typename graph_traits< Graph2 >::vertex_descriptor vertex2_type;
-
- typedef typename graph_traits< Graph1 >::vertices_size_type size_type1;
- typedef typename graph_traits< Graph2 >::vertices_size_type size_type2;
-
- // Property map requirements
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< IndexMap1, vertex1_type >));
- typedef typename property_traits< IndexMap1 >::value_type IndexMap1Value;
- BOOST_STATIC_ASSERT((is_convertible< IndexMap1Value, size_type1 >::value));
-
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< IndexMap2, vertex2_type >));
- typedef typename property_traits< IndexMap2 >::value_type IndexMap2Value;
- BOOST_STATIC_ASSERT((is_convertible< IndexMap2Value, size_type2 >::value));
-
- // Edge & vertex requirements
- typedef typename graph_traits< Graph1 >::edge_descriptor edge1_type;
- typedef typename graph_traits< Graph2 >::edge_descriptor edge2_type;
-
- BOOST_CONCEPT_ASSERT((BinaryPredicateConcept< EdgeEquivalencePredicate,
- edge1_type, edge2_type >));
-
- BOOST_CONCEPT_ASSERT((BinaryPredicateConcept< VertexEquivalencePredicate,
- vertex1_type, vertex2_type >));
-
- // Vertex order requirements
- BOOST_CONCEPT_ASSERT((ContainerConcept< VertexOrder1 >));
- typedef typename VertexOrder1::value_type order_value_type;
- BOOST_STATIC_ASSERT((is_same< vertex1_type, order_value_type >::value));
- BOOST_ASSERT(num_vertices(graph1) == vertex_order1.size());
-
- if (num_vertices(graph1) != num_vertices(graph2))
- return false;
-
- typename graph_traits< Graph1 >::edges_size_type num_edges1
- = num_edges(graph1);
- typename graph_traits< Graph2 >::edges_size_type num_edges2
- = num_edges(graph2);
-
- // Double the number of edges for undirected graphs: each edge counts as
- // in-edge and out-edge
- if (is_undirected(graph1))
- num_edges1 *= 2;
- if (is_undirected(graph2))
- num_edges2 *= 2;
- if (num_edges1 != num_edges2)
- return false;
-
- detail::state< Graph1, Graph2, IndexMap1, IndexMap2,
- EdgeEquivalencePredicate, VertexEquivalencePredicate,
- GraphIsoMapCallback, detail::isomorphism >
- s(graph1, graph2, index_map1, index_map2, edge_comp, vertex_comp);
-
- return detail::match(graph1, graph2, user_callback, vertex_order1, s);
-}
-
-// All default interface for vf2_graph_iso
-template < typename Graph1, typename Graph2, typename GraphIsoMapCallback >
-bool vf2_graph_iso(const Graph1& graph1, const Graph2& graph2,
- GraphIsoMapCallback user_callback)
-{
-
- return vf2_graph_iso(graph1, graph2, user_callback,
- get(vertex_index, graph1), get(vertex_index, graph2),
- vertex_order_by_mult(graph1), always_equivalent(), always_equivalent());
-}
-
-// Named parameter interface of vf2_graph_iso
-template < typename Graph1, typename Graph2, typename VertexOrder1,
- typename GraphIsoMapCallback, typename Param, typename Tag, typename Rest >
-bool vf2_graph_iso(const Graph1& graph1, const Graph2& graph2,
- GraphIsoMapCallback user_callback, const VertexOrder1& vertex_order1,
- const bgl_named_params< Param, Tag, Rest >& params)
-{
-
- return vf2_graph_iso(graph1, graph2, user_callback,
- choose_const_pmap(
- get_param(params, vertex_index1), graph1, vertex_index),
- choose_const_pmap(
- get_param(params, vertex_index2), graph2, vertex_index),
- vertex_order1,
- choose_param(
- get_param(params, edges_equivalent_t()), always_equivalent()),
- choose_param(
- get_param(params, vertices_equivalent_t()), always_equivalent()));
-}
-
-// Verifies a graph (sub)graph isomorphism map
-template < typename Graph1, typename Graph2, typename CorresponenceMap1To2,
- typename EdgeEquivalencePredicate, typename VertexEquivalencePredicate >
-inline bool verify_vf2_subgraph_iso(const Graph1& graph1, const Graph2& graph2,
- const CorresponenceMap1To2 f, EdgeEquivalencePredicate edge_comp,
- VertexEquivalencePredicate vertex_comp)
-{
-
- BOOST_CONCEPT_ASSERT((EdgeListGraphConcept< Graph1 >));
- BOOST_CONCEPT_ASSERT((AdjacencyMatrixConcept< Graph2 >));
-
- detail::equivalent_edge_exists< Graph2 > edge2_exists;
-
- BGL_FORALL_EDGES_T(e1, graph1, Graph1)
- {
- typename graph_traits< Graph1 >::vertex_descriptor s1, t1;
- typename graph_traits< Graph2 >::vertex_descriptor s2, t2;
-
- s1 = source(e1, graph1);
- t1 = target(e1, graph1);
- s2 = get(f, s1);
- t2 = get(f, t1);
-
- if (!vertex_comp(s1, s2) || !vertex_comp(t1, t2))
- return false;
-
- typename graph_traits< Graph2 >::edge_descriptor e2;
-
- if (!edge2_exists(s2, t2,
- detail::edge2_predicate< Graph1, Graph2,
- EdgeEquivalencePredicate >(edge_comp, e1),
- graph2))
- return false;
- }
-
- return true;
-}
-
-// Variant of verify_subgraph_iso with all default parameters
-template < typename Graph1, typename Graph2, typename CorresponenceMap1To2 >
-inline bool verify_vf2_subgraph_iso(
- const Graph1& graph1, const Graph2& graph2, const CorresponenceMap1To2 f)
-{
- return verify_vf2_subgraph_iso(
- graph1, graph2, f, always_equivalent(), always_equivalent());
-}
-
-} // namespace boost
-
-#ifdef BOOST_ISO_INCLUDED_ITER_MACROS
-#undef BOOST_ISO_INCLUDED_ITER_MACROS
-#include <boost/graph/iteration_macros_undef.hpp>
-#endif
-
-#endif // BOOST_VF2_SUB_GRAPH_ISO_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/wavefront.hpp b/contrib/restricted/boost/graph/include/boost/graph/wavefront.hpp
deleted file mode 100644
index aec2853671..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/wavefront.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-//
-//=======================================================================
-// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
-// ETH Zurich, Center of Structure Technologies
-// (https://web.archive.org/web/20050307090307/http://www.structures.ethz.ch/)
-//
-// 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_WAVEFRONT_HPP
-#define BOOST_GRAPH_WAVEFRONT_HPP
-
-#include <boost/config.hpp>
-#include <boost/graph/graph_traits.hpp>
-#include <boost/detail/numeric_traits.hpp>
-#include <boost/graph/bandwidth.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-#include <vector>
-#include <algorithm> // for std::min and std::max
-
-namespace boost
-{
-
-template < typename Graph, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type ith_wavefront(
- typename graph_traits< Graph >::vertex_descriptor i, const Graph& g,
- VertexIndexMap index)
-{
- typename graph_traits< Graph >::vertex_descriptor v, w;
- typename graph_traits< Graph >::vertices_size_type b = 1;
- typename graph_traits< Graph >::out_edge_iterator edge_it2, edge_it2_end;
- typename graph_traits< Graph >::vertices_size_type index_i = index[i];
- std::vector< bool > rows_active(num_vertices(g), false);
-
- rows_active[index_i] = true;
-
- typename graph_traits< Graph >::vertex_iterator ui, ui_end;
- for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
- {
- v = *ui;
- if (index[v] <= index_i)
- {
- for (boost::tie(edge_it2, edge_it2_end) = out_edges(v, g);
- edge_it2 != edge_it2_end; ++edge_it2)
- {
- w = target(*edge_it2, g);
- if ((index[w] >= index_i) && (!rows_active[index[w]]))
- {
- b++;
- rows_active[index[w]] = true;
- }
- }
- }
- }
-
- return b;
-}
-
-template < typename Graph >
-typename graph_traits< Graph >::vertices_size_type ith_wavefront(
- typename graph_traits< Graph >::vertex_descriptor i, const Graph& g)
-{
- return ith_wavefront(i, g, get(vertex_index, g));
-}
-
-template < typename Graph, typename VertexIndexMap >
-typename graph_traits< Graph >::vertices_size_type max_wavefront(
- const Graph& g, VertexIndexMap index)
-{
- BOOST_USING_STD_MAX();
- typename graph_traits< Graph >::vertices_size_type b = 0;
- typename graph_traits< Graph >::vertex_iterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- b = max BOOST_PREVENT_MACRO_SUBSTITUTION(
- b, ith_wavefront(*i, g, index));
- return b;
-}
-
-template < typename Graph >
-typename graph_traits< Graph >::vertices_size_type max_wavefront(const Graph& g)
-{
- return max_wavefront(g, get(vertex_index, g));
-}
-
-template < typename Graph, typename VertexIndexMap >
-double aver_wavefront(const Graph& g, VertexIndexMap index)
-{
- double b = 0;
- typename graph_traits< Graph >::vertex_iterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- b += ith_wavefront(*i, g, index);
-
- b /= num_vertices(g);
- return b;
-}
-
-template < typename Graph > double aver_wavefront(const Graph& g)
-{
- return aver_wavefront(g, get(vertex_index, g));
-}
-
-template < typename Graph, typename VertexIndexMap >
-double rms_wavefront(const Graph& g, VertexIndexMap index)
-{
- double b = 0;
- typename graph_traits< Graph >::vertex_iterator i, end;
- for (boost::tie(i, end) = vertices(g); i != end; ++i)
- b += std::pow(double(ith_wavefront(*i, g, index)), 2.0);
-
- b /= num_vertices(g);
-
- return std::sqrt(b);
-}
-
-template < typename Graph > double rms_wavefront(const Graph& g)
-{
- return rms_wavefront(g, get(vertex_index, g));
-}
-
-} // namespace boost
-
-#endif // BOOST_GRAPH_WAVEFRONT_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/graph/write_dimacs.hpp b/contrib/restricted/boost/graph/include/boost/graph/write_dimacs.hpp
deleted file mode 100644
index ec0e2c5329..0000000000
--- a/contrib/restricted/boost/graph/include/boost/graph/write_dimacs.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2006, Stephan Diederich
-//
-// This code may be used under either of the following two licences:
-//
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// 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 AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE. OF SUCH DAMAGE.
-//
-// Or:
-//
-// 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)
-
-/*
- Writes maximal flow problem in extended DIMACS format to an OutputIterator
- Vertex indices are read from an IndexMap and shiftet by 1.
- so their new range is [1..num_vertices(g)]
-*/
-
-/* ----------------------------------------------------------------- */
-
-#include <vector>
-#include <string>
-#include <ostream>
-
-namespace boost
-{
-
-template < class Graph, class CapacityMap, class IndexMap >
-void write_dimacs_max_flow(const Graph& g, CapacityMap capacity, IndexMap idx,
- typename graph_traits< Graph >::vertex_descriptor src,
- typename graph_traits< Graph >::vertex_descriptor sink, std::ostream& out)
-{
- typedef typename graph_traits< Graph >::edge_iterator edge_iterator;
-
- out << "c DIMACS max-flow file generated from boost::write_dimacs_max_flow"
- << std::endl;
- out << "p max " << num_vertices(g) << " " << num_edges(g)
- << std::endl; // print problem description "max" and number of verts and
- // edges
- out << "n " << get(idx, src) + 1 << " s" << std::endl;
- ; // say which one is source
- out << "n " << get(idx, sink) + 1 << " t"
- << std::endl; // say which one is sink
-
- // output the edges
- edge_iterator ei, e_end;
- for (boost::tie(ei, e_end) = edges(g); ei != e_end; ++ei)
- {
- out << "a " << idx[source(*ei, g)] + 1 << " " << idx[target(*ei, g)] + 1
- << " " << get(capacity, *ei) << std::endl;
- }
-}
-
-} // namespace boost
diff --git a/contrib/restricted/boost/graph/include/boost/pending/bucket_sorter.hpp b/contrib/restricted/boost/graph/include/boost/pending/bucket_sorter.hpp
deleted file mode 100644
index e39133d435..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/bucket_sorter.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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)
-//=======================================================================
-//
-//
-// Revision History:
-// 13 June 2001: Changed some names for clarity. (Jeremy Siek)
-// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
-//
-#ifndef BOOST_GRAPH_DETAIL_BUCKET_SORTER_HPP
-#define BOOST_GRAPH_DETAIL_BUCKET_SORTER_HPP
-
-#include <vector>
-#include <cassert>
-#include <boost/limits.hpp>
-#include <boost/concept/assert.hpp>
-#include <boost/property_map/property_map.hpp>
-
-namespace boost
-{
-
-template < class BucketType, class ValueType, class Bucket,
- class ValueIndexMap >
-class bucket_sorter
-{
- BOOST_CONCEPT_ASSERT(
- (ReadablePropertyMapConcept< ValueIndexMap, ValueType >));
-
-public:
- typedef BucketType bucket_type;
- typedef ValueType value_type;
- typedef typename std::vector< value_type >::size_type size_type;
-
- bucket_sorter(size_type _length, bucket_type _max_bucket,
- const Bucket& _bucket = Bucket(),
- const ValueIndexMap& _id = ValueIndexMap())
- : head(_max_bucket, invalid_value())
- , next(_length, invalid_value())
- , prev(_length, invalid_value())
- , id_to_value(_length)
- , bucket(_bucket)
- , id(_id)
- {
- }
-
- void remove(const value_type& x)
- {
- const size_type i = get(id, x);
- const size_type& next_node = next[i];
- const size_type& prev_node = prev[i];
-
- // check if i is the end of the bucket list
- if (next_node != invalid_value())
- prev[next_node] = prev_node;
- // check if i is the begin of the bucket list
- if (prev_node != invalid_value())
- next[prev_node] = next_node;
- else // need update head of current bucket list
- head[bucket[x]] = next_node;
- }
-
- void push(const value_type& x)
- {
- id_to_value[get(id, x)] = x;
- (*this)[bucket[x]].push(x);
- }
-
- void update(const value_type& x)
- {
- remove(x);
- (*this)[bucket[x]].push(x);
- }
- // private:
- // with KCC, the nested stack class is having access problems
- // despite the friend decl.
- static size_type invalid_value()
- {
- return (std::numeric_limits< size_type >::max)();
- }
-
- typedef typename std::vector< size_type >::iterator Iter;
- typedef typename std::vector< value_type >::iterator IndexValueMap;
-
-public:
- friend class stack;
-
- class stack
- {
- public:
- stack(bucket_type _bucket_id, Iter h, Iter n, Iter p, IndexValueMap v,
- const ValueIndexMap& _id)
- : bucket_id(_bucket_id), head(h), next(n), prev(p), value(v), id(_id)
- {
- }
-
- // Avoid using default arg for ValueIndexMap so that the default
- // constructor of the ValueIndexMap is not required if not used.
- stack(bucket_type _bucket_id, Iter h, Iter n, Iter p, IndexValueMap v)
- : bucket_id(_bucket_id), head(h), next(n), prev(p), value(v)
- {
- }
-
- void push(const value_type& x)
- {
- const size_type new_head = get(id, x);
- const size_type current = head[bucket_id];
- if (current != invalid_value())
- prev[current] = new_head;
- prev[new_head] = invalid_value();
- next[new_head] = current;
- head[bucket_id] = new_head;
- }
- void pop()
- {
- size_type current = head[bucket_id];
- size_type next_node = next[current];
- head[bucket_id] = next_node;
- if (next_node != invalid_value())
- prev[next_node] = invalid_value();
- }
- value_type& top() { return value[head[bucket_id]]; }
- const value_type& top() const { return value[head[bucket_id]]; }
- bool empty() const { return head[bucket_id] == invalid_value(); }
-
- private:
- bucket_type bucket_id;
- Iter head;
- Iter next;
- Iter prev;
- IndexValueMap value;
- ValueIndexMap id;
- };
-
- stack operator[](const bucket_type& i)
- {
- assert(i < head.size());
- return stack(i, head.begin(), next.begin(), prev.begin(),
- id_to_value.begin(), id);
- }
-
-protected:
- std::vector< size_type > head;
- std::vector< size_type > next;
- std::vector< size_type > prev;
- std::vector< value_type > id_to_value;
- Bucket bucket;
- ValueIndexMap id;
-};
-
-}
-
-#endif
diff --git a/contrib/restricted/boost/graph/include/boost/pending/detail/disjoint_sets.hpp b/contrib/restricted/boost/graph/include/boost/pending/detail/disjoint_sets.hpp
deleted file mode 100644
index 1ec0e4950c..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/detail/disjoint_sets.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// (C) Copyright Jeremy Siek 2004
-// 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_DISJOINT_SETS_HPP
-#define BOOST_DETAIL_DISJOINT_SETS_HPP
-
-namespace boost
-{
-
-namespace detail
-{
-
- template < class ParentPA, class Vertex >
- Vertex find_representative_with_path_halving(ParentPA p, Vertex v)
- {
- Vertex parent = get(p, v);
- Vertex grandparent = get(p, parent);
- while (parent != grandparent)
- {
- put(p, v, grandparent);
- v = grandparent;
- parent = get(p, v);
- grandparent = get(p, parent);
- }
- return parent;
- }
-
- template < class ParentPA, class Vertex >
- Vertex find_representative_with_full_compression(ParentPA parent, Vertex v)
- {
- Vertex old = v;
- Vertex ancestor = get(parent, v);
- while (ancestor != v)
- {
- v = ancestor;
- ancestor = get(parent, v);
- }
- v = get(parent, old);
- while (ancestor != v)
- {
- put(parent, old, ancestor);
- old = v;
- v = get(parent, old);
- }
- return ancestor;
- }
-
- /* the postcondition of link sets is:
- component_representative(i) == component_representative(j)
- */
- template < class ParentPA, class RankPA, class Vertex,
- class ComponentRepresentative >
- inline void link_sets(ParentPA p, RankPA rank, Vertex i, Vertex j,
- ComponentRepresentative comp_rep)
- {
- i = comp_rep(p, i);
- j = comp_rep(p, j);
- if (i == j)
- return;
- if (get(rank, i) > get(rank, j))
- put(p, j, i);
- else
- {
- put(p, i, j);
- if (get(rank, i) == get(rank, j))
- put(rank, j, get(rank, j) + 1);
- }
- }
-
- // normalize components has the following postcondidition:
- // i >= p[i]
- // that is, the representative is the node with the smallest index in its
- // class as its precondition it it assumes that the node container is
- // compressed
-
- template < class ParentPA, class Vertex >
- inline void normalize_node(ParentPA p, Vertex i)
- {
- if (i > get(p, i) || get(p, get(p, i)) != get(p, i))
- put(p, i, get(p, get(p, i)));
- else
- {
- put(p, get(p, i), i);
- put(p, i, i);
- }
- }
-
-} // namespace detail
-} // namespace boost
-
-#endif // BOOST_DETAIL_DISJOINT_SETS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/pending/disjoint_sets.hpp b/contrib/restricted/boost/graph/include/boost/pending/disjoint_sets.hpp
deleted file mode 100644
index 85a7c4ce88..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/disjoint_sets.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-//
-//=======================================================================
-// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
-// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
-//
-// 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_DISJOINT_SETS_HPP
-#define BOOST_DISJOINT_SETS_HPP
-
-#include <vector>
-#include <boost/graph/properties.hpp>
-#include <boost/pending/detail/disjoint_sets.hpp>
-
-namespace boost
-{
-
-struct find_with_path_halving
-{
- template < class ParentPA, class Vertex >
- Vertex operator()(ParentPA p, Vertex v)
- {
- return detail::find_representative_with_path_halving(p, v);
- }
-};
-
-struct find_with_full_path_compression
-{
- template < class ParentPA, class Vertex >
- Vertex operator()(ParentPA p, Vertex v)
- {
- return detail::find_representative_with_full_compression(p, v);
- }
-};
-
-// This is a generalized functor to provide disjoint sets operations
-// with "union by rank" and "path compression". A disjoint-set data
-// structure maintains a collection S={S1, S2, ..., Sk} of disjoint
-// sets. Each set is identified by a representative, which is some
-// member of of the set. Sets are represented by rooted trees. Two
-// heuristics: "union by rank" and "path compression" are used to
-// speed up the operations.
-
-// Disjoint Set requires two vertex properties for internal use. A
-// RankPA and a ParentPA. The RankPA must map Vertex to some Integral type
-// (preferably the size_type associated with Vertex). The ParentPA
-// must map Vertex to Vertex.
-template < class RankPA, class ParentPA,
- class FindCompress = find_with_full_path_compression >
-class disjoint_sets
-{
- typedef disjoint_sets self;
-
- inline disjoint_sets() {}
-
-public:
- inline disjoint_sets(RankPA r, ParentPA p) : rank(r), parent(p) {}
-
- inline disjoint_sets(const self& c) : rank(c.rank), parent(c.parent) {}
-
- // Make Set -- Create a singleton set containing vertex x
- template < class Element > inline void make_set(Element x)
- {
- put(parent, x, x);
- typedef typename property_traits< RankPA >::value_type R;
- put(rank, x, R());
- }
-
- // Link - union the two sets represented by vertex x and y
- template < class Element > inline void link(Element x, Element y)
- {
- detail::link_sets(parent, rank, x, y, rep);
- }
-
- // Union-Set - union the two sets containing vertex x and y
- template < class Element > inline void union_set(Element x, Element y)
- {
- link(find_set(x), find_set(y));
- }
-
- // Find-Set - returns the Element representative of the set
- // containing Element x and applies path compression.
- template < class Element > inline Element find_set(Element x)
- {
- return rep(parent, x);
- }
-
- template < class ElementIterator >
- inline std::size_t count_sets(ElementIterator first, ElementIterator last)
- {
- std::size_t count = 0;
- for (; first != last; ++first)
- if (get(parent, *first) == *first)
- ++count;
- return count;
- }
-
- template < class ElementIterator >
- inline void normalize_sets(ElementIterator first, ElementIterator last)
- {
- for (; first != last; ++first)
- detail::normalize_node(parent, *first);
- }
-
- template < class ElementIterator >
- inline void compress_sets(ElementIterator first, ElementIterator last)
- {
- for (; first != last; ++first)
- detail::find_representative_with_full_compression(parent, *first);
- }
-
-protected:
- RankPA rank;
- ParentPA parent;
- FindCompress rep;
-};
-
-template < class ID = identity_property_map,
- class InverseID = identity_property_map,
- class FindCompress = find_with_full_path_compression >
-class disjoint_sets_with_storage
-{
- typedef typename property_traits< ID >::value_type Index;
- typedef std::vector< Index > ParentContainer;
- typedef std::vector< unsigned char > RankContainer;
-
-public:
- typedef typename ParentContainer::size_type size_type;
-
- disjoint_sets_with_storage(
- size_type n = 0, ID id_ = ID(), InverseID inv = InverseID())
- : id(id_), id_to_vertex(inv), rank(n, 0), parent(n)
- {
- for (Index i = 0; i < n; ++i)
- parent[i] = i;
- }
- // note this is not normally needed
- template < class Element > inline void make_set(Element x)
- {
- parent[x] = x;
- rank[x] = 0;
- }
- template < class Element > inline void link(Element x, Element y)
- {
- extend_sets(x, y);
- detail::link_sets(&parent[0], &rank[0], get(id, x), get(id, y), rep);
- }
- template < class Element > inline void union_set(Element x, Element y)
- {
- Element rx = find_set(x);
- Element ry = find_set(y);
- link(rx, ry);
- }
- template < class Element > inline Element find_set(Element x)
- {
- return id_to_vertex[rep(&parent[0], get(id, x))];
- }
-
- template < class ElementIterator >
- inline std::size_t count_sets(ElementIterator first, ElementIterator last)
- {
- std::size_t count = 0;
- for (; first != last; ++first)
- if (parent[*first] == *first)
- ++count;
- return count;
- }
-
- template < class ElementIterator >
- inline void normalize_sets(ElementIterator first, ElementIterator last)
- {
- for (; first != last; ++first)
- detail::normalize_node(&parent[0], *first);
- }
-
- template < class ElementIterator >
- inline void compress_sets(ElementIterator first, ElementIterator last)
- {
- for (; first != last; ++first)
- detail::find_representative_with_full_compression(
- &parent[0], *first);
- }
-
- const ParentContainer& parents() { return parent; }
-
-protected:
- template < class Element > inline void extend_sets(Element x, Element y)
- {
- Index needed
- = get(id, x) > get(id, y) ? get(id, x) + 1 : get(id, y) + 1;
- if (needed > parent.size())
- {
- rank.insert(rank.end(), needed - rank.size(), 0);
- for (Index k = parent.size(); k < needed; ++k)
- parent.push_back(k);
- }
- }
-
- ID id;
- InverseID id_to_vertex;
- RankContainer rank;
- ParentContainer parent;
- FindCompress rep;
-};
-
-} // namespace boost
-
-#endif // BOOST_DISJOINT_SETS_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/pending/fenced_priority_queue.hpp b/contrib/restricted/boost/graph/include/boost/pending/fenced_priority_queue.hpp
deleted file mode 100644
index 64d18692b9..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/fenced_priority_queue.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-// (C) Copyright Jeremiah Willcock 2004
-// 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_FENCED_PRIORITY_QUEUE_HPP
-#define BOOST_FENCED_PRIORITY_QUEUE_HPP
-
-#include <vector>
-#include <queue>
-#include <functional>
-#include <boost/pending/queue.hpp>
-
-// Fenced priority queue
-// Jeremiah Willcock
-
-// This class implements a fenced priority queue. This is similar to
-// a normal priority queue (sorts its members, and only returns the
-// first), except that members cannot be sorted around a "fence" that
-// can be placed into the buffer. This fence is inserted using the
-// fence() member function or (possibly) implicitly by the top() and
-// pop() methods, and is removed automatically when the elements
-// around it are popped.
-
-// The implementation is as follows: Q is an unsorted queue that
-// contains the already-sorted list data, and PQ is a priority queue
-// that contains new elements (since the last fence) that have yet to
-// be sorted. New elements are inserted into PQ, and a fence moves
-// all elements in PQ into the back of Q in sorted order. Elements
-// are then popped from the front of Q, and if that is empty the front
-// of PQ.
-
-namespace boost
-{
-
-template < class T, class Compare = std::less< T >, bool implicit_fence = true,
- class Buffer = boost::queue< T > >
-class fenced_priority_queue
-{
-public:
- typedef T value_type;
- typedef typename Buffer::size_type size_type;
-
- fenced_priority_queue(const Compare _comp = Compare()) : PQ(_comp) {}
-
- void push(const T& data);
- void pop(void);
- T& top(void);
- const T& top(void) const;
- size_type size(void) const;
- bool empty(void) const;
- void fence(void);
-
-private:
- void fence(void) const;
-
- // let them mutable to allow const version of top and the same
- // semantics with non-constant version. Rich Lee
- mutable std::priority_queue< T, std::vector< T >, Compare > PQ;
- mutable Buffer Q;
-};
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline void fenced_priority_queue< T, Compare, implicit_fence, Buffer >::push(
- const T& t)
-{
- // Push a new element after the last fence. This puts it into the
- // priority queue to be sorted with all other elements in its
- // partition.
- PQ.push(t);
-}
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline void fenced_priority_queue< T, Compare, implicit_fence, Buffer >::pop(
- void)
-{
- // Pop one element from the front of the queue. Removes from the
- // already-sorted part of the queue if it is non-empty, otherwise
- // removes from the new-element priority queue. Runs an implicit
- // "fence" operation if the implicit_fence template argument is
- // true.
- if (implicit_fence)
- fence();
- if (!Q.empty())
- Q.pop();
- else
- PQ.pop();
-}
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline T& fenced_priority_queue< T, Compare, implicit_fence, Buffer >::top(void)
-{
- // Get the top element from the queue. This element comes from Q if
- // possible, otherwise from PQ. Causes an implicit "fence"
- // operation if the implicit_fence template argument is true.
- if (implicit_fence)
- fence();
- if (!Q.empty())
- return Q.top();
- else
- // std::priority_queue only have const version of top. Rich Lee
- return const_cast< T& >(PQ.top());
-}
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline const T&
-fenced_priority_queue< T, Compare, implicit_fence, Buffer >::top(void) const
-{
- if (implicit_fence)
- fence();
- if (!Q.empty())
- return Q.top();
- else
- return PQ.top();
-}
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline typename fenced_priority_queue< T, Compare, implicit_fence,
- Buffer >::size_type
-fenced_priority_queue< T, Compare, implicit_fence, Buffer >::size(void) const
-{
- // Returns the size of the queue (both parts together).
- return Q.size() + PQ.size();
-}
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline bool fenced_priority_queue< T, Compare, implicit_fence, Buffer >::empty(
- void) const
-{
- // Returns if the queue is empty, i.e. both parts are empty.
- return Q.empty() && PQ.empty();
-}
-
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline void fenced_priority_queue< T, Compare, implicit_fence, Buffer >::fence(
- void)
-{
- // Perform a fence operation. Remove elements from PQ in sorted
- // order and insert them in the back of Q.
- while (!PQ.empty())
- {
- Q.push(PQ.top());
- PQ.pop();
- }
-}
-template < class T, class Compare, bool implicit_fence, class Buffer >
-inline void fenced_priority_queue< T, Compare, implicit_fence, Buffer >::fence(
- void) const
-{
- // Perform a fence operation. Remove elements from PQ in sorted
- // order and insert them in the back of Q.
- while (!PQ.empty())
- {
- Q.push(PQ.top());
- PQ.pop();
- }
-}
-
-}
-#endif /* BOOST_FENCED_PRIORITY_QUEUE_HPP */
diff --git a/contrib/restricted/boost/graph/include/boost/pending/fibonacci_heap.hpp b/contrib/restricted/boost/graph/include/boost/pending/fibonacci_heap.hpp
deleted file mode 100644
index 3be462369e..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/fibonacci_heap.hpp
+++ /dev/null
@@ -1,320 +0,0 @@
-// (C) Copyright Jeremy Siek 2004.
-// 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_FIBONACCI_HEAP_HPP
-#define BOOST_FIBONACCI_HEAP_HPP
-
-#if defined(__sgi) && !defined(__GNUC__)
-#include <math.h>
-#else
-#include <boost/config/no_tr1/cmath.hpp>
-#endif
-#include <iosfwd>
-#include <vector>
-#include <functional>
-#include <boost/config.hpp>
-#include <boost/property_map/property_map.hpp>
-
-//
-// An adaptation of Knuth's Fibonacci heap implementation
-// in "The Stanford Graph Base", pages 475-482.
-//
-
-namespace boost
-{
-
-template < class T, class Compare = std::less< T >,
- class ID = identity_property_map >
-class fibonacci_heap
-{
- typedef typename boost::property_traits< ID >::value_type size_type;
- typedef T value_type;
-
-protected:
- typedef fibonacci_heap self;
- typedef std::vector< size_type > LinkVec;
- typedef typename LinkVec::iterator LinkIter;
-
-public:
- fibonacci_heap(
- size_type n, const Compare& cmp, const ID& id = identity_property_map())
- : _key(n)
- , _left(n)
- , _right(n)
- , _p(n)
- , _mark(n)
- , _degree(n)
- , _n(0)
- , _root(n)
- , _id(id)
- , _compare(cmp)
- , _child(n)
- ,
-#if defined(BOOST_MSVC) || defined(__ICL) // need a new macro?
- new_roots(size_type(log(float(n))) + 5)
- {
- }
-#else
- new_roots(size_type(std::log(float(n))) + 5)
- {
- }
-#endif
-
- // 33
- void push(const T& d)
- {
- ++_n;
- size_type v = get(_id, d);
- _key[v] = d;
- _p[v] = nil();
- _degree[v] = 0;
- _mark[v] = false;
- _child[v] = nil();
- if (_root == nil())
- {
- _root = _left[v] = _right[v] = v;
- // std::cout << "root added" << std::endl;
- }
- else
- {
- size_type u = _left[_root];
- _left[v] = u;
- _right[v] = _root;
- _left[_root] = _right[u] = v;
- if (_compare(d, _key[_root]))
- _root = v;
- // std::cout << "non-root node added" << std::endl;
- }
- }
- T& top() { return _key[_root]; }
- const T& top() const { return _key[_root]; }
-
- // 38
- void pop()
- {
- --_n;
- int h = -1;
- size_type v, w;
- if (_root != nil())
- {
- if (_degree[_root] == 0)
- {
- v = _right[_root];
- }
- else
- {
- w = _child[_root];
- v = _right[w];
- _right[w] = _right[_root];
- for (w = v; w != _right[_root]; w = _right[w])
- _p[w] = nil();
- }
- while (v != _root)
- {
- w = _right[v];
- add_tree_to_new_roots(v, new_roots.begin(), h);
- v = w;
- }
- rebuild_root_list(new_roots.begin(), h);
- }
- }
- // 39
- inline void add_tree_to_new_roots(size_type v, LinkIter new_roots, int& h)
- {
- int r;
- size_type u;
- r = _degree[v];
- while (1)
- {
- if (h < r)
- {
- do
- {
- ++h;
- new_roots[h] = (h == r ? v : nil());
- } while (h < r);
- break;
- }
- if (new_roots[r] == nil())
- {
- new_roots[r] = v;
- break;
- }
- u = new_roots[r];
- new_roots[r] = nil();
- if (_compare(_key[u], _key[v]))
- {
- _degree[v] = r;
- _mark[v] = false;
- std::swap(u, v);
- }
- make_child(u, v, r);
- ++r;
- }
- _degree[v] = r;
- _mark[v] = false;
- }
- // 40
- void make_child(size_type u, size_type v, size_type r)
- {
- if (r == 0)
- {
- _child[v] = u;
- _left[u] = u;
- _right[u] = u;
- }
- else
- {
- size_type t = _child[v];
- _right[u] = _right[t];
- _left[u] = t;
- _right[t] = u;
- _left[_right[u]] = u;
- }
- _p[u] = v;
- }
- // 41
- inline void rebuild_root_list(LinkIter new_roots, int& h)
- {
- size_type u, v, w;
- if (h < 0)
- _root = nil();
- else
- {
- T d;
- u = v = new_roots[h];
- d = _key[u];
- _root = u;
- for (h--; h >= 0; --h)
- if (new_roots[h] != nil())
- {
- w = new_roots[h];
- _left[w] = v;
- _right[v] = w;
- if (_compare(_key[w], d))
- {
- _root = w;
- d = _key[w];
- }
- v = w;
- }
- _right[v] = u;
- _left[u] = v;
- }
- }
-
- // 34
- void update(const T& d)
- {
- size_type v = get(_id, d);
- assert(!_compare(_key[v], d));
- _key[v] = d;
- size_type p = _p[v];
- if (p == nil())
- {
- if (_compare(d, _key[_root]))
- _root = v;
- }
- else if (_compare(d, _key[p]))
- while (1)
- {
- size_type r = _degree[p];
- if (r >= 2)
- remove_from_family(v, p);
- insert_into_forest(v, d);
- size_type pp = _p[p];
- if (pp == nil())
- {
- --_degree[p];
- break;
- }
- if (_mark[p] == false)
- {
- _mark[p] = true;
- --_degree[p];
- break;
- }
- else
- --_degree[p];
- v = p;
- p = pp;
- }
- }
-
- inline size_type size() const { return _n; }
- inline bool empty() const { return _n == 0; }
-
- void print(std::ostream& os)
- {
- if (_root != nil())
- {
- size_type i = _root;
- do
- {
- print_recur(i, os);
- os << std::endl;
- i = _right[i];
- } while (i != _root);
- }
- }
-
-protected:
- // 35
- inline void remove_from_family(size_type v, size_type p)
- {
- size_type u = _left[v];
- size_type w = _right[v];
- _right[u] = w;
- _left[w] = u;
- if (_child[p] == v)
- _child[p] = w;
- }
- // 36
- inline void insert_into_forest(size_type v, const T& d)
- {
- _p[v] = nil();
- size_type u = _left[_root];
- _left[v] = u;
- _right[v] = _root;
- _left[_root] = _right[u] = v;
- if (_compare(d, _key[_root]))
- _root = v;
- }
-
- void print_recur(size_type x, std::ostream& os)
- {
- if (x != nil())
- {
- os << x;
- if (_degree[x] > 0)
- {
- os << "(";
- size_type i = _child[x];
- do
- {
- print_recur(i, os);
- os << " ";
- i = _right[i];
- } while (i != _child[x]);
- os << ")";
- }
- }
- }
-
- size_type nil() const { return _left.size(); }
-
- std::vector< T > _key;
- LinkVec _left, _right, _p;
- std::vector< bool > _mark;
- LinkVec _degree;
- size_type _n, _root;
- ID _id;
- Compare _compare;
- LinkVec _child;
- LinkVec new_roots;
-};
-
-} // namespace boost
-
-#endif // BOOST_FIBONACCI_HEAP_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/pending/property_serialize.hpp b/contrib/restricted/boost/graph/include/boost/pending/property_serialize.hpp
deleted file mode 100644
index cbdc163a4f..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/property_serialize.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// (C) Copyright Jeremy Siek 2006
-// 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_PROPERTY_SERIALIZE_HPP
-#define BOOST_PROPERTY_SERIALIZE_HPP
-
-#include <boost/pending/property.hpp>
-#include <boost/serialization/is_bitwise_serializable.hpp>
-#include <boost/serialization/base_object.hpp>
-#include <boost/serialization/nvp.hpp>
-
-namespace boost
-{
-template < class Archive >
-inline void serialize(Archive&, no_property&, const unsigned int)
-{
-}
-
-template < class Archive, class Tag, class T, class Base >
-void serialize(
- Archive& ar, property< Tag, T, Base >& prop, const unsigned int /*version*/)
-{
- ar& serialization::make_nvp("property_value", prop.m_value);
- ar& serialization::make_nvp("property_base", prop.m_base);
-}
-
-#ifdef BOOST_GRAPH_USE_MPI
-
-// Setting the serialization properties of boost::property<> and
-// boost::no_property to is_bitwise_serializable, object_serializable,
-// track_never only when BOOST_GRAPH_USE_MPI is defined is dubious.
-//
-// This changes the serialization format of these classes, and hence
-// of boost::adjacency_list, depending on whether BOOST_GRAPH_USE_MPI
-// is defined.
-//
-// These serialization properties should probably be set in either case.
-//
-// Unfortunately, doing that now will change the serialization format
-// of boost::adjacency_list in the non-MPI case, and could potentially
-// break software that reads files serialized with an older release.
-
-namespace mpi
-{
-
- // forward declaration, to avoid including mpi
- template < typename T > struct is_mpi_datatype;
-
- template < typename Tag, typename T, typename Base >
- struct is_mpi_datatype< property< Tag, T, Base > >
- : mpl::and_< is_mpi_datatype< T >, is_mpi_datatype< Base > >
- {
- };
-}
-
-namespace serialization
-{
- template < typename Tag, typename T, typename Base >
- struct is_bitwise_serializable< property< Tag, T, Base > >
- : mpl::and_< is_bitwise_serializable< T >, is_bitwise_serializable< Base > >
- {
- };
-
- template < typename Tag, typename T, typename Base >
- struct implementation_level< property< Tag, T, Base > >
- : mpl::int_< object_serializable >
- {
- };
-
- template < typename Tag, typename T, typename Base >
- struct tracking_level< property< Tag, T, Base > > : mpl::int_< track_never >
- {
- };
-
-}
-#endif // BOOST_GRAPH_USE_MPI
-
-} // end namespace boost
-
-#ifdef BOOST_GRAPH_USE_MPI
-namespace boost
-{
-namespace mpi
-{
- template <> struct is_mpi_datatype< boost::no_property > : mpl::true_
- {
- };
-
-}
-} // end namespace boost::mpi
-
-BOOST_IS_BITWISE_SERIALIZABLE(boost::no_property)
-BOOST_CLASS_IMPLEMENTATION(boost::no_property, object_serializable)
-BOOST_CLASS_TRACKING(boost::no_property, track_never)
-#endif // BOOST_GRAPH_USE_MPI
-
-#endif // BOOST_PROPERTY_SERIALIZE_HPP
diff --git a/contrib/restricted/boost/graph/include/boost/pending/relaxed_heap.hpp b/contrib/restricted/boost/graph/include/boost/pending/relaxed_heap.hpp
deleted file mode 100644
index d7747d4d75..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/relaxed_heap.hpp
+++ /dev/null
@@ -1,743 +0,0 @@
-// Copyright 2004 The Trustees of Indiana University.
-
-// Use, modification and distribution is subject to 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)
-
-// Authors: Douglas Gregor
-// Andrew Lumsdaine
-
-#ifndef BOOST_RELAXED_HEAP_HEADER
-#define BOOST_RELAXED_HEAP_HEADER
-
-#include <boost/config/header_deprecated.hpp>
-BOOST_HEADER_DEPRECATED("the standard heap functions")
-
-#include <functional>
-#include <boost/property_map/property_map.hpp>
-#include <boost/optional.hpp>
-#include <vector>
-#include <climits> // for CHAR_BIT
-#include <boost/none.hpp>
-
-#ifdef BOOST_RELAXED_HEAP_DEBUG
-#include <iostream>
-#endif // BOOST_RELAXED_HEAP_DEBUG
-
-#if defined(BOOST_MSVC)
-#pragma warning(push)
-#pragma warning(disable : 4355) // complaint about using 'this' to
-#endif // initialize a member
-
-namespace boost
-{
-
-template < typename IndexedType, typename Compare = std::less< IndexedType >,
- typename ID = identity_property_map >
-class relaxed_heap
-{
- struct group;
-
- typedef relaxed_heap self_type;
- typedef std::size_t rank_type;
-
-public:
- typedef IndexedType value_type;
- typedef rank_type size_type;
-
-private:
- /**
- * The kind of key that a group has. The actual values are discussed
- * in-depth in the documentation of the @c kind field of the @c group
- * structure. Note that the order of the enumerators *IS* important
- * and must not be changed.
- */
- enum group_key_kind
- {
- smallest_key,
- stored_key,
- largest_key
- };
-
- struct group
- {
- explicit group(group_key_kind kind = largest_key)
- : kind(kind), parent(this), rank(0)
- {
- }
-
- /** The value associated with this group. This value is only valid
- * when @c kind!=largest_key (which indicates a deleted
- * element). Note that the use of boost::optional increases the
- * memory requirements slightly but does not result in extraneous
- * memory allocations or deallocations. The optional could be
- * eliminated when @c value_type is a model of
- * DefaultConstructible.
- */
- ::boost::optional< value_type > value;
-
- /**
- * The kind of key stored at this group. This may be @c
- * smallest_key, which indicates that the key is infinitely small;
- * @c largest_key, which indicates that the key is infinitely
- * large; or @c stored_key, which means that the key is unknown,
- * but its relationship to other keys can be determined via the
- * comparison function object.
- */
- group_key_kind kind;
-
- /// The parent of this group. Will only be NULL for the dummy root group
- group* parent;
-
- /// The rank of this group. Equivalent to the number of children in
- /// the group.
- rank_type rank;
-
- /** The children of this group. For the dummy root group, these are
- * the roots. This is an array of length log n containing pointers
- * to the child groups.
- */
- group** children;
- };
-
- size_type log_base_2(size_type n) // log2 is a macro on some platforms
- {
- size_type leading_zeroes = 0;
- do
- {
- size_type next = n << 1;
- if (n == (next >> 1))
- {
- ++leading_zeroes;
- n = next;
- }
- else
- {
- break;
- }
- } while (true);
- return sizeof(size_type) * CHAR_BIT - leading_zeroes - 1;
- }
-
-public:
- relaxed_heap(
- size_type n, const Compare& compare = Compare(), const ID& id = ID())
- : compare(compare), id(id), root(smallest_key), groups(n), smallest_value(0)
- {
- if (n == 0)
- {
- root.children = new group*[1];
- return;
- }
-
- log_n = log_base_2(n);
- if (log_n == 0)
- log_n = 1;
- size_type g = n / log_n;
- if (n % log_n > 0)
- ++g;
- size_type log_g = log_base_2(g);
- size_type r = log_g;
-
- // Reserve an appropriate amount of space for data structures, so
- // that we do not need to expand them.
- index_to_group.resize(g);
- A.resize(r + 1, 0);
- root.rank = r + 1;
- root.children = new group*[(log_g + 1) * (g + 1)];
- for (rank_type i = 0; i < r + 1; ++i)
- root.children[i] = 0;
-
- // Build initial heap
- size_type idx = 0;
- while (idx < g)
- {
- root.children[r] = &index_to_group[idx];
- idx = build_tree(root, idx, r, log_g + 1);
- if (idx != g)
- r = static_cast< size_type >(log_base_2(g - idx));
- }
- }
-
- ~relaxed_heap() { delete[] root.children; }
-
- void push(const value_type& x)
- {
- groups[get(id, x)] = x;
- update(x);
- }
-
- void update(const value_type& x)
- {
- group* a = &index_to_group[get(id, x) / log_n];
- if (!a->value || *a->value == x || compare(x, *a->value))
- {
- if (a != smallest_value)
- smallest_value = 0;
- a->kind = stored_key;
- a->value = x;
- promote(a);
- }
- }
-
- void remove(const value_type& x)
- {
- group* a = &index_to_group[get(id, x) / log_n];
- assert(groups[get(id, x)]);
- a->value = x;
- a->kind = smallest_key;
- promote(a);
- smallest_value = a;
- pop();
- }
-
- value_type& top()
- {
- find_smallest();
- assert(smallest_value->value != none);
- return *smallest_value->value;
- }
-
- const value_type& top() const
- {
- find_smallest();
- assert(smallest_value->value != none);
- return *smallest_value->value;
- }
-
- bool empty() const
- {
- find_smallest();
- return !smallest_value || (smallest_value->kind == largest_key);
- }
-
- bool contains(const value_type& x) const
- {
- return static_cast< bool >(groups[get(id, x)]);
- }
-
- void pop()
- {
- // Fill in smallest_value. This is the group x.
- find_smallest();
- group* x = smallest_value;
- smallest_value = 0;
-
- // Make x a leaf, giving it the smallest value within its group
- rank_type r = x->rank;
- group* p = x->parent;
- {
- assert(x->value != none);
-
- // Find x's group
- size_type start = get(id, *x->value) - get(id, *x->value) % log_n;
- size_type end = start + log_n;
- if (end > groups.size())
- end = groups.size();
-
- // Remove the smallest value from the group, and find the new
- // smallest value.
- groups[get(id, *x->value)].reset();
- x->value.reset();
- x->kind = largest_key;
- for (size_type i = start; i < end; ++i)
- {
- if (groups[i] && (!x->value || compare(*groups[i], *x->value)))
- {
- x->kind = stored_key;
- x->value = groups[i];
- }
- }
- }
- x->rank = 0;
-
- // Combine prior children of x with x
- group* y = x;
- for (size_type c = 0; c < r; ++c)
- {
- group* child = x->children[c];
- if (A[c] == child)
- A[c] = 0;
- y = combine(y, child);
- }
-
- // If we got back something other than x, let y take x's place
- if (y != x)
- {
- y->parent = p;
- p->children[r] = y;
-
- assert(r == y->rank);
- if (A[y->rank] == x)
- A[y->rank] = do_compare(y, p) ? y : 0;
- }
- }
-
-#ifdef BOOST_RELAXED_HEAP_DEBUG
- /*************************************************************************
- * Debugging support *
- *************************************************************************/
- void dump_tree() { dump_tree(std::cout); }
- void dump_tree(std::ostream& out) { dump_tree(out, &root); }
-
- void dump_tree(std::ostream& out, group* p, bool in_progress = false)
- {
- if (!in_progress)
- {
- out << "digraph heap {\n"
- << " edge[dir=\"back\"];\n";
- }
-
- size_type p_index = 0;
- if (p != &root)
- while (&index_to_group[p_index] != p)
- ++p_index;
-
- for (size_type i = 0; i < p->rank; ++i)
- {
- group* c = p->children[i];
- if (c)
- {
- size_type c_index = 0;
- if (c != &root)
- while (&index_to_group[c_index] != c)
- ++c_index;
-
- out << " ";
- if (p == &root)
- out << 'p';
- else
- out << p_index;
- out << " -> ";
- if (c == &root)
- out << 'p';
- else
- out << c_index;
- if (A[c->rank] == c)
- out << " [style=\"dotted\"]";
- out << ";\n";
- dump_tree(out, c, true);
-
- // Emit node information
- out << " ";
- if (c == &root)
- out << 'p';
- else
- out << c_index;
- out << " [label=\"";
- if (c == &root)
- out << 'p';
- else
- out << c_index;
- out << ":";
- size_type start = c_index * log_n;
- size_type end = start + log_n;
- if (end > groups.size())
- end = groups.size();
- while (start != end)
- {
- if (groups[start])
- {
- out << " " << get(id, *groups[start]);
- if (*groups[start] == *c->value)
- out << "(*)";
- }
- ++start;
- }
- out << '"';
-
- if (do_compare(c, p))
- {
- out << " ";
- if (c == &root)
- out << 'p';
- else
- out << c_index;
- out << ", style=\"filled\", fillcolor=\"gray\"";
- }
- out << "];\n";
- }
- else
- {
- assert(p->parent == p);
- }
- }
- if (!in_progress)
- out << "}\n";
- }
-
- bool valid()
- {
- // Check that the ranks in the A array match the ranks of the
- // groups stored there. Also, the active groups must be the last
- // child of their parent.
- for (size_type r = 0; r < A.size(); ++r)
- {
- if (A[r] && A[r]->rank != r)
- return false;
-
- if (A[r] && A[r]->parent->children[A[r]->parent->rank - 1] != A[r])
- return false;
- }
-
- // The root must have no value and a key of -Infinity
- if (root.kind != smallest_key)
- return false;
-
- return valid(&root);
- }
-
- bool valid(group* p)
- {
- for (size_type i = 0; i < p->rank; ++i)
- {
- group* c = p->children[i];
- if (c)
- {
- // Check link structure
- if (c->parent != p)
- return false;
- if (c->rank != i)
- return false;
-
- // A bad group must be active
- if (do_compare(c, p) && A[i] != c)
- return false;
-
- // Check recursively
- if (!valid(c))
- return false;
- }
- else
- {
- // Only the root may
- if (p != &root)
- return false;
- }
- }
- return true;
- }
-
-#endif // BOOST_RELAXED_HEAP_DEBUG
-
-private:
- size_type build_tree(
- group& parent, size_type idx, size_type r, size_type max_rank)
- {
- group& this_group = index_to_group[idx];
- this_group.parent = &parent;
- ++idx;
-
- this_group.children = root.children + (idx * max_rank);
- this_group.rank = r;
- for (size_type i = 0; i < r; ++i)
- {
- this_group.children[i] = &index_to_group[idx];
- idx = build_tree(this_group, idx, i, max_rank);
- }
- return idx;
- }
-
- void find_smallest() const
- {
- group** roots = root.children;
-
- if (!smallest_value)
- {
- std::size_t i;
- for (i = 0; i < root.rank; ++i)
- {
- if (roots[i]
- && (!smallest_value
- || do_compare(roots[i], smallest_value)))
- {
- smallest_value = roots[i];
- }
- }
- for (i = 0; i < A.size(); ++i)
- {
- if (A[i]
- && (!smallest_value || do_compare(A[i], smallest_value)))
- smallest_value = A[i];
- }
- }
- }
-
- bool do_compare(group* x, group* y) const
- {
- return (x->kind < y->kind
- || (x->kind == y->kind && x->kind == stored_key
- && compare(*x->value, *y->value)));
- }
-
- void promote(group* a)
- {
- assert(a != 0);
- rank_type r = a->rank;
- group* p = a->parent;
- assert(p != 0);
- if (do_compare(a, p))
- {
- // s is the rank + 1 sibling
- group* s = p->rank > r + 1 ? p->children[r + 1] : 0;
-
- // If a is the last child of p
- if (r == p->rank - 1)
- {
- if (!A[r])
- A[r] = a;
- else if (A[r] != a)
- pair_transform(a);
- }
- else
- {
- assert(s != 0);
- if (A[r + 1] == s)
- active_sibling_transform(a, s);
- else
- good_sibling_transform(a, s);
- }
- }
- }
-
- group* combine(group* a1, group* a2)
- {
- assert(a1->rank == a2->rank);
- if (do_compare(a2, a1))
- do_swap(a1, a2);
- a1->children[a1->rank++] = a2;
- a2->parent = a1;
- clean(a1);
- return a1;
- }
-
- void clean(group* q)
- {
- if (2 > q->rank)
- return;
- group* qp = q->children[q->rank - 1];
- rank_type s = q->rank - 2;
- group* x = q->children[s];
- group* xp = qp->children[s];
- assert(s == x->rank);
-
- // If x is active, swap x and xp
- if (A[s] == x)
- {
- q->children[s] = xp;
- xp->parent = q;
- qp->children[s] = x;
- x->parent = qp;
- }
- }
-
- void pair_transform(group* a)
- {
-#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
- std::cerr << "- pair transform\n";
-#endif
- rank_type r = a->rank;
-
- // p is a's parent
- group* p = a->parent;
- assert(p != 0);
-
- // g is p's parent (a's grandparent)
- group* g = p->parent;
- assert(g != 0);
-
- // a' <- A(r)
- assert(A[r] != 0);
- group* ap = A[r];
- assert(ap != 0);
-
- // A(r) <- nil
- A[r] = 0;
-
- // let a' have parent p'
- group* pp = ap->parent;
- assert(pp != 0);
-
- // let a' have grandparent g'
- group* gp = pp->parent;
- assert(gp != 0);
-
- // Remove a and a' from their parents
- assert(ap
- == pp->children[pp->rank - 1]); // Guaranteed because ap is active
- --pp->rank;
-
- // Guaranteed by caller
- assert(a == p->children[p->rank - 1]);
- --p->rank;
-
- // Note: a, ap, p, pp all have rank r
- if (do_compare(pp, p))
- {
- do_swap(a, ap);
- do_swap(p, pp);
- do_swap(g, gp);
- }
-
- // Assuming k(p) <= k(p')
- // make p' the rank r child of p
- assert(r == p->rank);
- p->children[p->rank++] = pp;
- pp->parent = p;
-
- // Combine a, ap into a rank r+1 group c
- group* c = combine(a, ap);
-
- // make c the rank r+1 child of g'
- assert(gp->rank > r + 1);
- gp->children[r + 1] = c;
- c->parent = gp;
-
-#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
- std::cerr << "After pair transform...\n";
- dump_tree();
-#endif
-
- if (A[r + 1] == pp)
- A[r + 1] = c;
- else
- promote(c);
- }
-
- void active_sibling_transform(group* a, group* s)
- {
-#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
- std::cerr << "- active sibling transform\n";
-#endif
- group* p = a->parent;
- group* g = p->parent;
-
- // remove a, s from their parents
- assert(s->parent == p);
- assert(p->children[p->rank - 1] == s);
- --p->rank;
- assert(p->children[p->rank - 1] == a);
- --p->rank;
-
- rank_type r = a->rank;
- A[r + 1] = 0;
- a = combine(p, a);
- group* c = combine(a, s);
-
- // make c the rank r+2 child of g
- assert(g->children[r + 2] == p);
- g->children[r + 2] = c;
- c->parent = g;
- if (A[r + 2] == p)
- A[r + 2] = c;
- else
- promote(c);
- }
-
- void good_sibling_transform(group* a, group* s)
- {
-#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
- std::cerr << "- good sibling transform\n";
-#endif
- rank_type r = a->rank;
- group* c = s->children[s->rank - 1];
- assert(c->rank == r);
- if (A[r] == c)
- {
-#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
- std::cerr << "- good sibling pair transform\n";
-#endif
- A[r] = 0;
- group* p = a->parent;
-
- // Remove c from its parent
- --s->rank;
-
- // Make s the rank r child of p
- s->parent = p;
- p->children[r] = s;
-
- // combine a, c and let the result by the rank r+1 child of p
- assert(p->rank > r + 1);
- group* x = combine(a, c);
- x->parent = p;
- p->children[r + 1] = x;
-
- if (A[r + 1] == s)
- A[r + 1] = x;
- else
- promote(x);
-
-#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
- dump_tree(std::cerr);
-#endif
- // pair_transform(a);
- }
- else
- {
- // Clean operation
- group* p = a->parent;
- s->children[r] = a;
- a->parent = s;
- p->children[r] = c;
- c->parent = p;
-
- promote(a);
- }
- }
-
- static void do_swap(group*& x, group*& y)
- {
- group* tmp = x;
- x = y;
- y = tmp;
- }
-
- /// Function object that compares two values in the heap
- Compare compare;
-
- /// Mapping from values to indices in the range [0, n).
- ID id;
-
- /** The root group of the queue. This group is special because it will
- * never store a value, but it acts as a parent to all of the
- * roots. Thus, its list of children is the list of roots.
- */
- group root;
-
- /** Mapping from the group index of a value to the group associated
- * with that value. If a value is not in the queue, then the "value"
- * field will be empty.
- */
- std::vector< group > index_to_group;
-
- /** Flat data structure containing the values in each of the
- * groups. It will be indexed via the id of the values. The groups
- * are each log_n long, with the last group potentially being
- * smaller.
- */
- std::vector< ::boost::optional< value_type > > groups;
-
- /** The list of active groups, indexed by rank. When A[r] is null,
- * there is no active group of rank r. Otherwise, A[r] is the active
- * group of rank r.
- */
- std::vector< group* > A;
-
- /** The group containing the smallest value in the queue, which must
- * be either a root or an active group. If this group is null, then we
- * will need to search for this group when it is needed.
- */
- mutable group* smallest_value;
-
- /// Cached value log_base_2(n)
- size_type log_n;
-};
-
-} // end namespace boost
-
-#if defined(BOOST_MSVC)
-#pragma warning(pop)
-#endif
-
-#endif // BOOST_RELAXED_HEAP_HEADER
diff --git a/contrib/restricted/boost/graph/include/boost/pending/stringtok.hpp b/contrib/restricted/boost/graph/include/boost/pending/stringtok.hpp
deleted file mode 100644
index f64a4c45dd..0000000000
--- a/contrib/restricted/boost/graph/include/boost/pending/stringtok.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-// (C) Copyright Jeremy Siek 2004
-// 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_STRINGTOK_HPP
-#define BOOST_STRINGTOK_HPP
-
-/*
- * stringtok.hpp -- Breaks a string into tokens. This is an example for lib3.
- *
- * Template function looks like this:
- *
- * template <typename Container>
- * void stringtok (Container &l,
- * string const &s,
- * char const * const ws = " \t\n");
- *
- * A nondestructive version of strtok() that handles its own memory and can
- * be broken up by any character(s). Does all the work at once rather than
- * in an invocation loop like strtok() requires.
- *
- * Container is any type that supports push_back(a_string), although using
- * list<string> and deque<string> are indicated due to their O(1) push_back.
- * (I prefer deque<> because op[]/at() is available as well.) The first
- * parameter references an existing Container.
- *
- * s is the string to be tokenized. From the parameter declaration, it can
- * be seen that s is not affected. Since references-to-const may refer to
- * temporaries, you could use stringtok(some_container, readline("")) when
- * using the GNU readline library.
- *
- * The final parameter is an array of characters that serve as whitespace.
- * Whitespace characters default to one or more of tab, space, and newline,
- * in any combination.
- *
- * 'l' need not be empty on entry. On return, 'l' will have the token
- * strings appended.
- *
- *
- * [Example:
- * list<string> ls;
- * stringtok (ls, " this \t is\t\n a test ");
- * for (list<string>::const_iterator i = ls.begin();
- * i != ls.end(); ++i)
- * {
- * cerr << ':' << (*i) << ":\n";
- * }
- *
- * would print
- * :this:
- * :is:
- * :a:
- * :test:
- * -end example]
- *
- * pedwards@jaj.com May 1999
- */
-
-#include <string>
-#include <cstring> // for strchr
-
-/*****************************************************************
- * This is the only part of the implementation that I don't like.
- * It can probably be improved upon by the reader...
- */
-
-inline bool isws(char c, char const* const wstr)
-{
- using namespace std;
- return (strchr(wstr, c) != NULL);
-}
-
-namespace boost
-{
-
-/*****************************************************************
- * Simplistic and quite Standard, but a bit slow. This should be
- * templatized on basic_string instead, or on a more generic StringT
- * that just happens to support ::size_type, .substr(), and so on.
- * I had hoped that "whitespace" would be a trait, but it isn't, so
- * the user must supply it. Enh, this lets them break up strings on
- * different things easier than traits would anyhow.
- */
-template < typename Container >
-void stringtok(
- Container& l, std::string const& s, char const* const ws = " \t\n")
-{
- typedef std::string::size_type size_type;
- const size_type S = s.size();
- size_type i = 0;
-
- while (i < S)
- {
- // eat leading whitespace
- while ((i < S) && (isws(s[i], ws)))
- ++i;
- if (i == S)
- return; // nothing left but WS
-
- // find end of word
- size_type j = i + 1;
- while ((j < S) && (!isws(s[j], ws)))
- ++j;
-
- // add word
- l.push_back(s.substr(i, j - i));
-
- // set up for next loop
- i = j + 1;
- }
-}
-
-} // namespace boost
-
-#endif // BOOST_STRINGTOK_HPP
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/accumulate.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/accumulate.hpp
deleted file mode 100644
index dc2c75ecb8..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/accumulate.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#ifndef BOOST_MPL_ACCUMULATE_HPP_INCLUDED
-#define BOOST_MPL_ACCUMULATE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2001-2004
-// Copyright David Abrahams 2001-2002
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(State)
- , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
- >
-struct accumulate
- : fold<Sequence,State,ForwardOp>
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(3,accumulate,(Sequence,State,ForwardOp))
-};
-
-BOOST_MPL_AUX_NA_SPEC(3, accumulate)
-
-}}
-
-#endif // BOOST_MPL_ACCUMULATE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/alias.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/alias.hpp
deleted file mode 100644
index f0fe0caf42..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/alias.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef BOOST_MPL_ALIAS_HPP_INCLUDED
-#define BOOST_MPL_ALIAS_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-namespace {
-namespace mpl = boost::mpl;
-}
-
-#endif // BOOST_MPL_ALIAS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/arithmetic.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/arithmetic.hpp
deleted file mode 100644
index 7729fd2920..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/arithmetic.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#ifndef BOOST_MPL_ARITHMETIC_HPP_INCLUDED
-#define BOOST_MPL_ARITHMETIC_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/minus.hpp>
-#include <boost/mpl/times.hpp>
-#include <boost/mpl/divides.hpp>
-#include <boost/mpl/modulus.hpp>
-#include <boost/mpl/negate.hpp>
-#include <boost/mpl/multiplies.hpp> // deprecated
-
-#endif // BOOST_MPL_ARITHMETIC_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/as_sequence.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/as_sequence.hpp
deleted file mode 100644
index 7e671b0fd8..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/as_sequence.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#ifndef BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED
-#define BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/mpl/single_view.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct as_sequence
- : if_< is_sequence<T>, T, single_view<T> >
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,as_sequence,(T))
-};
-
-BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, as_sequence)
-
-}}
-
-#endif // BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/apply_1st.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/apply_1st.hpp
deleted file mode 100644
index b5677482b9..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/apply_1st.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED
-#define BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/apply.hpp>
-
-namespace boost { namespace mpl { namespace aux {
-
-struct apply_1st
-{
- template< typename Pair, typename T > struct apply
- : apply2<
- typename Pair::first
- , typename Pair::second
- , T
- >
- {
- };
-};
-
-}}}
-
-#endif // BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/basic_bind.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/basic_bind.hpp
deleted file mode 100644
index 6c1f643442..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/basic_bind.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED
-#define BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED
-
-// Copyright Peter Dimov 2001
-// Copyright Aleksey Gurtovoy 2001-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
-#include <boost/mpl/bind.hpp>
-
-#endif // BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/count_impl.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/count_impl.hpp
deleted file mode 100644
index 743e5da368..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/count_impl.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED
-#define BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/count_fwd.hpp>
-#include <boost/mpl/count_if.hpp>
-#include <boost/mpl/same_as.hpp>
-#include <boost/mpl/aux_/config/static_constant.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-#include <boost/mpl/aux_/traits_lambda_spec.hpp>
-
-namespace boost { namespace mpl {
-
-template< typename Tag > struct count_impl
-{
- template< typename Sequence, typename T > struct apply
-#if BOOST_WORKAROUND(BOOST_BORLANDC,BOOST_TESTED_AT(0x561))
- {
- typedef typename count_if< Sequence,same_as<T> >::type type;
- BOOST_STATIC_CONSTANT(int, value = BOOST_MPL_AUX_VALUE_WKND(type)::value);
-#else
- : count_if< Sequence,same_as<T> >
- {
-#endif
- };
-};
-
-BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,count_impl)
-
-}}
-
-#endif // BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/filter_iter.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/filter_iter.hpp
deleted file mode 100644
index e4237f19ae..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/filter_iter.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED
-#define BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/find_if.hpp>
-#include <boost/mpl/iterator_range.hpp>
-#include <boost/mpl/iterator_tags.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/aux_/lambda_spec.hpp>
-#include <boost/mpl/aux_/config/ctps.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template<
- typename Iterator
- , typename LastIterator
- , typename Predicate
- >
-struct filter_iter;
-
-template<
- typename Iterator
- , typename LastIterator
- , typename Predicate
- >
-struct next_filter_iter
-{
- typedef typename find_if<
- iterator_range<Iterator,LastIterator>
- , Predicate
- >::type base_iter_;
-
- typedef filter_iter<base_iter_,LastIterator,Predicate> type;
-};
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template<
- typename Iterator
- , typename LastIterator
- , typename Predicate
- >
-struct filter_iter
-{
- typedef Iterator base;
- typedef forward_iterator_tag category;
- typedef typename aux::next_filter_iter<
- typename mpl::next<base>::type
- , LastIterator
- , Predicate
- >::type next;
-
- typedef typename deref<base>::type type;
-};
-
-template<
- typename LastIterator
- , typename Predicate
- >
-struct filter_iter< LastIterator,LastIterator,Predicate >
-{
- typedef LastIterator base;
- typedef forward_iterator_tag category;
-};
-
-#else
-
-template< bool >
-struct filter_iter_impl
-{
- template<
- typename Iterator
- , typename LastIterator
- , typename Predicate
- >
- struct result_
- {
- typedef Iterator base;
- typedef forward_iterator_tag category;
- typedef typename next_filter_iter<
- typename mpl::next<Iterator>::type
- , LastIterator
- , Predicate
- >::type next;
-
- typedef typename deref<base>::type type;
- };
-};
-
-template<>
-struct filter_iter_impl< true >
-{
- template<
- typename Iterator
- , typename LastIterator
- , typename Predicate
- >
- struct result_
- {
- typedef Iterator base;
- typedef forward_iterator_tag category;
- };
-};
-
-template<
- typename Iterator
- , typename LastIterator
- , typename Predicate
- >
-struct filter_iter
- : filter_iter_impl<
- ::boost::is_same<Iterator,LastIterator>::value
- >::template result_< Iterator,LastIterator,Predicate >
-{
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-} // namespace aux
-
-BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::filter_iter)
-
-}}
-
-#endif // BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_op.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_op.hpp
deleted file mode 100644
index 722c22c016..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_op.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED
-#define BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2001-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/apply.hpp>
-
-namespace boost { namespace mpl { namespace aux {
-
-// hand-written version is more efficient than bind/lambda expression
-template< typename Op >
-struct fold_op
-{
- template< typename T1, typename T2 > struct apply
- {
- typedef typename apply2<
- Op
- , T1
- , typename T2::type
- >::type type;
- };
-};
-
-}}}
-
-#endif // BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_pred.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_pred.hpp
deleted file mode 100644
index 3156400302..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/fold_pred.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED
-#define BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2001-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/same_as.hpp>
-#include <boost/mpl/apply.hpp>
-
-namespace boost { namespace mpl { namespace aux {
-
-template< typename Last >
-struct fold_pred
-{
- template<
- typename State
- , typename Iterator
- >
- struct apply
- : not_same_as<Last>::template apply<Iterator>
- {
- };
-};
-
-}}}
-
-#endif // BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/partition_op.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/partition_op.hpp
deleted file mode 100644
index 79d49370f1..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/partition_op.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
-#define BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
-
-// Copyright Eric Friedman 2003
-// Copyright Aleksey Gurtovoy 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/pair.hpp>
-#include <boost/mpl/aux_/lambda_spec.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template< typename Pred, typename In1Op, typename In2Op >
-struct partition_op
-{
- template< typename State, typename T >
- struct apply
- {
- typedef typename State::first first_;
- typedef typename State::second second_;
- typedef typename apply1< Pred,T >::type pred_;
-
- typedef typename eval_if<
- pred_
- , apply2<In1Op,first_,T>
- , apply2<In2Op,second_,T>
- >::type result_;
-
- typedef typename if_<
- pred_
- , pair< result_,second_ >
- , pair< first_,result_ >
- >::type type;
- };
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::partition_op)
-
-}}
-
-#endif // BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessed/plain/vector.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessed/plain/vector.hpp
deleted file mode 100644
index bfa9565a53..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessed/plain/vector.hpp
+++ /dev/null
@@ -1,323 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/vector.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
- , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
- , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
- , typename T12 = na, typename T13 = na, typename T14 = na
- , typename T15 = na, typename T16 = na, typename T17 = na
- , typename T18 = na, typename T19 = na
- >
-struct vector;
-
-template<
-
- >
-struct vector<
- na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector0< >
-{
- typedef vector0< >::type type;
-};
-
-template<
- typename T0
- >
-struct vector<
- T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector1<T0>
-{
- typedef typename vector1<T0>::type type;
-};
-
-template<
- typename T0, typename T1
- >
-struct vector<
- T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector2< T0,T1 >
-{
- typedef typename vector2< T0,T1 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2
- >
-struct vector<
- T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector3< T0,T1,T2 >
-{
- typedef typename vector3< T0,T1,T2 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3
- >
-struct vector<
- T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector4< T0,T1,T2,T3 >
-{
- typedef typename vector4< T0,T1,T2,T3 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- >
-struct vector<
- T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector5< T0,T1,T2,T3,T4 >
-{
- typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector6< T0,T1,T2,T3,T4,T5 >
-{
- typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector7< T0,T1,T2,T3,T4,T5,T6 >
-{
- typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
-{
- typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
-{
- typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
- , na, na, na
- >
- : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
-{
- typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
- , na, na, na
- >
- : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
-{
- typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
- , na, na, na, na
- >
- : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
-{
- typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
- , na, na, na, na
- >
- : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
-{
- typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
- , na, na, na, na
- >
- : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
-{
- typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
- , na, na, na, na
- >
- : vector15<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- >
-{
- typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, na, na, na, na
- >
- : vector16<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15
- >
-{
- typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16, na, na, na
- >
- : vector17<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16
- >
-{
- typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16, T17, na, na
- >
- : vector18<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16, T17
- >
-{
- typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18
- >
-struct vector<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16, T17, T18, na
- >
- : vector19<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16, T17, T18
- >
-{
- typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
-};
-
-/// primary template (not a specialization!)
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- >
-struct vector
- : vector20<
- T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
- , T15, T16, T17, T18, T19
- >
-{
- typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
-};
-
-}}
-
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/is_seq.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/is_seq.hpp
deleted file mode 100644
index cb6dcb98c1..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/is_seq.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED
-#define BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED
-
-// Copyright Paul Mensonides 2003
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/preprocessor/seq/size.hpp>
-#include <boost/preprocessor/arithmetic/dec.hpp>
-#include <boost/preprocessor/punctuation/paren.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/config/config.hpp>
-
-// returns 1 if 'seq' is a PP-sequence, 0 otherwise:
-//
-// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_IS_SEQ( int ) ) )
-// BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (int) ) )
-// BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (1)(2) ) )
-
-#if (BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()) || defined(_MSC_VER) && defined(__INTEL_COMPILER) && __INTEL_COMPILER == 1010
-
-# define BOOST_MPL_PP_IS_SEQ(seq) BOOST_PP_DEC( BOOST_PP_SEQ_SIZE( BOOST_MPL_PP_IS_SEQ_(seq) ) )
-# define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_MPL_PP_IS_SEQ_SEQ_( BOOST_MPL_PP_IS_SEQ_SPLIT_ seq )
-# define BOOST_MPL_PP_IS_SEQ_SEQ_(x) (x)
-# define BOOST_MPL_PP_IS_SEQ_SPLIT_(unused) unused)((unused)
-
-#else
-
-# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
-# define BOOST_MPL_PP_IS_SEQ(seq) BOOST_MPL_PP_IS_SEQ_MWCC_((seq))
-# define BOOST_MPL_PP_IS_SEQ_MWCC_(args) BOOST_MPL_PP_IS_SEQ_ ## args
-# else
-# define BOOST_MPL_PP_IS_SEQ(seq) BOOST_MPL_PP_IS_SEQ_(seq)
-# endif
-
-# define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_PP_CAT(BOOST_MPL_PP_IS_SEQ_, BOOST_MPL_PP_IS_SEQ_0 seq BOOST_PP_RPAREN())
-# define BOOST_MPL_PP_IS_SEQ_0(x) BOOST_MPL_PP_IS_SEQ_1(x
-# define BOOST_MPL_PP_IS_SEQ_ALWAYS_0(unused) 0
-# define BOOST_MPL_PP_IS_SEQ_BOOST_MPL_PP_IS_SEQ_0 BOOST_MPL_PP_IS_SEQ_ALWAYS_0(
-# define BOOST_MPL_PP_IS_SEQ_BOOST_MPL_PP_IS_SEQ_1(unused) 1
-
-#endif
-
-#endif // BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/token_equal.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/token_equal.hpp
deleted file mode 100644
index ffdb20f9e4..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/preprocessor/token_equal.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED
-#define BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED
-
-// Copyright Paul Mensonides 2003
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/preprocessor/is_seq.hpp>
-
-#include <boost/preprocessor/if.hpp>
-#include <boost/preprocessor/logical/bitand.hpp>
-#include <boost/preprocessor/logical/compl.hpp>
-#include <boost/preprocessor/tuple/eat.hpp>
-#include <boost/preprocessor/cat.hpp>
-
-// compares tokens 'a' and 'b' for equality:
-//
-// #define BOOST_MPL_PP_TOKEN_EQUAL_apple(x) x
-// #define BOOST_MPL_PP_TOKEN_EQUAL_orange(x) x
-//
-// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(apple, abc) ) )
-// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(abc, apple) ) )
-// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(apple, orange) ) )
-// BOOST_PP_ASSERT( BOOST_MPL_PP_TOKEN_EQUAL(apple, apple) )
-// BOOST_PP_ASSERT( BOOST_MPL_PP_TOKEN_EQUAL(orange, orange) )
-
-#define BOOST_MPL_PP_TOKEN_EQUAL(a, b) \
- BOOST_PP_IIF( \
- BOOST_PP_BITAND( \
- BOOST_MPL_PP_IS_SEQ( BOOST_PP_CAT(BOOST_MPL_PP_TOKEN_EQUAL_, a)((unused)) ) \
- , BOOST_MPL_PP_IS_SEQ( BOOST_PP_CAT(BOOST_MPL_PP_TOKEN_EQUAL_, b)((unused)) ) \
- ) \
- , BOOST_MPL_PP_TOKEN_EQUAL_I \
- , 0 BOOST_PP_TUPLE_EAT(2) \
- )(a, b) \
-/**/
-
-#define BOOST_MPL_PP_TOKEN_EQUAL_I(a, b) \
- BOOST_PP_COMPL(BOOST_MPL_PP_IS_SEQ( \
- BOOST_MPL_PP_TOKEN_EQUAL_ ## a( \
- BOOST_MPL_PP_TOKEN_EQUAL_ ## b \
- )((unused)) \
- )) \
-/**/
-
-#endif // BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/O1_size.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/O1_size.hpp
deleted file mode 100644
index 9b393e8490..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/O1_size.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/O1_size_fwd.hpp>
-#include <boost/mpl/aux_/range_c/size.hpp>
-#include <boost/mpl/aux_/range_c/tag.hpp>
-
-namespace boost { namespace mpl {
-
-template<>
-struct O1_size_impl< aux::half_open_range_tag >
- : size_impl< aux::half_open_range_tag >
-{
-};
-
-}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/back.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/back.hpp
deleted file mode 100644
index 5490108767..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/back.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/back_fwd.hpp>
-#include <boost/mpl/prior.hpp>
-#include <boost/mpl/aux_/range_c/tag.hpp>
-
-namespace boost { namespace mpl {
-
-template<>
-struct back_impl< aux::half_open_range_tag >
-{
- template< typename Range > struct apply
- {
- typedef typename prior< typename Range::finish >::type type;
- };
-};
-
-}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/empty.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/empty.hpp
deleted file mode 100644
index 574bdf2a99..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/empty.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/empty_fwd.hpp>
-#include <boost/mpl/equal_to.hpp>
-#include <boost/mpl/aux_/range_c/tag.hpp>
-
-namespace boost { namespace mpl {
-
-template<>
-struct empty_impl< aux::half_open_range_tag >
-{
- template< typename Range > struct apply
- : equal_to<
- typename Range::start
- , typename Range::finish
- >
- {
- };
-};
-
-}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/front.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/front.hpp
deleted file mode 100644
index 2964ab505c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/front.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/front_fwd.hpp>
-#include <boost/mpl/aux_/range_c/tag.hpp>
-
-namespace boost { namespace mpl {
-
-template<>
-struct front_impl< aux::half_open_range_tag >
-{
- template< typename Range > struct apply
- {
- typedef typename Range::start type;
- };
-};
-
-}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/iterator.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/iterator.hpp
deleted file mode 100644
index 2c5290528c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/iterator.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/iterator_tags.hpp>
-#include <boost/mpl/advance_fwd.hpp>
-#include <boost/mpl/distance_fwd.hpp>
-#include <boost/mpl/next_prior.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/minus.hpp>
-#include <boost/mpl/aux_/value_wknd.hpp>
-#include <boost/mpl/aux_/config/ctps.hpp>
-
-namespace boost { namespace mpl {
-
-// theoretically will work on any discrete numeric type
-template< typename N > struct r_iter
-{
- typedef aux::r_iter_tag tag;
- typedef random_access_iterator_tag category;
- typedef N type;
-
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
- typedef r_iter< typename mpl::next<N>::type > next;
- typedef r_iter< typename mpl::prior<N>::type > prior;
-#endif
-};
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-template<
- typename N
- >
-struct next< r_iter<N> >
-{
- typedef r_iter< typename mpl::next<N>::type > type;
-};
-
-template<
- typename N
- >
-struct prior< r_iter<N> >
-{
- typedef r_iter< typename mpl::prior<N>::type > type;
-};
-
-#endif
-
-
-template<> struct advance_impl<aux::r_iter_tag>
-{
- template< typename Iter, typename Dist > struct apply
- {
- typedef typename deref<Iter>::type n_;
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- typedef typename plus_impl<integral_c_tag,integral_c_tag>
- ::template apply<n_,Dist>::type m_;
-#else
- typedef typename plus<n_,Dist>::type m_;
-#endif
- // agurt, 10/nov/04: to be generic, the code have to do something along
- // the lines below...
- //
- // typedef typename apply_wrap1<
- // numeric_cast< typename m_::tag, typename n_::tag >
- // , m_
- // >::type result_;
- //
- // ... meanwhile:
-
- typedef integral_c<
- typename aux::value_type_wknd<n_>::type
- , BOOST_MPL_AUX_VALUE_WKND(m_)::value
- > result_;
-
- typedef r_iter<result_> type;
- };
-};
-
-template<> struct distance_impl<aux::r_iter_tag>
-{
- template< typename Iter1, typename Iter2 > struct apply
- : minus<
- typename Iter2::type
- , typename Iter1::type
- >
- {
- };
-};
-
-}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/size.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/size.hpp
deleted file mode 100644
index 761a97cc17..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/size.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/size_fwd.hpp>
-#include <boost/mpl/minus.hpp>
-#include <boost/mpl/aux_/range_c/tag.hpp>
-
-namespace boost { namespace mpl {
-
-template<>
-struct size_impl< aux::half_open_range_tag >
-{
- template< typename Range > struct apply
- : minus<
- typename Range::finish
- , typename Range::start
- >
- {
- };
-};
-
-}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/tag.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/tag.hpp
deleted file mode 100644
index 7f8fdde0a1..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/range_c/tag.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED
-#define BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-namespace boost { namespace mpl { namespace aux {
-
-struct half_open_range_tag;
-struct r_iter_tag;
-
-}}}
-
-#endif // BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/shift_op.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/shift_op.hpp
deleted file mode 100644
index b9840bf5c5..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/shift_op.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/integral_c.hpp>
-# include <boost/mpl/aux_/value_wknd.hpp>
-#endif
-
-#if !defined(AUX778076_OP_PREFIX)
-# define AUX778076_OP_PREFIX AUX778076_OP_NAME
-#endif
-
-#define AUX778076_OP_ARITY 2
-
-#include <boost/mpl/aux_/numeric_op.hpp>
-#include <boost/mpl/aux_/config/static_constant.hpp>
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp
-# include <boost/mpl/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/aux_/config/integral.hpp>
-# include <boost/preprocessor/cat.hpp>
-
-namespace boost { namespace mpl {
-
-#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
-namespace aux {
-template< typename T, typename Shift, T n, Shift s >
-struct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)
-{
- BOOST_STATIC_CONSTANT(T, value = (n AUX778076_OP_TOKEN s));
- typedef integral_c<T,value> type;
-};
-}
-#endif
-
-template<>
-struct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>
-{
- template< typename N, typename S > struct apply
-#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
- : integral_c<
- typename N::value_type
- , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
- AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(S)::value
- )
- >
-#else
- : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<
- typename N::value_type
- , typename S::value_type
- , N::value
- , S::value
- >::type
-#endif
- {
- };
-};
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#undef AUX778076_OP_TAG_NAME
-#undef AUX778076_OP_IMPL_NAME
-#undef AUX778076_OP_ARITY
-#undef AUX778076_OP_PREFIX
-#undef AUX778076_OP_NAME
-#undef AUX778076_OP_TOKEN
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/single_element_iter.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/single_element_iter.hpp
deleted file mode 100644
index 9aceb7474c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/single_element_iter.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED
-#define BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/iterator_tags.hpp>
-#include <boost/mpl/advance_fwd.hpp>
-#include <boost/mpl/distance_fwd.hpp>
-#include <boost/mpl/next_prior.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/aux_/nttp_decl.hpp>
-#include <boost/mpl/aux_/value_wknd.hpp>
-#include <boost/mpl/aux_/config/ctps.hpp>
-
-namespace boost { namespace mpl {
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
-namespace aux {
-
-template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >
-struct sel_iter;
-
-template< typename T >
-struct sel_iter<T,0>
-{
- typedef random_access_iterator_tag category;
- typedef sel_iter<T,1> next;
- typedef T type;
-};
-
-template< typename T >
-struct sel_iter<T,1>
-{
- typedef random_access_iterator_tag category;
- typedef sel_iter<T,0> prior;
-};
-
-} // namespace aux
-
-template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_), typename Distance >
-struct advance< aux::sel_iter<T,is_last_>,Distance>
-{
- typedef aux::sel_iter<
- T
- , ( is_last_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Distance) )
- > type;
-};
-
-template<
- typename T
- , BOOST_MPL_AUX_NTTP_DECL(int, l1)
- , BOOST_MPL_AUX_NTTP_DECL(int, l2)
- >
-struct distance< aux::sel_iter<T,l1>, aux::sel_iter<T,l2> >
- : int_<( l2 - l1 )>
-{
-};
-
-#else
-
-namespace aux {
-
-struct sel_iter_tag;
-
-template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >
-struct sel_iter
-{
- enum { pos_ = is_last_ };
- typedef aux::sel_iter_tag tag;
- typedef random_access_iterator_tag category;
-
- typedef sel_iter<T,(is_last_ + 1)> next;
- typedef sel_iter<T,(is_last_ - 1)> prior;
- typedef T type;
-};
-
-} // namespace aux
-
-template<> struct advance_impl<aux::sel_iter_tag>
-{
- template< typename Iterator, typename N > struct apply
- {
- enum { pos_ = Iterator::pos_, n_ = N::value };
- typedef aux::sel_iter<
- typename Iterator::type
- , (pos_ + n_)
- > type;
- };
-};
-
-template<> struct distance_impl<aux::sel_iter_tag>
-{
- template< typename Iter1, typename Iter2 > struct apply
- {
- enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
- typedef int_<( pos2_ - pos1_ )> type;
- BOOST_STATIC_CONSTANT(int, value = ( pos2_ - pos1_ ));
- };
-};
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-}}
-
-#endif // BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/sort_impl.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/sort_impl.hpp
deleted file mode 100644
index 382042190f..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/sort_impl.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED
-#define BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED
-
-// Copyright Eric Friedman 2002-2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/partition.hpp>
-#include <boost/mpl/copy.hpp>
-#include <boost/mpl/vector.hpp>
-#include <boost/mpl/back_inserter.hpp>
-#include <boost/mpl/front_inserter.hpp>
-#include <boost/mpl/iterator_range.hpp>
-#include <boost/mpl/joint_view.hpp>
-#include <boost/mpl/single_view.hpp>
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/empty.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/less.hpp>
-#include <boost/mpl/aux_/na.hpp>
-
-namespace boost { namespace mpl { namespace aux {
-
-template< typename Seq, typename Pred >
-struct quick_sort;
-
-// agurt, 10/nov/04: for the sake of deficeint compilers
-template< typename Pred, typename Pivot >
-struct quick_sort_pred
-{
- template< typename T > struct apply
- {
- typedef typename apply2<Pred,T,Pivot>::type type;
- };
-};
-
-template<
- typename Seq
- , typename Pred
- >
-struct quick_sort_impl
-{
- typedef typename begin<Seq>::type pivot;
- typedef typename partition<
- iterator_range<
- typename next<pivot>::type
- , typename end<Seq>::type
- >
- , protect< aux::quick_sort_pred< Pred, typename deref<pivot>::type > >
- , back_inserter< vector<> >
- , back_inserter< vector<> >
- >::type partitioned;
-
- typedef typename quick_sort< typename partitioned::first, Pred >::type part1;
- typedef typename quick_sort< typename partitioned::second, Pred >::type part2;
-
- typedef joint_view<
- joint_view< part1, single_view< typename deref<pivot>::type > >
- , part2
- > type;
-};
-
-template<
- typename Seq
- , typename Pred
- >
-struct quick_sort
- : eval_if<
- empty<Seq>
- , identity<Seq>
- , quick_sort_impl<Seq,Pred>
- >
-{
-};
-
-
-template <
- typename Sequence
- , typename Pred
- , typename In
- >
-struct sort_impl
-{
- typedef typename quick_sort<
- Sequence
- , typename if_na<Pred,less<> >::type
- >::type result_;
-
- typedef typename copy<result_,In>::type type;
-};
-
-template <
- typename Sequence
- , typename Pred
- , typename In
- >
-struct reverse_sort_impl
-{
- typedef typename quick_sort<
- Sequence
- , typename if_na<Pred,less<> >::type
- >::type result_;
-
- typedef typename reverse_copy<result_,In>::type type;
-};
-
-}}}
-
-#endif // BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test.hpp
deleted file mode 100644
index 8d1dea62c1..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_TEST_HPP_INCLUDED
-#define BOOST_MPL_AUX_TEST_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/test/test_case.hpp>
-#include <boost/mpl/aux_/test/data.hpp>
-#include <boost/mpl/aux_/test/assert.hpp>
-#include <boost/detail/lightweight_test.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-
-int main()
-{
- return boost::report_errors();
-}
-
-using namespace boost;
-using namespace mpl;
-
-#endif // BOOST_MPL_AUX_TEST_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/assert.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/assert.hpp
deleted file mode 100644
index 3bd8ba09c2..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/assert.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED
-#define BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/assert.hpp>
-#include <boost/preprocessor/cat.hpp>
-
-#define MPL_ASSERT(pred) BOOST_MPL_ASSERT(pred)
-#define MPL_ASSERT_NOT(pred) BOOST_MPL_ASSERT_NOT(pred)
-#define MPL_ASSERT_MSG(c, msg, types) BOOST_MPL_ASSERT_MSG(c, msg, types)
-#define MPL_ASSERT_RELATION(x, rel, y) BOOST_MPL_ASSERT_RELATION(x, rel, y)
-
-#define MPL_ASSERT_INSTANTIATION(x) \
- enum { BOOST_PP_CAT(instantiation_test, __LINE__) = sizeof( x ) } \
-/**/
-
-#endif // BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/data.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/data.hpp
deleted file mode 100644
index 373e6c326c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/data.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED
-#define BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/noncopyable.hpp>
-
-enum enum_ {};
-struct UDT {};
-struct incomplete;
-class abstract { public: virtual ~abstract() = 0; };
-using boost::noncopyable;
-
-#endif // BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/test_case.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/test_case.hpp
deleted file mode 100644
index b168a005a1..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/aux_/test/test_case.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED
-#define BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/preprocessor/cat.hpp>
-
-#define MPL_TEST_CASE() void BOOST_PP_CAT(test,__LINE__)()
-
-#endif // BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/bitor.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/bitor.hpp
deleted file mode 100644
index 05348c3edf..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/bitor.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#ifndef BOOST_MPL_BITOR_HPP_INCLUDED
-#define BOOST_MPL_BITOR_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2009
-// Copyright Jaap Suter 2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-// agurt, 23/jan/10: workaround a conflict with <iso646.h> header's
-// macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)'
-// has to be checked in a separate condition, otherwise GCC complains
-// about 'bitor' being an alternative token
-#if defined(_MSC_VER)
-#ifndef __GCCXML__
-#if defined(bitor)
-# pragma push_macro("bitor")
-# undef bitor
-# define bitor(x)
-#endif
-#endif
-#endif
-
-#define AUX778076_OP_NAME bitor_
-#define AUX778076_OP_PREFIX bitor
-#define AUX778076_OP_TOKEN |
-#include <boost/mpl/aux_/arithmetic_op.hpp>
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#ifndef __GCCXML__
-#if defined(bitor)
-# pragma pop_macro("bitor")
-#endif
-#endif
-#endif
-
-#endif // BOOST_MPL_BITOR_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/bitwise.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/bitwise.hpp
deleted file mode 100644
index 9deb23ef2e..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/bitwise.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#ifndef BOOST_MPL_BITWISE_HPP_INCLUDED
-#define BOOST_MPL_BITWISE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-// Copyright Jaap Suter 2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/bitand.hpp>
-#include <boost/mpl/bitor.hpp>
-#include <boost/mpl/bitxor.hpp>
-#include <boost/mpl/shift_left.hpp>
-#include <boost/mpl/shift_right.hpp>
-
-#endif // BOOST_MPL_BITWISE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/char.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/char.hpp
deleted file mode 100644
index 08828c247a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/char.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#ifndef BOOST_MPL_CHAR_HPP_INCLUDED
-#define BOOST_MPL_CHAR_HPP_INCLUDED
-
-// Copyright Eric Niebler 2008
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Source$
-// $Date: 2008-06-14 08:41:37 -0700 (Sat, 16 Jun 2008) $
-// $Revision: 24874 $
-
-#include <boost/mpl/char_fwd.hpp>
-
-#define AUX_WRAPPER_VALUE_TYPE char
-#include <boost/mpl/aux_/integral_wrapper.hpp>
-
-#endif // BOOST_MPL_CHAR_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/char_fwd.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/char_fwd.hpp
deleted file mode 100644
index 442d0a1619..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/char_fwd.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#ifndef BOOST_MPL_CHAR_FWD_HPP_INCLUDED
-#define BOOST_MPL_CHAR_FWD_HPP_INCLUDED
-
-// Copyright Eric Niebler 2008
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Source$
-// $Date: 2008-06-14 08:41:37 -0700 (Sat, 16 Jun 2008) $
-// $Revision: 24874 $
-
-#include <boost/mpl/aux_/adl_barrier.hpp>
-#include <boost/mpl/aux_/nttp_decl.hpp>
-
-BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
-
-template< BOOST_MPL_AUX_NTTP_DECL(char, N) > struct char_;
-
-BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
-BOOST_MPL_AUX_ADL_BARRIER_DECL(char_)
-
-#endif // BOOST_MPL_CHAR_FWD_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/copy_if.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/copy_if.hpp
deleted file mode 100644
index 96d9172df9..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/copy_if.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-
-#ifndef BOOST_MPL_COPY_IF_HPP_INCLUDED
-#define BOOST_MPL_COPY_IF_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/reverse_fold.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/protect.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-#include <boost/mpl/aux_/config/forwarding.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template<
- typename Operation
- , typename Predicate
- >
-struct copy_if_op
-{
- template< typename Sequence, typename T > struct apply
-#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
- : eval_if<
- typename apply1<Predicate,T>::type
- , apply2<Operation,Sequence,T>
- , identity<Sequence>
- >
- {
-#else
- {
- typedef typename eval_if<
- typename apply1<Predicate,T>::type
- , apply2<Operation,Sequence,T>
- , identity<Sequence>
- >::type type;
-#endif
- };
-};
-
-template<
- typename Sequence
- , typename Predicate
- , typename Inserter
- >
-struct copy_if_impl
- : fold<
- Sequence
- , typename Inserter::state
- , protect< aux::copy_if_op<
- typename Inserter::operation
- , Predicate
- > >
- >
-{
-};
-
-template<
- typename Sequence
- , typename Predicate
- , typename Inserter
- >
-struct reverse_copy_if_impl
- : reverse_fold<
- Sequence
- , typename Inserter::state
- , protect< aux::copy_if_op<
- typename Inserter::operation
- , Predicate
- > >
- >
-{
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, copy_if)
-
-}}
-
-#endif // BOOST_MPL_COPY_IF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/count.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/count.hpp
deleted file mode 100644
index c845662c2f..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/count.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#ifndef BOOST_MPL_COUNT_HPP_INCLUDED
-#define BOOST_MPL_COUNT_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/count_fwd.hpp>
-#include <boost/mpl/sequence_tag.hpp>
-#include <boost/mpl/aux_/count_impl.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct count
- : count_impl< typename sequence_tag<Sequence>::type >
- ::template apply<Sequence,T>
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,count,(Sequence,T))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, count)
-
-}}
-
-#endif // BOOST_MPL_COUNT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/count_if.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/count_if.hpp
deleted file mode 100644
index d81c395705..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/count_if.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-
-#ifndef BOOST_MPL_COUNT_IF_HPP_INCLUDED
-#define BOOST_MPL_COUNT_IF_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2002
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/next.hpp>
-#include <boost/mpl/integral_c.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/aux_/msvc_eti_base.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/aux_/config/forwarding.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template< typename Predicate >
-struct next_if
-{
- template<
- typename N
- , typename T
- >
- struct apply
-#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
- : eval_if<
- typename apply1<Predicate,T>::type
- , next<N>
- , identity<N>
- >
- {
-#else
- {
- typedef typename eval_if<
- typename apply1<Predicate,T>::type
- , next<N>
- , identity<N>
- >::type type;
-#endif
- };
-};
-
-} // namespace aux
-
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
- >
-struct count_if
- : aux::msvc_eti_base< typename fold<
- Sequence
- , integral_c<unsigned long,0>
- , protect< aux::next_if<Predicate> >
- >::type >
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,count_if,(Sequence,Predicate))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, count_if)
-
-}}
-
-#endif // BOOST_MPL_COUNT_IF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/deque.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/deque.hpp
deleted file mode 100644
index 729bae97b7..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/deque.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-
-#ifndef BOOST_MPL_DEQUE_HPP_INCLUDED
-#define BOOST_MPL_DEQUE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/limits/vector.hpp>
-# include <boost/mpl/aux_/na.hpp>
-# include <boost/mpl/aux_/config/preprocessor.hpp>
-
-# include <boost/preprocessor/inc.hpp>
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/stringize.hpp>
-
-#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
-# define AUX778076_DEQUE_HEADER \
- BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \
- /**/
-#else
-# define AUX778076_DEQUE_HEADER \
- BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \
- /**/
-#endif
-
-# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_DEQUE_HEADER)
-# undef AUX778076_DEQUE_HEADER
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER deque.hpp
-# include <boost/mpl/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/limits/vector.hpp>
-
-# define AUX778076_SEQUENCE_NAME deque
-# define AUX778076_SEQUENCE_BASE_NAME vector
-# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
-# include <boost/mpl/aux_/sequence_wrapper.hpp>
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-#endif // BOOST_MPL_DEQUE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/divides.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/divides.hpp
deleted file mode 100644
index 55c8b0d10a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/divides.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef BOOST_MPL_DIVIDES_HPP_INCLUDED
-#define BOOST_MPL_DIVIDES_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#define AUX778076_OP_NAME divides
-#define AUX778076_OP_TOKEN /
-#include <boost/mpl/aux_/arithmetic_op.hpp>
-
-#endif // BOOST_MPL_DIVIDES_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/empty_sequence.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/empty_sequence.hpp
deleted file mode 100644
index f32cc6ee81..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/empty_sequence.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
-#define BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2004
-// Copyright Alexander Nasonov 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/size_fwd.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/iterator_tags.hpp>
-
-namespace boost { namespace mpl {
-
-struct empty_sequence
-{
- struct tag;
- typedef empty_sequence type;
- struct begin { typedef random_access_iterator_tag category; };
- typedef begin end;
-};
-
-template<>
-struct size_impl<empty_sequence::tag>
-{
- template< typename Sequence > struct apply
- : int_<0>
- {
- };
-};
-
-}}
-
-#endif // #ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/filter_view.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/filter_view.hpp
deleted file mode 100644
index e2830d00ca..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/filter_view.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-
-#ifndef BOOST_MPL_FILTER_VIEW_HPP_INCLUDED
-#define BOOST_MPL_FILTER_VIEW_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/lambda.hpp>
-#include <boost/mpl/aux_/filter_iter.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
- >
-struct filter_view
-{
- private:
- typedef typename lambda<Predicate>::type pred_;
- typedef typename begin<Sequence>::type first_;
- typedef typename end<Sequence>::type last_;
-
- public:
- struct tag;
- typedef filter_view type;
- typedef typename aux::next_filter_iter< first_,last_,pred_ >::type begin;
- typedef aux::filter_iter< last_,last_,pred_ > end;
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, filter_view)
-
-}}
-
-#endif // BOOST_MPL_FILTER_VIEW_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/get_tag.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/get_tag.hpp
deleted file mode 100644
index 5a99d1654e..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/get_tag.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#ifndef BOOST_MPL_GET_TAG_HPP_INCLUDED
-#define BOOST_MPL_GET_TAG_HPP_INCLUDED
-
-// Copyright Sergey Krivonos 2017
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-
-#define BOOST_MPL_GET_TAG_DEF(TAG) \
- namespace boost { namespace mpl { \
- template<typename T> \
- struct get_##TAG { \
- typedef typename T::TAG type; \
- }; \
- }}
-
-#endif
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/index_if.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/index_if.hpp
deleted file mode 100644
index a44473d2c6..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/index_if.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#ifndef BOOST_MPL_INDEX_IF_HPP_INCLUDED
-#define BOOST_MPL_INDEX_IF_HPP_INCLUDED
-
-// Copyright Eric Friedman 2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/find_if_pred.hpp>
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/iter_fold_if.hpp>
-#include <boost/mpl/next.hpp>
-#include <boost/mpl/void.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
- >
-struct index_if
-{
- typedef typename iter_fold_if<
- Sequence
- , int_<0>
- , next<>
- , aux::find_if_pred<Predicate>
- >::type result_;
-
- typedef typename end<Sequence>::type not_found_;
- typedef typename first<result_>::type result_index_;
- typedef typename second<result_>::type result_iterator_;
-
- typedef typename if_<
- is_same< result_iterator_,not_found_ >
- , void_
- , result_index_
- >::type type;
-
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_if,(Sequence,Predicate))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, index_if)
-
-}}
-
-#endif // BOOST_MPL_INDEX_IF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/index_of.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/index_of.hpp
deleted file mode 100644
index cc86a12e4b..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/index_of.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#ifndef BOOST_MPL_INDEX_OF_HPP_INCLUDED
-#define BOOST_MPL_INDEX_OF_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-// Copyright Eric Friedman 2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/index_if.hpp>
-#include <boost/mpl/same_as.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct index_of
- : index_if< Sequence,same_as<T> >
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_of,(Sequence,T))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, index_of)
-
-}}
-
-#endif // BOOST_MPL_INDEX_OF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/inherit_linearly.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/inherit_linearly.hpp
deleted file mode 100644
index fa58480b84..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/inherit_linearly.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#ifndef BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED
-#define BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2001-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/empty_base.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Types_)
- , typename BOOST_MPL_AUX_NA_PARAM(Node_)
- , typename Root_ = empty_base
- >
-struct inherit_linearly
- : fold<Types_,Root_,Node_>
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(3,inherit_linearly,(Types_,Node_,Root_))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, inherit_linearly)
-
-}}
-
-#endif // BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/key_type.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/key_type.hpp
deleted file mode 100644
index 77bb37f199..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/key_type.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#ifndef BOOST_MPL_KEY_TYPE_HPP_INCLUDED
-#define BOOST_MPL_KEY_TYPE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/key_type_fwd.hpp>
-#include <boost/mpl/sequence_tag.hpp>
-#include <boost/mpl/apply_wrap.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct key_type
- : apply_wrap2<
- key_type_impl< typename sequence_tag<AssociativeSequence>::type >
- , AssociativeSequence, T>
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,key_type,(AssociativeSequence,T))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, key_type)
-
-}}
-
-#endif // BOOST_MPL_KEY_TYPE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/limits/set.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/limits/set.hpp
deleted file mode 100644
index dbc9bd0c0b..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/limits/set.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef BOOST_MPL_LIMITS_SET_HPP_INCLUDED
-#define BOOST_MPL_LIMITS_SET_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_LIMIT_SET_SIZE)
-# define BOOST_MPL_LIMIT_SET_SIZE 20
-#endif
-
-#endif // BOOST_MPL_LIMITS_SET_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/limits/string.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/limits/string.hpp
deleted file mode 100644
index eb85aa389f..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/limits/string.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#ifndef BOOST_MPL_LIMITS_STRING_HPP_INCLUDED
-#define BOOST_MPL_LIMITS_STRING_HPP_INCLUDED
-
-// Copyright Eric Niebler 2009
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id: string.hpp 49239 2009-04-01 09:10:26Z eric_niebler $
-// $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $
-// $Revision: 49239 $
-
-#if !defined(BOOST_MPL_LIMIT_STRING_SIZE)
-# define BOOST_MPL_LIMIT_STRING_SIZE 32
-#endif
-
-#endif // BOOST_MPL_LIMITS_STRING_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list/list0_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list/list0_c.hpp
deleted file mode 100644
index 807ca1c2c9..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list/list0_c.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/list/list0.hpp>
-#include <boost/mpl/integral_c.hpp>
-
-namespace boost { namespace mpl {
-
-template< typename T > struct list0_c
- : l_end
-{
- typedef l_end type;
- typedef T value_type;
-};
-
-}}
-
-#endif // BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list/list10_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list/list10_c.hpp
deleted file mode 100644
index 25c8f9defb..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list/list10_c.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/list/list0_c.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER list10_c.hpp
-# include <boost/mpl/list/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(1, 10, <boost/mpl/list/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list/list20_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list/list20_c.hpp
deleted file mode 100644
index 0026f695ac..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list/list20_c.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/list/list10_c.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER list20_c.hpp
-# include <boost/mpl/list/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(11, 20, <boost/mpl/list/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list/list30_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list/list30_c.hpp
deleted file mode 100644
index c996574778..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list/list30_c.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/list/list20_c.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp
-# include <boost/mpl/list/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(21, 30, <boost/mpl/list/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list/list40_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list/list40_c.hpp
deleted file mode 100644
index 808d599dd9..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list/list40_c.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/list/list30_c.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER list40_c.hpp
-# include <boost/mpl/list/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(31, 40, <boost/mpl/list/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list/list50_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list/list50_c.hpp
deleted file mode 100644
index 20692d898e..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list/list50_c.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/list/list40_c.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER list50_c.hpp
-# include <boost/mpl/list/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(41, 50, <boost/mpl/list/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/list_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/list_c.hpp
deleted file mode 100644
index 6c01fc66e7..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/list_c.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#ifndef BOOST_MPL_LIST_C_HPP_INCLUDED
-#define BOOST_MPL_LIST_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/limits/list.hpp>
-# include <boost/mpl/aux_/nttp_decl.hpp>
-# include <boost/mpl/aux_/config/preprocessor.hpp>
-
-# include <boost/preprocessor/inc.hpp>
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/stringize.hpp>
-
-#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
-# define AUX778076_LIST_C_HEADER \
- BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c).hpp \
- /**/
-#else
-# define AUX778076_LIST_C_HEADER \
- BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c)##.hpp \
- /**/
-#endif
-
-# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_C_HEADER)
-# undef AUX778076_LIST_C_HEADER
-# include <climits>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER list_c.hpp
-# include <boost/mpl/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/limits/list.hpp>
-
-# define AUX778076_SEQUENCE_NAME list_c
-# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE
-# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(list,n),_c)
-# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
-# include <boost/mpl/aux_/sequence_wrapper.hpp>
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-#endif // BOOST_MPL_LIST_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/lower_bound.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/lower_bound.hpp
deleted file mode 100644
index ea4a4aed09..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/lower_bound.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-
-#ifndef BOOST_MPL_LOWER_BOUND_HPP_INCLUDED
-#define BOOST_MPL_LOWER_BOUND_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2001-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/less.hpp>
-#include <boost/mpl/lambda.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x610))
-# define BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL
-#endif
-
-#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL)
-# include <boost/mpl/minus.hpp>
-# include <boost/mpl/divides.hpp>
-# include <boost/mpl/size.hpp>
-# include <boost/mpl/advance.hpp>
-# include <boost/mpl/begin_end.hpp>
-# include <boost/mpl/long.hpp>
-# include <boost/mpl/eval_if.hpp>
-# include <boost/mpl/prior.hpp>
-# include <boost/mpl/deref.hpp>
-# include <boost/mpl/apply.hpp>
-# include <boost/mpl/aux_/value_wknd.hpp>
-#else
-# include <boost/mpl/not.hpp>
-# include <boost/mpl/find.hpp>
-# include <boost/mpl/bind.hpp>
-#endif
-
-#include <boost/config.hpp>
-
-namespace boost { namespace mpl {
-
-#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL)
-
-// agurt 23/oct/02: has a wrong complexity etc., but at least it works
-// feel free to contribute a better implementation!
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- , typename Predicate = less<>
- , typename pred_ = typename lambda<Predicate>::type
- >
-struct lower_bound
- : find_if< Sequence, bind1< not_<>, bind2<pred_,_,T> > >
-{
-};
-
-#else
-
-namespace aux {
-
-template<
- typename Distance
- , typename Predicate
- , typename T
- , typename DeferredIterator
- >
-struct lower_bound_step_impl;
-
-template<
- typename Distance
- , typename Predicate
- , typename T
- , typename DeferredIterator
- >
-struct lower_bound_step
-{
- typedef typename eval_if<
- Distance
- , lower_bound_step_impl<Distance,Predicate,T,DeferredIterator>
- , DeferredIterator
- >::type type;
-};
-
-template<
- typename Distance
- , typename Predicate
- , typename T
- , typename DeferredIterator
- >
-struct lower_bound_step_impl
-{
- typedef typename divides< Distance, long_<2> >::type offset_;
- typedef typename DeferredIterator::type iter_;
- typedef typename advance< iter_,offset_ >::type middle_;
- typedef typename apply2<
- Predicate
- , typename deref<middle_>::type
- , T
- >::type cond_;
-
- typedef typename prior< minus< Distance, offset_> >::type step_;
- typedef lower_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;
- typedef lower_bound_step< step_,Predicate,T,next<middle_> > step_backward_;
- typedef typename eval_if<
- cond_
- , step_backward_
- , step_forward_
- >::type type;
-};
-
-
-} // namespace aux
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- , typename Predicate = less<>
- >
-struct lower_bound
-{
- private:
- typedef typename lambda<Predicate>::type pred_;
- typedef typename size<Sequence>::type size_;
-
- public:
- typedef typename aux::lower_bound_step<
- size_,pred_,T,begin<Sequence>
- >::type type;
-};
-
-#endif // BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL
-
-BOOST_MPL_AUX_NA_SPEC(2, lower_bound)
-
-}}
-
-#endif // BOOST_MPL_LOWER_BOUND_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/math/fixed_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/math/fixed_c.hpp
deleted file mode 100644
index 1d78e51d03..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/math/fixed_c.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#ifndef BOOST_MPL_FIXED_C_HPP_INCLUDED
-#define BOOST_MPL_FIXED_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/config/static_constant.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- long IntegerPart
- , unsigned long FractionPart
- >
-struct fixed_c
-{
- BOOST_STATIC_CONSTANT(long, integer_part = IntegerPart);
- BOOST_STATIC_CONSTANT(unsigned long, fraction_part = FractionPart);
- typedef fixed_c<IntegerPart, FractionPart> type;
-
- fixed_c() {}
-};
-
-}}
-
-#endif // BOOST_MPL_FIXED_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/math/is_even.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/math/is_even.hpp
deleted file mode 100644
index a39de5bd3a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/math/is_even.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#ifndef BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED
-#define BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/aux_/config/msvc.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-
-namespace boost { namespace mpl {
-
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-namespace aux
-{
- template <class N>
- struct is_even_base
- {
- enum { value = (N::value % 2) == 0 };
- typedef bool_<value> type;
- };
-}
-#endif
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(N)
- >
-struct is_even
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- : aux::is_even_base<N>::type
-#else
- : bool_<((N::value % 2) == 0)>
-#endif
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_even,(N))
-};
-
-BOOST_MPL_AUX_NA_SPEC(1, is_even)
-
-}}
-
-#endif // BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/math/rational_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/math/rational_c.hpp
deleted file mode 100644
index dd1ac3f54c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/math/rational_c.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef BOOST_MPL_RATIONAL_C_HPP_INCLUDED
-#define BOOST_MPL_RATIONAL_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/config/static_constant.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename IntegerType
- , IntegerType N
- , IntegerType D = 1
- >
-struct rational_c
-{
- BOOST_STATIC_CONSTANT(IntegerType, numerator = N);
- BOOST_STATIC_CONSTANT(IntegerType, denominator = D);
-
- typedef rational_c<IntegerType,N,D> type;
- rational_c() {}
-};
-
-}}
-
-#endif // BOOST_MPL_RATIONAL_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/max.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/max.hpp
deleted file mode 100644
index 4a4c8c1c08..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/max.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#ifndef BOOST_MPL_MAX_HPP_INCLUDED
-#define BOOST_MPL_MAX_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/min_max.hpp>
-
-#endif // BOOST_MPL_MAX_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/min_element.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/min_element.hpp
deleted file mode 100644
index 078ee1de1c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/min_element.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#ifndef BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED
-#define BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED
-
-// Copyright David Abrahams 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/max_element.hpp>
-#include <boost/mpl/not.hpp>
-
-namespace boost { namespace mpl {
-
-BOOST_MPL_AUX_COMMON_NAME_WKND(min_element)
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename Predicate = less<_,_>
- >
-struct min_element
- : max_element<
- Sequence
- , mpl::not_<Predicate>
- >
-{
-};
-
-BOOST_MPL_AUX_NA_SPEC(1, min_element)
-
-}}
-
-#endif // BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/modulus.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/modulus.hpp
deleted file mode 100644
index 5cc2eccb86..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/modulus.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#ifndef BOOST_MPL_MODULUS_HPP_INCLUDED
-#define BOOST_MPL_MODULUS_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#define AUX778076_OP_NAME modulus
-#define AUX778076_OP_TOKEN %
-#define AUX778076_OP_ARITY 2
-#include <boost/mpl/aux_/arithmetic_op.hpp>
-
-#endif // BOOST_MPL_MODULUS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/count_impl.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/count_impl.hpp
deleted file mode 100644
index 6cd4a5bd25..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/count_impl.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-
-#ifndef BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
-#define BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/multiset/aux_/tag.hpp>
-#include <boost/mpl/count_fwd.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/aux_/type_wrapper.hpp>
-#include <boost/mpl/aux_/static_cast.hpp>
-#include <boost/mpl/aux_/config/static_constant.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-#include <boost/mpl/aux_/config/msvc.hpp>
-
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-# include <boost/mpl/if.hpp>
-# include <boost/type_traits/is_reference.hpp>
-#endif
-
-namespace boost { namespace mpl {
-
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
-namespace aux {
-template< typename S, typename U >
-struct multiset_count_impl
- : int_< sizeof(S::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) - 1 >
-{
-};
-
-template< typename S, typename U >
-struct multiset_count_ref_impl
-{
- typedef U (* u_)();
- typedef int_< sizeof(S::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) - 1 > type_;
- BOOST_STATIC_CONSTANT(int, value = type_::value);
- typedef type_ type;
-};
-}
-
-template<>
-struct count_impl< aux::multiset_tag >
-{
- template< typename Set, typename Key > struct apply
- : if_<
- is_reference<Key>
- , aux::multiset_count_ref_impl<Set,Key>
- , aux::multiset_count_impl<Set,Key>
- >::type
- {
- };
-};
-
-#else
-
-template<>
-struct count_impl< aux::multiset_tag >
-{
- template< typename Set, typename Key > struct apply
- {
- enum { msvc71_wknd_ = sizeof(Set::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*,0))) - 1 };
- typedef int_< msvc71_wknd_ > type;
- BOOST_STATIC_CONSTANT(int, value = msvc71_wknd_);
- };
-};
-
-#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
-}}
-
-#endif // BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/insert_impl.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/insert_impl.hpp
deleted file mode 100644
index 208da2884e..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/insert_impl.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#ifndef BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED
-#define BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/multiset/aux_/item.hpp>
-#include <boost/mpl/multiset/aux_/tag.hpp>
-#include <boost/mpl/insert_fwd.hpp>
-
-namespace boost { namespace mpl {
-
-template<>
-struct insert_impl< aux::multiset_tag >
-{
- template< typename Set, typename Key, typename unused_ > struct apply
- {
- typedef ms_item<Key,Set> type;
- };
-};
-
-}}
-
-#endif // BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/item.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/item.hpp
deleted file mode 100644
index eca21ad969..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/item.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-
-#ifndef BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED
-#define BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/multiset/aux_/tag.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/aux_/type_wrapper.hpp>
-#include <boost/mpl/aux_/yes_no.hpp>
-#include <boost/mpl/aux_/value_wknd.hpp>
-#include <boost/mpl/aux_/static_cast.hpp>
-#include <boost/mpl/aux_/config/arrays.hpp>
-#include <boost/mpl/aux_/config/msvc.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-# include <boost/mpl/eval_if.hpp>
-# include <boost/mpl/next.hpp>
-# include <boost/type_traits/is_same.hpp>
-#endif
-
-
-namespace boost { namespace mpl {
-
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
-template< typename T, typename Base >
-struct ms_item
-{
- typedef aux::multiset_tag tag;
-
- template< typename U > struct prior_count
- {
- enum { msvc70_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) };
- typedef int_< msvc70_wknd_ > count_;
- typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;
-#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
- typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;
-#else
- typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];
-#endif
- };
-
- template< typename U > struct prior_ref_count
- {
- typedef U (* u_)();
- enum { msvc70_wknd_ = sizeof(Base::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) };
- typedef int_< msvc70_wknd_ > count_;
- typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;
-#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
- typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;
-#else
- typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];
-#endif
- };
-
- template< typename U >
- static typename prior_count<U>::type key_count(U*);
-
- template< typename U >
- static typename prior_ref_count<U>::type ref_key_count(U (*)());
-};
-
-#else // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
-namespace aux {
-template< typename U, typename Base >
-struct prior_key_count
-{
- enum { msvc71_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<U>*,0))) };
- typedef int_< msvc71_wknd_ > count_;
-#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
- typedef typename aux::weighted_tag< BOOST_MPL_AUX_VALUE_WKND(count_)::value >::type type;
-#else
- typedef char (&type)[count_::value];
-#endif
-};
-}
-
-template< typename T, typename Base >
-struct ms_item
-{
- typedef aux::multiset_tag tag;
-
- enum { msvc71_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*,0))) + 1 };
- typedef int_< msvc71_wknd_ > count_;
-#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
- static
- typename aux::weighted_tag< BOOST_MPL_AUX_VALUE_WKND(count_)::value >::type
- key_count(aux::type_wrapper<T>*);
-#else
- static char (& key_count(aux::type_wrapper<T>*) )[count_::value];
-#endif
-
- template< typename U >
- static typename aux::prior_key_count<U,Base>::type key_count(aux::type_wrapper<U>*);
-};
-
-#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
-}}
-
-#endif // BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/multiset0.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/multiset0.hpp
deleted file mode 100644
index e8cb9d2a48..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/multiset0.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#ifndef BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED
-#define BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/multiset/aux_/tag.hpp>
-#include <boost/mpl/int.hpp>
-
-namespace boost { namespace mpl {
-
-template< int dummy_ = 0 >
-struct multiset0
-{
- typedef aux::multiset_tag tag;
-
- typedef int_<1> count_;
- static char (& key_count(...) )[count_::value];
- static char (& ref_key_count(...) )[count_::value];
-};
-
-}}
-
-#endif // BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/tag.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/tag.hpp
deleted file mode 100644
index 3988ca103a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/aux_/tag.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#ifndef BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED
-#define BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-namespace boost { namespace mpl { namespace aux {
-
-struct multiset_tag;
-
-}}}
-
-#endif // BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/multiset0.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/multiset/multiset0.hpp
deleted file mode 100644
index 62a3c74423..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/multiset/multiset0.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#ifndef BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED
-#define BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-//#include <boost/mpl/multiset/aux_/at.hpp>
-//#include <boost/mpl/multiset/aux_/front.hpp>
-//#include <boost/mpl/multiset/aux_/push_front.hpp>
-//#include <boost/mpl/multiset/aux_/pop_front.hpp>
-//#include <boost/mpl/multiset/aux_/back.hpp>
-//#include <boost/mpl/multiset/aux_/clear.hpp>
-//#include <boost/mpl/multiset/aux_/O1_size.hpp>
-//#include <boost/mpl/multiset/aux_/size.hpp>
-//#include <boost/mpl/multiset/aux_/empty.hpp>
-//#include <boost/mpl/multiset/aux_/empty.hpp>
-#include <boost/mpl/multiset/aux_/insert_impl.hpp>
-#include <boost/mpl/multiset/aux_/count_impl.hpp>
-//#include <boost/mpl/multiset/aux_/has_key_impl.hpp>
-//#include <boost/mpl/multiset/aux_/begin_end_impl.hpp>
-//#include <boost/mpl/multiset/aux_/iterator.hpp>
-#include <boost/mpl/multiset/aux_/item.hpp>
-#include <boost/mpl/multiset/aux_/multiset0.hpp>
-#include <boost/mpl/multiset/aux_/tag.hpp>
-
-#endif // BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/order.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/order.hpp
deleted file mode 100644
index 50da7102bf..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/order.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#ifndef BOOST_MPL_ORDER_HPP_INCLUDED
-#define BOOST_MPL_ORDER_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/order_fwd.hpp>
-#include <boost/mpl/sequence_tag.hpp>
-#include <boost/mpl/aux_/order_impl.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)
- , typename BOOST_MPL_AUX_NA_PARAM(Key)
- >
-struct order
- : order_impl< typename sequence_tag<AssociativeSequence>::type >
- ::template apply<AssociativeSequence,Key>
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,order,(AssociativeSequence,Key))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, order)
-
-}}
-
-#endif // BOOST_MPL_ORDER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/partition.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/partition.hpp
deleted file mode 100644
index 795a39bbe7..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/partition.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-
-#ifndef BOOST_MPL_PARTITION_HPP_INCLUDED
-#define BOOST_MPL_PARTITION_HPP_INCLUDED
-
-// Copyright Eric Friedman 2002-2003
-// Copyright Aleksey Gurtovoy 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/stable_partition.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template <
- typename Sequence
- , typename Pred
- , typename In1
- , typename In2
- >
-struct partition_impl
- : stable_partition_impl<Sequence,Pred,In1,In2>
-{
-};
-
-template <
- typename Sequence
- , typename Pred
- , typename In1
- , typename In2
- >
-struct reverse_partition_impl
- : reverse_stable_partition_impl<Sequence,Pred,In1,In2>
-{
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, partition)
-
-}}
-
-#endif // BOOST_MPL_PARTITION_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/range_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/range_c.hpp
deleted file mode 100644
index ba95062d67..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/range_c.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#ifndef BOOST_MPL_RANGE_C_HPP_INCLUDED
-#define BOOST_MPL_RANGE_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/integral_c.hpp>
-#include <boost/mpl/aux_/range_c/front.hpp>
-#include <boost/mpl/aux_/range_c/back.hpp>
-#include <boost/mpl/aux_/range_c/size.hpp>
-#include <boost/mpl/aux_/range_c/O1_size.hpp>
-#include <boost/mpl/aux_/range_c/empty.hpp>
-#include <boost/mpl/aux_/range_c/iterator.hpp>
-#include <boost/mpl/aux_/range_c/tag.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename T
- , T Start
- , T Finish
- >
-struct range_c
-{
- typedef aux::half_open_range_tag tag;
- typedef T value_type;
- typedef range_c type;
-
- typedef integral_c<T,Start> start;
- typedef integral_c<T,Finish> finish;
-
- typedef r_iter<start> begin;
- typedef r_iter<finish> end;
-};
-
-}}
-
-#endif // BOOST_MPL_RANGE_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/replace.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/replace.hpp
deleted file mode 100644
index bb46dfb85a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/replace.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-
-#ifndef BOOST_MPL_REPLACE_HPP_INCLUDED
-#define BOOST_MPL_REPLACE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright John R. Bandela 2000-2002
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/replace_if.hpp>
-#include <boost/mpl/same_as.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template<
- typename Sequence
- , typename OldType
- , typename NewType
- , typename Inserter
- >
-struct replace_impl
- : replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >
-{
-};
-
-template<
- typename Sequence
- , typename OldType
- , typename NewType
- , typename Inserter
- >
-struct reverse_replace_impl
- : reverse_replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >
-{
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace)
-
-}}
-
-#endif // BOOST_MPL_REPLACE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/replace_if.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/replace_if.hpp
deleted file mode 100644
index 79466c7121..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/replace_if.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-
-#ifndef BOOST_MPL_REPLACE_IF_HPP_INCLUDED
-#define BOOST_MPL_REPLACE_IF_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright John R. Bandela 2000-2002
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/transform.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-#include <boost/mpl/aux_/config/forwarding.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template< typename Predicate, typename T >
-struct replace_if_op
-{
- template< typename U > struct apply
-#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
- : if_<
- typename apply1<Predicate,U>::type
- , T
- , U
- >
- {
-#else
- {
- typedef typename if_<
- typename apply1<Predicate,U>::type
- , T
- , U
- >::type type;
-#endif
- };
-};
-
-
-template<
- typename Sequence
- , typename Predicate
- , typename T
- , typename Inserter
- >
-struct replace_if_impl
- : transform1_impl<
- Sequence
- , protect< aux::replace_if_op<Predicate,T> >
- , Inserter
- >
-{
-};
-
-template<
- typename Sequence
- , typename Predicate
- , typename T
- , typename Inserter
- >
-struct reverse_replace_if_impl
- : reverse_transform1_impl<
- Sequence
- , protect< aux::replace_if_op<Predicate,T> >
- , Inserter
- >
-{
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace_if)
-
-}}
-
-#endif // BOOST_MPL_REPLACE_IF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/reverse.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/reverse.hpp
deleted file mode 100644
index dd1fc18bb5..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/reverse.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#ifndef BOOST_MPL_REVERSE_HPP_INCLUDED
-#define BOOST_MPL_REVERSE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/copy.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(Inserter)
- >
-struct reverse
- : reverse_copy<
- Sequence
- , Inserter
- >
-{
-};
-
-BOOST_MPL_AUX_NA_SPEC(1, reverse)
-
-}}
-
-#endif // BOOST_MPL_REVERSE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set.hpp
deleted file mode 100644
index 75f56dce45..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-
-#ifndef BOOST_MPL_SET_HPP_INCLUDED
-#define BOOST_MPL_SET_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/limits/set.hpp>
-# include <boost/mpl/aux_/na.hpp>
-# include <boost/mpl/aux_/config/preprocessor.hpp>
-
-# include <boost/preprocessor/inc.hpp>
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/stringize.hpp>
-
-#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
-# define AUX778076_SET_HEADER \
- BOOST_PP_CAT(set, BOOST_MPL_LIMIT_SET_SIZE).hpp \
- /**/
-#else
-# define AUX778076_SET_HEADER \
- BOOST_PP_CAT(set, BOOST_MPL_LIMIT_SET_SIZE)##.hpp \
- /**/
-#endif
-
-# include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_HEADER)
-# undef AUX778076_SET_HEADER
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set.hpp
-# include <boost/mpl/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/limits/set.hpp>
-
-# define AUX778076_SEQUENCE_NAME set
-# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE
-# include <boost/mpl/aux_/sequence_wrapper.hpp>
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-#endif // BOOST_MPL_SET_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/include_preprocessed.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/include_preprocessed.hpp
deleted file mode 100644
index 704bc63f82..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/include_preprocessed.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2001-2006
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/config/preprocessor.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/stringize.hpp>
-
-#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
-# define AUX778076_HEADER \
- plain/BOOST_MPL_PREPROCESSED_HEADER \
-/**/
-#else
-# define AUX778076_HEADER \
- BOOST_PP_CAT(plain,/)##BOOST_MPL_PREPROCESSED_HEADER \
-/**/
-#endif
-
-#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
-# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/set/aux_/preprocessed/AUX778076_HEADER)
-# error #include AUX778076_INCLUDE_STRING
-# undef AUX778076_INCLUDE_STRING
-#else
-# include BOOST_PP_STRINGIZE(boost/mpl/set/aux_/preprocessed/AUX778076_HEADER)
-#endif
-
-# undef AUX778076_HEADER
-
-#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10.hpp
deleted file mode 100644
index 2c42b38398..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set10.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T0
- >
-struct set1
- : s_item<
- T0
- , typename set0< >::item_
- >
-{
- typedef set1 type;
-};
-
-template<
- typename T0, typename T1
- >
-struct set2
- : s_item<
- T1
- , typename set1<T0>::item_
- >
-{
- typedef set2 type;
-};
-
-template<
- typename T0, typename T1, typename T2
- >
-struct set3
- : s_item<
- T2
- , typename set2< T0,T1 >::item_
- >
-{
- typedef set3 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3
- >
-struct set4
- : s_item<
- T3
- , typename set3< T0,T1,T2 >::item_
- >
-{
- typedef set4 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- >
-struct set5
- : s_item<
- T4
- , typename set4< T0,T1,T2,T3 >::item_
- >
-{
- typedef set5 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5
- >
-struct set6
- : s_item<
- T5
- , typename set5< T0,T1,T2,T3,T4 >::item_
- >
-{
- typedef set6 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6
- >
-struct set7
- : s_item<
- T6
- , typename set6< T0,T1,T2,T3,T4,T5 >::item_
- >
-{
- typedef set7 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7
- >
-struct set8
- : s_item<
- T7
- , typename set7< T0,T1,T2,T3,T4,T5,T6 >::item_
- >
-{
- typedef set8 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8
- >
-struct set9
- : s_item<
- T8
- , typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::item_
- >
-{
- typedef set9 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- >
-struct set10
- : s_item<
- T9
- , typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::item_
- >
-{
- typedef set10 type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp
deleted file mode 100644
index e9bdb29eb8..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set10_c.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T
- , T C0
- >
-struct set1_c
- : s_item<
- integral_c< T,C0 >
- , set0_c<T>
- >
-{
- typedef set1_c type;
-};
-
-template<
- typename T
- , T C0, T C1
- >
-struct set2_c
- : s_item<
- integral_c< T,C1 >
- , set1_c< T,C0 >
- >
-{
- typedef set2_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2
- >
-struct set3_c
- : s_item<
- integral_c< T,C2 >
- , set2_c< T,C0,C1 >
- >
-{
- typedef set3_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3
- >
-struct set4_c
- : s_item<
- integral_c< T,C3 >
- , set3_c< T,C0,C1,C2 >
- >
-{
- typedef set4_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4
- >
-struct set5_c
- : s_item<
- integral_c< T,C4 >
- , set4_c< T,C0,C1,C2,C3 >
- >
-{
- typedef set5_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5
- >
-struct set6_c
- : s_item<
- integral_c< T,C5 >
- , set5_c< T,C0,C1,C2,C3,C4 >
- >
-{
- typedef set6_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6
- >
-struct set7_c
- : s_item<
- integral_c< T,C6 >
- , set6_c< T,C0,C1,C2,C3,C4,C5 >
- >
-{
- typedef set7_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
- >
-struct set8_c
- : s_item<
- integral_c< T,C7 >
- , set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
- >
-{
- typedef set8_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
- >
-struct set9_c
- : s_item<
- integral_c< T,C8 >
- , set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
- >
-{
- typedef set9_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9
- >
-struct set10_c
- : s_item<
- integral_c< T,C9 >
- , set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
- >
-{
- typedef set10_c type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20.hpp
deleted file mode 100644
index cb4e466688..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set20.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10
- >
-struct set11
- : s_item<
- T10
- , typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::item_
- >
-{
- typedef set11 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11
- >
-struct set12
- : s_item<
- T11
- , typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::item_
- >
-{
- typedef set12 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12
- >
-struct set13
- : s_item<
- T12
- , typename set12< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
- , T11 >::item_
- >
-{
- typedef set13 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13
- >
-struct set14
- : s_item<
- T13
- , typename set13< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12 >::item_
- >
-{
- typedef set14 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- >
-struct set15
- : s_item<
- T14
- , typename set14< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13 >::item_
- >
-{
- typedef set15 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15
- >
-struct set16
- : s_item<
- T15
- , typename set15< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14 >::item_
- >
-{
- typedef set16 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16
- >
-struct set17
- : s_item<
- T16
- , typename set16< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15 >::item_
- >
-{
- typedef set17 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17
- >
-struct set18
- : s_item<
- T17
- , typename set17< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16 >::item_
- >
-{
- typedef set18 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18
- >
-struct set19
- : s_item<
- T18
- , typename set18< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17 >::item_
- >
-{
- typedef set19 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- >
-struct set20
- : s_item<
- T19
- , typename set19< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18 >::item_
- >
-{
- typedef set20 type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp
deleted file mode 100644
index 445b5467ca..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set20_c.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- >
-struct set11_c
- : s_item<
- integral_c< T,C10 >
- , set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
- >
-{
- typedef set11_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11
- >
-struct set12_c
- : s_item<
- integral_c< T,C11 >
- , set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
- >
-{
- typedef set12_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12
- >
-struct set13_c
- : s_item<
- integral_c< T,C12 >
- , set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
- >
-{
- typedef set13_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13
- >
-struct set14_c
- : s_item<
- integral_c< T,C13 >
- , set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
- >
-{
- typedef set14_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14
- >
-struct set15_c
- : s_item<
- integral_c< T,C14 >
- , set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >
- >
-{
- typedef set15_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15
- >
-struct set16_c
- : s_item<
- integral_c< T,C15 >
- , set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >
- >
-{
- typedef set16_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16
- >
-struct set17_c
- : s_item<
- integral_c< T,C16 >
- , set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >
- >
-{
- typedef set17_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17
- >
-struct set18_c
- : s_item<
- integral_c< T,C17 >
- , set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >
- >
-{
- typedef set18_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18
- >
-struct set19_c
- : s_item<
- integral_c< T,C18 >
- , set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >
- >
-{
- typedef set19_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19
- >
-struct set20_c
- : s_item<
- integral_c< T,C19 >
- , set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >
- >
-{
- typedef set20_c type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30.hpp
deleted file mode 100644
index 08f2cda27a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30.hpp
+++ /dev/null
@@ -1,195 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set30.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20
- >
-struct set21
- : s_item<
- T20
- , typename set20< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19 >::item_
- >
-{
- typedef set21 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21
- >
-struct set22
- : s_item<
- T21
- , typename set21< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20 >::item_
- >
-{
- typedef set22 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22
- >
-struct set23
- : s_item<
- T22
- , typename set22< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21 >::item_
- >
-{
- typedef set23 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23
- >
-struct set24
- : s_item<
- T23
- , typename set23< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22 >::item_
- >
-{
- typedef set24 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- >
-struct set25
- : s_item<
- T24
- , typename set24< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23 >::item_
- >
-{
- typedef set25 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25
- >
-struct set26
- : s_item<
- T25
- , typename set25< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23
- , T24 >::item_
- >
-{
- typedef set26 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26
- >
-struct set27
- : s_item<
- T26
- , typename set26< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24
- , T25 >::item_
- >
-{
- typedef set27 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27
- >
-struct set28
- : s_item<
- T27
- , typename set27< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26 >::item_
- >
-{
- typedef set28 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28
- >
-struct set29
- : s_item<
- T28
- , typename set28< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27 >::item_
- >
-{
- typedef set29 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- >
-struct set30
- : s_item<
- T29
- , typename set29< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28 >::item_
- >
-{
- typedef set30 type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp
deleted file mode 100644
index 7c0150ca39..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set30_c.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- >
-struct set21_c
- : s_item<
- integral_c< T,C20 >
- , set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >
- >
-{
- typedef set21_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21
- >
-struct set22_c
- : s_item<
- integral_c< T,C21 >
- , set21_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >
- >
-{
- typedef set22_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22
- >
-struct set23_c
- : s_item<
- integral_c< T,C22 >
- , set22_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >
- >
-{
- typedef set23_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23
- >
-struct set24_c
- : s_item<
- integral_c< T,C23 >
- , set23_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >
- >
-{
- typedef set24_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24
- >
-struct set25_c
- : s_item<
- integral_c< T,C24 >
- , set24_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >
- >
-{
- typedef set25_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25
- >
-struct set26_c
- : s_item<
- integral_c< T,C25 >
- , set25_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >
- >
-{
- typedef set26_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26
- >
-struct set27_c
- : s_item<
- integral_c< T,C26 >
- , set26_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >
- >
-{
- typedef set27_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27
- >
-struct set28_c
- : s_item<
- integral_c< T,C27 >
- , set27_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >
- >
-{
- typedef set28_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28
- >
-struct set29_c
- : s_item<
- integral_c< T,C28 >
- , set28_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >
- >
-{
- typedef set29_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29
- >
-struct set30_c
- : s_item<
- integral_c< T,C29 >
- , set29_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >
- >
-{
- typedef set30_c type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40.hpp
deleted file mode 100644
index a8571a61fe..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40.hpp
+++ /dev/null
@@ -1,221 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set40.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30
- >
-struct set31
- : s_item<
- T30
- , typename set30< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29 >::item_
- >
-{
- typedef set31 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31
- >
-struct set32
- : s_item<
- T31
- , typename set31< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30 >::item_
- >
-{
- typedef set32 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32
- >
-struct set33
- : s_item<
- T32
- , typename set32< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31 >::item_
- >
-{
- typedef set33 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33
- >
-struct set34
- : s_item<
- T33
- , typename set33< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32 >::item_
- >
-{
- typedef set34 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- >
-struct set35
- : s_item<
- T34
- , typename set34< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33 >::item_
- >
-{
- typedef set35 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35
- >
-struct set36
- : s_item<
- T35
- , typename set35< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34 >::item_
- >
-{
- typedef set36 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36
- >
-struct set37
- : s_item<
- T36
- , typename set36< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35 >::item_
- >
-{
- typedef set37 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37
- >
-struct set38
- : s_item<
- T37
- , typename set37< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36 >::item_
- >
-{
- typedef set38 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38
- >
-struct set39
- : s_item<
- T38
- , typename set38< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37 >::item_
- >
-{
- typedef set39 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- >
-struct set40
- : s_item<
- T39
- , typename set39< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37
- , T38 >::item_
- >
-{
- typedef set40 type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp
deleted file mode 100644
index 0b0e49cdd9..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp
+++ /dev/null
@@ -1,174 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set40_c.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- >
-struct set31_c
- : s_item<
- integral_c< T,C30 >
- , set30_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >
- >
-{
- typedef set31_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31
- >
-struct set32_c
- : s_item<
- integral_c< T,C31 >
- , set31_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >
- >
-{
- typedef set32_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32
- >
-struct set33_c
- : s_item<
- integral_c< T,C32 >
- , set32_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >
- >
-{
- typedef set33_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33
- >
-struct set34_c
- : s_item<
- integral_c< T,C33 >
- , set33_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >
- >
-{
- typedef set34_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34
- >
-struct set35_c
- : s_item<
- integral_c< T,C34 >
- , set34_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >
- >
-{
- typedef set35_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35
- >
-struct set36_c
- : s_item<
- integral_c< T,C35 >
- , set35_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >
- >
-{
- typedef set36_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36
- >
-struct set37_c
- : s_item<
- integral_c< T,C36 >
- , set36_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >
- >
-{
- typedef set37_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37
- >
-struct set38_c
- : s_item<
- integral_c< T,C37 >
- , set37_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >
- >
-{
- typedef set38_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38
- >
-struct set39_c
- : s_item<
- integral_c< T,C38 >
- , set38_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >
- >
-{
- typedef set39_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39
- >
-struct set40_c
- : s_item<
- integral_c< T,C39 >
- , set39_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >
- >
-{
- typedef set40_c type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50.hpp
deleted file mode 100644
index 79798ab49c..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set50.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40
- >
-struct set41
- : s_item<
- T40
- , typename set40< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38
- , T39 >::item_
- >
-{
- typedef set41 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41
- >
-struct set42
- : s_item<
- T41
- , typename set41< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40 >::item_
- >
-{
- typedef set42 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42
- >
-struct set43
- : s_item<
- T42
- , typename set42< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41 >::item_
- >
-{
- typedef set43 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43
- >
-struct set44
- : s_item<
- T43
- , typename set43< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42 >::item_
- >
-{
- typedef set44 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43, typename T44
- >
-struct set45
- : s_item<
- T44
- , typename set44< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42, T43 >::item_
- >
-{
- typedef set45 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43, typename T44
- , typename T45
- >
-struct set46
- : s_item<
- T45
- , typename set45< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42, T43, T44 >::item_
- >
-{
- typedef set46 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43, typename T44
- , typename T45, typename T46
- >
-struct set47
- : s_item<
- T46
- , typename set46< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42, T43, T44, T45 >::item_
- >
-{
- typedef set47 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43, typename T44
- , typename T45, typename T46, typename T47
- >
-struct set48
- : s_item<
- T47
- , typename set47< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42, T43, T44, T45, T46 >::item_
- >
-{
- typedef set48 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43, typename T44
- , typename T45, typename T46, typename T47, typename T48
- >
-struct set49
- : s_item<
- T48
- , typename set48< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42, T43, T44, T45, T46, T47 >::item_
- >
-{
- typedef set49 type;
-};
-
-template<
- typename T0, typename T1, typename T2, typename T3, typename T4
- , typename T5, typename T6, typename T7, typename T8, typename T9
- , typename T10, typename T11, typename T12, typename T13, typename T14
- , typename T15, typename T16, typename T17, typename T18, typename T19
- , typename T20, typename T21, typename T22, typename T23, typename T24
- , typename T25, typename T26, typename T27, typename T28, typename T29
- , typename T30, typename T31, typename T32, typename T33, typename T34
- , typename T35, typename T36, typename T37, typename T38, typename T39
- , typename T40, typename T41, typename T42, typename T43, typename T44
- , typename T45, typename T46, typename T47, typename T48, typename T49
- >
-struct set50
- : s_item<
- T49
- , typename set49< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
- , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25
- , T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39
- , T40, T41, T42, T43, T44, T45, T46, T47, T48 >::item_
- >
-{
- typedef set50 type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp
deleted file mode 100644
index 83627fa13d..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-
-// Preprocessed version of "boost/mpl/set/set50_c.hpp" header
-// -- DO NOT modify by hand!
-
-namespace boost { namespace mpl {
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- >
-struct set41_c
- : s_item<
- integral_c< T,C40 >
- , set40_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >
- >
-{
- typedef set41_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41
- >
-struct set42_c
- : s_item<
- integral_c< T,C41 >
- , set41_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >
- >
-{
- typedef set42_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42
- >
-struct set43_c
- : s_item<
- integral_c< T,C42 >
- , set42_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >
- >
-{
- typedef set43_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43
- >
-struct set44_c
- : s_item<
- integral_c< T,C43 >
- , set43_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >
- >
-{
- typedef set44_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43, T C44
- >
-struct set45_c
- : s_item<
- integral_c< T,C44 >
- , set44_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >
- >
-{
- typedef set45_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43, T C44, T C45
- >
-struct set46_c
- : s_item<
- integral_c< T,C45 >
- , set45_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >
- >
-{
- typedef set46_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43, T C44, T C45, T C46
- >
-struct set47_c
- : s_item<
- integral_c< T,C46 >
- , set46_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >
- >
-{
- typedef set47_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43, T C44, T C45, T C46, T C47
- >
-struct set48_c
- : s_item<
- integral_c< T,C47 >
- , set47_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >
- >
-{
- typedef set48_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48
- >
-struct set49_c
- : s_item<
- integral_c< T,C48 >
- , set48_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >
- >
-{
- typedef set49_c type;
-};
-
-template<
- typename T
- , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
- , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
- , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
- , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
- , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49
- >
-struct set50_c
- : s_item<
- integral_c< T,C49 >
- , set49_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >
- >
-{
- typedef set50_c type;
-};
-
-}}
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set0_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set0_c.hpp
deleted file mode 100644
index 7e7f77a960..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set0_c.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET0_C_HPP_INCLUDED
-#define BOOST_MPL_SET_SET0_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/set/set0.hpp>
-#include <boost/mpl/integral_c.hpp>
-
-namespace boost { namespace mpl {
-
-template< typename T > struct set0_c
- : set0<>
-{
- typedef set0_c type;
- typedef T value_type;
-};
-
-}}
-
-#endif // BOOST_MPL_SET_SET0_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set10.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set10.hpp
deleted file mode 100644
index fa876b25ed..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set10.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET10_HPP_INCLUDED
-#define BOOST_MPL_SET_SET10_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set0.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set10.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(0, 10, <boost/mpl/set/aux_/numbered.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET10_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set10_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set10_c.hpp
deleted file mode 100644
index 34abd98406..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set10_c.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET10_C_HPP_INCLUDED
-#define BOOST_MPL_SET_SET10_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set0_c.hpp>
-# include <boost/mpl/set/set10.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set10_c.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(1, 10, <boost/mpl/set/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET10_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set20.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set20.hpp
deleted file mode 100644
index 0cdff4780d..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set20.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET20_HPP_INCLUDED
-#define BOOST_MPL_SET_SET20_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set10.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set20.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(11, 20, <boost/mpl/set/aux_/numbered.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET20_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set20_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set20_c.hpp
deleted file mode 100644
index e3de0447e5..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set20_c.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET20_C_HPP_INCLUDED
-#define BOOST_MPL_SET_SET20_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set10_c.hpp>
-# include <boost/mpl/set/set20.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set20_c.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(11, 20, <boost/mpl/set/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET20_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set30.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set30.hpp
deleted file mode 100644
index b0344546a3..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set30.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET30_HPP_INCLUDED
-#define BOOST_MPL_SET_SET30_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set20.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set30.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(21, 30, <boost/mpl/set/aux_/numbered.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET30_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set30_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set30_c.hpp
deleted file mode 100644
index e006e1cd66..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set30_c.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET30_C_HPP_INCLUDED
-#define BOOST_MPL_SET_SET30_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set20_c.hpp>
-# include <boost/mpl/set/set30.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set30_c.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(21, 30, <boost/mpl/set/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET30_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set40.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set40.hpp
deleted file mode 100644
index 5fa2cd0e43..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set40.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET40_HPP_INCLUDED
-#define BOOST_MPL_SET_SET40_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set30.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set40.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(31, 40, <boost/mpl/set/aux_/numbered.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET40_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set40_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set40_c.hpp
deleted file mode 100644
index bce5a80dc3..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set40_c.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET40_C_HPP_INCLUDED
-#define BOOST_MPL_SET_SET40_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set30_c.hpp>
-# include <boost/mpl/set/set40.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set40_c.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(31, 40, <boost/mpl/set/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET40_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set50.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set50.hpp
deleted file mode 100644
index 0c2bfc01ae..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set50.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET50_HPP_INCLUDED
-#define BOOST_MPL_SET_SET50_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set40.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set50.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(41, 50, <boost/mpl/set/aux_/numbered.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET50_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set/set50_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set/set50_c.hpp
deleted file mode 100644
index 077dbf762e..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set/set50_c.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#ifndef BOOST_MPL_SET_SET50_C_HPP_INCLUDED
-#define BOOST_MPL_SET_SET50_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/set/set40_c.hpp>
-# include <boost/mpl/set/set50.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set50_c.hpp
-# include <boost/mpl/set/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(41, 50, <boost/mpl/set/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_SET_SET50_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/set_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/set_c.hpp
deleted file mode 100644
index c0f8e37fa7..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/set_c.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#ifndef BOOST_MPL_SET_C_HPP_INCLUDED
-#define BOOST_MPL_SET_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/limits/set.hpp>
-# include <boost/mpl/aux_/nttp_decl.hpp>
-# include <boost/mpl/aux_/config/preprocessor.hpp>
-
-# include <boost/preprocessor/inc.hpp>
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/stringize.hpp>
-
-#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
-# define AUX778076_SET_C_HEADER \
- BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c).hpp \
- /**/
-#else
-# define AUX778076_SET_C_HEADER \
- BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c)##.hpp \
- /**/
-#endif
-
-# include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_C_HEADER)
-# undef AUX778076_SET_C_HEADER
-# include <climits>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER set_c.hpp
-# include <boost/mpl/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/limits/set.hpp>
-
-# define AUX778076_SEQUENCE_NAME set_c
-# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE
-# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(set,n),_c)
-# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
-# include <boost/mpl/aux_/sequence_wrapper.hpp>
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-#endif // BOOST_MPL_SET_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/shift_left.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/shift_left.hpp
deleted file mode 100644
index 55e4f649dc..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/shift_left.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#ifndef BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED
-#define BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright Jaap Suter 2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#define AUX778076_OP_NAME shift_left
-#define AUX778076_OP_TOKEN <<
-#include <boost/mpl/aux_/shift_op.hpp>
-
-#endif // BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/shift_right.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/shift_right.hpp
deleted file mode 100644
index 1ae1e35eb0..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/shift_right.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#ifndef BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED
-#define BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright Jaap Suter 2003
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#define AUX778076_OP_NAME shift_right
-#define AUX778076_OP_TOKEN >>
-#include <boost/mpl/aux_/shift_op.hpp>
-
-#endif // BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/single_view.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/single_view.hpp
deleted file mode 100644
index a872bb1fc4..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/single_view.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#ifndef BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED
-#define BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/single_element_iter.hpp>
-#include <boost/mpl/iterator_range.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct single_view
- : iterator_range<
- aux::sel_iter<T,0>
- , aux::sel_iter<T,1>
- >
-{
-};
-
-BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, single_view)
-
-}}
-
-#endif // BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/sort.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/sort.hpp
deleted file mode 100644
index 961aeab8c1..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/sort.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#ifndef BOOST_MPL_SORT_HPP_INCLUDED
-#define BOOST_MPL_SORT_HPP_INCLUDED
-
-// Copyright Eric Friedman 2002-2003
-// Copyright Aleksey Gurtovoy 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/aux_/sort_impl.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-
-namespace boost { namespace mpl {
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, sort)
-
-}}
-
-#endif // BOOST_MPL_SORT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/stable_partition.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/stable_partition.hpp
deleted file mode 100644
index e010de3cf4..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/stable_partition.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-
-#ifndef BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
-#define BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
-
-// Copyright Eric Friedman 2002-2003
-// Copyright Aleksey Gurtovoy 2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/reverse_fold.hpp>
-#include <boost/mpl/protect.hpp>
-#include <boost/mpl/aux_/partition_op.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-#include <boost/mpl/aux_/na.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template <
- typename Sequence
- , typename Pred
- , typename In
- , typename In2
- , typename In1 = typename if_na<In,In2>::type
- >
-struct stable_partition_impl
- : fold<
- Sequence
- , pair< typename In1::state, typename In2::state >
- , protect< partition_op<
- Pred
- , typename In1::operation
- , typename In2::operation
- > >
- >
-{
-};
-
-template <
- typename Sequence
- , typename Pred
- , typename In
- , typename In2
- , typename In1 = typename if_na<In,In2>::type
- >
-struct reverse_stable_partition_impl
- : reverse_fold<
- Sequence
- , pair< typename In1::state, typename In2::state >
- , protect< partition_op<
- Pred
- , typename In1::operation
- , typename In2::operation
- > >
- >
-{
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, stable_partition)
-
-}}
-
-#endif // BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/string.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/string.hpp
deleted file mode 100644
index fd3100c609..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/string.hpp
+++ /dev/null
@@ -1,607 +0,0 @@
-
-#ifndef BOOST_MPL_STRING_HPP_INCLUDED
-#define BOOST_MPL_STRING_HPP_INCLUDED
-
-// Copyright Eric Niebler 2009
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id: string.hpp 49239 2009-04-01 09:10:26Z eric_niebler $
-// $Date: 2009-04-01 02:10:26 -0700 (Wed, 1 Apr 2009) $
-// $Revision: 49239 $
-//
-// Thanks to:
-// Dmitry Goncharov for porting this to the Sun compiler
-
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-#include <boost/predef/other/endian.h>
-#include <boost/mpl/limits/string.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/char.hpp>
-#include <boost/mpl/copy.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/empty.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/size_t.hpp>
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/joint_view.hpp>
-#include <boost/mpl/insert_range.hpp>
-#include <boost/mpl/back_inserter.hpp>
-#include <boost/mpl/front_inserter.hpp>
-#include <boost/mpl/iterator_range.hpp>
-#include <boost/preprocessor/arithmetic/dec.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/arithmetic/div.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
-#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
-
-#include <iterator> // for bidirectional_iterator_tag
-#include <climits>
-
-namespace boost { namespace mpl
-{
- #define BOOST_MPL_STRING_MAX_PARAMS \
- BOOST_PP_DIV(BOOST_PP_ADD(BOOST_MPL_LIMIT_STRING_SIZE, 3), 4)
-
- // Low-level bit-twiddling is done by macros. Any implementation-defined behavior of
- // multi-character literals should be localized to these macros.
-
- #define BOOST_MPL_MULTICHAR_LENGTH(c) \
- (std::size_t)((c<CHAR_MIN) ? 4 : ((c>0xffffff)+(c>0xffff)+(c>0xff)+1))
-
- #if BOOST_ENDIAN_LITTLE_BYTE && defined(__SUNPRO_CC)
-
- #define BOOST_MPL_MULTICHAR_AT(c,i) \
- (char)(0xff&((unsigned)(c)>>(8*(std::size_t)(i))))
-
- #define BOOST_MPL_MULTICHAR_PUSH_BACK(c,i) \
- ((((unsigned char)(i))<<(BOOST_MPL_MULTICHAR_LENGTH(c)*8))|(unsigned)(c))
-
- #define BOOST_MPL_MULTICHAR_PUSH_FRONT(c,i) \
- (((unsigned)(c)<<8)|(unsigned char)(i))
-
- #define BOOST_MPL_MULTICHAR_POP_BACK(c) \
- (((1<<((BOOST_MPL_MULTICHAR_LENGTH(c)-1)*8))-1)&(unsigned)(c))
-
- #define BOOST_MPL_MULTICHAR_POP_FRONT(c) \
- ((unsigned)(c)>>8)
-
- #else
-
- #define BOOST_MPL_MULTICHAR_AT(c,i) \
- (char)(0xff&((unsigned)(c)>>(8*(BOOST_MPL_MULTICHAR_LENGTH(c)-(std::size_t)(i)-1))))
-
- #define BOOST_MPL_MULTICHAR_PUSH_BACK(c,i) \
- (((unsigned)(c)<<8)|(unsigned char)(i))
-
- #define BOOST_MPL_MULTICHAR_PUSH_FRONT(c,i) \
- ((((unsigned char)(i))<<(BOOST_MPL_MULTICHAR_LENGTH(c)*8))|(unsigned)(c))
-
- #define BOOST_MPL_MULTICHAR_POP_BACK(c) \
- ((unsigned)(c)>>8)
-
- #define BOOST_MPL_MULTICHAR_POP_FRONT(c) \
- (((1<<((BOOST_MPL_MULTICHAR_LENGTH(c)-1)*8))-1)&(unsigned)(c))
-
- #endif
-
- struct string_tag;
- struct string_iterator_tag;
-
- template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_MPL_STRING_MAX_PARAMS, int C, 0)>
- struct string;
-
- template<typename Sequence, int I, int J>
- struct string_iterator;
-
- template<typename Sequence>
- struct sequence_tag;
-
- template<typename Tag>
- struct size_impl;
-
- template<>
- struct size_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply;
-
- #define M0(z, n, data) \
- + BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C,n))
-
- #define M1(z, n, data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)> \
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)> > \
- : mpl::size_t<(0 BOOST_PP_REPEAT_ ## z(n, M0, ~))> \
- {};
-
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_MPL_STRING_MAX_PARAMS), M1, ~)
- #undef M0
- #undef M1
- };
-
- template<>
- struct size_impl<mpl::string_tag>::apply<mpl::string<> >
- : mpl::size_t<0>
- {};
-
- template<typename Tag>
- struct begin_impl;
-
- template<>
- struct begin_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply
- {
- typedef mpl::string_iterator<Sequence, 0, 0> type;
- };
- };
-
- template<typename Tag>
- struct end_impl;
-
- template<>
- struct end_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply;
-
- #define M0(z,n,data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)> \
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)> > \
- { \
- typedef mpl::string_iterator<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, n, 0> type; \
- };
-
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_MPL_STRING_MAX_PARAMS), M0, ~)
- #undef M0
- };
-
- template<>
- struct end_impl<mpl::string_tag>::apply<mpl::string<> >
- {
- typedef mpl::string_iterator<mpl::string<>, 0, 0> type;
- };
-
- template<typename Tag>
- struct push_back_impl;
-
- template<>
- struct push_back_impl<mpl::string_tag>
- {
- template<typename Sequence, typename Value, bool B = (4==BOOST_MPL_MULTICHAR_LENGTH(Sequence::back_))>
- struct apply
- {
- BOOST_MPL_ASSERT_MSG(
- (BOOST_MPL_LIMIT_STRING_SIZE != mpl::size<Sequence>::type::value)
- , PUSH_BACK_FAILED_MPL_STRING_IS_FULL
- , (Sequence)
- );
- // If the above assertion didn't fire, then the string is sparse.
- // Repack the string and retry the push_back
- typedef
- typename mpl::push_back<
- typename mpl::copy<
- Sequence
- , mpl::back_inserter<mpl::string<> >
- >::type
- , Value
- >::type
- type;
- };
-
- template<typename Value>
- struct apply<mpl::string<>, Value, false>
- {
- typedef mpl::string<(char)Value::value> type;
- };
-
- #define M0(z,n,data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C), typename Value> \
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, Value, false> \
- { \
- typedef \
- mpl::string< \
- BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), C) \
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
- ((unsigned)BOOST_PP_CAT(C,BOOST_PP_DEC(n))>0xffffff) \
- ?BOOST_PP_CAT(C,BOOST_PP_DEC(n)) \
- :BOOST_MPL_MULTICHAR_PUSH_BACK(BOOST_PP_CAT(C,BOOST_PP_DEC(n)), Value::value) \
- , ((unsigned)BOOST_PP_CAT(C,BOOST_PP_DEC(n))>0xffffff) \
- ?(char)Value::value \
- :0 \
- > \
- type; \
- };
-
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_MPL_STRING_MAX_PARAMS, M0, ~)
- #undef M0
-
- template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C), typename Value>
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, Value, false>
- {
- typedef
- mpl::string<
- BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(BOOST_MPL_STRING_MAX_PARAMS), C)
- , BOOST_MPL_MULTICHAR_PUSH_BACK(BOOST_PP_CAT(C,BOOST_PP_DEC(BOOST_MPL_STRING_MAX_PARAMS)), Value::value)
- >
- type;
- };
- };
-
- template<typename Tag>
- struct has_push_back_impl;
-
- template<>
- struct has_push_back_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply
- : mpl::true_
- {};
- };
-
- template<typename Tag>
- struct pop_back_impl;
-
- template<>
- struct pop_back_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply;
-
- #define M0(z,n,data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)> \
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)> > \
- { \
- BOOST_MPL_ASSERT_MSG((C0 != 0), POP_BACK_FAILED_MPL_STRING_IS_EMPTY, (mpl::string<>)); \
- typedef \
- mpl::string< \
- BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), C) \
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
- BOOST_MPL_MULTICHAR_POP_BACK(BOOST_PP_CAT(C,BOOST_PP_DEC(n))) \
- > \
- type; \
- };
-
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_MPL_STRING_MAX_PARAMS), M0, ~)
- #undef M0
- };
-
- template<typename Tag>
- struct has_pop_back_impl;
-
- template<>
- struct has_pop_back_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply
- : mpl::true_
- {};
- };
-
- template<typename Tag>
- struct push_front_impl;
-
- template<>
- struct push_front_impl<mpl::string_tag>
- {
- template<typename Sequence, typename Value, bool B = (4==BOOST_MPL_MULTICHAR_LENGTH(Sequence::front_))>
- struct apply
- {
- BOOST_MPL_ASSERT_MSG(
- (BOOST_MPL_LIMIT_STRING_SIZE != mpl::size<Sequence>::type::value)
- , PUSH_FRONT_FAILED_MPL_STRING_IS_FULL
- , (Sequence)
- );
- // If the above assertion didn't fire, then the string is sparse.
- // Repack the string and retry the push_front.
- typedef
- typename mpl::push_front<
- typename mpl::reverse_copy<
- Sequence
- , mpl::front_inserter<string<> >
- >::type
- , Value
- >::type
- type;
- };
-
- #if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
- template<typename Value>
- struct apply<mpl::string<>, Value, false>
- {
- typedef mpl::string<(char)Value::value> type;
- };
- #endif
-
- #define M0(z,n,data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C), typename Value> \
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, Value, true> \
- { \
- typedef \
- mpl::string< \
- (char)Value::value \
- BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, C) \
- > \
- type; \
- };
-
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_MPL_STRING_MAX_PARAMS, M0, ~)
- #undef M0
-
- template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C), typename Value>
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, Value, false>
- {
- typedef
- mpl::string<
- BOOST_MPL_MULTICHAR_PUSH_FRONT(C0, Value::value)
- , BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)
- >
- type0;
-
- #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
- typedef
- typename mpl::if_<
- mpl::empty<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)> >
- , mpl::string<(char)Value::value>
- , type0
- >::type
- type;
- #else
- typedef type0 type;
- #endif
- };
- };
-
- template<typename Tag>
- struct has_push_front_impl;
-
- template<>
- struct has_push_front_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply
- : mpl::true_
- {};
- };
-
- template<typename Tag>
- struct pop_front_impl;
-
- template<>
- struct pop_front_impl<mpl::string_tag>
- {
- template<typename Sequence, bool B = (1==BOOST_MPL_MULTICHAR_LENGTH(Sequence::front_))>
- struct apply;
-
- #define M0(z,n,data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, n, int C)> \
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, n, C)>, true> \
- { \
- BOOST_MPL_ASSERT_MSG((C0 != 0), POP_FRONT_FAILED_MPL_STRING_IS_EMPTY, (mpl::string<>)); \
- typedef \
- mpl::string<BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, n, C)> \
- type; \
- };
-
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_MPL_STRING_MAX_PARAMS, M0, ~)
- #undef M0
-
- template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C)>
- struct apply<mpl::string<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)>, false>
- {
- typedef
- mpl::string<
- BOOST_MPL_MULTICHAR_POP_FRONT(C0)
- , BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, C)
- >
- type;
- };
- };
-
- template<typename Tag>
- struct has_pop_front_impl;
-
- template<>
- struct has_pop_front_impl<mpl::string_tag>
- {
- template<typename Sequence>
- struct apply
- : mpl::true_
- {};
- };
-
- template<typename Tag>
- struct insert_range_impl;
-
- template<>
- struct insert_range_impl<mpl::string_tag>
- {
- template<typename Sequence, typename Pos, typename Range>
- struct apply
- : mpl::copy<
- mpl::joint_view<
- mpl::iterator_range<
- mpl::string_iterator<Sequence, 0, 0>
- , Pos
- >
- , mpl::joint_view<
- Range
- , mpl::iterator_range<
- Pos
- , typename mpl::end<Sequence>::type
- >
- >
- >
- , mpl::back_inserter<mpl::string<> >
- >
- {};
- };
-
- template<typename Tag>
- struct insert_impl;
-
- template<>
- struct insert_impl<mpl::string_tag>
- {
- template<typename Sequence, typename Pos, typename Value>
- struct apply
- : mpl::insert_range<Sequence, Pos, mpl::string<(char)Value::value> >
- {};
- };
-
- template<typename Tag>
- struct erase_impl;
-
- template<>
- struct erase_impl<mpl::string_tag>
- {
- template<typename Sequence, typename First, typename Last>
- struct apply
- : mpl::copy<
- mpl::joint_view<
- mpl::iterator_range<
- mpl::string_iterator<Sequence, 0, 0>
- , First
- >
- , mpl::iterator_range<
- typename mpl::if_na<Last, typename mpl::next<First>::type>::type
- , typename mpl::end<Sequence>::type
- >
- >
- , mpl::back_inserter<mpl::string<> >
- >
- {};
- };
-
- template<typename Tag>
- struct clear_impl;
-
- template<>
- struct clear_impl<mpl::string_tag>
- {
- template<typename>
- struct apply
- {
- typedef mpl::string<> type;
- };
- };
-
- #define M0(z, n, data) \
- template<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_MPL_STRING_MAX_PARAMS, int C), int J> \
- struct string_iterator<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_MPL_STRING_MAX_PARAMS, C)>, n, J> \
- { \
- enum { eomc_ = (BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C, n)) == J + 1) }; \
- typedef mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_MPL_STRING_MAX_PARAMS, C)> string; \
- typedef std::bidirectional_iterator_tag category; \
- typedef \
- mpl::string_iterator<string, n + eomc_, eomc_ ? 0 : J + 1> \
- next; \
- typedef \
- mpl::string_iterator<string, n, J - 1> \
- prior; \
- typedef mpl::char_<BOOST_MPL_MULTICHAR_AT(BOOST_PP_CAT(C, n), J)> type; \
- }; \
- template<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_MPL_STRING_MAX_PARAMS, int C)> \
- struct string_iterator<mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_MPL_STRING_MAX_PARAMS, C)>, n, 0> \
- { \
- enum { eomc_ = (BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C, n)) == 1) }; \
- typedef mpl::string<BOOST_PP_ENUM_PARAMS_Z(z, BOOST_MPL_STRING_MAX_PARAMS, C)> string; \
- typedef std::bidirectional_iterator_tag category; \
- typedef \
- mpl::string_iterator<string, n + eomc_, !eomc_> \
- next; \
- typedef \
- mpl::string_iterator< \
- string \
- , n - 1 \
- , BOOST_MPL_MULTICHAR_LENGTH(BOOST_PP_CAT(C, BOOST_PP_DEC(n))) - 1 \
- > \
- prior; \
- typedef mpl::char_<BOOST_MPL_MULTICHAR_AT(BOOST_PP_CAT(C, n), 0)> type; \
- };
-
- BOOST_PP_REPEAT(BOOST_MPL_STRING_MAX_PARAMS, M0, ~)
- #undef M0
-
- template<BOOST_PP_ENUM_PARAMS(BOOST_MPL_STRING_MAX_PARAMS, int C)>
- struct string
- {
- /// INTERNAL ONLY
- enum
- {
- front_ = C0
- , back_ = BOOST_PP_CAT(C, BOOST_PP_DEC(BOOST_MPL_STRING_MAX_PARAMS))
- };
-
- typedef char value_type;
- typedef string type;
- typedef string_tag tag;
- };
-
- namespace aux_
- {
- template<typename It, typename End>
- struct next_unless
- : mpl::next<It>
- {};
-
- template<typename End>
- struct next_unless<End, End>
- {
- typedef End type;
- };
-
- template<typename It, typename End>
- struct deref_unless
- : mpl::deref<It>
- {};
-
- template<typename End>
- struct deref_unless<End, End>
- {
- typedef mpl::char_<'\0'> type;
- };
- }
-
- template<typename Sequence>
- struct c_str
- {
- typedef typename mpl::end<Sequence>::type iend;
- typedef typename mpl::begin<Sequence>::type i0;
- #define M0(z, n, data) \
- typedef \
- typename mpl::aux_::next_unless<BOOST_PP_CAT(i, n), iend>::type \
- BOOST_PP_CAT(i, BOOST_PP_INC(n));
- BOOST_PP_REPEAT(BOOST_MPL_LIMIT_STRING_SIZE, M0, ~)
- #undef M0
-
- typedef c_str type;
- static typename Sequence::value_type const value[BOOST_MPL_LIMIT_STRING_SIZE+1];
- };
-
- template<typename Sequence>
- typename Sequence::value_type const c_str<Sequence>::value[BOOST_MPL_LIMIT_STRING_SIZE+1] =
- {
- #define M0(z, n, data) \
- mpl::aux_::deref_unless<BOOST_PP_CAT(i, n), iend>::type::value,
- BOOST_PP_REPEAT(BOOST_MPL_LIMIT_STRING_SIZE, M0, ~)
- #undef M0
- '\0'
- };
-
-}} // namespace boost
-
-#endif // BOOST_MPL_STRING_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/switch.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/switch.hpp
deleted file mode 100644
index 8edc38fad0..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/switch.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#ifndef BOOST_MPL_SWITCH_HPP_INCLUDED
-#define BOOST_MPL_SWITCH_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/find_if.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/lambda.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/pair.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Body)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct switch_
-{
- typedef typename find_if<
- Body
- , apply1< lambda< first<_1> >, T >
- >::type iter_;
-
- typedef typename deref<iter_>::type pair_;
- typedef typename lambda< typename second<pair_>::type >::type f_;
- typedef typename apply1<f_,T>::type type;
-
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,switch_,(Body,T))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, switch_)
-
-}}
-
-#endif // BOOST_MPL_SWITCH_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/unique.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/unique.hpp
deleted file mode 100644
index 80a27da4ec..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/unique.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-
-#ifndef BOOST_MPL_UNIQUE_HPP_INCLUDED
-#define BOOST_MPL_UNIQUE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-// Copyright John R. Bandela 2000-2002
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/reverse_fold.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/mpl/pair.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/aux_/inserter_algorithm.hpp>
-#include <boost/mpl/aux_/na.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_spec.hpp>
-
-namespace boost { namespace mpl {
-
-namespace aux {
-
-template< typename Predicate, typename Operation >
-struct unique_op
-{
- template< typename Pair, typename T > struct apply
- {
- typedef typename Pair::first seq_;
- typedef typename Pair::second prior_;
- typedef typename eval_if<
- and_< is_not_na<prior_>, apply2<Predicate,prior_,T> >
- , identity<seq_>
- , apply2<Operation,seq_,T>
- >::type new_seq_;
-
- typedef pair<new_seq_,T> type;
- };
-};
-
-template<
- typename Sequence
- , typename Predicate
- , typename Inserter
- >
-struct unique_impl
- : first< typename fold<
- Sequence
- , pair< typename Inserter::state,na >
- , protect< aux::unique_op<Predicate,typename Inserter::operation> >
- >::type >
-{
-};
-
-template<
- typename Sequence
- , typename Predicate
- , typename Inserter
- >
-struct reverse_unique_impl
- : first< typename reverse_fold<
- Sequence
- , pair< typename Inserter::state,na >
- , protect< aux::unique_op<Predicate,typename Inserter::operation> >
- >::type >
-{
-};
-
-} // namespace aux
-
-BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, unique)
-
-}}
-
-#endif // BOOST_MPL_UNIQUE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/upper_bound.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/upper_bound.hpp
deleted file mode 100644
index 6c954edc33..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/upper_bound.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-
-#ifndef BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
-#define BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2001-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/less.hpp>
-#include <boost/mpl/lambda.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/config/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x610))
-# define BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL
-#endif
-
-#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)
-# include <boost/mpl/minus.hpp>
-# include <boost/mpl/divides.hpp>
-# include <boost/mpl/size.hpp>
-# include <boost/mpl/advance.hpp>
-# include <boost/mpl/begin_end.hpp>
-# include <boost/mpl/long.hpp>
-# include <boost/mpl/eval_if.hpp>
-# include <boost/mpl/prior.hpp>
-# include <boost/mpl/deref.hpp>
-# include <boost/mpl/apply.hpp>
-# include <boost/mpl/aux_/value_wknd.hpp>
-#else
-# include <boost/mpl/find.hpp>
-# include <boost/mpl/bind.hpp>
-#endif
-
-#include <boost/config.hpp>
-
-namespace boost { namespace mpl {
-
-#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)
-
-// agurt 23/oct/02: has a wrong complexity etc., but at least it works;
-// feel free to contribute a better implementation!
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- , typename Predicate = less<>
- , typename pred_ = typename lambda<Predicate>::type
- >
-struct upper_bound
- : find_if< Sequence, bind2<pred_,T,_> >
-{
-};
-
-#else
-
-namespace aux {
-
-template<
- typename Distance
- , typename Predicate
- , typename T
- , typename DeferredIterator
- >
-struct upper_bound_step_impl;
-
-template<
- typename Distance
- , typename Predicate
- , typename T
- , typename DeferredIterator
- >
-struct upper_bound_step
-{
- typedef typename eval_if<
- Distance
- , upper_bound_step_impl<Distance,Predicate,T,DeferredIterator>
- , DeferredIterator
- >::type type;
-};
-
-template<
- typename Distance
- , typename Predicate
- , typename T
- , typename DeferredIterator
- >
-struct upper_bound_step_impl
-{
- typedef typename divides< Distance, long_<2> >::type offset_;
- typedef typename DeferredIterator::type iter_;
- typedef typename advance< iter_,offset_ >::type middle_;
- typedef typename apply2<
- Predicate
- , T
- , typename deref<middle_>::type
- >::type cond_;
-
- typedef typename prior< minus< Distance, offset_ > >::type step_;
- typedef upper_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;
- typedef upper_bound_step< step_,Predicate,T,next<middle_> > step_backward_;
- typedef typename eval_if<
- cond_
- , step_forward_
- , step_backward_
- >::type type;
-};
-
-} // namespace aux
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(Sequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- , typename Predicate = less<>
- >
-struct upper_bound
-{
- private:
- typedef typename lambda<Predicate>::type pred_;
- typedef typename size<Sequence>::type size_;
-
- public:
- typedef typename aux::upper_bound_step<
- size_,pred_,T,begin<Sequence>
- >::type type;
-};
-
-#endif // BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL
-
-BOOST_MPL_AUX_NA_SPEC(2, upper_bound)
-
-}}
-
-#endif // BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/value_type.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/value_type.hpp
deleted file mode 100644
index 5b8c822e3d..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/value_type.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#ifndef BOOST_MPL_VALUE_TYPE_HPP_INCLUDED
-#define BOOST_MPL_VALUE_TYPE_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2003-2004
-// Copyright David Abrahams 2003-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/value_type_fwd.hpp>
-#include <boost/mpl/sequence_tag.hpp>
-#include <boost/mpl/apply_wrap.hpp>
-#include <boost/mpl/aux_/na_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-namespace boost { namespace mpl {
-
-template<
- typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)
- , typename BOOST_MPL_AUX_NA_PARAM(T)
- >
-struct value_type
- : apply_wrap2<
- value_type_impl< typename sequence_tag<AssociativeSequence>::type >
- , AssociativeSequence, T >
-{
- BOOST_MPL_AUX_LAMBDA_SUPPORT(2,value_type,(AssociativeSequence,T))
-};
-
-BOOST_MPL_AUX_NA_SPEC(2, value_type)
-
-}}
-
-#endif // BOOST_MPL_VALUE_TYPE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector0_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector0_c.hpp
deleted file mode 100644
index 0e60215ddd..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector0_c.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#include <boost/mpl/vector/vector0.hpp>
-#include <boost/mpl/integral_c.hpp>
-
-namespace boost { namespace mpl {
-
-template< typename T > struct vector0_c
- : vector0<>
-{
- typedef vector0_c type;
- typedef T value_type;
-};
-
-}}
-
-#endif // BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector10_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector10_c.hpp
deleted file mode 100644
index be52d2f7f3..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector10_c.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/vector/vector0_c.hpp>
-# include <boost/mpl/vector/vector10.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER vector10_c.hpp
-# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/aux_/config/typeof.hpp>
-# include <boost/mpl/aux_/config/ctps.hpp>
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(1, 10, <boost/mpl/vector/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector20_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector20_c.hpp
deleted file mode 100644
index 3913f26026..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector20_c.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/vector/vector10_c.hpp>
-# include <boost/mpl/vector/vector20.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER vector20_c.hpp
-# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/aux_/config/typeof.hpp>
-# include <boost/mpl/aux_/config/ctps.hpp>
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(11, 20, <boost/mpl/vector/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector30_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector30_c.hpp
deleted file mode 100644
index 94cdab465a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector30_c.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/vector/vector20_c.hpp>
-# include <boost/mpl/vector/vector30.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER vector30_c.hpp
-# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/aux_/config/typeof.hpp>
-# include <boost/mpl/aux_/config/ctps.hpp>
-# include <boost/preprocessor/iterate.hpp>
-# include <boost/config.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(21, 30, <boost/mpl/vector/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector40_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector40_c.hpp
deleted file mode 100644
index 25e2ebf3d2..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector40_c.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/vector/vector30_c.hpp>
-# include <boost/mpl/vector/vector40.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER vector40_c.hpp
-# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/aux_/config/typeof.hpp>
-# include <boost/mpl/aux_/config/ctps.hpp>
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(31, 40, <boost/mpl/vector/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector50_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector50_c.hpp
deleted file mode 100644
index 7388bf404b..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector/vector50_c.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2004
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/vector/vector40_c.hpp>
-# include <boost/mpl/vector/vector50.hpp>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER vector50_c.hpp
-# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/aux_/config/typeof.hpp>
-# include <boost/mpl/aux_/config/ctps.hpp>
-# include <boost/preprocessor/iterate.hpp>
-
-namespace boost { namespace mpl {
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3,(41, 50, <boost/mpl/vector/aux_/numbered_c.hpp>))
-# include BOOST_PP_ITERATE()
-
-}}
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-
-#endif // BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/mpl/include/boost/mpl/vector_c.hpp b/contrib/restricted/boost/mpl/include/boost/mpl/vector_c.hpp
deleted file mode 100644
index 316ce65f8a..0000000000
--- a/contrib/restricted/boost/mpl/include/boost/mpl/vector_c.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-
-#ifndef BOOST_MPL_VECTOR_C_HPP_INCLUDED
-#define BOOST_MPL_VECTOR_C_HPP_INCLUDED
-
-// Copyright Aleksey Gurtovoy 2000-2008
-//
-// 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)
-//
-// See http://www.boost.org/libs/mpl for documentation.
-
-// $Id$
-// $Date$
-// $Revision$
-
-#if !defined(BOOST_MPL_PREPROCESSING_MODE)
-# include <boost/mpl/limits/vector.hpp>
-# include <boost/mpl/aux_/nttp_decl.hpp>
-# include <boost/mpl/aux_/config/preprocessor.hpp>
-
-# include <boost/preprocessor/inc.hpp>
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/stringize.hpp>
-
-#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
-# define AUX778076_VECTOR_C_HEADER \
- BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c).hpp \
- /**/
-#else
-# define AUX778076_VECTOR_C_HEADER \
- BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c)##.hpp \
- /**/
-#endif
-
-# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_C_HEADER)
-# undef AUX778076_VECTOR_C_HEADER
-# include <climits>
-#endif
-
-#include <boost/mpl/aux_/config/use_preprocessed.hpp>
-
-#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
- && !defined(BOOST_MPL_PREPROCESSING_MODE)
-
-# define BOOST_MPL_PREPROCESSED_HEADER vector_c.hpp
-# include <boost/mpl/aux_/include_preprocessed.hpp>
-
-#else
-
-# include <boost/mpl/limits/vector.hpp>
-
-# define AUX778076_SEQUENCE_NAME vector_c
-# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
-# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(vector,n),_c)
-# define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) TARGET(BOOST_PP_CAT(C,n))
-# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
-# include <boost/mpl/aux_/sequence_wrapper.hpp>
-
-#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-#endif // BOOST_MPL_VECTOR_C_HPP_INCLUDED
diff --git a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/cast.hpp b/contrib/restricted/boost/parameter/include/boost/parameter/aux_/cast.hpp
deleted file mode 100644
index 0125e2209c..0000000000
--- a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/cast.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright Daniel Wallin 2006.
-// 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_PARAMETER_CAST_060902_HPP
-#define BOOST_PARAMETER_CAST_060902_HPP
-
-#include <boost/parameter/aux_/preprocessor/impl/function_cast.hpp>
-
-#endif // include guard
-
diff --git a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/maybe.hpp b/contrib/restricted/boost/parameter/include/boost/parameter/aux_/maybe.hpp
deleted file mode 100644
index c47aaa655f..0000000000
--- a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/maybe.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright Daniel Wallin 2006.
-// 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)
-
-//
-// 2009.10.21 TDS remove depenency on boost::python::detail::referent_storage
-//
-#ifndef BOOST_PARAMETER_MAYBE_091021_HPP
-#define BOOST_PARAMETER_MAYBE_091021_HPP
-
-namespace boost { namespace parameter { namespace aux {
-
- template <typename T>
- struct referent_size;
-}}} // namespace boost::parameter::aux
-
-#include <boost/parameter/config.hpp>
-
-namespace boost { namespace parameter { namespace aux {
-
- template <typename T>
- struct referent_size<T&>
- {
- BOOST_STATIC_CONSTANT(::std::size_t, value = sizeof(T));
- };
-}}} // namespace boost::parameter::aux
-
-#include <boost/type_traits/aligned_storage.hpp>
-
-namespace boost { namespace parameter { namespace aux {
-
- // A metafunction returning a POD type which can store U, where T == U&.
- // If T is not a reference type, returns a POD which can store T.
- template <typename T>
- struct referent_storage
- : ::boost::aligned_storage<
- ::boost::parameter::aux::referent_size<T>::value
- >
- {
- };
-}}} // namespace boost::parameter::aux
-
-#include <boost/parameter/aux_/is_maybe.hpp>
-#include <boost/optional/optional.hpp>
-
-#if defined(BOOST_PARAMETER_CAN_USE_MP11)
-#include <type_traits>
-#else // !defined(BOOST_PARAMETER_CAN_USE_MP11)
-#include <boost/type_traits/add_lvalue_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#if !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
-#include <boost/type_traits/add_const.hpp>
-#endif
-#endif // BOOST_PARAMETER_CAN_USE_MP11
-
-namespace boost { namespace parameter { namespace aux {
-
- template <typename T>
- struct maybe : ::boost::parameter::aux::maybe_base
- {
-#if defined(BOOST_PARAMETER_CAN_USE_MP11)
- typedef typename ::std::add_lvalue_reference<
- typename ::std::add_const<T>::type
-#else // !defined(BOOST_PARAMETER_CAN_USE_MP11)
- typedef typename ::boost::add_lvalue_reference<
-#if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
- T const
-#else
- typename ::boost::add_const<T>::type
-#endif
-#endif // BOOST_PARAMETER_CAN_USE_MP11
- >::type reference;
-
-#if defined(BOOST_PARAMETER_CAN_USE_MP11)
- typedef typename ::std::remove_cv<
- typename ::std::remove_reference<reference>::type
-#else
- typedef typename ::boost::remove_cv<
- BOOST_DEDUCED_TYPENAME ::boost::remove_reference<reference>::type
-#endif
- >::type non_cv_value;
-
- inline explicit maybe(T value_) : value(value_), constructed(false)
- {
- }
-
- inline maybe() : value(), constructed(false)
- {
- }
-
- ~maybe()
- {
- if (this->constructed)
- {
- this->destroy();
- }
- }
-
- inline reference construct(reference value_) const
- {
- return value_;
- }
-
- template <typename U>
- reference construct2(U const& value_) const
- {
- new (this->m_storage.address()) non_cv_value(value_);
- this->constructed = true;
- return *reinterpret_cast<non_cv_value*>(
- this->m_storage.address()
- );
- }
-
- template <typename U>
- inline reference construct(U const& value_) const
- {
- return this->construct2(value_);
- }
-
- void destroy()
- {
- reinterpret_cast<non_cv_value*>(
- this->m_storage.address()
- )->~non_cv_value();
- }
-
- typedef reference(
- ::boost::parameter::aux::maybe<T>::*safe_bool
- )() const;
-
- inline operator safe_bool() const
- {
- return this->value ? &::boost::parameter::aux::maybe<T>::get : 0;
- }
-
- inline reference get() const
- {
- return this->value.get();
- }
-
- private:
- ::boost::optional<T> value;
- mutable bool constructed;
- mutable typename ::boost::parameter::aux
- ::referent_storage<reference>::type m_storage;
- };
-}}} // namespace boost::parameter::aux
-
-#endif // include guard
-
diff --git a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/parenthesized_type.hpp b/contrib/restricted/boost/parameter/include/boost/parameter/aux_/parenthesized_type.hpp
deleted file mode 100644
index 863e062e90..0000000000
--- a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/parenthesized_type.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright David Abrahams 2006.
-// 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_PARAMETER_AUX_PARENTHESIZED_TYPE_DWA2006414_HPP
-#define BOOST_PARAMETER_AUX_PARENTHESIZED_TYPE_DWA2006414_HPP
-
-#include <boost/parameter/aux_/preprocessor/impl/parenthesized_type.hpp>
-
-#endif // include guard
-
diff --git a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/flatten.hpp b/contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/flatten.hpp
deleted file mode 100644
index 876a928bfd..0000000000
--- a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/flatten.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright Daniel Wallin 2005.
-// 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_PARAMETER_FLATTEN_051217_HPP
-#define BOOST_PARAMETER_FLATTEN_051217_HPP
-
-#include <boost/parameter/aux_/preprocessor/impl/flatten.hpp>
-
-#endif // include guard
-
diff --git a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/for_each.hpp b/contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/for_each.hpp
deleted file mode 100644
index 221f45a785..0000000000
--- a/contrib/restricted/boost/parameter/include/boost/parameter/aux_/preprocessor/for_each.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright Daniel Wallin 2005.
-// 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_PARAMETER_FOR_EACH_051217_HPP
-#define BOOST_PARAMETER_FOR_EACH_051217_HPP
-
-#include <boost/parameter/aux_/preprocessor/impl/for_each.hpp>
-
-#endif // include guard
-
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/assert_msg.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/assert_msg.hpp
deleted file mode 100644
index 924dba1d9f..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/assert_msg.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_ASSERT_MSG_HPP
-# define BOOST_PREPROCESSOR_ASSERT_MSG_HPP
-#
-# include <boost/preprocessor/debug/assert.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/comma.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/comma.hpp
deleted file mode 100644
index 6e02fb6131..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/comma.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_COMMA_HPP
-# define BOOST_PREPROCESSOR_COMMA_HPP
-#
-# include <boost/preprocessor/punctuation/comma.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/detail/null.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/detail/null.hpp
deleted file mode 100644
index 5eb0bd4ca9..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/detail/null.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_DETAIL_NULL_HPP
-# define BOOST_PREPROCESSOR_DETAIL_NULL_HPP
-#
-# /* empty file */
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/enum_shifted.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/enum_shifted.hpp
deleted file mode 100644
index aa6a698d52..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/enum_shifted.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_HPP
-# define BOOST_PREPROCESSOR_ENUM_SHIFTED_HPP
-#
-# include <boost/preprocessor/repetition/enum_shifted.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/facilities/is_empty_or_1.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/facilities/is_empty_or_1.hpp
deleted file mode 100644
index 815666fccc..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/facilities/is_empty_or_1.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2003.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_OR_1_HPP
-# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_OR_1_HPP
-#
-# include <boost/preprocessor/control/iif.hpp>
-# include <boost/preprocessor/facilities/empty.hpp>
-# include <boost/preprocessor/facilities/identity.hpp>
-# include <boost/preprocessor/facilities/is_1.hpp>
-# include <boost/preprocessor/facilities/is_empty.hpp>
-#
-# /* BOOST_PP_IS_EMPTY_OR_1 */
-#
-# define BOOST_PP_IS_EMPTY_OR_1(x) \
- BOOST_PP_IIF( \
- BOOST_PP_IS_EMPTY(x BOOST_PP_EMPTY()), \
- BOOST_PP_IDENTITY(1), \
- BOOST_PP_IS_1 \
- )(x) \
- /**/
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/for.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/for.hpp
deleted file mode 100644
index 9ec9cee67a..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/for.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_FOR_HPP
-# define BOOST_PREPROCESSOR_FOR_HPP
-#
-# include <boost/preprocessor/repetition/for.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/limits.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/limits.hpp
deleted file mode 100644
index e264cc3c83..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/limits.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_LIMITS_HPP
-# define BOOST_PREPROCESSOR_LIMITS_HPP
-#
-# include <boost/preprocessor/config/limits.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/max.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/max.hpp
deleted file mode 100644
index 3a46ed924b..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/max.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_MAX_HPP
-# define BOOST_PREPROCESSOR_MAX_HPP
-#
-# include <boost/preprocessor/selection/max.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/min.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/min.hpp
deleted file mode 100644
index 8d8e9af2cc..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/min.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_MIN_HPP
-# define BOOST_PREPROCESSOR_MIN_HPP
-#
-# include <boost/preprocessor/selection/min.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_2nd.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_2nd.hpp
deleted file mode 100644
index 030c4324c2..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_2nd.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_REPEAT_2ND_HPP
-# define BOOST_PREPROCESSOR_REPEAT_2ND_HPP
-#
-# include <boost/preprocessor/repetition/repeat.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_3rd.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_3rd.hpp
deleted file mode 100644
index 9ab36a5aea..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_3rd.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_REPEAT_3RD_HPP
-# define BOOST_PREPROCESSOR_REPEAT_3RD_HPP
-#
-# include <boost/preprocessor/repetition/repeat.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_2nd.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_2nd.hpp
deleted file mode 100644
index b833fb5c83..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_2nd.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_2ND_HPP
-# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_2ND_HPP
-#
-# include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_3rd.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_3rd.hpp
deleted file mode 100644
index 8cd776fb99..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/repeat_from_to_3rd.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_3RD_HPP
-# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_3RD_HPP
-#
-# include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot2.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot2.hpp
deleted file mode 100644
index 5d5258c225..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot2.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# include <boost/preprocessor/slot/detail/shared.hpp>
-#
-# undef BOOST_PP_SLOT_2
-#
-# undef BOOST_PP_SLOT_2_DIGIT_1
-# undef BOOST_PP_SLOT_2_DIGIT_2
-# undef BOOST_PP_SLOT_2_DIGIT_3
-# undef BOOST_PP_SLOT_2_DIGIT_4
-# undef BOOST_PP_SLOT_2_DIGIT_5
-# undef BOOST_PP_SLOT_2_DIGIT_6
-# undef BOOST_PP_SLOT_2_DIGIT_7
-# undef BOOST_PP_SLOT_2_DIGIT_8
-# undef BOOST_PP_SLOT_2_DIGIT_9
-# undef BOOST_PP_SLOT_2_DIGIT_10
-#
-# if BOOST_PP_SLOT_TEMP_10 == 0
-# define BOOST_PP_SLOT_2_DIGIT_10 0
-# elif BOOST_PP_SLOT_TEMP_10 == 1
-# define BOOST_PP_SLOT_2_DIGIT_10 1
-# elif BOOST_PP_SLOT_TEMP_10 == 2
-# define BOOST_PP_SLOT_2_DIGIT_10 2
-# elif BOOST_PP_SLOT_TEMP_10 == 3
-# define BOOST_PP_SLOT_2_DIGIT_10 3
-# elif BOOST_PP_SLOT_TEMP_10 == 4
-# define BOOST_PP_SLOT_2_DIGIT_10 4
-# elif BOOST_PP_SLOT_TEMP_10 == 5
-# define BOOST_PP_SLOT_2_DIGIT_10 5
-# elif BOOST_PP_SLOT_TEMP_10 == 6
-# define BOOST_PP_SLOT_2_DIGIT_10 6
-# elif BOOST_PP_SLOT_TEMP_10 == 7
-# define BOOST_PP_SLOT_2_DIGIT_10 7
-# elif BOOST_PP_SLOT_TEMP_10 == 8
-# define BOOST_PP_SLOT_2_DIGIT_10 8
-# elif BOOST_PP_SLOT_TEMP_10 == 9
-# define BOOST_PP_SLOT_2_DIGIT_10 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_9 == 0
-# define BOOST_PP_SLOT_2_DIGIT_9 0
-# elif BOOST_PP_SLOT_TEMP_9 == 1
-# define BOOST_PP_SLOT_2_DIGIT_9 1
-# elif BOOST_PP_SLOT_TEMP_9 == 2
-# define BOOST_PP_SLOT_2_DIGIT_9 2
-# elif BOOST_PP_SLOT_TEMP_9 == 3
-# define BOOST_PP_SLOT_2_DIGIT_9 3
-# elif BOOST_PP_SLOT_TEMP_9 == 4
-# define BOOST_PP_SLOT_2_DIGIT_9 4
-# elif BOOST_PP_SLOT_TEMP_9 == 5
-# define BOOST_PP_SLOT_2_DIGIT_9 5
-# elif BOOST_PP_SLOT_TEMP_9 == 6
-# define BOOST_PP_SLOT_2_DIGIT_9 6
-# elif BOOST_PP_SLOT_TEMP_9 == 7
-# define BOOST_PP_SLOT_2_DIGIT_9 7
-# elif BOOST_PP_SLOT_TEMP_9 == 8
-# define BOOST_PP_SLOT_2_DIGIT_9 8
-# elif BOOST_PP_SLOT_TEMP_9 == 9
-# define BOOST_PP_SLOT_2_DIGIT_9 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_8 == 0
-# define BOOST_PP_SLOT_2_DIGIT_8 0
-# elif BOOST_PP_SLOT_TEMP_8 == 1
-# define BOOST_PP_SLOT_2_DIGIT_8 1
-# elif BOOST_PP_SLOT_TEMP_8 == 2
-# define BOOST_PP_SLOT_2_DIGIT_8 2
-# elif BOOST_PP_SLOT_TEMP_8 == 3
-# define BOOST_PP_SLOT_2_DIGIT_8 3
-# elif BOOST_PP_SLOT_TEMP_8 == 4
-# define BOOST_PP_SLOT_2_DIGIT_8 4
-# elif BOOST_PP_SLOT_TEMP_8 == 5
-# define BOOST_PP_SLOT_2_DIGIT_8 5
-# elif BOOST_PP_SLOT_TEMP_8 == 6
-# define BOOST_PP_SLOT_2_DIGIT_8 6
-# elif BOOST_PP_SLOT_TEMP_8 == 7
-# define BOOST_PP_SLOT_2_DIGIT_8 7
-# elif BOOST_PP_SLOT_TEMP_8 == 8
-# define BOOST_PP_SLOT_2_DIGIT_8 8
-# elif BOOST_PP_SLOT_TEMP_8 == 9
-# define BOOST_PP_SLOT_2_DIGIT_8 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_7 == 0
-# define BOOST_PP_SLOT_2_DIGIT_7 0
-# elif BOOST_PP_SLOT_TEMP_7 == 1
-# define BOOST_PP_SLOT_2_DIGIT_7 1
-# elif BOOST_PP_SLOT_TEMP_7 == 2
-# define BOOST_PP_SLOT_2_DIGIT_7 2
-# elif BOOST_PP_SLOT_TEMP_7 == 3
-# define BOOST_PP_SLOT_2_DIGIT_7 3
-# elif BOOST_PP_SLOT_TEMP_7 == 4
-# define BOOST_PP_SLOT_2_DIGIT_7 4
-# elif BOOST_PP_SLOT_TEMP_7 == 5
-# define BOOST_PP_SLOT_2_DIGIT_7 5
-# elif BOOST_PP_SLOT_TEMP_7 == 6
-# define BOOST_PP_SLOT_2_DIGIT_7 6
-# elif BOOST_PP_SLOT_TEMP_7 == 7
-# define BOOST_PP_SLOT_2_DIGIT_7 7
-# elif BOOST_PP_SLOT_TEMP_7 == 8
-# define BOOST_PP_SLOT_2_DIGIT_7 8
-# elif BOOST_PP_SLOT_TEMP_7 == 9
-# define BOOST_PP_SLOT_2_DIGIT_7 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_6 == 0
-# define BOOST_PP_SLOT_2_DIGIT_6 0
-# elif BOOST_PP_SLOT_TEMP_6 == 1
-# define BOOST_PP_SLOT_2_DIGIT_6 1
-# elif BOOST_PP_SLOT_TEMP_6 == 2
-# define BOOST_PP_SLOT_2_DIGIT_6 2
-# elif BOOST_PP_SLOT_TEMP_6 == 3
-# define BOOST_PP_SLOT_2_DIGIT_6 3
-# elif BOOST_PP_SLOT_TEMP_6 == 4
-# define BOOST_PP_SLOT_2_DIGIT_6 4
-# elif BOOST_PP_SLOT_TEMP_6 == 5
-# define BOOST_PP_SLOT_2_DIGIT_6 5
-# elif BOOST_PP_SLOT_TEMP_6 == 6
-# define BOOST_PP_SLOT_2_DIGIT_6 6
-# elif BOOST_PP_SLOT_TEMP_6 == 7
-# define BOOST_PP_SLOT_2_DIGIT_6 7
-# elif BOOST_PP_SLOT_TEMP_6 == 8
-# define BOOST_PP_SLOT_2_DIGIT_6 8
-# elif BOOST_PP_SLOT_TEMP_6 == 9
-# define BOOST_PP_SLOT_2_DIGIT_6 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_5 == 0
-# define BOOST_PP_SLOT_2_DIGIT_5 0
-# elif BOOST_PP_SLOT_TEMP_5 == 1
-# define BOOST_PP_SLOT_2_DIGIT_5 1
-# elif BOOST_PP_SLOT_TEMP_5 == 2
-# define BOOST_PP_SLOT_2_DIGIT_5 2
-# elif BOOST_PP_SLOT_TEMP_5 == 3
-# define BOOST_PP_SLOT_2_DIGIT_5 3
-# elif BOOST_PP_SLOT_TEMP_5 == 4
-# define BOOST_PP_SLOT_2_DIGIT_5 4
-# elif BOOST_PP_SLOT_TEMP_5 == 5
-# define BOOST_PP_SLOT_2_DIGIT_5 5
-# elif BOOST_PP_SLOT_TEMP_5 == 6
-# define BOOST_PP_SLOT_2_DIGIT_5 6
-# elif BOOST_PP_SLOT_TEMP_5 == 7
-# define BOOST_PP_SLOT_2_DIGIT_5 7
-# elif BOOST_PP_SLOT_TEMP_5 == 8
-# define BOOST_PP_SLOT_2_DIGIT_5 8
-# elif BOOST_PP_SLOT_TEMP_5 == 9
-# define BOOST_PP_SLOT_2_DIGIT_5 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_4 == 0
-# define BOOST_PP_SLOT_2_DIGIT_4 0
-# elif BOOST_PP_SLOT_TEMP_4 == 1
-# define BOOST_PP_SLOT_2_DIGIT_4 1
-# elif BOOST_PP_SLOT_TEMP_4 == 2
-# define BOOST_PP_SLOT_2_DIGIT_4 2
-# elif BOOST_PP_SLOT_TEMP_4 == 3
-# define BOOST_PP_SLOT_2_DIGIT_4 3
-# elif BOOST_PP_SLOT_TEMP_4 == 4
-# define BOOST_PP_SLOT_2_DIGIT_4 4
-# elif BOOST_PP_SLOT_TEMP_4 == 5
-# define BOOST_PP_SLOT_2_DIGIT_4 5
-# elif BOOST_PP_SLOT_TEMP_4 == 6
-# define BOOST_PP_SLOT_2_DIGIT_4 6
-# elif BOOST_PP_SLOT_TEMP_4 == 7
-# define BOOST_PP_SLOT_2_DIGIT_4 7
-# elif BOOST_PP_SLOT_TEMP_4 == 8
-# define BOOST_PP_SLOT_2_DIGIT_4 8
-# elif BOOST_PP_SLOT_TEMP_4 == 9
-# define BOOST_PP_SLOT_2_DIGIT_4 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_3 == 0
-# define BOOST_PP_SLOT_2_DIGIT_3 0
-# elif BOOST_PP_SLOT_TEMP_3 == 1
-# define BOOST_PP_SLOT_2_DIGIT_3 1
-# elif BOOST_PP_SLOT_TEMP_3 == 2
-# define BOOST_PP_SLOT_2_DIGIT_3 2
-# elif BOOST_PP_SLOT_TEMP_3 == 3
-# define BOOST_PP_SLOT_2_DIGIT_3 3
-# elif BOOST_PP_SLOT_TEMP_3 == 4
-# define BOOST_PP_SLOT_2_DIGIT_3 4
-# elif BOOST_PP_SLOT_TEMP_3 == 5
-# define BOOST_PP_SLOT_2_DIGIT_3 5
-# elif BOOST_PP_SLOT_TEMP_3 == 6
-# define BOOST_PP_SLOT_2_DIGIT_3 6
-# elif BOOST_PP_SLOT_TEMP_3 == 7
-# define BOOST_PP_SLOT_2_DIGIT_3 7
-# elif BOOST_PP_SLOT_TEMP_3 == 8
-# define BOOST_PP_SLOT_2_DIGIT_3 8
-# elif BOOST_PP_SLOT_TEMP_3 == 9
-# define BOOST_PP_SLOT_2_DIGIT_3 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_2 == 0
-# define BOOST_PP_SLOT_2_DIGIT_2 0
-# elif BOOST_PP_SLOT_TEMP_2 == 1
-# define BOOST_PP_SLOT_2_DIGIT_2 1
-# elif BOOST_PP_SLOT_TEMP_2 == 2
-# define BOOST_PP_SLOT_2_DIGIT_2 2
-# elif BOOST_PP_SLOT_TEMP_2 == 3
-# define BOOST_PP_SLOT_2_DIGIT_2 3
-# elif BOOST_PP_SLOT_TEMP_2 == 4
-# define BOOST_PP_SLOT_2_DIGIT_2 4
-# elif BOOST_PP_SLOT_TEMP_2 == 5
-# define BOOST_PP_SLOT_2_DIGIT_2 5
-# elif BOOST_PP_SLOT_TEMP_2 == 6
-# define BOOST_PP_SLOT_2_DIGIT_2 6
-# elif BOOST_PP_SLOT_TEMP_2 == 7
-# define BOOST_PP_SLOT_2_DIGIT_2 7
-# elif BOOST_PP_SLOT_TEMP_2 == 8
-# define BOOST_PP_SLOT_2_DIGIT_2 8
-# elif BOOST_PP_SLOT_TEMP_2 == 9
-# define BOOST_PP_SLOT_2_DIGIT_2 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_1 == 0
-# define BOOST_PP_SLOT_2_DIGIT_1 0
-# elif BOOST_PP_SLOT_TEMP_1 == 1
-# define BOOST_PP_SLOT_2_DIGIT_1 1
-# elif BOOST_PP_SLOT_TEMP_1 == 2
-# define BOOST_PP_SLOT_2_DIGIT_1 2
-# elif BOOST_PP_SLOT_TEMP_1 == 3
-# define BOOST_PP_SLOT_2_DIGIT_1 3
-# elif BOOST_PP_SLOT_TEMP_1 == 4
-# define BOOST_PP_SLOT_2_DIGIT_1 4
-# elif BOOST_PP_SLOT_TEMP_1 == 5
-# define BOOST_PP_SLOT_2_DIGIT_1 5
-# elif BOOST_PP_SLOT_TEMP_1 == 6
-# define BOOST_PP_SLOT_2_DIGIT_1 6
-# elif BOOST_PP_SLOT_TEMP_1 == 7
-# define BOOST_PP_SLOT_2_DIGIT_1 7
-# elif BOOST_PP_SLOT_TEMP_1 == 8
-# define BOOST_PP_SLOT_2_DIGIT_1 8
-# elif BOOST_PP_SLOT_TEMP_1 == 9
-# define BOOST_PP_SLOT_2_DIGIT_1 9
-# endif
-#
-# if BOOST_PP_SLOT_2_DIGIT_10
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_2_DIGIT_10, BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_9
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_8
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_7
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_6
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_5
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_4
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_3
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# elif BOOST_PP_SLOT_2_DIGIT_2
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
-# else
-# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_2_DIGIT_1
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot3.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot3.hpp
deleted file mode 100644
index 005cf21900..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot3.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# include <boost/preprocessor/slot/detail/shared.hpp>
-#
-# undef BOOST_PP_SLOT_3
-#
-# undef BOOST_PP_SLOT_3_DIGIT_1
-# undef BOOST_PP_SLOT_3_DIGIT_2
-# undef BOOST_PP_SLOT_3_DIGIT_3
-# undef BOOST_PP_SLOT_3_DIGIT_4
-# undef BOOST_PP_SLOT_3_DIGIT_5
-# undef BOOST_PP_SLOT_3_DIGIT_6
-# undef BOOST_PP_SLOT_3_DIGIT_7
-# undef BOOST_PP_SLOT_3_DIGIT_8
-# undef BOOST_PP_SLOT_3_DIGIT_9
-# undef BOOST_PP_SLOT_3_DIGIT_10
-#
-# if BOOST_PP_SLOT_TEMP_10 == 0
-# define BOOST_PP_SLOT_3_DIGIT_10 0
-# elif BOOST_PP_SLOT_TEMP_10 == 1
-# define BOOST_PP_SLOT_3_DIGIT_10 1
-# elif BOOST_PP_SLOT_TEMP_10 == 2
-# define BOOST_PP_SLOT_3_DIGIT_10 2
-# elif BOOST_PP_SLOT_TEMP_10 == 3
-# define BOOST_PP_SLOT_3_DIGIT_10 3
-# elif BOOST_PP_SLOT_TEMP_10 == 4
-# define BOOST_PP_SLOT_3_DIGIT_10 4
-# elif BOOST_PP_SLOT_TEMP_10 == 5
-# define BOOST_PP_SLOT_3_DIGIT_10 5
-# elif BOOST_PP_SLOT_TEMP_10 == 6
-# define BOOST_PP_SLOT_3_DIGIT_10 6
-# elif BOOST_PP_SLOT_TEMP_10 == 7
-# define BOOST_PP_SLOT_3_DIGIT_10 7
-# elif BOOST_PP_SLOT_TEMP_10 == 8
-# define BOOST_PP_SLOT_3_DIGIT_10 8
-# elif BOOST_PP_SLOT_TEMP_10 == 9
-# define BOOST_PP_SLOT_3_DIGIT_10 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_9 == 0
-# define BOOST_PP_SLOT_3_DIGIT_9 0
-# elif BOOST_PP_SLOT_TEMP_9 == 1
-# define BOOST_PP_SLOT_3_DIGIT_9 1
-# elif BOOST_PP_SLOT_TEMP_9 == 2
-# define BOOST_PP_SLOT_3_DIGIT_9 2
-# elif BOOST_PP_SLOT_TEMP_9 == 3
-# define BOOST_PP_SLOT_3_DIGIT_9 3
-# elif BOOST_PP_SLOT_TEMP_9 == 4
-# define BOOST_PP_SLOT_3_DIGIT_9 4
-# elif BOOST_PP_SLOT_TEMP_9 == 5
-# define BOOST_PP_SLOT_3_DIGIT_9 5
-# elif BOOST_PP_SLOT_TEMP_9 == 6
-# define BOOST_PP_SLOT_3_DIGIT_9 6
-# elif BOOST_PP_SLOT_TEMP_9 == 7
-# define BOOST_PP_SLOT_3_DIGIT_9 7
-# elif BOOST_PP_SLOT_TEMP_9 == 8
-# define BOOST_PP_SLOT_3_DIGIT_9 8
-# elif BOOST_PP_SLOT_TEMP_9 == 9
-# define BOOST_PP_SLOT_3_DIGIT_9 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_8 == 0
-# define BOOST_PP_SLOT_3_DIGIT_8 0
-# elif BOOST_PP_SLOT_TEMP_8 == 1
-# define BOOST_PP_SLOT_3_DIGIT_8 1
-# elif BOOST_PP_SLOT_TEMP_8 == 2
-# define BOOST_PP_SLOT_3_DIGIT_8 2
-# elif BOOST_PP_SLOT_TEMP_8 == 3
-# define BOOST_PP_SLOT_3_DIGIT_8 3
-# elif BOOST_PP_SLOT_TEMP_8 == 4
-# define BOOST_PP_SLOT_3_DIGIT_8 4
-# elif BOOST_PP_SLOT_TEMP_8 == 5
-# define BOOST_PP_SLOT_3_DIGIT_8 5
-# elif BOOST_PP_SLOT_TEMP_8 == 6
-# define BOOST_PP_SLOT_3_DIGIT_8 6
-# elif BOOST_PP_SLOT_TEMP_8 == 7
-# define BOOST_PP_SLOT_3_DIGIT_8 7
-# elif BOOST_PP_SLOT_TEMP_8 == 8
-# define BOOST_PP_SLOT_3_DIGIT_8 8
-# elif BOOST_PP_SLOT_TEMP_8 == 9
-# define BOOST_PP_SLOT_3_DIGIT_8 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_7 == 0
-# define BOOST_PP_SLOT_3_DIGIT_7 0
-# elif BOOST_PP_SLOT_TEMP_7 == 1
-# define BOOST_PP_SLOT_3_DIGIT_7 1
-# elif BOOST_PP_SLOT_TEMP_7 == 2
-# define BOOST_PP_SLOT_3_DIGIT_7 2
-# elif BOOST_PP_SLOT_TEMP_7 == 3
-# define BOOST_PP_SLOT_3_DIGIT_7 3
-# elif BOOST_PP_SLOT_TEMP_7 == 4
-# define BOOST_PP_SLOT_3_DIGIT_7 4
-# elif BOOST_PP_SLOT_TEMP_7 == 5
-# define BOOST_PP_SLOT_3_DIGIT_7 5
-# elif BOOST_PP_SLOT_TEMP_7 == 6
-# define BOOST_PP_SLOT_3_DIGIT_7 6
-# elif BOOST_PP_SLOT_TEMP_7 == 7
-# define BOOST_PP_SLOT_3_DIGIT_7 7
-# elif BOOST_PP_SLOT_TEMP_7 == 8
-# define BOOST_PP_SLOT_3_DIGIT_7 8
-# elif BOOST_PP_SLOT_TEMP_7 == 9
-# define BOOST_PP_SLOT_3_DIGIT_7 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_6 == 0
-# define BOOST_PP_SLOT_3_DIGIT_6 0
-# elif BOOST_PP_SLOT_TEMP_6 == 1
-# define BOOST_PP_SLOT_3_DIGIT_6 1
-# elif BOOST_PP_SLOT_TEMP_6 == 2
-# define BOOST_PP_SLOT_3_DIGIT_6 2
-# elif BOOST_PP_SLOT_TEMP_6 == 3
-# define BOOST_PP_SLOT_3_DIGIT_6 3
-# elif BOOST_PP_SLOT_TEMP_6 == 4
-# define BOOST_PP_SLOT_3_DIGIT_6 4
-# elif BOOST_PP_SLOT_TEMP_6 == 5
-# define BOOST_PP_SLOT_3_DIGIT_6 5
-# elif BOOST_PP_SLOT_TEMP_6 == 6
-# define BOOST_PP_SLOT_3_DIGIT_6 6
-# elif BOOST_PP_SLOT_TEMP_6 == 7
-# define BOOST_PP_SLOT_3_DIGIT_6 7
-# elif BOOST_PP_SLOT_TEMP_6 == 8
-# define BOOST_PP_SLOT_3_DIGIT_6 8
-# elif BOOST_PP_SLOT_TEMP_6 == 9
-# define BOOST_PP_SLOT_3_DIGIT_6 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_5 == 0
-# define BOOST_PP_SLOT_3_DIGIT_5 0
-# elif BOOST_PP_SLOT_TEMP_5 == 1
-# define BOOST_PP_SLOT_3_DIGIT_5 1
-# elif BOOST_PP_SLOT_TEMP_5 == 2
-# define BOOST_PP_SLOT_3_DIGIT_5 2
-# elif BOOST_PP_SLOT_TEMP_5 == 3
-# define BOOST_PP_SLOT_3_DIGIT_5 3
-# elif BOOST_PP_SLOT_TEMP_5 == 4
-# define BOOST_PP_SLOT_3_DIGIT_5 4
-# elif BOOST_PP_SLOT_TEMP_5 == 5
-# define BOOST_PP_SLOT_3_DIGIT_5 5
-# elif BOOST_PP_SLOT_TEMP_5 == 6
-# define BOOST_PP_SLOT_3_DIGIT_5 6
-# elif BOOST_PP_SLOT_TEMP_5 == 7
-# define BOOST_PP_SLOT_3_DIGIT_5 7
-# elif BOOST_PP_SLOT_TEMP_5 == 8
-# define BOOST_PP_SLOT_3_DIGIT_5 8
-# elif BOOST_PP_SLOT_TEMP_5 == 9
-# define BOOST_PP_SLOT_3_DIGIT_5 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_4 == 0
-# define BOOST_PP_SLOT_3_DIGIT_4 0
-# elif BOOST_PP_SLOT_TEMP_4 == 1
-# define BOOST_PP_SLOT_3_DIGIT_4 1
-# elif BOOST_PP_SLOT_TEMP_4 == 2
-# define BOOST_PP_SLOT_3_DIGIT_4 2
-# elif BOOST_PP_SLOT_TEMP_4 == 3
-# define BOOST_PP_SLOT_3_DIGIT_4 3
-# elif BOOST_PP_SLOT_TEMP_4 == 4
-# define BOOST_PP_SLOT_3_DIGIT_4 4
-# elif BOOST_PP_SLOT_TEMP_4 == 5
-# define BOOST_PP_SLOT_3_DIGIT_4 5
-# elif BOOST_PP_SLOT_TEMP_4 == 6
-# define BOOST_PP_SLOT_3_DIGIT_4 6
-# elif BOOST_PP_SLOT_TEMP_4 == 7
-# define BOOST_PP_SLOT_3_DIGIT_4 7
-# elif BOOST_PP_SLOT_TEMP_4 == 8
-# define BOOST_PP_SLOT_3_DIGIT_4 8
-# elif BOOST_PP_SLOT_TEMP_4 == 9
-# define BOOST_PP_SLOT_3_DIGIT_4 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_3 == 0
-# define BOOST_PP_SLOT_3_DIGIT_3 0
-# elif BOOST_PP_SLOT_TEMP_3 == 1
-# define BOOST_PP_SLOT_3_DIGIT_3 1
-# elif BOOST_PP_SLOT_TEMP_3 == 2
-# define BOOST_PP_SLOT_3_DIGIT_3 2
-# elif BOOST_PP_SLOT_TEMP_3 == 3
-# define BOOST_PP_SLOT_3_DIGIT_3 3
-# elif BOOST_PP_SLOT_TEMP_3 == 4
-# define BOOST_PP_SLOT_3_DIGIT_3 4
-# elif BOOST_PP_SLOT_TEMP_3 == 5
-# define BOOST_PP_SLOT_3_DIGIT_3 5
-# elif BOOST_PP_SLOT_TEMP_3 == 6
-# define BOOST_PP_SLOT_3_DIGIT_3 6
-# elif BOOST_PP_SLOT_TEMP_3 == 7
-# define BOOST_PP_SLOT_3_DIGIT_3 7
-# elif BOOST_PP_SLOT_TEMP_3 == 8
-# define BOOST_PP_SLOT_3_DIGIT_3 8
-# elif BOOST_PP_SLOT_TEMP_3 == 9
-# define BOOST_PP_SLOT_3_DIGIT_3 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_2 == 0
-# define BOOST_PP_SLOT_3_DIGIT_2 0
-# elif BOOST_PP_SLOT_TEMP_2 == 1
-# define BOOST_PP_SLOT_3_DIGIT_2 1
-# elif BOOST_PP_SLOT_TEMP_2 == 2
-# define BOOST_PP_SLOT_3_DIGIT_2 2
-# elif BOOST_PP_SLOT_TEMP_2 == 3
-# define BOOST_PP_SLOT_3_DIGIT_2 3
-# elif BOOST_PP_SLOT_TEMP_2 == 4
-# define BOOST_PP_SLOT_3_DIGIT_2 4
-# elif BOOST_PP_SLOT_TEMP_2 == 5
-# define BOOST_PP_SLOT_3_DIGIT_2 5
-# elif BOOST_PP_SLOT_TEMP_2 == 6
-# define BOOST_PP_SLOT_3_DIGIT_2 6
-# elif BOOST_PP_SLOT_TEMP_2 == 7
-# define BOOST_PP_SLOT_3_DIGIT_2 7
-# elif BOOST_PP_SLOT_TEMP_2 == 8
-# define BOOST_PP_SLOT_3_DIGIT_2 8
-# elif BOOST_PP_SLOT_TEMP_2 == 9
-# define BOOST_PP_SLOT_3_DIGIT_2 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_1 == 0
-# define BOOST_PP_SLOT_3_DIGIT_1 0
-# elif BOOST_PP_SLOT_TEMP_1 == 1
-# define BOOST_PP_SLOT_3_DIGIT_1 1
-# elif BOOST_PP_SLOT_TEMP_1 == 2
-# define BOOST_PP_SLOT_3_DIGIT_1 2
-# elif BOOST_PP_SLOT_TEMP_1 == 3
-# define BOOST_PP_SLOT_3_DIGIT_1 3
-# elif BOOST_PP_SLOT_TEMP_1 == 4
-# define BOOST_PP_SLOT_3_DIGIT_1 4
-# elif BOOST_PP_SLOT_TEMP_1 == 5
-# define BOOST_PP_SLOT_3_DIGIT_1 5
-# elif BOOST_PP_SLOT_TEMP_1 == 6
-# define BOOST_PP_SLOT_3_DIGIT_1 6
-# elif BOOST_PP_SLOT_TEMP_1 == 7
-# define BOOST_PP_SLOT_3_DIGIT_1 7
-# elif BOOST_PP_SLOT_TEMP_1 == 8
-# define BOOST_PP_SLOT_3_DIGIT_1 8
-# elif BOOST_PP_SLOT_TEMP_1 == 9
-# define BOOST_PP_SLOT_3_DIGIT_1 9
-# endif
-#
-# if BOOST_PP_SLOT_3_DIGIT_10
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_3_DIGIT_10, BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_9
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_8
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_7
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_6
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_5
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_4
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_3
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# elif BOOST_PP_SLOT_3_DIGIT_2
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
-# else
-# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_3_DIGIT_1
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot4.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot4.hpp
deleted file mode 100644
index 9aa4d8ab8d..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot4.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# include <boost/preprocessor/slot/detail/shared.hpp>
-#
-# undef BOOST_PP_SLOT_4
-#
-# undef BOOST_PP_SLOT_4_DIGIT_1
-# undef BOOST_PP_SLOT_4_DIGIT_2
-# undef BOOST_PP_SLOT_4_DIGIT_3
-# undef BOOST_PP_SLOT_4_DIGIT_4
-# undef BOOST_PP_SLOT_4_DIGIT_5
-# undef BOOST_PP_SLOT_4_DIGIT_6
-# undef BOOST_PP_SLOT_4_DIGIT_7
-# undef BOOST_PP_SLOT_4_DIGIT_8
-# undef BOOST_PP_SLOT_4_DIGIT_9
-# undef BOOST_PP_SLOT_4_DIGIT_10
-#
-# if BOOST_PP_SLOT_TEMP_10 == 0
-# define BOOST_PP_SLOT_4_DIGIT_10 0
-# elif BOOST_PP_SLOT_TEMP_10 == 1
-# define BOOST_PP_SLOT_4_DIGIT_10 1
-# elif BOOST_PP_SLOT_TEMP_10 == 2
-# define BOOST_PP_SLOT_4_DIGIT_10 2
-# elif BOOST_PP_SLOT_TEMP_10 == 3
-# define BOOST_PP_SLOT_4_DIGIT_10 3
-# elif BOOST_PP_SLOT_TEMP_10 == 4
-# define BOOST_PP_SLOT_4_DIGIT_10 4
-# elif BOOST_PP_SLOT_TEMP_10 == 5
-# define BOOST_PP_SLOT_4_DIGIT_10 5
-# elif BOOST_PP_SLOT_TEMP_10 == 6
-# define BOOST_PP_SLOT_4_DIGIT_10 6
-# elif BOOST_PP_SLOT_TEMP_10 == 7
-# define BOOST_PP_SLOT_4_DIGIT_10 7
-# elif BOOST_PP_SLOT_TEMP_10 == 8
-# define BOOST_PP_SLOT_4_DIGIT_10 8
-# elif BOOST_PP_SLOT_TEMP_10 == 9
-# define BOOST_PP_SLOT_4_DIGIT_10 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_9 == 0
-# define BOOST_PP_SLOT_4_DIGIT_9 0
-# elif BOOST_PP_SLOT_TEMP_9 == 1
-# define BOOST_PP_SLOT_4_DIGIT_9 1
-# elif BOOST_PP_SLOT_TEMP_9 == 2
-# define BOOST_PP_SLOT_4_DIGIT_9 2
-# elif BOOST_PP_SLOT_TEMP_9 == 3
-# define BOOST_PP_SLOT_4_DIGIT_9 3
-# elif BOOST_PP_SLOT_TEMP_9 == 4
-# define BOOST_PP_SLOT_4_DIGIT_9 4
-# elif BOOST_PP_SLOT_TEMP_9 == 5
-# define BOOST_PP_SLOT_4_DIGIT_9 5
-# elif BOOST_PP_SLOT_TEMP_9 == 6
-# define BOOST_PP_SLOT_4_DIGIT_9 6
-# elif BOOST_PP_SLOT_TEMP_9 == 7
-# define BOOST_PP_SLOT_4_DIGIT_9 7
-# elif BOOST_PP_SLOT_TEMP_9 == 8
-# define BOOST_PP_SLOT_4_DIGIT_9 8
-# elif BOOST_PP_SLOT_TEMP_9 == 9
-# define BOOST_PP_SLOT_4_DIGIT_9 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_8 == 0
-# define BOOST_PP_SLOT_4_DIGIT_8 0
-# elif BOOST_PP_SLOT_TEMP_8 == 1
-# define BOOST_PP_SLOT_4_DIGIT_8 1
-# elif BOOST_PP_SLOT_TEMP_8 == 2
-# define BOOST_PP_SLOT_4_DIGIT_8 2
-# elif BOOST_PP_SLOT_TEMP_8 == 3
-# define BOOST_PP_SLOT_4_DIGIT_8 3
-# elif BOOST_PP_SLOT_TEMP_8 == 4
-# define BOOST_PP_SLOT_4_DIGIT_8 4
-# elif BOOST_PP_SLOT_TEMP_8 == 5
-# define BOOST_PP_SLOT_4_DIGIT_8 5
-# elif BOOST_PP_SLOT_TEMP_8 == 6
-# define BOOST_PP_SLOT_4_DIGIT_8 6
-# elif BOOST_PP_SLOT_TEMP_8 == 7
-# define BOOST_PP_SLOT_4_DIGIT_8 7
-# elif BOOST_PP_SLOT_TEMP_8 == 8
-# define BOOST_PP_SLOT_4_DIGIT_8 8
-# elif BOOST_PP_SLOT_TEMP_8 == 9
-# define BOOST_PP_SLOT_4_DIGIT_8 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_7 == 0
-# define BOOST_PP_SLOT_4_DIGIT_7 0
-# elif BOOST_PP_SLOT_TEMP_7 == 1
-# define BOOST_PP_SLOT_4_DIGIT_7 1
-# elif BOOST_PP_SLOT_TEMP_7 == 2
-# define BOOST_PP_SLOT_4_DIGIT_7 2
-# elif BOOST_PP_SLOT_TEMP_7 == 3
-# define BOOST_PP_SLOT_4_DIGIT_7 3
-# elif BOOST_PP_SLOT_TEMP_7 == 4
-# define BOOST_PP_SLOT_4_DIGIT_7 4
-# elif BOOST_PP_SLOT_TEMP_7 == 5
-# define BOOST_PP_SLOT_4_DIGIT_7 5
-# elif BOOST_PP_SLOT_TEMP_7 == 6
-# define BOOST_PP_SLOT_4_DIGIT_7 6
-# elif BOOST_PP_SLOT_TEMP_7 == 7
-# define BOOST_PP_SLOT_4_DIGIT_7 7
-# elif BOOST_PP_SLOT_TEMP_7 == 8
-# define BOOST_PP_SLOT_4_DIGIT_7 8
-# elif BOOST_PP_SLOT_TEMP_7 == 9
-# define BOOST_PP_SLOT_4_DIGIT_7 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_6 == 0
-# define BOOST_PP_SLOT_4_DIGIT_6 0
-# elif BOOST_PP_SLOT_TEMP_6 == 1
-# define BOOST_PP_SLOT_4_DIGIT_6 1
-# elif BOOST_PP_SLOT_TEMP_6 == 2
-# define BOOST_PP_SLOT_4_DIGIT_6 2
-# elif BOOST_PP_SLOT_TEMP_6 == 3
-# define BOOST_PP_SLOT_4_DIGIT_6 3
-# elif BOOST_PP_SLOT_TEMP_6 == 4
-# define BOOST_PP_SLOT_4_DIGIT_6 4
-# elif BOOST_PP_SLOT_TEMP_6 == 5
-# define BOOST_PP_SLOT_4_DIGIT_6 5
-# elif BOOST_PP_SLOT_TEMP_6 == 6
-# define BOOST_PP_SLOT_4_DIGIT_6 6
-# elif BOOST_PP_SLOT_TEMP_6 == 7
-# define BOOST_PP_SLOT_4_DIGIT_6 7
-# elif BOOST_PP_SLOT_TEMP_6 == 8
-# define BOOST_PP_SLOT_4_DIGIT_6 8
-# elif BOOST_PP_SLOT_TEMP_6 == 9
-# define BOOST_PP_SLOT_4_DIGIT_6 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_5 == 0
-# define BOOST_PP_SLOT_4_DIGIT_5 0
-# elif BOOST_PP_SLOT_TEMP_5 == 1
-# define BOOST_PP_SLOT_4_DIGIT_5 1
-# elif BOOST_PP_SLOT_TEMP_5 == 2
-# define BOOST_PP_SLOT_4_DIGIT_5 2
-# elif BOOST_PP_SLOT_TEMP_5 == 3
-# define BOOST_PP_SLOT_4_DIGIT_5 3
-# elif BOOST_PP_SLOT_TEMP_5 == 4
-# define BOOST_PP_SLOT_4_DIGIT_5 4
-# elif BOOST_PP_SLOT_TEMP_5 == 5
-# define BOOST_PP_SLOT_4_DIGIT_5 5
-# elif BOOST_PP_SLOT_TEMP_5 == 6
-# define BOOST_PP_SLOT_4_DIGIT_5 6
-# elif BOOST_PP_SLOT_TEMP_5 == 7
-# define BOOST_PP_SLOT_4_DIGIT_5 7
-# elif BOOST_PP_SLOT_TEMP_5 == 8
-# define BOOST_PP_SLOT_4_DIGIT_5 8
-# elif BOOST_PP_SLOT_TEMP_5 == 9
-# define BOOST_PP_SLOT_4_DIGIT_5 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_4 == 0
-# define BOOST_PP_SLOT_4_DIGIT_4 0
-# elif BOOST_PP_SLOT_TEMP_4 == 1
-# define BOOST_PP_SLOT_4_DIGIT_4 1
-# elif BOOST_PP_SLOT_TEMP_4 == 2
-# define BOOST_PP_SLOT_4_DIGIT_4 2
-# elif BOOST_PP_SLOT_TEMP_4 == 3
-# define BOOST_PP_SLOT_4_DIGIT_4 3
-# elif BOOST_PP_SLOT_TEMP_4 == 4
-# define BOOST_PP_SLOT_4_DIGIT_4 4
-# elif BOOST_PP_SLOT_TEMP_4 == 5
-# define BOOST_PP_SLOT_4_DIGIT_4 5
-# elif BOOST_PP_SLOT_TEMP_4 == 6
-# define BOOST_PP_SLOT_4_DIGIT_4 6
-# elif BOOST_PP_SLOT_TEMP_4 == 7
-# define BOOST_PP_SLOT_4_DIGIT_4 7
-# elif BOOST_PP_SLOT_TEMP_4 == 8
-# define BOOST_PP_SLOT_4_DIGIT_4 8
-# elif BOOST_PP_SLOT_TEMP_4 == 9
-# define BOOST_PP_SLOT_4_DIGIT_4 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_3 == 0
-# define BOOST_PP_SLOT_4_DIGIT_3 0
-# elif BOOST_PP_SLOT_TEMP_3 == 1
-# define BOOST_PP_SLOT_4_DIGIT_3 1
-# elif BOOST_PP_SLOT_TEMP_3 == 2
-# define BOOST_PP_SLOT_4_DIGIT_3 2
-# elif BOOST_PP_SLOT_TEMP_3 == 3
-# define BOOST_PP_SLOT_4_DIGIT_3 3
-# elif BOOST_PP_SLOT_TEMP_3 == 4
-# define BOOST_PP_SLOT_4_DIGIT_3 4
-# elif BOOST_PP_SLOT_TEMP_3 == 5
-# define BOOST_PP_SLOT_4_DIGIT_3 5
-# elif BOOST_PP_SLOT_TEMP_3 == 6
-# define BOOST_PP_SLOT_4_DIGIT_3 6
-# elif BOOST_PP_SLOT_TEMP_3 == 7
-# define BOOST_PP_SLOT_4_DIGIT_3 7
-# elif BOOST_PP_SLOT_TEMP_3 == 8
-# define BOOST_PP_SLOT_4_DIGIT_3 8
-# elif BOOST_PP_SLOT_TEMP_3 == 9
-# define BOOST_PP_SLOT_4_DIGIT_3 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_2 == 0
-# define BOOST_PP_SLOT_4_DIGIT_2 0
-# elif BOOST_PP_SLOT_TEMP_2 == 1
-# define BOOST_PP_SLOT_4_DIGIT_2 1
-# elif BOOST_PP_SLOT_TEMP_2 == 2
-# define BOOST_PP_SLOT_4_DIGIT_2 2
-# elif BOOST_PP_SLOT_TEMP_2 == 3
-# define BOOST_PP_SLOT_4_DIGIT_2 3
-# elif BOOST_PP_SLOT_TEMP_2 == 4
-# define BOOST_PP_SLOT_4_DIGIT_2 4
-# elif BOOST_PP_SLOT_TEMP_2 == 5
-# define BOOST_PP_SLOT_4_DIGIT_2 5
-# elif BOOST_PP_SLOT_TEMP_2 == 6
-# define BOOST_PP_SLOT_4_DIGIT_2 6
-# elif BOOST_PP_SLOT_TEMP_2 == 7
-# define BOOST_PP_SLOT_4_DIGIT_2 7
-# elif BOOST_PP_SLOT_TEMP_2 == 8
-# define BOOST_PP_SLOT_4_DIGIT_2 8
-# elif BOOST_PP_SLOT_TEMP_2 == 9
-# define BOOST_PP_SLOT_4_DIGIT_2 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_1 == 0
-# define BOOST_PP_SLOT_4_DIGIT_1 0
-# elif BOOST_PP_SLOT_TEMP_1 == 1
-# define BOOST_PP_SLOT_4_DIGIT_1 1
-# elif BOOST_PP_SLOT_TEMP_1 == 2
-# define BOOST_PP_SLOT_4_DIGIT_1 2
-# elif BOOST_PP_SLOT_TEMP_1 == 3
-# define BOOST_PP_SLOT_4_DIGIT_1 3
-# elif BOOST_PP_SLOT_TEMP_1 == 4
-# define BOOST_PP_SLOT_4_DIGIT_1 4
-# elif BOOST_PP_SLOT_TEMP_1 == 5
-# define BOOST_PP_SLOT_4_DIGIT_1 5
-# elif BOOST_PP_SLOT_TEMP_1 == 6
-# define BOOST_PP_SLOT_4_DIGIT_1 6
-# elif BOOST_PP_SLOT_TEMP_1 == 7
-# define BOOST_PP_SLOT_4_DIGIT_1 7
-# elif BOOST_PP_SLOT_TEMP_1 == 8
-# define BOOST_PP_SLOT_4_DIGIT_1 8
-# elif BOOST_PP_SLOT_TEMP_1 == 9
-# define BOOST_PP_SLOT_4_DIGIT_1 9
-# endif
-#
-# if BOOST_PP_SLOT_4_DIGIT_10
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_4_DIGIT_10, BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_9
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_8
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_7
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_6
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_5
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_4
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_3
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# elif BOOST_PP_SLOT_4_DIGIT_2
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
-# else
-# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_4_DIGIT_1
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot5.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot5.hpp
deleted file mode 100644
index d17535daf4..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/slot/detail/slot5.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# include <boost/preprocessor/slot/detail/shared.hpp>
-#
-# undef BOOST_PP_SLOT_5
-#
-# undef BOOST_PP_SLOT_5_DIGIT_1
-# undef BOOST_PP_SLOT_5_DIGIT_2
-# undef BOOST_PP_SLOT_5_DIGIT_3
-# undef BOOST_PP_SLOT_5_DIGIT_4
-# undef BOOST_PP_SLOT_5_DIGIT_5
-# undef BOOST_PP_SLOT_5_DIGIT_6
-# undef BOOST_PP_SLOT_5_DIGIT_7
-# undef BOOST_PP_SLOT_5_DIGIT_8
-# undef BOOST_PP_SLOT_5_DIGIT_9
-# undef BOOST_PP_SLOT_5_DIGIT_10
-#
-# if BOOST_PP_SLOT_TEMP_10 == 0
-# define BOOST_PP_SLOT_5_DIGIT_10 0
-# elif BOOST_PP_SLOT_TEMP_10 == 1
-# define BOOST_PP_SLOT_5_DIGIT_10 1
-# elif BOOST_PP_SLOT_TEMP_10 == 2
-# define BOOST_PP_SLOT_5_DIGIT_10 2
-# elif BOOST_PP_SLOT_TEMP_10 == 3
-# define BOOST_PP_SLOT_5_DIGIT_10 3
-# elif BOOST_PP_SLOT_TEMP_10 == 4
-# define BOOST_PP_SLOT_5_DIGIT_10 4
-# elif BOOST_PP_SLOT_TEMP_10 == 5
-# define BOOST_PP_SLOT_5_DIGIT_10 5
-# elif BOOST_PP_SLOT_TEMP_10 == 6
-# define BOOST_PP_SLOT_5_DIGIT_10 6
-# elif BOOST_PP_SLOT_TEMP_10 == 7
-# define BOOST_PP_SLOT_5_DIGIT_10 7
-# elif BOOST_PP_SLOT_TEMP_10 == 8
-# define BOOST_PP_SLOT_5_DIGIT_10 8
-# elif BOOST_PP_SLOT_TEMP_10 == 9
-# define BOOST_PP_SLOT_5_DIGIT_10 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_9 == 0
-# define BOOST_PP_SLOT_5_DIGIT_9 0
-# elif BOOST_PP_SLOT_TEMP_9 == 1
-# define BOOST_PP_SLOT_5_DIGIT_9 1
-# elif BOOST_PP_SLOT_TEMP_9 == 2
-# define BOOST_PP_SLOT_5_DIGIT_9 2
-# elif BOOST_PP_SLOT_TEMP_9 == 3
-# define BOOST_PP_SLOT_5_DIGIT_9 3
-# elif BOOST_PP_SLOT_TEMP_9 == 4
-# define BOOST_PP_SLOT_5_DIGIT_9 4
-# elif BOOST_PP_SLOT_TEMP_9 == 5
-# define BOOST_PP_SLOT_5_DIGIT_9 5
-# elif BOOST_PP_SLOT_TEMP_9 == 6
-# define BOOST_PP_SLOT_5_DIGIT_9 6
-# elif BOOST_PP_SLOT_TEMP_9 == 7
-# define BOOST_PP_SLOT_5_DIGIT_9 7
-# elif BOOST_PP_SLOT_TEMP_9 == 8
-# define BOOST_PP_SLOT_5_DIGIT_9 8
-# elif BOOST_PP_SLOT_TEMP_9 == 9
-# define BOOST_PP_SLOT_5_DIGIT_9 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_8 == 0
-# define BOOST_PP_SLOT_5_DIGIT_8 0
-# elif BOOST_PP_SLOT_TEMP_8 == 1
-# define BOOST_PP_SLOT_5_DIGIT_8 1
-# elif BOOST_PP_SLOT_TEMP_8 == 2
-# define BOOST_PP_SLOT_5_DIGIT_8 2
-# elif BOOST_PP_SLOT_TEMP_8 == 3
-# define BOOST_PP_SLOT_5_DIGIT_8 3
-# elif BOOST_PP_SLOT_TEMP_8 == 4
-# define BOOST_PP_SLOT_5_DIGIT_8 4
-# elif BOOST_PP_SLOT_TEMP_8 == 5
-# define BOOST_PP_SLOT_5_DIGIT_8 5
-# elif BOOST_PP_SLOT_TEMP_8 == 6
-# define BOOST_PP_SLOT_5_DIGIT_8 6
-# elif BOOST_PP_SLOT_TEMP_8 == 7
-# define BOOST_PP_SLOT_5_DIGIT_8 7
-# elif BOOST_PP_SLOT_TEMP_8 == 8
-# define BOOST_PP_SLOT_5_DIGIT_8 8
-# elif BOOST_PP_SLOT_TEMP_8 == 9
-# define BOOST_PP_SLOT_5_DIGIT_8 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_7 == 0
-# define BOOST_PP_SLOT_5_DIGIT_7 0
-# elif BOOST_PP_SLOT_TEMP_7 == 1
-# define BOOST_PP_SLOT_5_DIGIT_7 1
-# elif BOOST_PP_SLOT_TEMP_7 == 2
-# define BOOST_PP_SLOT_5_DIGIT_7 2
-# elif BOOST_PP_SLOT_TEMP_7 == 3
-# define BOOST_PP_SLOT_5_DIGIT_7 3
-# elif BOOST_PP_SLOT_TEMP_7 == 4
-# define BOOST_PP_SLOT_5_DIGIT_7 4
-# elif BOOST_PP_SLOT_TEMP_7 == 5
-# define BOOST_PP_SLOT_5_DIGIT_7 5
-# elif BOOST_PP_SLOT_TEMP_7 == 6
-# define BOOST_PP_SLOT_5_DIGIT_7 6
-# elif BOOST_PP_SLOT_TEMP_7 == 7
-# define BOOST_PP_SLOT_5_DIGIT_7 7
-# elif BOOST_PP_SLOT_TEMP_7 == 8
-# define BOOST_PP_SLOT_5_DIGIT_7 8
-# elif BOOST_PP_SLOT_TEMP_7 == 9
-# define BOOST_PP_SLOT_5_DIGIT_7 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_6 == 0
-# define BOOST_PP_SLOT_5_DIGIT_6 0
-# elif BOOST_PP_SLOT_TEMP_6 == 1
-# define BOOST_PP_SLOT_5_DIGIT_6 1
-# elif BOOST_PP_SLOT_TEMP_6 == 2
-# define BOOST_PP_SLOT_5_DIGIT_6 2
-# elif BOOST_PP_SLOT_TEMP_6 == 3
-# define BOOST_PP_SLOT_5_DIGIT_6 3
-# elif BOOST_PP_SLOT_TEMP_6 == 4
-# define BOOST_PP_SLOT_5_DIGIT_6 4
-# elif BOOST_PP_SLOT_TEMP_6 == 5
-# define BOOST_PP_SLOT_5_DIGIT_6 5
-# elif BOOST_PP_SLOT_TEMP_6 == 6
-# define BOOST_PP_SLOT_5_DIGIT_6 6
-# elif BOOST_PP_SLOT_TEMP_6 == 7
-# define BOOST_PP_SLOT_5_DIGIT_6 7
-# elif BOOST_PP_SLOT_TEMP_6 == 8
-# define BOOST_PP_SLOT_5_DIGIT_6 8
-# elif BOOST_PP_SLOT_TEMP_6 == 9
-# define BOOST_PP_SLOT_5_DIGIT_6 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_5 == 0
-# define BOOST_PP_SLOT_5_DIGIT_5 0
-# elif BOOST_PP_SLOT_TEMP_5 == 1
-# define BOOST_PP_SLOT_5_DIGIT_5 1
-# elif BOOST_PP_SLOT_TEMP_5 == 2
-# define BOOST_PP_SLOT_5_DIGIT_5 2
-# elif BOOST_PP_SLOT_TEMP_5 == 3
-# define BOOST_PP_SLOT_5_DIGIT_5 3
-# elif BOOST_PP_SLOT_TEMP_5 == 4
-# define BOOST_PP_SLOT_5_DIGIT_5 4
-# elif BOOST_PP_SLOT_TEMP_5 == 5
-# define BOOST_PP_SLOT_5_DIGIT_5 5
-# elif BOOST_PP_SLOT_TEMP_5 == 6
-# define BOOST_PP_SLOT_5_DIGIT_5 6
-# elif BOOST_PP_SLOT_TEMP_5 == 7
-# define BOOST_PP_SLOT_5_DIGIT_5 7
-# elif BOOST_PP_SLOT_TEMP_5 == 8
-# define BOOST_PP_SLOT_5_DIGIT_5 8
-# elif BOOST_PP_SLOT_TEMP_5 == 9
-# define BOOST_PP_SLOT_5_DIGIT_5 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_4 == 0
-# define BOOST_PP_SLOT_5_DIGIT_4 0
-# elif BOOST_PP_SLOT_TEMP_4 == 1
-# define BOOST_PP_SLOT_5_DIGIT_4 1
-# elif BOOST_PP_SLOT_TEMP_4 == 2
-# define BOOST_PP_SLOT_5_DIGIT_4 2
-# elif BOOST_PP_SLOT_TEMP_4 == 3
-# define BOOST_PP_SLOT_5_DIGIT_4 3
-# elif BOOST_PP_SLOT_TEMP_4 == 4
-# define BOOST_PP_SLOT_5_DIGIT_4 4
-# elif BOOST_PP_SLOT_TEMP_4 == 5
-# define BOOST_PP_SLOT_5_DIGIT_4 5
-# elif BOOST_PP_SLOT_TEMP_4 == 6
-# define BOOST_PP_SLOT_5_DIGIT_4 6
-# elif BOOST_PP_SLOT_TEMP_4 == 7
-# define BOOST_PP_SLOT_5_DIGIT_4 7
-# elif BOOST_PP_SLOT_TEMP_4 == 8
-# define BOOST_PP_SLOT_5_DIGIT_4 8
-# elif BOOST_PP_SLOT_TEMP_4 == 9
-# define BOOST_PP_SLOT_5_DIGIT_4 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_3 == 0
-# define BOOST_PP_SLOT_5_DIGIT_3 0
-# elif BOOST_PP_SLOT_TEMP_3 == 1
-# define BOOST_PP_SLOT_5_DIGIT_3 1
-# elif BOOST_PP_SLOT_TEMP_3 == 2
-# define BOOST_PP_SLOT_5_DIGIT_3 2
-# elif BOOST_PP_SLOT_TEMP_3 == 3
-# define BOOST_PP_SLOT_5_DIGIT_3 3
-# elif BOOST_PP_SLOT_TEMP_3 == 4
-# define BOOST_PP_SLOT_5_DIGIT_3 4
-# elif BOOST_PP_SLOT_TEMP_3 == 5
-# define BOOST_PP_SLOT_5_DIGIT_3 5
-# elif BOOST_PP_SLOT_TEMP_3 == 6
-# define BOOST_PP_SLOT_5_DIGIT_3 6
-# elif BOOST_PP_SLOT_TEMP_3 == 7
-# define BOOST_PP_SLOT_5_DIGIT_3 7
-# elif BOOST_PP_SLOT_TEMP_3 == 8
-# define BOOST_PP_SLOT_5_DIGIT_3 8
-# elif BOOST_PP_SLOT_TEMP_3 == 9
-# define BOOST_PP_SLOT_5_DIGIT_3 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_2 == 0
-# define BOOST_PP_SLOT_5_DIGIT_2 0
-# elif BOOST_PP_SLOT_TEMP_2 == 1
-# define BOOST_PP_SLOT_5_DIGIT_2 1
-# elif BOOST_PP_SLOT_TEMP_2 == 2
-# define BOOST_PP_SLOT_5_DIGIT_2 2
-# elif BOOST_PP_SLOT_TEMP_2 == 3
-# define BOOST_PP_SLOT_5_DIGIT_2 3
-# elif BOOST_PP_SLOT_TEMP_2 == 4
-# define BOOST_PP_SLOT_5_DIGIT_2 4
-# elif BOOST_PP_SLOT_TEMP_2 == 5
-# define BOOST_PP_SLOT_5_DIGIT_2 5
-# elif BOOST_PP_SLOT_TEMP_2 == 6
-# define BOOST_PP_SLOT_5_DIGIT_2 6
-# elif BOOST_PP_SLOT_TEMP_2 == 7
-# define BOOST_PP_SLOT_5_DIGIT_2 7
-# elif BOOST_PP_SLOT_TEMP_2 == 8
-# define BOOST_PP_SLOT_5_DIGIT_2 8
-# elif BOOST_PP_SLOT_TEMP_2 == 9
-# define BOOST_PP_SLOT_5_DIGIT_2 9
-# endif
-#
-# if BOOST_PP_SLOT_TEMP_1 == 0
-# define BOOST_PP_SLOT_5_DIGIT_1 0
-# elif BOOST_PP_SLOT_TEMP_1 == 1
-# define BOOST_PP_SLOT_5_DIGIT_1 1
-# elif BOOST_PP_SLOT_TEMP_1 == 2
-# define BOOST_PP_SLOT_5_DIGIT_1 2
-# elif BOOST_PP_SLOT_TEMP_1 == 3
-# define BOOST_PP_SLOT_5_DIGIT_1 3
-# elif BOOST_PP_SLOT_TEMP_1 == 4
-# define BOOST_PP_SLOT_5_DIGIT_1 4
-# elif BOOST_PP_SLOT_TEMP_1 == 5
-# define BOOST_PP_SLOT_5_DIGIT_1 5
-# elif BOOST_PP_SLOT_TEMP_1 == 6
-# define BOOST_PP_SLOT_5_DIGIT_1 6
-# elif BOOST_PP_SLOT_TEMP_1 == 7
-# define BOOST_PP_SLOT_5_DIGIT_1 7
-# elif BOOST_PP_SLOT_TEMP_1 == 8
-# define BOOST_PP_SLOT_5_DIGIT_1 8
-# elif BOOST_PP_SLOT_TEMP_1 == 9
-# define BOOST_PP_SLOT_5_DIGIT_1 9
-# endif
-#
-# if BOOST_PP_SLOT_5_DIGIT_10
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_5_DIGIT_10, BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_9
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_8
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_7
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_6
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_5
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_4
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_3
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# elif BOOST_PP_SLOT_5_DIGIT_2
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
-# else
-# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_5_DIGIT_1
-# endif
diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/while.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/while.hpp
deleted file mode 100644
index 4b9c801ac0..0000000000
--- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/while.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-# /* **************************************************************************
-# * *
-# * (C) Copyright Paul Mensonides 2002.
-# * 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)
-# * *
-# ************************************************************************** */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_WHILE_HPP
-# define BOOST_PREPROCESSOR_WHILE_HPP
-#
-# include <boost/preprocessor/control/while.hpp>
-#
-# endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex.h b/contrib/restricted/boost/regex/include/boost/regex.h
deleted file mode 100644
index 52af275cfa..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- *
- * Copyright (c) 1998-2000
- * Dr John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org/libs/regex for documentation.
- * FILE regex.h
- * VERSION 3.12
- * DESCRIPTION: Declares POSIX API functions
- */
-
-#ifndef BOOST_RE_REGEX_H
-#define BOOST_RE_REGEX_H
-
-#include <boost/cregex.hpp>
-
-/*
-* add using declarations to bring POSIX API functions into
-* global scope, only if this is C++ (and not C).
-*/
-#ifdef __cplusplus
-
-using boost::regoff_t;
-using boost::regex_tA;
-using boost::regmatch_t;
-using boost::REG_BASIC;
-using boost::REG_EXTENDED;
-using boost::REG_ICASE;
-using boost::REG_NOSUB;
-using boost::REG_NEWLINE;
-using boost::REG_NOSPEC;
-using boost::REG_PEND;
-using boost::REG_DUMP;
-using boost::REG_NOCOLLATE;
-using boost::REG_ESCAPE_IN_LISTS;
-using boost::REG_NEWLINE_ALT;
-using boost::REG_PERL;
-using boost::REG_AWK;
-using boost::REG_GREP;
-using boost::REG_EGREP;
-using boost::REG_ASSERT;
-using boost::REG_INVARG;
-using boost::REG_ATOI;
-using boost::REG_ITOA;
-
-using boost::REG_NOTBOL;
-using boost::REG_NOTEOL;
-using boost::REG_STARTEND;
-
-using boost::reg_comp_flags;
-using boost::reg_exec_flags;
-using boost::regcompA;
-using boost::regerrorA;
-using boost::regexecA;
-using boost::regfreeA;
-
-#ifndef BOOST_NO_WREGEX
-using boost::regcompW;
-using boost::regerrorW;
-using boost::regexecW;
-using boost::regfreeW;
-using boost::regex_tW;
-#endif
-
-using boost::REG_NOERROR;
-using boost::REG_NOMATCH;
-using boost::REG_BADPAT;
-using boost::REG_ECOLLATE;
-using boost::REG_ECTYPE;
-using boost::REG_EESCAPE;
-using boost::REG_ESUBREG;
-using boost::REG_EBRACK;
-using boost::REG_EPAREN;
-using boost::REG_EBRACE;
-using boost::REG_BADBR;
-using boost::REG_ERANGE;
-using boost::REG_ESPACE;
-using boost::REG_BADRPT;
-using boost::REG_EEND;
-using boost::REG_ESIZE;
-using boost::REG_ERPAREN;
-using boost::REG_EMPTY;
-using boost::REG_E_MEMORY;
-using boost::REG_E_UNKNOWN;
-using boost::reg_errcode_t;
-
-#endif /* __cplusplus */
-
-#endif /* BOOST_RE_REGEX_H */
-
-
-
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp b/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp
deleted file mode 100644
index 2eafac1b57..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp
+++ /dev/null
@@ -1,1134 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE concepts.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Declares regular expression concepts.
- */
-
-#ifndef BOOST_REGEX_CONCEPTS_HPP_INCLUDED
-#define BOOST_REGEX_CONCEPTS_HPP_INCLUDED
-
-#include <boost/concept_archetype.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/type_traits/is_enum.hpp>
-#include <boost/type_traits/is_base_and_derived.hpp>
-#include <boost/static_assert.hpp>
-#ifndef BOOST_TEST_TR1_REGEX
-#include <boost/regex.hpp>
-#endif
-#include <bitset>
-#include <vector>
-#include <ostream>
-
-#ifdef BOOST_REGEX_CXX03
-#define RW_NS boost
-#else
-#define RW_NS std
-#endif
-
-namespace boost{
-
-//
-// bitmask_archetype:
-// this can be either an integer type, an enum, or a std::bitset,
-// we use the latter as the architype as it offers the "strictest"
-// of the possible interfaces:
-//
-typedef std::bitset<512> bitmask_archetype;
-//
-// char_architype:
-// A strict model for the character type interface.
-//
-struct char_architype
-{
- // default constructable:
- char_architype();
- // copy constructable / assignable:
- char_architype(const char_architype&);
- char_architype& operator=(const char_architype&);
- // constructable from an integral value:
- char_architype(unsigned long val);
- // comparable:
- bool operator==(const char_architype&)const;
- bool operator!=(const char_architype&)const;
- bool operator<(const char_architype&)const;
- bool operator<=(const char_architype&)const;
- bool operator>=(const char_architype&)const;
- bool operator>(const char_architype&)const;
- // conversion to integral type:
- operator long()const;
-};
-inline long hash_value(char_architype val)
-{ return val; }
-//
-// char_architype can not be used with basic_string:
-//
-} // namespace boost
-namespace std{
- template<> struct char_traits<boost::char_architype>
- {
- // The intent is that this template is not instantiated,
- // but this typedef gives us a chance of compilation in
- // case it is:
- typedef boost::char_architype char_type;
- };
-}
-//
-// Allocator architype:
-//
-template <class T>
-class allocator_architype
-{
-public:
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef T& reference;
- typedef const T& const_reference;
- typedef T value_type;
- typedef unsigned size_type;
- typedef int difference_type;
-
- template <class U>
- struct rebind
- {
- typedef allocator_architype<U> other;
- };
-
- pointer address(reference r){ return &r; }
- const_pointer address(const_reference r) { return &r; }
- pointer allocate(size_type n) { return static_cast<pointer>(std::malloc(n)); }
- pointer allocate(size_type n, pointer) { return static_cast<pointer>(std::malloc(n)); }
- void deallocate(pointer p, size_type) { std::free(p); }
- size_type max_size()const { return UINT_MAX; }
-
- allocator_architype(){}
- allocator_architype(const allocator_architype&){}
-
- template <class Other>
- allocator_architype(const allocator_architype<Other>&){}
-
- void construct(pointer p, const_reference r) { new (p)T(r); }
- void destroy(pointer p) { p->~T(); }
-};
-
-template <class T>
-bool operator == (const allocator_architype<T>&, const allocator_architype<T>&) {return true; }
-template <class T>
-bool operator != (const allocator_architype<T>&, const allocator_architype<T>&) { return false; }
-
-namespace boost{
-//
-// regex_traits_architype:
-// A strict interpretation of the regular expression traits class requirements.
-//
-template <class charT>
-struct regex_traits_architype
-{
-public:
- regex_traits_architype(){}
- typedef charT char_type;
- // typedef std::size_t size_type;
- typedef std::vector<char_type> string_type;
- typedef copy_constructible_archetype<assignable_archetype<> > locale_type;
- typedef bitmask_archetype char_class_type;
-
- static std::size_t length(const char_type* ) { return 0; }
-
- charT translate(charT ) const { return charT(); }
- charT translate_nocase(charT ) const { return static_object<charT>::get(); }
-
- template <class ForwardIterator>
- string_type transform(ForwardIterator , ForwardIterator ) const
- { return static_object<string_type>::get(); }
- template <class ForwardIterator>
- string_type transform_primary(ForwardIterator , ForwardIterator ) const
- { return static_object<string_type>::get(); }
-
- template <class ForwardIterator>
- char_class_type lookup_classname(ForwardIterator , ForwardIterator ) const
- { return static_object<char_class_type>::get(); }
- template <class ForwardIterator>
- string_type lookup_collatename(ForwardIterator , ForwardIterator ) const
- { return static_object<string_type>::get(); }
-
- bool isctype(charT, char_class_type) const
- { return false; }
- int value(charT, int) const
- { return 0; }
-
- locale_type imbue(locale_type l)
- { return l; }
- locale_type getloc()const
- { return static_object<locale_type>::get(); }
-
-private:
- // this type is not copyable:
- regex_traits_architype(const regex_traits_architype&){}
- regex_traits_architype& operator=(const regex_traits_architype&){ return *this; }
-};
-
-//
-// alter this to std::tr1, to test a std implementation:
-//
-#ifndef BOOST_TEST_TR1_REGEX
-namespace global_regex_namespace = ::boost;
-#else
-namespace global_regex_namespace = ::std::tr1;
-#endif
-
-template <class Bitmask>
-struct BitmaskConcept
-{
- void constraints()
- {
- function_requires<CopyConstructibleConcept<Bitmask> >();
- function_requires<AssignableConcept<Bitmask> >();
-
- m_mask1 = m_mask2 | m_mask3;
- m_mask1 = m_mask2 & m_mask3;
- m_mask1 = m_mask2 ^ m_mask3;
-
- m_mask1 = ~m_mask2;
-
- m_mask1 |= m_mask2;
- m_mask1 &= m_mask2;
- m_mask1 ^= m_mask2;
- }
- Bitmask m_mask1, m_mask2, m_mask3;
-};
-
-template <class traits>
-struct RegexTraitsConcept
-{
- RegexTraitsConcept();
- // required typedefs:
- typedef typename traits::char_type char_type;
- // typedef typename traits::size_type size_type;
- typedef typename traits::string_type string_type;
- typedef typename traits::locale_type locale_type;
- typedef typename traits::char_class_type char_class_type;
-
- void constraints()
- {
- //function_requires<UnsignedIntegerConcept<size_type> >();
- function_requires<RandomAccessContainerConcept<string_type> >();
- function_requires<DefaultConstructibleConcept<locale_type> >();
- function_requires<CopyConstructibleConcept<locale_type> >();
- function_requires<AssignableConcept<locale_type> >();
- function_requires<BitmaskConcept<char_class_type> >();
-
- std::size_t n = traits::length(m_pointer);
- ignore_unused_variable_warning(n);
-
- char_type c = m_ctraits.translate(m_char);
- ignore_unused_variable_warning(c);
- c = m_ctraits.translate_nocase(m_char);
-
- //string_type::foobar bar;
- string_type s1 = m_ctraits.transform(m_pointer, m_pointer);
- ignore_unused_variable_warning(s1);
-
- string_type s2 = m_ctraits.transform_primary(m_pointer, m_pointer);
- ignore_unused_variable_warning(s2);
-
- char_class_type cc = m_ctraits.lookup_classname(m_pointer, m_pointer);
- ignore_unused_variable_warning(cc);
-
- string_type s3 = m_ctraits.lookup_collatename(m_pointer, m_pointer);
- ignore_unused_variable_warning(s3);
-
- bool b = m_ctraits.isctype(m_char, cc);
- ignore_unused_variable_warning(b);
-
- int v = m_ctraits.value(m_char, 16);
- ignore_unused_variable_warning(v);
-
- locale_type l(m_ctraits.getloc());
- m_traits.imbue(l);
- ignore_unused_variable_warning(l);
- }
- traits m_traits;
- const traits m_ctraits;
- const char_type* m_pointer;
- char_type m_char;
-private:
- RegexTraitsConcept& operator=(RegexTraitsConcept&);
-};
-
-//
-// helper class to compute what traits class a regular expression type is using:
-//
-template <class Regex>
-struct regex_traits_computer;
-
-template <class charT, class traits>
-struct regex_traits_computer< global_regex_namespace::basic_regex<charT, traits> >
-{
- typedef traits type;
-};
-
-//
-// BaseRegexConcept does not test anything dependent on basic_string,
-// in case our charT does not have an associated char_traits:
-//
-template <class Regex>
-struct BaseRegexConcept
-{
- typedef typename Regex::value_type value_type;
- //typedef typename Regex::size_type size_type;
- typedef typename Regex::flag_type flag_type;
- typedef typename Regex::locale_type locale_type;
- typedef input_iterator_archetype<value_type> input_iterator_type;
-
- // derived test types:
- typedef const value_type* pointer_type;
- typedef bidirectional_iterator_archetype<value_type> BidiIterator;
- typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
- typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type;
- typedef global_regex_namespace::match_results<BidiIterator> match_results_default_type;
- typedef output_iterator_archetype<value_type> OutIterator;
- typedef typename regex_traits_computer<Regex>::type traits_type;
- typedef global_regex_namespace::regex_iterator<BidiIterator, value_type, traits_type> regex_iterator_type;
- typedef global_regex_namespace::regex_token_iterator<BidiIterator, value_type, traits_type> regex_token_iterator_type;
-
- void global_constraints()
- {
- //
- // test non-template components:
- //
- function_requires<BitmaskConcept<global_regex_namespace::regex_constants::syntax_option_type> >();
- global_regex_namespace::regex_constants::syntax_option_type opts
- = global_regex_namespace::regex_constants::icase
- | global_regex_namespace::regex_constants::nosubs
- | global_regex_namespace::regex_constants::optimize
- | global_regex_namespace::regex_constants::collate
- | global_regex_namespace::regex_constants::ECMAScript
- | global_regex_namespace::regex_constants::basic
- | global_regex_namespace::regex_constants::extended
- | global_regex_namespace::regex_constants::awk
- | global_regex_namespace::regex_constants::grep
- | global_regex_namespace::regex_constants::egrep;
- ignore_unused_variable_warning(opts);
-
- function_requires<BitmaskConcept<global_regex_namespace::regex_constants::match_flag_type> >();
- global_regex_namespace::regex_constants::match_flag_type mopts
- = global_regex_namespace::regex_constants::match_default
- | global_regex_namespace::regex_constants::match_not_bol
- | global_regex_namespace::regex_constants::match_not_eol
- | global_regex_namespace::regex_constants::match_not_bow
- | global_regex_namespace::regex_constants::match_not_eow
- | global_regex_namespace::regex_constants::match_any
- | global_regex_namespace::regex_constants::match_not_null
- | global_regex_namespace::regex_constants::match_continuous
- | global_regex_namespace::regex_constants::match_prev_avail
- | global_regex_namespace::regex_constants::format_default
- | global_regex_namespace::regex_constants::format_sed
- | global_regex_namespace::regex_constants::format_no_copy
- | global_regex_namespace::regex_constants::format_first_only;
- ignore_unused_variable_warning(mopts);
-
- BOOST_STATIC_ASSERT((::boost::is_enum<global_regex_namespace::regex_constants::error_type>::value));
- global_regex_namespace::regex_constants::error_type e1 = global_regex_namespace::regex_constants::error_collate;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_ctype;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_escape;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_backref;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_brack;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_paren;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_brace;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_badbrace;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_range;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_space;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_badrepeat;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_complexity;
- ignore_unused_variable_warning(e1);
- e1 = global_regex_namespace::regex_constants::error_stack;
- ignore_unused_variable_warning(e1);
-
- BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::runtime_error, global_regex_namespace::regex_error>::value ));
- const global_regex_namespace::regex_error except(e1);
- e1 = except.code();
-
- typedef typename Regex::value_type regex_value_type;
- function_requires< RegexTraitsConcept<global_regex_namespace::regex_traits<char> > >();
- function_requires< BaseRegexConcept<global_regex_namespace::basic_regex<char> > >();
- }
- void constraints()
- {
- global_constraints();
-
- BOOST_STATIC_ASSERT((::boost::is_same< flag_type, global_regex_namespace::regex_constants::syntax_option_type>::value));
- flag_type opts
- = Regex::icase
- | Regex::nosubs
- | Regex::optimize
- | Regex::collate
- | Regex::ECMAScript
- | Regex::basic
- | Regex::extended
- | Regex::awk
- | Regex::grep
- | Regex::egrep;
- ignore_unused_variable_warning(opts);
-
- function_requires<DefaultConstructibleConcept<Regex> >();
- function_requires<CopyConstructibleConcept<Regex> >();
-
- // Regex constructors:
- Regex e1(m_pointer);
- ignore_unused_variable_warning(e1);
- Regex e2(m_pointer, m_flags);
- ignore_unused_variable_warning(e2);
- Regex e3(m_pointer, m_size, m_flags);
- ignore_unused_variable_warning(e3);
- Regex e4(in1, in2);
- ignore_unused_variable_warning(e4);
- Regex e5(in1, in2, m_flags);
- ignore_unused_variable_warning(e5);
-
- // assign etc:
- Regex e;
- e = m_pointer;
- e = e1;
- e.assign(e1);
- e.assign(m_pointer);
- e.assign(m_pointer, m_flags);
- e.assign(m_pointer, m_size, m_flags);
- e.assign(in1, in2);
- e.assign(in1, in2, m_flags);
-
- // access:
- const Regex ce;
- typename Regex::size_type i = ce.mark_count();
- ignore_unused_variable_warning(i);
- m_flags = ce.flags();
- e.imbue(ce.getloc());
- e.swap(e1);
-
- global_regex_namespace::swap(e, e1);
-
- // sub_match:
- BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::pair<BidiIterator, BidiIterator>, sub_match_type>::value));
- typedef typename sub_match_type::value_type sub_value_type;
- typedef typename sub_match_type::difference_type sub_diff_type;
- typedef typename sub_match_type::iterator sub_iter_type;
- BOOST_STATIC_ASSERT((::boost::is_same<sub_value_type, value_type>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<sub_iter_type, BidiIterator>::value));
- bool b = m_sub.matched;
- ignore_unused_variable_warning(b);
- BidiIterator bi = m_sub.first;
- ignore_unused_variable_warning(bi);
- bi = m_sub.second;
- ignore_unused_variable_warning(bi);
- sub_diff_type diff = m_sub.length();
- ignore_unused_variable_warning(diff);
- // match_results tests - some typedefs are not used, however these
- // guarante that they exist (some compilers may warn on non-usage)
- typedef typename match_results_type::value_type mr_value_type;
- typedef typename match_results_type::const_reference mr_const_reference;
- typedef typename match_results_type::reference mr_reference;
- typedef typename match_results_type::const_iterator mr_const_iterator;
- typedef typename match_results_type::iterator mr_iterator;
- typedef typename match_results_type::difference_type mr_difference_type;
- typedef typename match_results_type::size_type mr_size_type;
- typedef typename match_results_type::allocator_type mr_allocator_type;
- typedef typename match_results_type::char_type mr_char_type;
- typedef typename match_results_type::string_type mr_string_type;
-
- match_results_type m1;
- mr_allocator_type at;
- match_results_type m2(at);
- match_results_type m3(m1);
- m1 = m2;
-
- int ival = 0;
-
- mr_size_type mrs = m_cresults.size();
- ignore_unused_variable_warning(mrs);
- mrs = m_cresults.max_size();
- ignore_unused_variable_warning(mrs);
- b = m_cresults.empty();
- ignore_unused_variable_warning(b);
- mr_difference_type mrd = m_cresults.length();
- ignore_unused_variable_warning(mrd);
- mrd = m_cresults.length(ival);
- ignore_unused_variable_warning(mrd);
- mrd = m_cresults.position();
- ignore_unused_variable_warning(mrd);
- mrd = m_cresults.position(mrs);
- ignore_unused_variable_warning(mrd);
-
- mr_const_reference mrcr = m_cresults[ival];
- ignore_unused_variable_warning(mrcr);
- mr_const_reference mrcr2 = m_cresults.prefix();
- ignore_unused_variable_warning(mrcr2);
- mr_const_reference mrcr3 = m_cresults.suffix();
- ignore_unused_variable_warning(mrcr3);
- mr_const_iterator mrci = m_cresults.begin();
- ignore_unused_variable_warning(mrci);
- mrci = m_cresults.end();
- ignore_unused_variable_warning(mrci);
-
- (void) m_cresults.get_allocator();
- m_results.swap(m_results);
- global_regex_namespace::swap(m_results, m_results);
-
- // regex_match:
- b = global_regex_namespace::regex_match(m_in, m_in, m_results, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_in, m_in, m_results, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_in, m_in, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_in, m_in, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_pointer, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_pointer, e, m_mft);
- ignore_unused_variable_warning(b);
- // regex_search:
- b = global_regex_namespace::regex_search(m_in, m_in, m_results, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_in, m_in, m_results, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_in, m_in, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_in, m_in, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_pointer, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_pointer, e, m_mft);
- ignore_unused_variable_warning(b);
-
- // regex_iterator:
- typedef typename regex_iterator_type::regex_type rit_regex_type;
- typedef typename regex_iterator_type::value_type rit_value_type;
- typedef typename regex_iterator_type::difference_type rit_difference_type;
- typedef typename regex_iterator_type::pointer rit_pointer;
- typedef typename regex_iterator_type::reference rit_reference;
- typedef typename regex_iterator_type::iterator_category rit_iterator_category;
- BOOST_STATIC_ASSERT((::boost::is_same<rit_regex_type, Regex>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rit_value_type, match_results_default_type>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rit_difference_type, std::ptrdiff_t>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rit_pointer, const match_results_default_type*>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rit_reference, const match_results_default_type&>::value));
- BOOST_STATIC_ASSERT((::boost::is_convertible<rit_iterator_category*, std::forward_iterator_tag*>::value));
- // this takes care of most of the checks needed:
- function_requires<ForwardIteratorConcept<regex_iterator_type> >();
- regex_iterator_type iter1(m_in, m_in, e);
- ignore_unused_variable_warning(iter1);
- regex_iterator_type iter2(m_in, m_in, e, m_mft);
- ignore_unused_variable_warning(iter2);
-
- // regex_token_iterator:
- typedef typename regex_token_iterator_type::regex_type rtit_regex_type;
- typedef typename regex_token_iterator_type::value_type rtit_value_type;
- typedef typename regex_token_iterator_type::difference_type rtit_difference_type;
- typedef typename regex_token_iterator_type::pointer rtit_pointer;
- typedef typename regex_token_iterator_type::reference rtit_reference;
- typedef typename regex_token_iterator_type::iterator_category rtit_iterator_category;
- BOOST_STATIC_ASSERT((::boost::is_same<rtit_regex_type, Regex>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rtit_value_type, sub_match_type>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rtit_difference_type, std::ptrdiff_t>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rtit_pointer, const sub_match_type*>::value));
- BOOST_STATIC_ASSERT((::boost::is_same<rtit_reference, const sub_match_type&>::value));
- BOOST_STATIC_ASSERT((::boost::is_convertible<rtit_iterator_category*, std::forward_iterator_tag*>::value));
- // this takes care of most of the checks needed:
- function_requires<ForwardIteratorConcept<regex_token_iterator_type> >();
- regex_token_iterator_type ti1(m_in, m_in, e);
- ignore_unused_variable_warning(ti1);
- regex_token_iterator_type ti2(m_in, m_in, e, 0);
- ignore_unused_variable_warning(ti2);
- regex_token_iterator_type ti3(m_in, m_in, e, 0, m_mft);
- ignore_unused_variable_warning(ti3);
- std::vector<int> subs;
- regex_token_iterator_type ti4(m_in, m_in, e, subs);
- ignore_unused_variable_warning(ti4);
- regex_token_iterator_type ti5(m_in, m_in, e, subs, m_mft);
- ignore_unused_variable_warning(ti5);
- static const int i_array[3] = { 1, 2, 3, };
- regex_token_iterator_type ti6(m_in, m_in, e, i_array);
- ignore_unused_variable_warning(ti6);
- regex_token_iterator_type ti7(m_in, m_in, e, i_array, m_mft);
- ignore_unused_variable_warning(ti7);
- }
-
- pointer_type m_pointer;
- flag_type m_flags;
- std::size_t m_size;
- input_iterator_type in1, in2;
- const sub_match_type m_sub;
- const value_type m_char;
- match_results_type m_results;
- const match_results_type m_cresults;
- OutIterator m_out;
- BidiIterator m_in;
- global_regex_namespace::regex_constants::match_flag_type m_mft;
- global_regex_namespace::match_results<
- pointer_type,
- allocator_architype<global_regex_namespace::sub_match<pointer_type> > >
- m_pmatch;
-
- BaseRegexConcept();
- BaseRegexConcept(const BaseRegexConcept&);
- BaseRegexConcept& operator=(const BaseRegexConcept&);
-};
-
-//
-// RegexConcept:
-// Test every interface in the std:
-//
-template <class Regex>
-struct RegexConcept
-{
- typedef typename Regex::value_type value_type;
- //typedef typename Regex::size_type size_type;
- typedef typename Regex::flag_type flag_type;
- typedef typename Regex::locale_type locale_type;
-
- // derived test types:
- typedef const value_type* pointer_type;
- typedef std::basic_string<value_type> string_type;
- typedef boost::bidirectional_iterator_archetype<value_type> BidiIterator;
- typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
- typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type;
- typedef output_iterator_archetype<value_type> OutIterator;
-
-
- void constraints()
- {
- function_requires<BaseRegexConcept<Regex> >();
- // string based construct:
- Regex e1(m_string);
- ignore_unused_variable_warning(e1);
- Regex e2(m_string, m_flags);
- ignore_unused_variable_warning(e2);
-
- // assign etc:
- Regex e;
- e = m_string;
- e.assign(m_string);
- e.assign(m_string, m_flags);
-
- // sub_match:
- string_type s(m_sub);
- ignore_unused_variable_warning(s);
- s = m_sub.str();
- ignore_unused_variable_warning(s);
- int i = m_sub.compare(m_string);
- ignore_unused_variable_warning(i);
-
- int i2 = m_sub.compare(m_sub);
- ignore_unused_variable_warning(i2);
- i2 = m_sub.compare(m_pointer);
- ignore_unused_variable_warning(i2);
-
- bool b = m_sub == m_sub;
- ignore_unused_variable_warning(b);
- b = m_sub != m_sub;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_sub > m_sub;
- ignore_unused_variable_warning(b);
- b = m_sub >= m_sub;
- ignore_unused_variable_warning(b);
-
- b = m_sub == m_pointer;
- ignore_unused_variable_warning(b);
- b = m_sub != m_pointer;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_pointer;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_pointer;
- ignore_unused_variable_warning(b);
- b = m_sub > m_pointer;
- ignore_unused_variable_warning(b);
- b = m_sub >= m_pointer;
- ignore_unused_variable_warning(b);
-
- b = m_pointer == m_sub;
- ignore_unused_variable_warning(b);
- b = m_pointer != m_sub;
- ignore_unused_variable_warning(b);
- b = m_pointer <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_pointer <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_pointer > m_sub;
- ignore_unused_variable_warning(b);
- b = m_pointer >= m_sub;
- ignore_unused_variable_warning(b);
-
- b = m_sub == m_char;
- ignore_unused_variable_warning(b);
- b = m_sub != m_char;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_char;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_char;
- ignore_unused_variable_warning(b);
- b = m_sub > m_char;
- ignore_unused_variable_warning(b);
- b = m_sub >= m_char;
- ignore_unused_variable_warning(b);
-
- b = m_char == m_sub;
- ignore_unused_variable_warning(b);
- b = m_char != m_sub;
- ignore_unused_variable_warning(b);
- b = m_char <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_char <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_char > m_sub;
- ignore_unused_variable_warning(b);
- b = m_char >= m_sub;
- ignore_unused_variable_warning(b);
-
- b = m_sub == m_string;
- ignore_unused_variable_warning(b);
- b = m_sub != m_string;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_string;
- ignore_unused_variable_warning(b);
- b = m_sub <= m_string;
- ignore_unused_variable_warning(b);
- b = m_sub > m_string;
- ignore_unused_variable_warning(b);
- b = m_sub >= m_string;
- ignore_unused_variable_warning(b);
-
- b = m_string == m_sub;
- ignore_unused_variable_warning(b);
- b = m_string != m_sub;
- ignore_unused_variable_warning(b);
- b = m_string <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_string <= m_sub;
- ignore_unused_variable_warning(b);
- b = m_string > m_sub;
- ignore_unused_variable_warning(b);
- b = m_string >= m_sub;
- ignore_unused_variable_warning(b);
-
- // match results:
- m_string = m_results.str();
- ignore_unused_variable_warning(m_string);
- m_string = m_results.str(0);
- ignore_unused_variable_warning(m_string);
- m_out = m_cresults.format(m_out, m_string);
- m_out = m_cresults.format(m_out, m_string, m_mft);
- m_string = m_cresults.format(m_string);
- ignore_unused_variable_warning(m_string);
- m_string = m_cresults.format(m_string, m_mft);
- ignore_unused_variable_warning(m_string);
-
- // regex_match:
- b = global_regex_namespace::regex_match(m_string, m_smatch, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_string, m_smatch, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_string, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_match(m_string, e, m_mft);
- ignore_unused_variable_warning(b);
-
- // regex_search:
- b = global_regex_namespace::regex_search(m_string, m_smatch, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_string, m_smatch, e, m_mft);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_string, e);
- ignore_unused_variable_warning(b);
- b = global_regex_namespace::regex_search(m_string, e, m_mft);
- ignore_unused_variable_warning(b);
-
- // regex_replace:
- m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string, m_mft);
- m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string);
- m_string = global_regex_namespace::regex_replace(m_string, e, m_string, m_mft);
- ignore_unused_variable_warning(m_string);
- m_string = global_regex_namespace::regex_replace(m_string, e, m_string);
- ignore_unused_variable_warning(m_string);
-
- }
-
- flag_type m_flags;
- string_type m_string;
- const sub_match_type m_sub;
- match_results_type m_results;
- pointer_type m_pointer;
- value_type m_char;
- const match_results_type m_cresults;
- OutIterator m_out;
- BidiIterator m_in;
- global_regex_namespace::regex_constants::match_flag_type m_mft;
- global_regex_namespace::match_results<typename string_type::const_iterator, allocator_architype<global_regex_namespace::sub_match<typename string_type::const_iterator> > > m_smatch;
-
- RegexConcept();
- RegexConcept(const RegexConcept&);
- RegexConcept& operator=(const RegexConcept&);
-};
-
-#ifndef BOOST_REGEX_TEST_STD
-
-template <class M>
-struct functor1
-{
- typedef typename M::char_type char_type;
- const char_type* operator()(const M&)const
- {
- static const char_type c = static_cast<char_type>(0);
- return &c;
- }
-};
-template <class M>
-struct functor1b
-{
- typedef typename M::char_type char_type;
- std::vector<char_type> operator()(const M&)const
- {
- static const std::vector<char_type> c;
- return c;
- }
-};
-template <class M>
-struct functor2
-{
- template <class O>
- O operator()(const M& /*m*/, O i)const
- {
- return i;
- }
-};
-template <class M>
-struct functor3
-{
- template <class O>
- O operator()(const M& /*m*/, O i, regex_constants::match_flag_type)const
- {
- return i;
- }
-};
-
-//
-// BoostRegexConcept:
-// Test every interface in the Boost implementation:
-//
-template <class Regex>
-struct BoostRegexConcept
-{
- typedef typename Regex::value_type value_type;
- typedef typename Regex::size_type size_type;
- typedef typename Regex::flag_type flag_type;
- typedef typename Regex::locale_type locale_type;
-
- // derived test types:
- typedef const value_type* pointer_type;
- typedef std::basic_string<value_type> string_type;
- typedef typename Regex::const_iterator const_iterator;
- typedef bidirectional_iterator_archetype<value_type> BidiIterator;
- typedef output_iterator_archetype<value_type> OutputIterator;
- typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
- typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type;
- typedef global_regex_namespace::match_results<BidiIterator> match_results_default_type;
-
- void constraints()
- {
- global_regex_namespace::regex_constants::match_flag_type mopts
- = global_regex_namespace::regex_constants::match_default
- | global_regex_namespace::regex_constants::match_not_bol
- | global_regex_namespace::regex_constants::match_not_eol
- | global_regex_namespace::regex_constants::match_not_bow
- | global_regex_namespace::regex_constants::match_not_eow
- | global_regex_namespace::regex_constants::match_any
- | global_regex_namespace::regex_constants::match_not_null
- | global_regex_namespace::regex_constants::match_continuous
- | global_regex_namespace::regex_constants::match_partial
- | global_regex_namespace::regex_constants::match_prev_avail
- | global_regex_namespace::regex_constants::format_default
- | global_regex_namespace::regex_constants::format_sed
- | global_regex_namespace::regex_constants::format_perl
- | global_regex_namespace::regex_constants::format_no_copy
- | global_regex_namespace::regex_constants::format_first_only;
-
- (void)mopts;
-
- function_requires<RegexConcept<Regex> >();
- const global_regex_namespace::regex_error except(global_regex_namespace::regex_constants::error_collate);
- std::ptrdiff_t pt = except.position();
- ignore_unused_variable_warning(pt);
- const Regex ce, ce2;
-#ifndef BOOST_NO_STD_LOCALE
- m_stream << ce;
-#endif
- unsigned i = ce.error_code();
- ignore_unused_variable_warning(i);
- pointer_type p = ce.expression();
- ignore_unused_variable_warning(p);
- int i2 = ce.compare(ce2);
- ignore_unused_variable_warning(i2);
- bool b = ce == ce2;
- ignore_unused_variable_warning(b);
- b = ce.empty();
- ignore_unused_variable_warning(b);
- b = ce != ce2;
- ignore_unused_variable_warning(b);
- b = ce < ce2;
- ignore_unused_variable_warning(b);
- b = ce > ce2;
- ignore_unused_variable_warning(b);
- b = ce <= ce2;
- ignore_unused_variable_warning(b);
- b = ce >= ce2;
- ignore_unused_variable_warning(b);
- i = ce.status();
- ignore_unused_variable_warning(i);
- size_type s = ce.max_size();
- ignore_unused_variable_warning(s);
- s = ce.size();
- ignore_unused_variable_warning(s);
- const_iterator pi = ce.begin();
- ignore_unused_variable_warning(pi);
- pi = ce.end();
- ignore_unused_variable_warning(pi);
- string_type s2 = ce.str();
- ignore_unused_variable_warning(s2);
-
- m_string = m_sub + m_sub;
- ignore_unused_variable_warning(m_string);
- m_string = m_sub + m_pointer;
- ignore_unused_variable_warning(m_string);
- m_string = m_pointer + m_sub;
- ignore_unused_variable_warning(m_string);
- m_string = m_sub + m_string;
- ignore_unused_variable_warning(m_string);
- m_string = m_string + m_sub;
- ignore_unused_variable_warning(m_string);
- m_string = m_sub + m_char;
- ignore_unused_variable_warning(m_string);
- m_string = m_char + m_sub;
- ignore_unused_variable_warning(m_string);
-
- // Named sub-expressions:
- m_sub = m_cresults[&m_char];
- ignore_unused_variable_warning(m_sub);
- m_sub = m_cresults[m_string];
- ignore_unused_variable_warning(m_sub);
- m_sub = m_cresults[""];
- ignore_unused_variable_warning(m_sub);
- m_sub = m_cresults[std::string("")];
- ignore_unused_variable_warning(m_sub);
- m_string = m_cresults.str(&m_char);
- ignore_unused_variable_warning(m_string);
- m_string = m_cresults.str(m_string);
- ignore_unused_variable_warning(m_string);
- m_string = m_cresults.str("");
- ignore_unused_variable_warning(m_string);
- m_string = m_cresults.str(std::string(""));
- ignore_unused_variable_warning(m_string);
-
- typename match_results_type::difference_type diff;
- diff = m_cresults.length(&m_char);
- ignore_unused_variable_warning(diff);
- diff = m_cresults.length(m_string);
- ignore_unused_variable_warning(diff);
- diff = m_cresults.length("");
- ignore_unused_variable_warning(diff);
- diff = m_cresults.length(std::string(""));
- ignore_unused_variable_warning(diff);
- diff = m_cresults.position(&m_char);
- ignore_unused_variable_warning(diff);
- diff = m_cresults.position(m_string);
- ignore_unused_variable_warning(diff);
- diff = m_cresults.position("");
- ignore_unused_variable_warning(diff);
- diff = m_cresults.position(std::string(""));
- ignore_unused_variable_warning(diff);
-
-#ifndef BOOST_NO_STD_LOCALE
- m_stream << m_sub;
- m_stream << m_cresults;
-#endif
- //
- // Extended formatting with a functor:
- //
- regex_constants::match_flag_type f = regex_constants::match_default;
- OutputIterator out = static_object<OutputIterator>::get();
-
- functor3<match_results_default_type> func3;
- functor2<match_results_default_type> func2;
- functor1<match_results_default_type> func1;
-
- functor3<match_results_type> func3b;
- functor2<match_results_type> func2b;
- functor1<match_results_type> func1b;
-
- out = regex_format(out, m_cresults, func3b, f);
- out = regex_format(out, m_cresults, func3b);
- out = regex_format(out, m_cresults, func2b, f);
- out = regex_format(out, m_cresults, func2b);
- out = regex_format(out, m_cresults, func1b, f);
- out = regex_format(out, m_cresults, func1b);
- out = regex_format(out, m_cresults, RW_NS::ref(func3b), f);
- out = regex_format(out, m_cresults, RW_NS::ref(func3b));
- out = regex_format(out, m_cresults, RW_NS::ref(func2b), f);
- out = regex_format(out, m_cresults, RW_NS::ref(func2b));
- out = regex_format(out, m_cresults, RW_NS::ref(func1b), f);
- out = regex_format(out, m_cresults, RW_NS::ref(func1b));
- out = regex_format(out, m_cresults, RW_NS::cref(func3b), f);
- out = regex_format(out, m_cresults, RW_NS::cref(func3b));
- out = regex_format(out, m_cresults, RW_NS::cref(func2b), f);
- out = regex_format(out, m_cresults, RW_NS::cref(func2b));
- out = regex_format(out, m_cresults, RW_NS::cref(func1b), f);
- out = regex_format(out, m_cresults, RW_NS::cref(func1b));
- m_string += regex_format(m_cresults, func3b, f);
- m_string += regex_format(m_cresults, func3b);
- m_string += regex_format(m_cresults, func2b, f);
- m_string += regex_format(m_cresults, func2b);
- m_string += regex_format(m_cresults, func1b, f);
- m_string += regex_format(m_cresults, func1b);
- m_string += regex_format(m_cresults, RW_NS::ref(func3b), f);
- m_string += regex_format(m_cresults, RW_NS::ref(func3b));
- m_string += regex_format(m_cresults, RW_NS::ref(func2b), f);
- m_string += regex_format(m_cresults, RW_NS::ref(func2b));
- m_string += regex_format(m_cresults, RW_NS::ref(func1b), f);
- m_string += regex_format(m_cresults, RW_NS::ref(func1b));
- m_string += regex_format(m_cresults, RW_NS::cref(func3b), f);
- m_string += regex_format(m_cresults, RW_NS::cref(func3b));
- m_string += regex_format(m_cresults, RW_NS::cref(func2b), f);
- m_string += regex_format(m_cresults, RW_NS::cref(func2b));
- m_string += regex_format(m_cresults, RW_NS::cref(func1b), f);
- m_string += regex_format(m_cresults, RW_NS::cref(func1b));
-
- out = m_cresults.format(out, func3b, f);
- out = m_cresults.format(out, func3b);
- out = m_cresults.format(out, func2b, f);
- out = m_cresults.format(out, func2b);
- out = m_cresults.format(out, func1b, f);
- out = m_cresults.format(out, func1b);
- out = m_cresults.format(out, RW_NS::ref(func3b), f);
- out = m_cresults.format(out, RW_NS::ref(func3b));
- out = m_cresults.format(out, RW_NS::ref(func2b), f);
- out = m_cresults.format(out, RW_NS::ref(func2b));
- out = m_cresults.format(out, RW_NS::ref(func1b), f);
- out = m_cresults.format(out, RW_NS::ref(func1b));
- out = m_cresults.format(out, RW_NS::cref(func3b), f);
- out = m_cresults.format(out, RW_NS::cref(func3b));
- out = m_cresults.format(out, RW_NS::cref(func2b), f);
- out = m_cresults.format(out, RW_NS::cref(func2b));
- out = m_cresults.format(out, RW_NS::cref(func1b), f);
- out = m_cresults.format(out, RW_NS::cref(func1b));
-
- m_string += m_cresults.format(func3b, f);
- m_string += m_cresults.format(func3b);
- m_string += m_cresults.format(func2b, f);
- m_string += m_cresults.format(func2b);
- m_string += m_cresults.format(func1b, f);
- m_string += m_cresults.format(func1b);
- m_string += m_cresults.format(RW_NS::ref(func3b), f);
- m_string += m_cresults.format(RW_NS::ref(func3b));
- m_string += m_cresults.format(RW_NS::ref(func2b), f);
- m_string += m_cresults.format(RW_NS::ref(func2b));
- m_string += m_cresults.format(RW_NS::ref(func1b), f);
- m_string += m_cresults.format(RW_NS::ref(func1b));
- m_string += m_cresults.format(RW_NS::cref(func3b), f);
- m_string += m_cresults.format(RW_NS::cref(func3b));
- m_string += m_cresults.format(RW_NS::cref(func2b), f);
- m_string += m_cresults.format(RW_NS::cref(func2b));
- m_string += m_cresults.format(RW_NS::cref(func1b), f);
- m_string += m_cresults.format(RW_NS::cref(func1b));
-
- out = regex_replace(out, m_in, m_in, ce, func3, f);
- out = regex_replace(out, m_in, m_in, ce, func3);
- out = regex_replace(out, m_in, m_in, ce, func2, f);
- out = regex_replace(out, m_in, m_in, ce, func2);
- out = regex_replace(out, m_in, m_in, ce, func1, f);
- out = regex_replace(out, m_in, m_in, ce, func1);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::ref(func3), f);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::ref(func3));
- out = regex_replace(out, m_in, m_in, ce, RW_NS::ref(func2), f);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::ref(func2));
- out = regex_replace(out, m_in, m_in, ce, RW_NS::ref(func1), f);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::ref(func1));
- out = regex_replace(out, m_in, m_in, ce, RW_NS::cref(func3), f);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::cref(func3));
- out = regex_replace(out, m_in, m_in, ce, RW_NS::cref(func2), f);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::cref(func2));
- out = regex_replace(out, m_in, m_in, ce, RW_NS::cref(func1), f);
- out = regex_replace(out, m_in, m_in, ce, RW_NS::cref(func1));
-
- functor3<match_results<typename string_type::const_iterator> > func3s;
- functor2<match_results<typename string_type::const_iterator> > func2s;
- functor1<match_results<typename string_type::const_iterator> > func1s;
- m_string += regex_replace(m_string, ce, func3s, f);
- m_string += regex_replace(m_string, ce, func3s);
- m_string += regex_replace(m_string, ce, func2s, f);
- m_string += regex_replace(m_string, ce, func2s);
- m_string += regex_replace(m_string, ce, func1s, f);
- m_string += regex_replace(m_string, ce, func1s);
- m_string += regex_replace(m_string, ce, RW_NS::ref(func3s), f);
- m_string += regex_replace(m_string, ce, RW_NS::ref(func3s));
- m_string += regex_replace(m_string, ce, RW_NS::ref(func2s), f);
- m_string += regex_replace(m_string, ce, RW_NS::ref(func2s));
- m_string += regex_replace(m_string, ce, RW_NS::ref(func1s), f);
- m_string += regex_replace(m_string, ce, RW_NS::ref(func1s));
- m_string += regex_replace(m_string, ce, RW_NS::cref(func3s), f);
- m_string += regex_replace(m_string, ce, RW_NS::cref(func3s));
- m_string += regex_replace(m_string, ce, RW_NS::cref(func2s), f);
- m_string += regex_replace(m_string, ce, RW_NS::cref(func2s));
- m_string += regex_replace(m_string, ce, RW_NS::cref(func1s), f);
- m_string += regex_replace(m_string, ce, RW_NS::cref(func1s));
- }
-
- std::basic_ostream<value_type> m_stream;
- sub_match_type m_sub;
- pointer_type m_pointer;
- string_type m_string;
- const value_type m_char;
- match_results_type m_results;
- const match_results_type m_cresults;
- BidiIterator m_in;
-
- BoostRegexConcept();
- BoostRegexConcept(const BoostRegexConcept&);
- BoostRegexConcept& operator=(const BoostRegexConcept&);
-};
-
-#endif // BOOST_REGEX_TEST_STD
-
-}
-
-#endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex/icu.hpp b/contrib/restricted/boost/regex/include/boost/regex/icu.hpp
deleted file mode 100644
index b312612d19..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/icu.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *
- * Copyright (c) 2020
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE icu.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Unicode regular expressions on top of the ICU Library.
- */
-
-#ifndef BOOST_REGEX_ICU_HPP
-#define BOOST_REGEX_ICU_HPP
-
-#include <boost/regex/config.hpp>
-
-#ifdef BOOST_REGEX_CXX03
-#include <boost/regex/v4/icu.hpp>
-#else
-#include <boost/regex/v5/icu.hpp>
-#endif
-
-#endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex/mfc.hpp b/contrib/restricted/boost/regex/include/boost/regex/mfc.hpp
deleted file mode 100644
index d780673931..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/mfc.hpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE mfc.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Overloads and helpers for using MFC/ATL string types with Boost.Regex.
- */
-
-#ifndef BOOST_REGEX_MFC_HPP
-#define BOOST_REGEX_MFC_HPP
-
-#include <atlsimpstr.h>
-#include <boost/regex.hpp>
-
-namespace boost{
-
-//
-// define the types used for TCHAR's:
-typedef basic_regex<TCHAR> tregex;
-typedef match_results<TCHAR const*> tmatch;
-typedef regex_iterator<TCHAR const*> tregex_iterator;
-typedef regex_token_iterator<TCHAR const*> tregex_token_iterator;
-
-// Obsolete. Remove
-#define SIMPLE_STRING_PARAM class B, bool b
-#define SIMPLE_STRING_ARG_LIST B, b
-
-//
-// define regex creation functions:
-//
-template <class B, bool b>
-inline basic_regex<B>
-make_regex(const ATL::CSimpleStringT<B, b>& s, ::boost::regex_constants::syntax_option_type f = boost::regex_constants::normal)
-{
- basic_regex<B> result(s.GetString(), s.GetString() + s.GetLength(), f);
- return result;
-}
-//
-// regex_match overloads:
-//
-template <class B, bool b, class A, class T>
-inline bool regex_match(const ATL::CSimpleStringT<B, b>& s,
- match_results<const B*, A>& what,
- const basic_regex<B, T>& e,
- boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- return ::boost::regex_match(s.GetString(),
- s.GetString() + s.GetLength(),
- what,
- e,
- f);
-}
-
-template <class B, bool b, class T>
-inline bool regex_match(const ATL::CSimpleStringT<B, b>& s,
- const basic_regex<B, T>& e,
- boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- return ::boost::regex_match(s.GetString(),
- s.GetString() + s.GetLength(),
- e,
- f);
-}
-//
-// regex_search overloads:
-//
-template <class B, bool b, class A, class T>
-inline bool regex_search(const ATL::CSimpleStringT<B, b>& s,
- match_results<const B*, A>& what,
- const basic_regex<B, T>& e,
- boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- return ::boost::regex_search(s.GetString(),
- s.GetString() + s.GetLength(),
- what,
- e,
- f);
-}
-
-template <class B, bool b, class T>
-inline bool regex_search(const ATL::CSimpleStringT<B, b>& s,
- const basic_regex<B, T>& e,
- boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- return ::boost::regex_search(s.GetString(),
- s.GetString() + s.GetLength(),
- e,
- f);
-}
-//
-// regex_iterator creation:
-//
-template <class B, bool b>
-inline regex_iterator<B const*>
-make_regex_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- regex_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, f);
- return result;
-}
-
-template <class B, bool b>
-inline regex_token_iterator<B const*>
- make_regex_token_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, int sub = 0, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, sub, f);
- return result;
-}
-
-template <class B, bool b>
-inline regex_token_iterator<B const*>
-make_regex_token_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, const std::vector<int>& subs, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
- return result;
-}
-
-template <class B, bool b, std::size_t N>
-inline regex_token_iterator<B const*>
-make_regex_token_iterator(const ATL::CSimpleStringT<B, b>& s, const basic_regex<B>& e, const int (& subs)[N], ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
-{
- regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
- return result;
-}
-
-template <class OutputIterator, class BidirectionalIterator, class traits,
- class B, bool b>
-OutputIterator regex_replace(OutputIterator out,
- BidirectionalIterator first,
- BidirectionalIterator last,
- const basic_regex<B, traits>& e,
- const ATL::CSimpleStringT<B, b>& fmt,
- match_flag_type flags = match_default)
-{
- return ::boost::regex_replace(out, first, last, e, fmt.GetString(), flags);
-}
-
-namespace BOOST_REGEX_DETAIL_NS{
-
-template <class B, bool b>
-class mfc_string_out_iterator
-{
- ATL::CSimpleStringT<B, b>* out;
-public:
- mfc_string_out_iterator(ATL::CSimpleStringT<B, b>& s) : out(&s) {}
- mfc_string_out_iterator& operator++() { return *this; }
- mfc_string_out_iterator& operator++(int) { return *this; }
- mfc_string_out_iterator& operator*() { return *this; }
- mfc_string_out_iterator& operator=(B v)
- {
- out->AppendChar(v);
- return *this;
- }
- typedef std::ptrdiff_t difference_type;
- typedef B value_type;
- typedef value_type* pointer;
- typedef value_type& reference;
- typedef std::output_iterator_tag iterator_category;
-};
-
-}
-
-template <class traits, class B, bool b>
-ATL::CSimpleStringT<B, b> regex_replace(const ATL::CSimpleStringT<B, b>& s,
- const basic_regex<B, traits>& e,
- const ATL::CSimpleStringT<B, b>& fmt,
- match_flag_type flags = match_default)
-{
- ATL::CSimpleStringT<B, b> result(s.GetManager());
- BOOST_REGEX_DETAIL_NS::mfc_string_out_iterator<B, b> i(result);
- regex_replace(i, s.GetString(), s.GetString() + s.GetLength(), e, fmt.GetString(), flags);
- return result;
-}
-
-} // namespace boost.
-
-#endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp b/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp
deleted file mode 100644
index 0ddbdadfa3..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE object_cache.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Implements a generic object cache.
- */
-
-#ifndef BOOST_REGEX_OBJECT_CACHE_HPP
-#define BOOST_REGEX_OBJECT_CACHE_HPP
-
-#include <boost/regex/config.hpp>
-#ifdef BOOST_REGEX_CXX03
-#include <boost/regex/v4/object_cache.hpp>
-#else
-#include <boost/regex/v5/object_cache.hpp>
-#endif
-
-#endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp
deleted file mode 100644
index a565570a22..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *
- * Copyright (c) 2020
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE unicode_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Iterator adapters for converting between different Unicode encodings.
- */
-
-#ifndef BOOST_REGEX_PENDING_UNICODE_ITERATOR_HPP
-#define BOOST_REGEX_PENDING_UNICODE_ITERATOR_HPP
-
-#include <boost/regex/config.hpp>
-
-#if defined(BOOST_REGEX_CXX03)
-#include <boost/regex/v4/unicode_iterator.hpp>
-#else
-#include <boost/regex/v5/unicode_iterator.hpp>
-#endif
-
-
-#endif // BOOST_REGEX_PENDING_UNICODE_ITERATOR_HPP
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp
deleted file mode 100644
index 7e70f57e5a..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp
+++ /dev/null
@@ -1,1516 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE icu.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Unicode regular expressions on top of the ICU Library.
- */
-
-#ifndef BOOST_REGEX_ICU_V4_HPP
-#define BOOST_REGEX_ICU_V4_HPP
-
-#include <boost/config.hpp>
-#include <unicode/utypes.h>
-#include <unicode/uchar.h>
-#include <unicode/coll.h>
-#include <boost/regex.hpp>
-#include <boost/regex/v4/unicode_iterator.hpp>
-#include <boost/mpl/int_fwd.hpp>
-#include <boost/static_assert.hpp>
-#include <bitset>
-
-#ifdef BOOST_MSVC
-#pragma warning (push)
-#pragma warning (disable: 4251)
-#endif
-
-namespace boost {
-
- namespace BOOST_REGEX_DETAIL_NS {
-
- //
- // Implementation details:
- //
- class icu_regex_traits_implementation
- {
- typedef UChar32 char_type;
- typedef std::size_t size_type;
- typedef std::vector<char_type> string_type;
- typedef U_NAMESPACE_QUALIFIER Locale locale_type;
- typedef boost::uint_least32_t char_class_type;
- public:
- icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& l)
- : m_locale(l)
- {
- UErrorCode success = U_ZERO_ERROR;
- m_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success));
- if (U_SUCCESS(success) == 0)
- init_error();
- m_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::IDENTICAL);
- success = U_ZERO_ERROR;
- m_primary_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success));
- if (U_SUCCESS(success) == 0)
- init_error();
- m_primary_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::PRIMARY);
- }
- U_NAMESPACE_QUALIFIER Locale getloc()const
- {
- return m_locale;
- }
- string_type do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const
- {
- // TODO make thread safe!!!! :
- typedef u32_to_u16_iterator<const char_type*, ::UChar> itt;
- itt i(p1), j(p2);
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- std::vector< ::UChar> t(i, j);
-#else
- std::vector< ::UChar> t;
- while (i != j)
- t.push_back(*i++);
-#endif
- ::uint8_t result[100];
- ::int32_t len;
- if (!t.empty())
- len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), result, sizeof(result));
- else
- len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), result, sizeof(result));
- if (std::size_t(len) > sizeof(result))
- {
- scoped_array< ::uint8_t> presult(new ::uint8_t[len + 1]);
- if (!t.empty())
- len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), presult.get(), len + 1);
- else
- len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), presult.get(), len + 1);
- if ((0 == presult[len - 1]) && (len > 1))
- --len;
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- return string_type(presult.get(), presult.get() + len);
-#else
- string_type sresult;
- ::uint8_t const* ia = presult.get();
- ::uint8_t const* ib = presult.get() + len;
- while (ia != ib)
- sresult.push_back(*ia++);
- return sresult;
-#endif
- }
- if ((0 == result[len - 1]) && (len > 1))
- --len;
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- return string_type(result, result + len);
-#else
- string_type sresult;
- ::uint8_t const* ia = result;
- ::uint8_t const* ib = result + len;
- while (ia != ib)
- sresult.push_back(*ia++);
- return sresult;
-#endif
- }
- string_type transform(const char_type* p1, const char_type* p2) const
- {
- return do_transform(p1, p2, m_collator.get());
- }
- string_type transform_primary(const char_type* p1, const char_type* p2) const
- {
- return do_transform(p1, p2, m_primary_collator.get());
- }
- private:
- void init_error()
- {
- std::runtime_error e("Could not initialize ICU resources");
- boost::throw_exception(e);
- }
- U_NAMESPACE_QUALIFIER Locale m_locale; // The ICU locale that we're using
- boost::scoped_ptr< U_NAMESPACE_QUALIFIER Collator> m_collator; // The full collation object
- boost::scoped_ptr< U_NAMESPACE_QUALIFIER Collator> m_primary_collator; // The primary collation object
- };
-
- inline boost::shared_ptr<icu_regex_traits_implementation> get_icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& loc)
- {
- return boost::shared_ptr<icu_regex_traits_implementation>(new icu_regex_traits_implementation(loc));
- }
-
- }
-
- class icu_regex_traits
- {
- public:
- typedef UChar32 char_type;
- typedef std::size_t size_type;
- typedef std::vector<char_type> string_type;
- typedef U_NAMESPACE_QUALIFIER Locale locale_type;
-#ifdef BOOST_NO_INT64_T
- typedef std::bitset<64> char_class_type;
-#else
- typedef boost::uint64_t char_class_type;
-#endif
-
- struct boost_extensions_tag {};
-
- icu_regex_traits()
- : m_pimpl(BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(U_NAMESPACE_QUALIFIER Locale()))
- {
- }
- static size_type length(const char_type* p)
- {
- size_type result = 0;
- while (*p)
- {
- ++p;
- ++result;
- }
- return result;
- }
- ::boost::regex_constants::syntax_type syntax_type(char_type c)const
- {
- return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
- }
- ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c) const
- {
- return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_escape_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
- }
- char_type translate(char_type c) const
- {
- return c;
- }
- char_type translate_nocase(char_type c) const
- {
- return ::u_foldCase(c, U_FOLD_CASE_DEFAULT);
- }
- char_type translate(char_type c, bool icase) const
- {
- return icase ? translate_nocase(c) : translate(c);
- }
- char_type tolower(char_type c) const
- {
- return ::u_tolower(c);
- }
- char_type toupper(char_type c) const
- {
- return ::u_toupper(c);
- }
- string_type transform(const char_type* p1, const char_type* p2) const
- {
- return m_pimpl->transform(p1, p2);
- }
- string_type transform_primary(const char_type* p1, const char_type* p2) const
- {
- return m_pimpl->transform_primary(p1, p2);
- }
- char_class_type lookup_classname(const char_type* p1, const char_type* p2) const
- {
- static const char_class_type mask_blank = char_class_type(1) << offset_blank;
- static const char_class_type mask_space = char_class_type(1) << offset_space;
- static const char_class_type mask_xdigit = char_class_type(1) << offset_xdigit;
- static const char_class_type mask_underscore = char_class_type(1) << offset_underscore;
- static const char_class_type mask_unicode = char_class_type(1) << offset_unicode;
- static const char_class_type mask_any = char_class_type(1) << offset_any;
- static const char_class_type mask_ascii = char_class_type(1) << offset_ascii;
- static const char_class_type mask_horizontal = char_class_type(1) << offset_horizontal;
- static const char_class_type mask_vertical = char_class_type(1) << offset_vertical;
-
- static const char_class_type masks[] =
- {
- 0,
- U_GC_L_MASK | U_GC_ND_MASK,
- U_GC_L_MASK,
- mask_blank,
- U_GC_CC_MASK | U_GC_CF_MASK | U_GC_ZL_MASK | U_GC_ZP_MASK,
- U_GC_ND_MASK,
- U_GC_ND_MASK,
- (0x3FFFFFFFu) & ~(U_GC_CC_MASK | U_GC_CF_MASK | U_GC_CS_MASK | U_GC_CN_MASK | U_GC_Z_MASK),
- mask_horizontal,
- U_GC_LL_MASK,
- U_GC_LL_MASK,
- ~(U_GC_C_MASK),
- U_GC_P_MASK,
- char_class_type(U_GC_Z_MASK) | mask_space,
- char_class_type(U_GC_Z_MASK) | mask_space,
- U_GC_LU_MASK,
- mask_unicode,
- U_GC_LU_MASK,
- mask_vertical,
- char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore,
- char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore,
- char_class_type(U_GC_ND_MASK) | mask_xdigit,
- };
-
- int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
- if (idx >= 0)
- return masks[idx + 1];
- char_class_type result = lookup_icu_mask(p1, p2);
- if (result != 0)
- return result;
-
- if (idx < 0)
- {
- string_type s(p1, p2);
- string_type::size_type i = 0;
- while (i < s.size())
- {
- s[i] = static_cast<char>((::u_tolower)(s[i]));
- if (::u_isspace(s[i]) || (s[i] == '-') || (s[i] == '_'))
- s.erase(s.begin() + i, s.begin() + i + 1);
- else
- {
- s[i] = static_cast<char>((::u_tolower)(s[i]));
- ++i;
- }
- }
- if (!s.empty())
- idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
- if (idx >= 0)
- return masks[idx + 1];
- if (!s.empty())
- result = lookup_icu_mask(&*s.begin(), &*s.begin() + s.size());
- if (result != 0)
- return result;
- }
- BOOST_ASSERT(std::size_t(idx + 1) < sizeof(masks) / sizeof(masks[0]));
- return masks[idx + 1];
- }
- string_type lookup_collatename(const char_type* p1, const char_type* p2) const
- {
- string_type result;
-#ifdef BOOST_NO_CXX98_BINDERS
- if (std::find_if(p1, p2, std::bind(std::greater< ::UChar32>(), std::placeholders::_1, 0x7f)) == p2)
-#else
- if (std::find_if(p1, p2, std::bind2nd(std::greater< ::UChar32>(), 0x7f)) == p2)
-#endif
- {
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- std::string s(p1, p2);
-#else
- std::string s;
- const char_type* p3 = p1;
- while (p3 != p2)
- s.append(1, *p3++);
-#endif
- // Try Unicode name:
- UErrorCode err = U_ZERO_ERROR;
- UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, s.c_str(), &err);
- if (U_SUCCESS(err))
- {
- result.push_back(c);
- return result;
- }
- // Try Unicode-extended name:
- err = U_ZERO_ERROR;
- c = ::u_charFromName(U_EXTENDED_CHAR_NAME, s.c_str(), &err);
- if (U_SUCCESS(err))
- {
- result.push_back(c);
- return result;
- }
- // try POSIX name:
- s = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s);
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- result.assign(s.begin(), s.end());
-#else
- result.clear();
- std::string::const_iterator si, sj;
- si = s.begin();
- sj = s.end();
- while (si != sj)
- result.push_back(*si++);
-#endif
- }
- if (result.empty() && (p2 - p1 == 1))
- result.push_back(*p1);
- return result;
- }
- bool isctype(char_type c, char_class_type f) const
- {
- static const char_class_type mask_blank = char_class_type(1) << offset_blank;
- static const char_class_type mask_space = char_class_type(1) << offset_space;
- static const char_class_type mask_xdigit = char_class_type(1) << offset_xdigit;
- static const char_class_type mask_underscore = char_class_type(1) << offset_underscore;
- static const char_class_type mask_unicode = char_class_type(1) << offset_unicode;
- static const char_class_type mask_any = char_class_type(1) << offset_any;
- static const char_class_type mask_ascii = char_class_type(1) << offset_ascii;
- static const char_class_type mask_horizontal = char_class_type(1) << offset_horizontal;
- static const char_class_type mask_vertical = char_class_type(1) << offset_vertical;
-
- // check for standard catagories first:
- char_class_type m = char_class_type(static_cast<char_class_type>(1) << u_charType(c));
- if ((m & f) != 0)
- return true;
- // now check for special cases:
- if (((f & mask_blank) != 0) && u_isblank(c))
- return true;
- if (((f & mask_space) != 0) && u_isspace(c))
- return true;
- if (((f & mask_xdigit) != 0) && (u_digit(c, 16) >= 0))
- return true;
- if (((f & mask_unicode) != 0) && (c >= 0x100))
- return true;
- if (((f & mask_underscore) != 0) && (c == '_'))
- return true;
- if (((f & mask_any) != 0) && (c <= 0x10FFFF))
- return true;
- if (((f & mask_ascii) != 0) && (c <= 0x7F))
- return true;
- if (((f & mask_vertical) != 0) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK)))
- return true;
- if (((f & mask_horizontal) != 0) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v')))
- return true;
- return false;
- }
- boost::intmax_t toi(const char_type*& p1, const char_type* p2, int radix)const
- {
- return BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
- }
- int value(char_type c, int radix)const
- {
- return u_digit(c, static_cast< ::int8_t>(radix));
- }
- locale_type imbue(locale_type l)
- {
- locale_type result(m_pimpl->getloc());
- m_pimpl = BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(l);
- return result;
- }
- locale_type getloc()const
- {
- return locale_type();
- }
- std::string error_string(::boost::regex_constants::error_type n) const
- {
- return BOOST_REGEX_DETAIL_NS::get_default_error_string(n);
- }
- private:
- icu_regex_traits(const icu_regex_traits&);
- icu_regex_traits& operator=(const icu_regex_traits&);
-
- //
- // define the bitmasks offsets we need for additional character properties:
- //
- enum {
- offset_blank = U_CHAR_CATEGORY_COUNT,
- offset_space = U_CHAR_CATEGORY_COUNT + 1,
- offset_xdigit = U_CHAR_CATEGORY_COUNT + 2,
- offset_underscore = U_CHAR_CATEGORY_COUNT + 3,
- offset_unicode = U_CHAR_CATEGORY_COUNT + 4,
- offset_any = U_CHAR_CATEGORY_COUNT + 5,
- offset_ascii = U_CHAR_CATEGORY_COUNT + 6,
- offset_horizontal = U_CHAR_CATEGORY_COUNT + 7,
- offset_vertical = U_CHAR_CATEGORY_COUNT + 8
- };
-
- static char_class_type lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2)
- {
- static const char_class_type mask_blank = char_class_type(1) << offset_blank;
- static const char_class_type mask_space = char_class_type(1) << offset_space;
- static const char_class_type mask_xdigit = char_class_type(1) << offset_xdigit;
- static const char_class_type mask_underscore = char_class_type(1) << offset_underscore;
- static const char_class_type mask_unicode = char_class_type(1) << offset_unicode;
- static const char_class_type mask_any = char_class_type(1) << offset_any;
- static const char_class_type mask_ascii = char_class_type(1) << offset_ascii;
- static const char_class_type mask_horizontal = char_class_type(1) << offset_horizontal;
- static const char_class_type mask_vertical = char_class_type(1) << offset_vertical;
-
- static const ::UChar32 prop_name_table[] = {
- /* any */ 'a', 'n', 'y',
- /* ascii */ 'a', 's', 'c', 'i', 'i',
- /* assigned */ 'a', 's', 's', 'i', 'g', 'n', 'e', 'd',
- /* c* */ 'c', '*',
- /* cc */ 'c', 'c',
- /* cf */ 'c', 'f',
- /* closepunctuation */ 'c', 'l', 'o', 's', 'e', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* cn */ 'c', 'n',
- /* co */ 'c', 'o',
- /* connectorpunctuation */ 'c', 'o', 'n', 'n', 'e', 'c', 't', 'o', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* control */ 'c', 'o', 'n', 't', 'r', 'o', 'l',
- /* cs */ 'c', 's',
- /* currencysymbol */ 'c', 'u', 'r', 'r', 'e', 'n', 'c', 'y', 's', 'y', 'm', 'b', 'o', 'l',
- /* dashpunctuation */ 'd', 'a', 's', 'h', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* decimaldigitnumber */ 'd', 'e', 'c', 'i', 'm', 'a', 'l', 'd', 'i', 'g', 'i', 't', 'n', 'u', 'm', 'b', 'e', 'r',
- /* enclosingmark */ 'e', 'n', 'c', 'l', 'o', 's', 'i', 'n', 'g', 'm', 'a', 'r', 'k',
- /* finalpunctuation */ 'f', 'i', 'n', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* format */ 'f', 'o', 'r', 'm', 'a', 't',
- /* initialpunctuation */ 'i', 'n', 'i', 't', 'i', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* l* */ 'l', '*',
- /* letter */ 'l', 'e', 't', 't', 'e', 'r',
- /* letternumber */ 'l', 'e', 't', 't', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r',
- /* lineseparator */ 'l', 'i', 'n', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* ll */ 'l', 'l',
- /* lm */ 'l', 'm',
- /* lo */ 'l', 'o',
- /* lowercaseletter */ 'l', 'o', 'w', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r',
- /* lt */ 'l', 't',
- /* lu */ 'l', 'u',
- /* m* */ 'm', '*',
- /* mark */ 'm', 'a', 'r', 'k',
- /* mathsymbol */ 'm', 'a', 't', 'h', 's', 'y', 'm', 'b', 'o', 'l',
- /* mc */ 'm', 'c',
- /* me */ 'm', 'e',
- /* mn */ 'm', 'n',
- /* modifierletter */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r',
- /* modifiersymbol */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l',
- /* n* */ 'n', '*',
- /* nd */ 'n', 'd',
- /* nl */ 'n', 'l',
- /* no */ 'n', 'o',
- /* nonspacingmark */ 'n', 'o', 'n', 's', 'p', 'a', 'c', 'i', 'n', 'g', 'm', 'a', 'r', 'k',
- /* notassigned */ 'n', 'o', 't', 'a', 's', 's', 'i', 'g', 'n', 'e', 'd',
- /* number */ 'n', 'u', 'm', 'b', 'e', 'r',
- /* openpunctuation */ 'o', 'p', 'e', 'n', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* other */ 'o', 't', 'h', 'e', 'r',
- /* otherletter */ 'o', 't', 'h', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r',
- /* othernumber */ 'o', 't', 'h', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r',
- /* otherpunctuation */ 'o', 't', 'h', 'e', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* othersymbol */ 'o', 't', 'h', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l',
- /* p* */ 'p', '*',
- /* paragraphseparator */ 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* pc */ 'p', 'c',
- /* pd */ 'p', 'd',
- /* pe */ 'p', 'e',
- /* pf */ 'p', 'f',
- /* pi */ 'p', 'i',
- /* po */ 'p', 'o',
- /* privateuse */ 'p', 'r', 'i', 'v', 'a', 't', 'e', 'u', 's', 'e',
- /* ps */ 'p', 's',
- /* punctuation */ 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* s* */ 's', '*',
- /* sc */ 's', 'c',
- /* separator */ 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* sk */ 's', 'k',
- /* sm */ 's', 'm',
- /* so */ 's', 'o',
- /* spaceseparator */ 's', 'p', 'a', 'c', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* spacingcombiningmark */ 's', 'p', 'a', 'c', 'i', 'n', 'g', 'c', 'o', 'm', 'b', 'i', 'n', 'i', 'n', 'g', 'm', 'a', 'r', 'k',
- /* surrogate */ 's', 'u', 'r', 'r', 'o', 'g', 'a', 't', 'e',
- /* symbol */ 's', 'y', 'm', 'b', 'o', 'l',
- /* titlecase */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e',
- /* titlecaseletter */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r',
- /* uppercaseletter */ 'u', 'p', 'p', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r',
- /* z* */ 'z', '*',
- /* zl */ 'z', 'l',
- /* zp */ 'z', 'p',
- /* zs */ 'z', 's',
- };
-
- static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> range_data[] = {
- { prop_name_table + 0, prop_name_table + 3, }, // any
- { prop_name_table + 3, prop_name_table + 8, }, // ascii
- { prop_name_table + 8, prop_name_table + 16, }, // assigned
- { prop_name_table + 16, prop_name_table + 18, }, // c*
- { prop_name_table + 18, prop_name_table + 20, }, // cc
- { prop_name_table + 20, prop_name_table + 22, }, // cf
- { prop_name_table + 22, prop_name_table + 38, }, // closepunctuation
- { prop_name_table + 38, prop_name_table + 40, }, // cn
- { prop_name_table + 40, prop_name_table + 42, }, // co
- { prop_name_table + 42, prop_name_table + 62, }, // connectorpunctuation
- { prop_name_table + 62, prop_name_table + 69, }, // control
- { prop_name_table + 69, prop_name_table + 71, }, // cs
- { prop_name_table + 71, prop_name_table + 85, }, // currencysymbol
- { prop_name_table + 85, prop_name_table + 100, }, // dashpunctuation
- { prop_name_table + 100, prop_name_table + 118, }, // decimaldigitnumber
- { prop_name_table + 118, prop_name_table + 131, }, // enclosingmark
- { prop_name_table + 131, prop_name_table + 147, }, // finalpunctuation
- { prop_name_table + 147, prop_name_table + 153, }, // format
- { prop_name_table + 153, prop_name_table + 171, }, // initialpunctuation
- { prop_name_table + 171, prop_name_table + 173, }, // l*
- { prop_name_table + 173, prop_name_table + 179, }, // letter
- { prop_name_table + 179, prop_name_table + 191, }, // letternumber
- { prop_name_table + 191, prop_name_table + 204, }, // lineseparator
- { prop_name_table + 204, prop_name_table + 206, }, // ll
- { prop_name_table + 206, prop_name_table + 208, }, // lm
- { prop_name_table + 208, prop_name_table + 210, }, // lo
- { prop_name_table + 210, prop_name_table + 225, }, // lowercaseletter
- { prop_name_table + 225, prop_name_table + 227, }, // lt
- { prop_name_table + 227, prop_name_table + 229, }, // lu
- { prop_name_table + 229, prop_name_table + 231, }, // m*
- { prop_name_table + 231, prop_name_table + 235, }, // mark
- { prop_name_table + 235, prop_name_table + 245, }, // mathsymbol
- { prop_name_table + 245, prop_name_table + 247, }, // mc
- { prop_name_table + 247, prop_name_table + 249, }, // me
- { prop_name_table + 249, prop_name_table + 251, }, // mn
- { prop_name_table + 251, prop_name_table + 265, }, // modifierletter
- { prop_name_table + 265, prop_name_table + 279, }, // modifiersymbol
- { prop_name_table + 279, prop_name_table + 281, }, // n*
- { prop_name_table + 281, prop_name_table + 283, }, // nd
- { prop_name_table + 283, prop_name_table + 285, }, // nl
- { prop_name_table + 285, prop_name_table + 287, }, // no
- { prop_name_table + 287, prop_name_table + 301, }, // nonspacingmark
- { prop_name_table + 301, prop_name_table + 312, }, // notassigned
- { prop_name_table + 312, prop_name_table + 318, }, // number
- { prop_name_table + 318, prop_name_table + 333, }, // openpunctuation
- { prop_name_table + 333, prop_name_table + 338, }, // other
- { prop_name_table + 338, prop_name_table + 349, }, // otherletter
- { prop_name_table + 349, prop_name_table + 360, }, // othernumber
- { prop_name_table + 360, prop_name_table + 376, }, // otherpunctuation
- { prop_name_table + 376, prop_name_table + 387, }, // othersymbol
- { prop_name_table + 387, prop_name_table + 389, }, // p*
- { prop_name_table + 389, prop_name_table + 407, }, // paragraphseparator
- { prop_name_table + 407, prop_name_table + 409, }, // pc
- { prop_name_table + 409, prop_name_table + 411, }, // pd
- { prop_name_table + 411, prop_name_table + 413, }, // pe
- { prop_name_table + 413, prop_name_table + 415, }, // pf
- { prop_name_table + 415, prop_name_table + 417, }, // pi
- { prop_name_table + 417, prop_name_table + 419, }, // po
- { prop_name_table + 419, prop_name_table + 429, }, // privateuse
- { prop_name_table + 429, prop_name_table + 431, }, // ps
- { prop_name_table + 431, prop_name_table + 442, }, // punctuation
- { prop_name_table + 442, prop_name_table + 444, }, // s*
- { prop_name_table + 444, prop_name_table + 446, }, // sc
- { prop_name_table + 446, prop_name_table + 455, }, // separator
- { prop_name_table + 455, prop_name_table + 457, }, // sk
- { prop_name_table + 457, prop_name_table + 459, }, // sm
- { prop_name_table + 459, prop_name_table + 461, }, // so
- { prop_name_table + 461, prop_name_table + 475, }, // spaceseparator
- { prop_name_table + 475, prop_name_table + 495, }, // spacingcombiningmark
- { prop_name_table + 495, prop_name_table + 504, }, // surrogate
- { prop_name_table + 504, prop_name_table + 510, }, // symbol
- { prop_name_table + 510, prop_name_table + 519, }, // titlecase
- { prop_name_table + 519, prop_name_table + 534, }, // titlecaseletter
- { prop_name_table + 534, prop_name_table + 549, }, // uppercaseletter
- { prop_name_table + 549, prop_name_table + 551, }, // z*
- { prop_name_table + 551, prop_name_table + 553, }, // zl
- { prop_name_table + 553, prop_name_table + 555, }, // zp
- { prop_name_table + 555, prop_name_table + 557, }, // zs
- };
-
- static const icu_regex_traits::char_class_type icu_class_map[] = {
- mask_any, // any
- mask_ascii, // ascii
- (0x3FFFFFFFu) & ~(U_GC_CN_MASK), // assigned
- U_GC_C_MASK, // c*
- U_GC_CC_MASK, // cc
- U_GC_CF_MASK, // cf
- U_GC_PE_MASK, // closepunctuation
- U_GC_CN_MASK, // cn
- U_GC_CO_MASK, // co
- U_GC_PC_MASK, // connectorpunctuation
- U_GC_CC_MASK, // control
- U_GC_CS_MASK, // cs
- U_GC_SC_MASK, // currencysymbol
- U_GC_PD_MASK, // dashpunctuation
- U_GC_ND_MASK, // decimaldigitnumber
- U_GC_ME_MASK, // enclosingmark
- U_GC_PF_MASK, // finalpunctuation
- U_GC_CF_MASK, // format
- U_GC_PI_MASK, // initialpunctuation
- U_GC_L_MASK, // l*
- U_GC_L_MASK, // letter
- U_GC_NL_MASK, // letternumber
- U_GC_ZL_MASK, // lineseparator
- U_GC_LL_MASK, // ll
- U_GC_LM_MASK, // lm
- U_GC_LO_MASK, // lo
- U_GC_LL_MASK, // lowercaseletter
- U_GC_LT_MASK, // lt
- U_GC_LU_MASK, // lu
- U_GC_M_MASK, // m*
- U_GC_M_MASK, // mark
- U_GC_SM_MASK, // mathsymbol
- U_GC_MC_MASK, // mc
- U_GC_ME_MASK, // me
- U_GC_MN_MASK, // mn
- U_GC_LM_MASK, // modifierletter
- U_GC_SK_MASK, // modifiersymbol
- U_GC_N_MASK, // n*
- U_GC_ND_MASK, // nd
- U_GC_NL_MASK, // nl
- U_GC_NO_MASK, // no
- U_GC_MN_MASK, // nonspacingmark
- U_GC_CN_MASK, // notassigned
- U_GC_N_MASK, // number
- U_GC_PS_MASK, // openpunctuation
- U_GC_C_MASK, // other
- U_GC_LO_MASK, // otherletter
- U_GC_NO_MASK, // othernumber
- U_GC_PO_MASK, // otherpunctuation
- U_GC_SO_MASK, // othersymbol
- U_GC_P_MASK, // p*
- U_GC_ZP_MASK, // paragraphseparator
- U_GC_PC_MASK, // pc
- U_GC_PD_MASK, // pd
- U_GC_PE_MASK, // pe
- U_GC_PF_MASK, // pf
- U_GC_PI_MASK, // pi
- U_GC_PO_MASK, // po
- U_GC_CO_MASK, // privateuse
- U_GC_PS_MASK, // ps
- U_GC_P_MASK, // punctuation
- U_GC_S_MASK, // s*
- U_GC_SC_MASK, // sc
- U_GC_Z_MASK, // separator
- U_GC_SK_MASK, // sk
- U_GC_SM_MASK, // sm
- U_GC_SO_MASK, // so
- U_GC_ZS_MASK, // spaceseparator
- U_GC_MC_MASK, // spacingcombiningmark
- U_GC_CS_MASK, // surrogate
- U_GC_S_MASK, // symbol
- U_GC_LT_MASK, // titlecase
- U_GC_LT_MASK, // titlecaseletter
- U_GC_LU_MASK, // uppercaseletter
- U_GC_Z_MASK, // z*
- U_GC_ZL_MASK, // zl
- U_GC_ZP_MASK, // zp
- U_GC_ZS_MASK, // zs
- };
-
-
- const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_begin = range_data;
- const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data) / sizeof(range_data[0]));
-
- BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> t = { p1, p2, };
- const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t);
- if ((p != ranges_end) && (t == *p))
- return icu_class_map[p - ranges_begin];
- return 0;
- }
-
- boost::shared_ptr< ::boost::BOOST_REGEX_DETAIL_NS::icu_regex_traits_implementation> m_pimpl;
- };
-
-} // namespace boost
-
-namespace boost {
-
- // types:
- typedef basic_regex< ::UChar32, icu_regex_traits> u32regex;
- typedef match_results<const ::UChar32*> u32match;
- typedef match_results<const ::UChar*> u16match;
-
- //
- // Construction of 32-bit regex types from UTF-8 and UTF-16 primitives:
- //
- namespace BOOST_REGEX_DETAIL_NS {
-
-#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__)
- template <class InputIterator>
- inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const boost::mpl::int_<1>*)
- {
- typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type;
- return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt);
- }
-
- template <class InputIterator>
- inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const boost::mpl::int_<2>*)
- {
- typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type;
- return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt);
- }
-
- template <class InputIterator>
- inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const boost::mpl::int_<4>*)
- {
- return u32regex(i, j, opt);
- }
-#else
- template <class InputIterator>
- inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const boost::mpl::int_<1>*)
- {
- typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type;
- typedef std::vector<UChar32> vector_type;
- vector_type v;
- conv_type a(i, i, j), b(j, i, j);
- while (a != b)
- {
- v.push_back(*a);
- ++a;
- }
- if (v.size())
- return u32regex(&*v.begin(), v.size(), opt);
- return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt);
- }
-
- template <class InputIterator>
- inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const boost::mpl::int_<2>*)
- {
- typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type;
- typedef std::vector<UChar32> vector_type;
- vector_type v;
- conv_type a(i, i, j), b(j, i, j);
- while (a != b)
- {
- v.push_back(*a);
- ++a;
- }
- if (v.size())
- return u32regex(&*v.begin(), v.size(), opt);
- return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt);
- }
-
- template <class InputIterator>
- inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const boost::mpl::int_<4>*)
- {
- typedef std::vector<UChar32> vector_type;
- vector_type v;
- while (i != j)
- {
- v.push_back((UChar32)(*i));
- ++i;
- }
- if (v.size())
- return u32regex(&*v.begin(), v.size(), opt);
- return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt);
- }
-#endif
- }
-
- // BOOST_REGEX_UCHAR_IS_WCHAR_T
- //
- // Source inspection of unicode/umachine.h in ICU version 59 indicates that:
- //
- // On version 59, UChar is always char16_t in C++ mode (and uint16_t in C mode)
- //
- // On earlier versions, the logic is
- //
- // #if U_SIZEOF_WCHAR_T==2
- // typedef wchar_t OldUChar;
- // #elif defined(__CHAR16_TYPE__)
- // typedef __CHAR16_TYPE__ OldUChar;
- // #else
- // typedef uint16_t OldUChar;
- // #endif
- //
- // That is, UChar is wchar_t only on versions below 59, when U_SIZEOF_WCHAR_T==2
- //
- // Hence,
-
-#define BOOST_REGEX_UCHAR_IS_WCHAR_T (U_ICU_VERSION_MAJOR_NUM < 59 && U_SIZEOF_WCHAR_T == 2)
-
-#if BOOST_REGEX_UCHAR_IS_WCHAR_T
- BOOST_STATIC_ASSERT((boost::is_same<UChar, wchar_t>::value));
-#else
- BOOST_STATIC_ASSERT(!(boost::is_same<UChar, wchar_t>::value));
-#endif
-
- //
- // Construction from an iterator pair:
- //
- template <class InputIterator>
- inline u32regex make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(i, j, opt, static_cast<boost::mpl::int_<sizeof(*i)> const*>(0));
- }
- //
- // construction from UTF-8 nul-terminated strings:
- //
- inline u32regex make_u32regex(const char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(p), opt, static_cast<boost::mpl::int_<1> const*>(0));
- }
- inline u32regex make_u32regex(const unsigned char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(reinterpret_cast<const char*>(p)), opt, static_cast<boost::mpl::int_<1> const*>(0));
- }
- //
- // construction from UTF-16 nul-terminated strings:
- //
-#ifndef BOOST_NO_WREGEX
- inline u32regex make_u32regex(const wchar_t* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<boost::mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T
- inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<boost::mpl::int_<2> const*>(0));
- }
-#endif
- //
- // construction from basic_string class-template:
- //
- template<class C, class T, class A>
- inline u32regex make_u32regex(const std::basic_string<C, T, A>& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.begin(), s.end(), opt, static_cast<boost::mpl::int_<sizeof(C)> const*>(0));
- }
- //
- // Construction from ICU string type:
- //
- inline u32regex make_u32regex(const U_NAMESPACE_QUALIFIER UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
- {
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<boost::mpl::int_<2> const*>(0));
- }
-
- //
- // regex_match overloads that widen the character type as appropriate:
- //
- namespace BOOST_REGEX_DETAIL_NS {
- template<class MR1, class MR2, class NSubs>
- void copy_results(MR1& out, MR2 const& in, NSubs named_subs)
- {
- // copy results from an adapted MR2 match_results:
- out.set_size(in.size(), in.prefix().first.base(), in.suffix().second.base());
- out.set_base(in.base().base());
- out.set_named_subs(named_subs);
- for (int i = 0; i < (int)in.size(); ++i)
- {
- if (in[i].matched || !i)
- {
- out.set_first(in[i].first.base(), i);
- out.set_second(in[i].second.base(), i, in[i].matched);
- }
- }
-#ifdef BOOST_REGEX_MATCH_EXTRA
- // Copy full capture info as well:
- for (int i = 0; i < (int)in.size(); ++i)
- {
- if (in[i].captures().size())
- {
- out[i].get_captures().assign(in[i].captures().size(), typename MR1::value_type());
- for (int j = 0; j < (int)out[i].captures().size(); ++j)
- {
- out[i].get_captures()[j].first = in[i].captures()[j].first.base();
- out[i].get_captures()[j].second = in[i].captures()[j].second.base();
- out[i].get_captures()[j].matched = in[i].captures()[j].matched;
- }
- }
- }
-#endif
- }
-
- template <class BidiIterator, class Allocator>
- inline bool do_regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- boost::mpl::int_<4> const*)
- {
- return ::boost::regex_match(first, last, m, e, flags);
- }
- template <class BidiIterator, class Allocator>
- bool do_regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- boost::mpl::int_<2> const*)
- {
- typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags);
- // copy results across to m:
- if (result) copy_results(m, what, e.get_named_subs());
- return result;
- }
- template <class BidiIterator, class Allocator>
- bool do_regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- boost::mpl::int_<1> const*)
- {
- typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags);
- // copy results across to m:
- if (result) copy_results(m, what, e.get_named_subs());
- return result;
- }
- } // namespace BOOST_REGEX_DETAIL_NS
-
- template <class BidiIterator, class Allocator>
- inline bool u32regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
- }
- inline bool u32regex_match(const UChar* p,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
- }
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
- inline bool u32regex_match(const wchar_t* p,
- match_results<const wchar_t*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_match(const char* p,
- match_results<const char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_match(const unsigned char* p,
- match_results<const unsigned char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_match(const std::string& s,
- match_results<std::string::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
- }
-#ifndef BOOST_NO_STD_WSTRING
- inline bool u32regex_match(const std::wstring& s,
- match_results<std::wstring::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<2> const*>(0));
- }
- //
- // regex_match overloads that do not return what matched:
- //
- template <class BidiIterator>
- inline bool u32regex_match(BidiIterator first, BidiIterator last,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<BidiIterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
- }
- inline bool u32regex_match(const UChar* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
- }
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
- inline bool u32regex_match(const wchar_t* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const wchar_t*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_match(const char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_match(const unsigned char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const unsigned char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_match(const std::string& s,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<std::string::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
- }
-#ifndef BOOST_NO_STD_WSTRING
- inline bool u32regex_match(const std::wstring& s,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<std::wstring::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<2> const*>(0));
- }
-
- //
- // regex_search overloads that widen the character type as appropriate:
- //
- namespace BOOST_REGEX_DETAIL_NS {
- template <class BidiIterator, class Allocator>
- inline bool do_regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base,
- boost::mpl::int_<4> const*)
- {
- return ::boost::regex_search(first, last, m, e, flags, base);
- }
- template <class BidiIterator, class Allocator>
- bool do_regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base,
- boost::mpl::int_<2> const*)
- {
- typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base));
- // copy results across to m:
- if (result) copy_results(m, what, e.get_named_subs());
- return result;
- }
- template <class BidiIterator, class Allocator>
- bool do_regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base,
- boost::mpl::int_<1> const*)
- {
- typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base));
- // copy results across to m:
- if (result) copy_results(m, what, e.get_named_subs());
- return result;
- }
- }
-
- template <class BidiIterator, class Allocator>
- inline bool u32regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
- }
- template <class BidiIterator, class Allocator>
- inline bool u32regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, base, static_cast<mpl::int_<sizeof(*first)> const*>(0));
- }
- inline bool u32regex_search(const UChar* p,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
- }
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
- inline bool u32regex_search(const wchar_t* p,
- match_results<const wchar_t*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_search(const char* p,
- match_results<const char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_search(const unsigned char* p,
- match_results<const unsigned char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_search(const std::string& s,
- match_results<std::string::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
- }
-#ifndef BOOST_NO_STD_WSTRING
- inline bool u32regex_search(const std::wstring& s,
- match_results<std::wstring::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<2> const*>(0));
- }
- template <class BidiIterator>
- inline bool u32regex_search(BidiIterator first, BidiIterator last,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<BidiIterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
- }
- inline bool u32regex_search(const UChar* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
- }
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
- inline bool u32regex_search(const wchar_t* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const wchar_t*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_search(const char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_search(const unsigned char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const unsigned char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
- }
- inline bool u32regex_search(const std::string& s,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<std::string::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
- }
-#ifndef BOOST_NO_STD_WSTRING
- inline bool u32regex_search(const std::wstring& s,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<std::wstring::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
- }
-#endif
- inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- match_flag_type flags = match_default)
- {
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<2> const*>(0));
- }
-
- //
- // overloads for regex_replace with utf-8 and utf-16 data types:
- //
- namespace BOOST_REGEX_DETAIL_NS {
- template <class I>
- inline std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >
- make_utf32_seq(I i, I j, mpl::int_<1> const*)
- {
- return std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >(boost::u8_to_u32_iterator<I>(i, i, j), boost::u8_to_u32_iterator<I>(j, i, j));
- }
- template <class I>
- inline std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >
- make_utf32_seq(I i, I j, mpl::int_<2> const*)
- {
- return std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >(boost::u16_to_u32_iterator<I>(i, i, j), boost::u16_to_u32_iterator<I>(j, i, j));
- }
- template <class I>
- inline std::pair< I, I >
- make_utf32_seq(I i, I j, mpl::int_<4> const*)
- {
- return std::pair< I, I >(i, j);
- }
- template <class charT>
- inline std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >
- make_utf32_seq(const charT* p, mpl::int_<1> const*)
- {
- std::size_t len = std::strlen((const char*)p);
- return std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >(boost::u8_to_u32_iterator<const charT*>(p, p, p + len), boost::u8_to_u32_iterator<const charT*>(p + len, p, p + len));
- }
- template <class charT>
- inline std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >
- make_utf32_seq(const charT* p, mpl::int_<2> const*)
- {
- std::size_t len = u_strlen((const UChar*)p);
- return std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >(boost::u16_to_u32_iterator<const charT*>(p, p, p + len), boost::u16_to_u32_iterator<const charT*>(p + len, p, p + len));
- }
- template <class charT>
- inline std::pair< const charT*, const charT* >
- make_utf32_seq(const charT* p, mpl::int_<4> const*)
- {
- return std::pair< const charT*, const charT* >(p, p + icu_regex_traits::length((UChar32 const*)p));
- }
- template <class OutputIterator>
- inline OutputIterator make_utf32_out(OutputIterator o, mpl::int_<4> const*)
- {
- return o;
- }
- template <class OutputIterator>
- inline utf16_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, mpl::int_<2> const*)
- {
- return o;
- }
- template <class OutputIterator>
- inline utf8_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, mpl::int_<1> const*)
- {
- return o;
- }
-
- template <class OutputIterator, class I1, class I2>
- OutputIterator do_regex_replace(OutputIterator out,
- std::pair<I1, I1> const& in,
- const u32regex& e,
- const std::pair<I2, I2>& fmt,
- match_flag_type flags
- )
- {
- // unfortunately we have to copy the format string in order to pass in onward:
- std::vector<UChar32> f;
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- f.assign(fmt.first, fmt.second);
-#else
- f.clear();
- I2 pos = fmt.first;
- while (pos != fmt.second)
- f.push_back(*pos++);
-#endif
-
- regex_iterator<I1, UChar32, icu_regex_traits> i(in.first, in.second, e, flags);
- regex_iterator<I1, UChar32, icu_regex_traits> j;
- if (i == j)
- {
- if (!(flags & regex_constants::format_no_copy))
- out = BOOST_REGEX_DETAIL_NS::copy(in.first, in.second, out);
- }
- else
- {
- I1 last_m = in.first;
- while (i != j)
- {
- if (!(flags & regex_constants::format_no_copy))
- out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out);
- if (!f.empty())
- out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, &*f.begin(), &*f.begin() + f.size(), flags, e.get_traits());
- else
- out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, static_cast<UChar32 const*>(0), static_cast<UChar32 const*>(0), flags, e.get_traits());
- last_m = (*i)[0].second;
- if (flags & regex_constants::format_first_only)
- break;
- ++i;
- }
- if (!(flags & regex_constants::format_no_copy))
- out = BOOST_REGEX_DETAIL_NS::copy(last_m, in.second, out);
- }
- return out;
- }
- template <class BaseIterator>
- inline const BaseIterator& extract_output_base(const BaseIterator& b)
- {
- return b;
- }
- template <class BaseIterator>
- inline BaseIterator extract_output_base(const utf8_output_iterator<BaseIterator>& b)
- {
- return b.base();
- }
- template <class BaseIterator>
- inline BaseIterator extract_output_base(const utf16_output_iterator<BaseIterator>& b)
- {
- return b.base();
- }
- } // BOOST_REGEX_DETAIL_NS
-
- template <class OutputIterator, class BidirectionalIterator, class charT>
- inline OutputIterator u32regex_replace(OutputIterator out,
- BidirectionalIterator first,
- BidirectionalIterator last,
- const u32regex& e,
- const charT* fmt,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::extract_output_base
- (
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt, static_cast<mpl::int_<sizeof(*fmt)> const*>(0)),
- flags)
- );
- }
-
- template <class OutputIterator, class Iterator, class charT>
- inline OutputIterator u32regex_replace(OutputIterator out,
- Iterator first,
- Iterator last,
- const u32regex& e,
- const std::basic_string<charT>& fmt,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::extract_output_base
- (
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.begin(), fmt.end(), static_cast<mpl::int_<sizeof(charT)> const*>(0)),
- flags)
- );
- }
-
- template <class OutputIterator, class Iterator>
- inline OutputIterator u32regex_replace(OutputIterator out,
- Iterator first,
- Iterator last,
- const u32regex& e,
- const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
- match_flag_type flags = match_default)
- {
- return BOOST_REGEX_DETAIL_NS::extract_output_base
- (
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
- flags)
- );
- }
-
- template <class charT>
- std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
- const u32regex& e,
- const charT* fmt,
- match_flag_type flags = match_default)
- {
- std::basic_string<charT> result;
- BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
- u32regex_replace(i, s.begin(), s.end(), e, fmt, flags);
- return result;
- }
-
- template <class charT>
- std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
- const u32regex& e,
- const std::basic_string<charT>& fmt,
- match_flag_type flags = match_default)
- {
- std::basic_string<charT> result;
- BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
- u32regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags);
- return result;
- }
-
- namespace BOOST_REGEX_DETAIL_NS {
-
- class unicode_string_out_iterator
- {
- U_NAMESPACE_QUALIFIER UnicodeString* out;
- public:
- unicode_string_out_iterator(U_NAMESPACE_QUALIFIER UnicodeString& s) : out(&s) {}
- unicode_string_out_iterator& operator++() { return *this; }
- unicode_string_out_iterator& operator++(int) { return *this; }
- unicode_string_out_iterator& operator*() { return *this; }
- unicode_string_out_iterator& operator=(UChar v)
- {
- *out += v;
- return *this;
- }
- typedef std::ptrdiff_t difference_type;
- typedef UChar value_type;
- typedef value_type* pointer;
- typedef value_type& reference;
- typedef std::output_iterator_tag iterator_category;
- };
-
- }
-
- inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- const UChar* fmt,
- match_flag_type flags = match_default)
- {
- U_NAMESPACE_QUALIFIER UnicodeString result;
- BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result);
- u32regex_replace(i, s.getBuffer(), s.getBuffer() + s.length(), e, fmt, flags);
- return result;
- }
-
- inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
- match_flag_type flags = match_default)
- {
- U_NAMESPACE_QUALIFIER UnicodeString result;
- BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result);
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(i, static_cast<mpl::int_<2> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(s.getBuffer(), s.getBuffer() + s.length(), static_cast<mpl::int_<2> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
- flags);
- return result;
- }
-
-} // namespace boost.
-
-#ifdef BOOST_MSVC
-#pragma warning (pop)
-#endif
-
-#include <boost/regex/v4/u32regex_iterator.hpp>
-#include <boost/regex/v4/u32regex_token_iterator.hpp>
-
-#endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp
deleted file mode 100644
index f8763a8d6a..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *
- * Copyright (c) 2003
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE u32regex_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Provides u32regex_iterator implementation.
- */
-
-#ifndef BOOST_REGEX_V4_U32REGEX_ITERATOR_HPP
-#define BOOST_REGEX_V4_U32REGEX_ITERATOR_HPP
-
-namespace boost{
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-
-template <class BidirectionalIterator>
-class u32regex_iterator_implementation
-{
- typedef u32regex regex_type;
-
- match_results<BidirectionalIterator> what; // current match
- BidirectionalIterator base; // start of sequence
- BidirectionalIterator end; // end of sequence
- const regex_type re; // the expression
- match_flag_type flags; // flags for matching
-
-public:
- u32regex_iterator_implementation(const regex_type* p, BidirectionalIterator last, match_flag_type f)
- : base(), end(last), re(*p), flags(f){}
- bool init(BidirectionalIterator first)
- {
- base = first;
- return u32regex_search(first, end, what, re, flags, base);
- }
- bool compare(const u32regex_iterator_implementation& that)
- {
- if(this == &that) return true;
- return (&re.get_data() == &that.re.get_data()) && (end == that.end) && (flags == that.flags) && (what[0].first == that.what[0].first) && (what[0].second == that.what[0].second);
- }
- const match_results<BidirectionalIterator>& get()
- { return what; }
- bool next()
- {
- //if(what.prefix().first != what[0].second)
- // flags |= match_prev_avail;
- BidirectionalIterator next_start = what[0].second;
- match_flag_type f(flags);
- if(!what.length())
- f |= regex_constants::match_not_initial_null;
- //if(base != next_start)
- // f |= regex_constants::match_not_bob;
- bool result = u32regex_search(next_start, end, what, re, f, base);
- if(result)
- what.set_base(base);
- return result;
- }
-private:
- u32regex_iterator_implementation& operator=(const u32regex_iterator_implementation&);
-};
-
-template <class BidirectionalIterator>
-class u32regex_iterator
-{
-private:
- typedef u32regex_iterator_implementation<BidirectionalIterator> impl;
- typedef shared_ptr<impl> pimpl;
-public:
- typedef u32regex regex_type;
- typedef match_results<BidirectionalIterator> value_type;
- typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type
- difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef std::forward_iterator_tag iterator_category;
-
- u32regex_iterator(){}
- u32regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
- const regex_type& re,
- match_flag_type m = match_default)
- : pdata(new impl(&re, b, m))
- {
- if(!pdata->init(a))
- {
- pdata.reset();
- }
- }
- u32regex_iterator(const u32regex_iterator& that)
- : pdata(that.pdata) {}
- u32regex_iterator& operator=(const u32regex_iterator& that)
- {
- pdata = that.pdata;
- return *this;
- }
- bool operator==(const u32regex_iterator& that)const
- {
- if((pdata.get() == 0) || (that.pdata.get() == 0))
- return pdata.get() == that.pdata.get();
- return pdata->compare(*(that.pdata.get()));
- }
- bool operator!=(const u32regex_iterator& that)const
- { return !(*this == that); }
- const value_type& operator*()const
- { return pdata->get(); }
- const value_type* operator->()const
- { return &(pdata->get()); }
- u32regex_iterator& operator++()
- {
- cow();
- if(0 == pdata->next())
- {
- pdata.reset();
- }
- return *this;
- }
- u32regex_iterator operator++(int)
- {
- u32regex_iterator result(*this);
- ++(*this);
- return result;
- }
-private:
-
- pimpl pdata;
-
- void cow()
- {
- // copy-on-write
- if(pdata.get() && !pdata.unique())
- {
- pdata.reset(new impl(*(pdata.get())));
- }
- }
-};
-
-typedef u32regex_iterator<const char*> utf8regex_iterator;
-typedef u32regex_iterator<const UChar*> utf16regex_iterator;
-typedef u32regex_iterator<const UChar32*> utf32regex_iterator;
-
-inline u32regex_iterator<const char*> make_u32regex_iterator(const char* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const char*>(p, p+std::strlen(p), e, m);
-}
-#ifndef BOOST_NO_WREGEX
-inline u32regex_iterator<const wchar_t*> make_u32regex_iterator(const wchar_t* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const wchar_t*>(p, p+std::wcslen(p), e, m);
-}
-#endif
-#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
-inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const UChar*>(p, p+u_strlen(p), e, m);
-}
-#endif
-template <class charT, class Traits, class Alloc>
-inline u32regex_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_iterator<iter_type>(p.begin(), p.end(), e, m);
-}
-inline u32regex_iterator<const UChar*> make_u32regex_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, m);
-}
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-} // namespace boost
-
-#endif // BOOST_REGEX_V4_REGEX_ITERATOR_HPP
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp
deleted file mode 100644
index 2e04810dff..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- *
- * Copyright (c) 2003
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE u32regex_token_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Provides u32regex_token_iterator implementation.
- */
-
-#ifndef BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP
-#define BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP
-
-#if (BOOST_WORKAROUND(BOOST_BORLANDC, >= 0x560) && BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
-//
-// Borland C++ Builder 6, and Visual C++ 6,
-// can't cope with the array template constructor
-// so we have a template member that will accept any type as
-// argument, and then assert that is really is an array:
-//
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_array.hpp>
-#endif
-
-namespace boost{
-
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_PREFIX
-#endif
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable:4700)
-#endif
-
-template <class BidirectionalIterator>
-class u32regex_token_iterator_implementation
-{
- typedef u32regex regex_type;
- typedef sub_match<BidirectionalIterator> value_type;
-
- match_results<BidirectionalIterator> what; // current match
- BidirectionalIterator end; // end of search area
- BidirectionalIterator base; // start of search area
- const regex_type re; // the expression
- match_flag_type flags; // match flags
- value_type result; // the current string result
- int N; // the current sub-expression being enumerated
- std::vector<int> subs; // the sub-expressions to enumerate
-
-public:
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, int sub, match_flag_type f)
- : end(last), re(*p), flags(f){ subs.push_back(sub); }
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f)
- : end(last), re(*p), flags(f), subs(v){}
-#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
- || BOOST_WORKAROUND(__HP_aCC, < 60700)
- template <class T>
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const T& submatches, match_flag_type f)
- : end(last), re(*p), flags(f)
- {
- // assert that T really is an array:
- BOOST_STATIC_ASSERT(::boost::is_array<T>::value);
- const std::size_t array_size = sizeof(T) / sizeof(submatches[0]);
- for(std::size_t i = 0; i < array_size; ++i)
- {
- subs.push_back(submatches[i]);
- }
- }
-#else
- template <std::size_t CN>
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const int (&submatches)[CN], match_flag_type f)
- : end(last), re(*p), flags(f)
- {
- for(std::size_t i = 0; i < CN; ++i)
- {
- subs.push_back(submatches[i]);
- }
- }
-#endif
-
- bool init(BidirectionalIterator first)
- {
- base = first;
- N = 0;
- if(u32regex_search(first, end, what, re, flags, base) == true)
- {
- N = 0;
- result = ((subs[N] == -1) ? what.prefix() : what[(int)subs[N]]);
- return true;
- }
- else if((subs[N] == -1) && (first != end))
- {
- result.first = first;
- result.second = end;
- result.matched = (first != end);
- N = -1;
- return true;
- }
- return false;
- }
- bool compare(const u32regex_token_iterator_implementation& that)
- {
- if(this == &that) return true;
- return (&re.get_data() == &that.re.get_data())
- && (end == that.end)
- && (flags == that.flags)
- && (N == that.N)
- && (what[0].first == that.what[0].first)
- && (what[0].second == that.what[0].second);
- }
- const value_type& get()
- { return result; }
- bool next()
- {
- if(N == -1)
- return false;
- if(N+1 < (int)subs.size())
- {
- ++N;
- result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
- return true;
- }
- //if(what.prefix().first != what[0].second)
- // flags |= match_prev_avail | regex_constants::match_not_bob;
- BidirectionalIterator last_end(what[0].second);
- if(u32regex_search(last_end, end, what, re, ((what[0].first == what[0].second) ? flags | regex_constants::match_not_initial_null : flags), base))
- {
- N =0;
- result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
- return true;
- }
- else if((last_end != end) && (subs[0] == -1))
- {
- N =-1;
- result.first = last_end;
- result.second = end;
- result.matched = (last_end != end);
- return true;
- }
- return false;
- }
-private:
- u32regex_token_iterator_implementation& operator=(const u32regex_token_iterator_implementation&);
-};
-
-template <class BidirectionalIterator>
-class u32regex_token_iterator
-{
-private:
- typedef u32regex_token_iterator_implementation<BidirectionalIterator> impl;
- typedef shared_ptr<impl> pimpl;
-public:
- typedef u32regex regex_type;
- typedef sub_match<BidirectionalIterator> value_type;
- typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type
- difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef std::forward_iterator_tag iterator_category;
-
- u32regex_token_iterator(){}
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- int submatch = 0, match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatch, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- const std::vector<int>& submatches, match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatches, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
-#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
- || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
- || BOOST_WORKAROUND(__HP_aCC, < 60700)
- template <class T>
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- const T& submatches, match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatches, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
-#else
- template <std::size_t N>
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- const int (&submatches)[N], match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatches, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
-#endif
- u32regex_token_iterator(const u32regex_token_iterator& that)
- : pdata(that.pdata) {}
- u32regex_token_iterator& operator=(const u32regex_token_iterator& that)
- {
- pdata = that.pdata;
- return *this;
- }
- bool operator==(const u32regex_token_iterator& that)const
- {
- if((pdata.get() == 0) || (that.pdata.get() == 0))
- return pdata.get() == that.pdata.get();
- return pdata->compare(*(that.pdata.get()));
- }
- bool operator!=(const u32regex_token_iterator& that)const
- { return !(*this == that); }
- const value_type& operator*()const
- { return pdata->get(); }
- const value_type* operator->()const
- { return &(pdata->get()); }
- u32regex_token_iterator& operator++()
- {
- cow();
- if(0 == pdata->next())
- {
- pdata.reset();
- }
- return *this;
- }
- u32regex_token_iterator operator++(int)
- {
- u32regex_token_iterator result(*this);
- ++(*this);
- return result;
- }
-private:
-
- pimpl pdata;
-
- void cow()
- {
- // copy-on-write
- if(pdata.get() && !pdata.unique())
- {
- pdata.reset(new impl(*(pdata.get())));
- }
- }
-};
-
-typedef u32regex_token_iterator<const char*> utf8regex_token_iterator;
-typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator;
-typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator;
-
-// construction from an integral sub_match state_id:
-inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
-}
-#ifndef BOOST_NO_WREGEX
-inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
-}
-#endif
-#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
-}
-#endif
-template <class charT, class Traits, class Alloc>
-inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
-}
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
-}
-
-// construction from a reference to an array:
-template <std::size_t N>
-inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
-}
-#ifndef BOOST_NO_WREGEX
-template <std::size_t N>
-inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
-}
-#endif
-#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
-template <std::size_t N>
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
-}
-#endif
-template <class charT, class Traits, class Alloc, std::size_t N>
-inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
-}
-template <std::size_t N>
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
-}
-
-// construction from a vector of sub_match state_id's:
-inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
-}
-#ifndef BOOST_NO_WREGEX
-inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
-}
-#endif
-#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
-}
-#endif
-template <class charT, class Traits, class Alloc>
-inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
-}
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
-}
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-#ifdef BOOST_HAS_ABI_HEADERS
-# include BOOST_ABI_SUFFIX
-#endif
-
-} // namespace boost
-
-#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP
-
-
-
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp
deleted file mode 100644
index 985aa72b20..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp
+++ /dev/null
@@ -1,871 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE unicode_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Iterator adapters for converting between different Unicode encodings.
- */
-
-/****************************************************************************
-
-Contents:
-~~~~~~~~~
-
-1) Read Only, Input Adapters:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-template <class BaseIterator, class U8Type = ::boost::uint8_t>
-class u32_to_u8_iterator;
-
-Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-8.
-
-template <class BaseIterator, class U32Type = ::boost::uint32_t>
-class u8_to_u32_iterator;
-
-Adapts sequence of UTF-8 code points to "look like" a sequence of UTF-32.
-
-template <class BaseIterator, class U16Type = ::boost::uint16_t>
-class u32_to_u16_iterator;
-
-Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-16.
-
-template <class BaseIterator, class U32Type = ::boost::uint32_t>
-class u16_to_u32_iterator;
-
-Adapts sequence of UTF-16 code points to "look like" a sequence of UTF-32.
-
-2) Single pass output iterator adapters:
-
-template <class BaseIterator>
-class utf8_output_iterator;
-
-Accepts UTF-32 code points and forwards them on as UTF-8 code points.
-
-template <class BaseIterator>
-class utf16_output_iterator;
-
-Accepts UTF-32 code points and forwards them on as UTF-16 code points.
-
-****************************************************************************/
-
-#ifndef BOOST_REGEX_V4_UNICODE_ITERATOR_HPP
-#define BOOST_REGEX_V4_UNICODE_ITERATOR_HPP
-#include <boost/cstdint.hpp>
-#include <boost/regex/config.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/throw_exception.hpp>
-#include <stdexcept>
-#ifndef BOOST_NO_STD_LOCALE
-#include <sstream>
-#include <ios>
-#endif
-#include <limits.h> // CHAR_BIT
-
-#ifdef BOOST_REGEX_CXX03
-
-#else
-#endif
-
-namespace boost{
-
-namespace detail{
-
-static const ::boost::uint16_t high_surrogate_base = 0xD7C0u;
-static const ::boost::uint16_t low_surrogate_base = 0xDC00u;
-static const ::boost::uint32_t ten_bit_mask = 0x3FFu;
-
-inline bool is_high_surrogate(::boost::uint16_t v)
-{
- return (v & 0xFFFFFC00u) == 0xd800u;
-}
-inline bool is_low_surrogate(::boost::uint16_t v)
-{
- return (v & 0xFFFFFC00u) == 0xdc00u;
-}
-template <class T>
-inline bool is_surrogate(T v)
-{
- return (v & 0xFFFFF800u) == 0xd800;
-}
-
-inline unsigned utf8_byte_count(boost::uint8_t c)
-{
- // if the most significant bit with a zero in it is in position
- // 8-N then there are N bytes in this UTF-8 sequence:
- boost::uint8_t mask = 0x80u;
- unsigned result = 0;
- while(c & mask)
- {
- ++result;
- mask >>= 1;
- }
- return (result == 0) ? 1 : ((result > 4) ? 4 : result);
-}
-
-inline unsigned utf8_trailing_byte_count(boost::uint8_t c)
-{
- return utf8_byte_count(c) - 1;
-}
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4100)
-#endif
-#ifndef BOOST_NO_EXCEPTIONS
-BOOST_NORETURN
-#endif
-inline void invalid_utf32_code_point(::boost::uint32_t val)
-{
-#ifndef BOOST_NO_STD_LOCALE
- std::stringstream ss;
- ss << "Invalid UTF-32 code point U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-16 sequence";
- std::out_of_range e(ss.str());
-#else
- std::out_of_range e("Invalid UTF-32 code point encountered while trying to encode UTF-16 sequence");
-#endif
- boost::throw_exception(e);
-}
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-
-} // namespace detail
-
-template <class BaseIterator, class U16Type = ::boost::uint16_t>
-class u32_to_u16_iterator
-{
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
- BOOST_STATIC_ASSERT(sizeof(U16Type)*CHAR_BIT == 16);
-#endif
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U16Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_current == 2)
- extract_current();
- return m_values[m_current];
- }
- bool operator==(const u32_to_u16_iterator& that)const
- {
- if(m_position == that.m_position)
- {
- // Both m_currents must be equal, or both even
- // this is the same as saying their sum must be even:
- return (m_current + that.m_current) & 1u ? false : true;
- }
- return false;
- }
- bool operator!=(const u32_to_u16_iterator& that)const
- {
- return !(*this == that);
- }
- u32_to_u16_iterator& operator++()
- {
- // if we have a pending read then read now, so that we know whether
- // to skip a position, or move to a low-surrogate:
- if(m_current == 2)
- {
- // pending read:
- extract_current();
- }
- // move to the next surrogate position:
- ++m_current;
- // if we've reached the end skip a position:
- if(m_values[m_current] == 0)
- {
- m_current = 2;
- ++m_position;
- }
- return *this;
- }
- u32_to_u16_iterator operator++(int)
- {
- u32_to_u16_iterator r(*this);
- ++(*this);
- return r;
- }
- u32_to_u16_iterator& operator--()
- {
- if(m_current != 1)
- {
- // decrementing an iterator always leads to a valid position:
- --m_position;
- extract_current();
- m_current = m_values[1] ? 1 : 0;
- }
- else
- {
- m_current = 0;
- }
- return *this;
- }
- u32_to_u16_iterator operator--(int)
- {
- u32_to_u16_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u32_to_u16_iterator() : m_position(), m_current(0)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- }
- u32_to_u16_iterator(BaseIterator b) : m_position(b), m_current(2)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- }
-private:
-
- void extract_current()const
- {
- // begin by checking for a code point out of range:
- ::boost::uint32_t v = *m_position;
- if(v >= 0x10000u)
- {
- if(v > 0x10FFFFu)
- detail::invalid_utf32_code_point(*m_position);
- // split into two surrogates:
- m_values[0] = static_cast<U16Type>(v >> 10) + detail::high_surrogate_base;
- m_values[1] = static_cast<U16Type>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
- m_current = 0;
- BOOST_REGEX_ASSERT(detail::is_high_surrogate(m_values[0]));
- BOOST_REGEX_ASSERT(detail::is_low_surrogate(m_values[1]));
- }
- else
- {
- // 16-bit code point:
- m_values[0] = static_cast<U16Type>(*m_position);
- m_values[1] = 0;
- m_current = 0;
- // value must not be a surrogate:
- if(detail::is_surrogate(m_values[0]))
- detail::invalid_utf32_code_point(*m_position);
- }
- }
- BaseIterator m_position;
- mutable U16Type m_values[3];
- mutable unsigned m_current;
-};
-
-template <class BaseIterator, class U32Type = ::boost::uint32_t>
-class u16_to_u32_iterator
-{
- // special values for pending iterator reads:
- BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
-
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 16);
- BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32);
-#endif
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U32Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_value == pending_read)
- extract_current();
- return m_value;
- }
- bool operator==(const u16_to_u32_iterator& that)const
- {
- return m_position == that.m_position;
- }
- bool operator!=(const u16_to_u32_iterator& that)const
- {
- return !(*this == that);
- }
- u16_to_u32_iterator& operator++()
- {
- // skip high surrogate first if there is one:
- if(detail::is_high_surrogate(*m_position)) ++m_position;
- ++m_position;
- m_value = pending_read;
- return *this;
- }
- u16_to_u32_iterator operator++(int)
- {
- u16_to_u32_iterator r(*this);
- ++(*this);
- return r;
- }
- u16_to_u32_iterator& operator--()
- {
- --m_position;
- // if we have a low surrogate then go back one more:
- if(detail::is_low_surrogate(*m_position))
- --m_position;
- m_value = pending_read;
- return *this;
- }
- u16_to_u32_iterator operator--(int)
- {
- u16_to_u32_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u16_to_u32_iterator() : m_position()
- {
- m_value = pending_read;
- }
- u16_to_u32_iterator(BaseIterator b) : m_position(b)
- {
- m_value = pending_read;
- }
- //
- // Range checked version:
- //
- u16_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b)
- {
- m_value = pending_read;
- //
- // The range must not start with a low surrogate, or end in a high surrogate,
- // otherwise we run the risk of running outside the underlying input range.
- // Likewise b must not be located at a low surrogate.
- //
- boost::uint16_t val;
- if(start != end)
- {
- if((b != start) && (b != end))
- {
- val = *b;
- if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u))
- invalid_code_point(val);
- }
- val = *start;
- if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u))
- invalid_code_point(val);
- val = *--end;
- if(detail::is_high_surrogate(val))
- invalid_code_point(val);
- }
- }
-private:
- static void invalid_code_point(::boost::uint16_t val)
- {
-#ifndef BOOST_NO_STD_LOCALE
- std::stringstream ss;
- ss << "Misplaced UTF-16 surrogate U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-32 sequence";
- std::out_of_range e(ss.str());
-#else
- std::out_of_range e("Misplaced UTF-16 surrogate encountered while trying to encode UTF-32 sequence");
-#endif
- boost::throw_exception(e);
- }
- void extract_current()const
- {
- m_value = static_cast<U32Type>(static_cast< ::boost::uint16_t>(*m_position));
- // if the last value is a high surrogate then adjust m_position and m_value as needed:
- if(detail::is_high_surrogate(*m_position))
- {
- // precondition; next value must have be a low-surrogate:
- BaseIterator next(m_position);
- ::boost::uint16_t t = *++next;
- if((t & 0xFC00u) != 0xDC00u)
- invalid_code_point(t);
- m_value = (m_value - detail::high_surrogate_base) << 10;
- m_value |= (static_cast<U32Type>(static_cast< ::boost::uint16_t>(t)) & detail::ten_bit_mask);
- }
- // postcondition; result must not be a surrogate:
- if(detail::is_surrogate(m_value))
- invalid_code_point(static_cast< ::boost::uint16_t>(m_value));
- }
- BaseIterator m_position;
- mutable U32Type m_value;
-};
-
-template <class BaseIterator, class U8Type = ::boost::uint8_t>
-class u32_to_u8_iterator
-{
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
- BOOST_STATIC_ASSERT(sizeof(U8Type)*CHAR_BIT == 8);
-#endif
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U8Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_current == 4)
- extract_current();
- return m_values[m_current];
- }
- bool operator==(const u32_to_u8_iterator& that)const
- {
- if(m_position == that.m_position)
- {
- // either the m_current's must be equal, or one must be 0 and
- // the other 4: which means neither must have bits 1 or 2 set:
- return (m_current == that.m_current)
- || (((m_current | that.m_current) & 3) == 0);
- }
- return false;
- }
- bool operator!=(const u32_to_u8_iterator& that)const
- {
- return !(*this == that);
- }
- u32_to_u8_iterator& operator++()
- {
- // if we have a pending read then read now, so that we know whether
- // to skip a position, or move to a low-surrogate:
- if(m_current == 4)
- {
- // pending read:
- extract_current();
- }
- // move to the next surrogate position:
- ++m_current;
- // if we've reached the end skip a position:
- if(m_values[m_current] == 0)
- {
- m_current = 4;
- ++m_position;
- }
- return *this;
- }
- u32_to_u8_iterator operator++(int)
- {
- u32_to_u8_iterator r(*this);
- ++(*this);
- return r;
- }
- u32_to_u8_iterator& operator--()
- {
- if((m_current & 3) == 0)
- {
- --m_position;
- extract_current();
- m_current = 3;
- while(m_current && (m_values[m_current] == 0))
- --m_current;
- }
- else
- --m_current;
- return *this;
- }
- u32_to_u8_iterator operator--(int)
- {
- u32_to_u8_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u32_to_u8_iterator() : m_position(), m_current(0)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- m_values[3] = 0;
- m_values[4] = 0;
- }
- u32_to_u8_iterator(BaseIterator b) : m_position(b), m_current(4)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- m_values[3] = 0;
- m_values[4] = 0;
- }
-private:
-
- void extract_current()const
- {
- boost::uint32_t c = *m_position;
- if(c > 0x10FFFFu)
- detail::invalid_utf32_code_point(c);
- if(c < 0x80u)
- {
- m_values[0] = static_cast<unsigned char>(c);
- m_values[1] = static_cast<unsigned char>(0u);
- m_values[2] = static_cast<unsigned char>(0u);
- m_values[3] = static_cast<unsigned char>(0u);
- }
- else if(c < 0x800u)
- {
- m_values[0] = static_cast<unsigned char>(0xC0u + (c >> 6));
- m_values[1] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- m_values[2] = static_cast<unsigned char>(0u);
- m_values[3] = static_cast<unsigned char>(0u);
- }
- else if(c < 0x10000u)
- {
- m_values[0] = static_cast<unsigned char>(0xE0u + (c >> 12));
- m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- m_values[2] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- m_values[3] = static_cast<unsigned char>(0u);
- }
- else
- {
- m_values[0] = static_cast<unsigned char>(0xF0u + (c >> 18));
- m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
- m_values[2] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- m_values[3] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- m_current= 0;
- }
- BaseIterator m_position;
- mutable U8Type m_values[5];
- mutable unsigned m_current;
-};
-
-template <class BaseIterator, class U32Type = ::boost::uint32_t>
-class u8_to_u32_iterator
-{
- // special values for pending iterator reads:
- BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
-
-#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 8);
- BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32);
-#endif
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U32Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_value == pending_read)
- extract_current();
- return m_value;
- }
- bool operator==(const u8_to_u32_iterator& that)const
- {
- return m_position == that.m_position;
- }
- bool operator!=(const u8_to_u32_iterator& that)const
- {
- return !(*this == that);
- }
- u8_to_u32_iterator& operator++()
- {
- // We must not start with a continuation character:
- if((static_cast<boost::uint8_t>(*m_position) & 0xC0) == 0x80)
- invalid_sequence();
- // skip high surrogate first if there is one:
- unsigned c = detail::utf8_byte_count(*m_position);
- if(m_value == pending_read)
- {
- // Since we haven't read in a value, we need to validate the code points:
- for(unsigned i = 0; i < c; ++i)
- {
- ++m_position;
- // We must have a continuation byte:
- if((i != c - 1) && ((static_cast<boost::uint8_t>(*m_position) & 0xC0) != 0x80))
- invalid_sequence();
- }
- }
- else
- {
- std::advance(m_position, c);
- }
- m_value = pending_read;
- return *this;
- }
- u8_to_u32_iterator operator++(int)
- {
- u8_to_u32_iterator r(*this);
- ++(*this);
- return r;
- }
- u8_to_u32_iterator& operator--()
- {
- // Keep backtracking until we don't have a trailing character:
- unsigned count = 0;
- while((*--m_position & 0xC0u) == 0x80u) ++count;
- // now check that the sequence was valid:
- if(count != detail::utf8_trailing_byte_count(*m_position))
- invalid_sequence();
- m_value = pending_read;
- return *this;
- }
- u8_to_u32_iterator operator--(int)
- {
- u8_to_u32_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u8_to_u32_iterator() : m_position()
- {
- m_value = pending_read;
- }
- u8_to_u32_iterator(BaseIterator b) : m_position(b)
- {
- m_value = pending_read;
- }
- //
- // Checked constructor:
- //
- u8_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b)
- {
- m_value = pending_read;
- //
- // We must not start with a continuation character, or end with a
- // truncated UTF-8 sequence otherwise we run the risk of going past
- // the start/end of the underlying sequence:
- //
- if(start != end)
- {
- unsigned char v = *start;
- if((v & 0xC0u) == 0x80u)
- invalid_sequence();
- if((b != start) && (b != end) && ((*b & 0xC0u) == 0x80u))
- invalid_sequence();
- BaseIterator pos = end;
- do
- {
- v = *--pos;
- }
- while((start != pos) && ((v & 0xC0u) == 0x80u));
- std::ptrdiff_t extra = detail::utf8_byte_count(v);
- if(std::distance(pos, end) < extra)
- invalid_sequence();
- }
- }
-private:
- static void invalid_sequence()
- {
- std::out_of_range e("Invalid UTF-8 sequence encountered while trying to encode UTF-32 character");
- boost::throw_exception(e);
- }
- void extract_current()const
- {
- m_value = static_cast<U32Type>(static_cast< ::boost::uint8_t>(*m_position));
- // we must not have a continuation character:
- if((m_value & 0xC0u) == 0x80u)
- invalid_sequence();
- // see how many extra bytes we have:
- unsigned extra = detail::utf8_trailing_byte_count(*m_position);
- // extract the extra bits, 6 from each extra byte:
- BaseIterator next(m_position);
- for(unsigned c = 0; c < extra; ++c)
- {
- ++next;
- m_value <<= 6;
- // We must have a continuation byte:
- if((static_cast<boost::uint8_t>(*next) & 0xC0) != 0x80)
- invalid_sequence();
- m_value += static_cast<boost::uint8_t>(*next) & 0x3Fu;
- }
- // we now need to remove a few of the leftmost bits, but how many depends
- // upon how many extra bytes we've extracted:
- static const boost::uint32_t masks[4] =
- {
- 0x7Fu,
- 0x7FFu,
- 0xFFFFu,
- 0x1FFFFFu,
- };
- m_value &= masks[extra];
- // check the result is in range:
- if(m_value > static_cast<U32Type>(0x10FFFFu))
- invalid_sequence();
- // The result must not be a surrogate:
- if((m_value >= static_cast<U32Type>(0xD800)) && (m_value <= static_cast<U32Type>(0xDFFF)))
- invalid_sequence();
- // We should not have had an invalidly encoded UTF8 sequence:
- if((extra > 0) && (m_value <= static_cast<U32Type>(masks[extra - 1])))
- invalid_sequence();
- }
- BaseIterator m_position;
- mutable U32Type m_value;
-};
-
-template <class BaseIterator>
-class utf16_output_iterator
-{
-public:
- typedef void difference_type;
- typedef void value_type;
- typedef boost::uint32_t* pointer;
- typedef boost::uint32_t& reference;
- typedef std::output_iterator_tag iterator_category;
-
- utf16_output_iterator(const BaseIterator& b)
- : m_position(b){}
- utf16_output_iterator(const utf16_output_iterator& that)
- : m_position(that.m_position){}
- utf16_output_iterator& operator=(const utf16_output_iterator& that)
- {
- m_position = that.m_position;
- return *this;
- }
- const utf16_output_iterator& operator*()const
- {
- return *this;
- }
- void operator=(boost::uint32_t val)const
- {
- push(val);
- }
- utf16_output_iterator& operator++()
- {
- return *this;
- }
- utf16_output_iterator& operator++(int)
- {
- return *this;
- }
- BaseIterator base()const
- {
- return m_position;
- }
-private:
- void push(boost::uint32_t v)const
- {
- if(v >= 0x10000u)
- {
- // begin by checking for a code point out of range:
- if(v > 0x10FFFFu)
- detail::invalid_utf32_code_point(v);
- // split into two surrogates:
- *m_position++ = static_cast<boost::uint16_t>(v >> 10) + detail::high_surrogate_base;
- *m_position++ = static_cast<boost::uint16_t>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
- }
- else
- {
- // 16-bit code point:
- // value must not be a surrogate:
- if(detail::is_surrogate(v))
- detail::invalid_utf32_code_point(v);
- *m_position++ = static_cast<boost::uint16_t>(v);
- }
- }
- mutable BaseIterator m_position;
-};
-
-template <class BaseIterator>
-class utf8_output_iterator
-{
-public:
- typedef void difference_type;
- typedef void value_type;
- typedef boost::uint32_t* pointer;
- typedef boost::uint32_t& reference;
- typedef std::output_iterator_tag iterator_category;
-
- utf8_output_iterator(const BaseIterator& b)
- : m_position(b){}
- utf8_output_iterator(const utf8_output_iterator& that)
- : m_position(that.m_position){}
- utf8_output_iterator& operator=(const utf8_output_iterator& that)
- {
- m_position = that.m_position;
- return *this;
- }
- const utf8_output_iterator& operator*()const
- {
- return *this;
- }
- void operator=(boost::uint32_t val)const
- {
- push(val);
- }
- utf8_output_iterator& operator++()
- {
- return *this;
- }
- utf8_output_iterator& operator++(int)
- {
- return *this;
- }
- BaseIterator base()const
- {
- return m_position;
- }
-private:
- void push(boost::uint32_t c)const
- {
- if(c > 0x10FFFFu)
- detail::invalid_utf32_code_point(c);
- if(c < 0x80u)
- {
- *m_position++ = static_cast<unsigned char>(c);
- }
- else if(c < 0x800u)
- {
- *m_position++ = static_cast<unsigned char>(0xC0u + (c >> 6));
- *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- else if(c < 0x10000u)
- {
- *m_position++ = static_cast<unsigned char>(0xE0u + (c >> 12));
- *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- else
- {
- *m_position++ = static_cast<unsigned char>(0xF0u + (c >> 18));
- *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
- *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- }
- mutable BaseIterator m_position;
-};
-
-} // namespace boost
-
-#endif // BOOST_REGEX_UNICODE_ITERATOR_HPP
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v5/icu.hpp b/contrib/restricted/boost/regex/include/boost/regex/v5/icu.hpp
deleted file mode 100644
index aefd97684a..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v5/icu.hpp
+++ /dev/null
@@ -1,1402 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE icu.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Unicode regular expressions on top of the ICU Library.
- */
-
-#ifndef BOOST_REGEX_ICU_V5_HPP
-#define BOOST_REGEX_ICU_V5_HPP
-
-#include <unicode/utypes.h>
-#include <unicode/uchar.h>
-#include <unicode/coll.h>
-#include <type_traits>
-#include <functional>
-#include <boost/regex.hpp>
-#include <boost/regex/v5/unicode_iterator.hpp>
-
-#ifdef BOOST_REGEX_MSVC
-#pragma warning (push)
-#pragma warning (disable: 4251)
-#endif
-
-namespace boost{
-
-namespace BOOST_REGEX_DETAIL_NS{
-
-//
-// Implementation details:
-//
-class icu_regex_traits_implementation
-{
- typedef UChar32 char_type;
- typedef std::size_t size_type;
- typedef std::vector<char_type> string_type;
- typedef U_NAMESPACE_QUALIFIER Locale locale_type;
- typedef std::uint_least32_t char_class_type;
-public:
- icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& l)
- : m_locale(l)
- {
- UErrorCode success = U_ZERO_ERROR;
- m_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success));
- if(U_SUCCESS(success) == 0)
- init_error();
- m_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::IDENTICAL);
- success = U_ZERO_ERROR;
- m_primary_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success));
- if(U_SUCCESS(success) == 0)
- init_error();
- m_primary_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::PRIMARY);
- }
- U_NAMESPACE_QUALIFIER Locale getloc()const
- {
- return m_locale;
- }
- string_type do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const
- {
- // TODO make thread safe!!!! :
- typedef u32_to_u16_iterator<const char_type*, ::UChar> itt;
- itt i(p1), j(p2);
- std::vector< ::UChar> t(i, j);
- std::uint8_t result[100];
- std::int32_t len;
- if (!t.empty())
- len = pcoll->getSortKey(&*t.begin(), static_cast<std::int32_t>(t.size()), result, sizeof(result));
- else
- len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast<std::int32_t>(0), result, sizeof(result));
- if (std::size_t(len) > sizeof(result))
- {
- std::unique_ptr< std::uint8_t[]> presult(new ::uint8_t[len + 1]);
- if (!t.empty())
- len = pcoll->getSortKey(&*t.begin(), static_cast<std::int32_t>(t.size()), presult.get(), len + 1);
- else
- len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast<std::int32_t>(0), presult.get(), len + 1);
- if ((0 == presult[len - 1]) && (len > 1))
- --len;
- return string_type(presult.get(), presult.get() + len);
- }
- if ((0 == result[len - 1]) && (len > 1))
- --len;
- return string_type(result, result + len);
- }
- string_type transform(const char_type* p1, const char_type* p2) const
- {
- return do_transform(p1, p2, m_collator.get());
- }
- string_type transform_primary(const char_type* p1, const char_type* p2) const
- {
- return do_transform(p1, p2, m_primary_collator.get());
- }
-private:
- void init_error()
- {
- std::runtime_error e("Could not initialize ICU resources");
-#ifndef BOOST_REGEX_STANDALONE
- boost::throw_exception(e);
-#else
- throw e;
-#endif
- }
- U_NAMESPACE_QUALIFIER Locale m_locale; // The ICU locale that we're using
- std::unique_ptr< U_NAMESPACE_QUALIFIER Collator> m_collator; // The full collation object
- std::unique_ptr< U_NAMESPACE_QUALIFIER Collator> m_primary_collator; // The primary collation object
-};
-inline std::shared_ptr<icu_regex_traits_implementation> get_icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& loc)
-{
- return std::shared_ptr<icu_regex_traits_implementation>(new icu_regex_traits_implementation(loc));
-}
-
-}
-
-class icu_regex_traits
-{
-public:
- typedef UChar32 char_type;
- typedef std::size_t size_type;
- typedef std::vector<char_type> string_type;
- typedef U_NAMESPACE_QUALIFIER Locale locale_type;
- typedef std::uint64_t char_class_type;
-
- struct boost_extensions_tag{};
-
- icu_regex_traits()
- : m_pimpl(BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(U_NAMESPACE_QUALIFIER Locale()))
- {
- }
- static size_type length(const char_type* p)
- {
- size_type result = 0;
- while (*p)
- {
- ++p;
- ++result;
- }
- return result;
- }
-
- ::boost::regex_constants::syntax_type syntax_type(char_type c)const
- {
- return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
- }
- ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c) const
- {
- return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_escape_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
- }
- char_type translate(char_type c) const
- {
- return c;
- }
- char_type translate_nocase(char_type c) const
- {
- return ::u_foldCase(c, U_FOLD_CASE_DEFAULT);
- }
- char_type translate(char_type c, bool icase) const
- {
- return icase ? translate_nocase(c) : translate(c);
- }
- char_type tolower(char_type c) const
- {
- return ::u_tolower(c);
- }
- char_type toupper(char_type c) const
- {
- return ::u_toupper(c);
- }
- string_type transform(const char_type* p1, const char_type* p2) const
- {
- return m_pimpl->transform(p1, p2);
- }
- string_type transform_primary(const char_type* p1, const char_type* p2) const
- {
- return m_pimpl->transform_primary(p1, p2);
- }
- char_class_type lookup_classname(const char_type* p1, const char_type* p2) const
- {
- constexpr char_class_type mask_blank = char_class_type(1) << offset_blank;
- constexpr char_class_type mask_space = char_class_type(1) << offset_space;
- constexpr char_class_type mask_xdigit = char_class_type(1) << offset_xdigit;
- constexpr char_class_type mask_underscore = char_class_type(1) << offset_underscore;
- constexpr char_class_type mask_unicode = char_class_type(1) << offset_unicode;
- //constexpr char_class_type mask_any = char_class_type(1) << offset_any;
- //constexpr char_class_type mask_ascii = char_class_type(1) << offset_ascii;
- constexpr char_class_type mask_horizontal = char_class_type(1) << offset_horizontal;
- constexpr char_class_type mask_vertical = char_class_type(1) << offset_vertical;
-
- static const char_class_type masks[] =
- {
- 0,
- U_GC_L_MASK | U_GC_ND_MASK,
- U_GC_L_MASK,
- mask_blank,
- U_GC_CC_MASK | U_GC_CF_MASK | U_GC_ZL_MASK | U_GC_ZP_MASK,
- U_GC_ND_MASK,
- U_GC_ND_MASK,
- (0x3FFFFFFFu) & ~(U_GC_CC_MASK | U_GC_CF_MASK | U_GC_CS_MASK | U_GC_CN_MASK | U_GC_Z_MASK),
- mask_horizontal,
- U_GC_LL_MASK,
- U_GC_LL_MASK,
- ~(U_GC_C_MASK),
- U_GC_P_MASK,
- char_class_type(U_GC_Z_MASK) | mask_space,
- char_class_type(U_GC_Z_MASK) | mask_space,
- U_GC_LU_MASK,
- mask_unicode,
- U_GC_LU_MASK,
- mask_vertical,
- char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore,
- char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore,
- char_class_type(U_GC_ND_MASK) | mask_xdigit,
- };
-
- int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
- if (idx >= 0)
- return masks[idx + 1];
- char_class_type result = lookup_icu_mask(p1, p2);
- if (result != 0)
- return result;
-
- if (idx < 0)
- {
- string_type s(p1, p2);
- string_type::size_type i = 0;
- while (i < s.size())
- {
- s[i] = static_cast<char>((::u_tolower)(s[i]));
- if (::u_isspace(s[i]) || (s[i] == '-') || (s[i] == '_'))
- s.erase(s.begin() + i, s.begin() + i + 1);
- else
- {
- s[i] = static_cast<char>((::u_tolower)(s[i]));
- ++i;
- }
- }
- if (!s.empty())
- idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
- if (idx >= 0)
- return masks[idx + 1];
- if (!s.empty())
- result = lookup_icu_mask(&*s.begin(), &*s.begin() + s.size());
- if (result != 0)
- return result;
- }
- BOOST_REGEX_ASSERT(std::size_t(idx + 1) < sizeof(masks) / sizeof(masks[0]));
- return masks[idx + 1];
- }
- string_type lookup_collatename(const char_type* p1, const char_type* p2) const
- {
- string_type result;
- if (std::find_if(p1, p2, std::bind(std::greater< ::UChar32>(), std::placeholders::_1, 0x7f)) == p2)
- {
- std::string s(p1, p2);
- // Try Unicode name:
- UErrorCode err = U_ZERO_ERROR;
- UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, s.c_str(), &err);
- if (U_SUCCESS(err))
- {
- result.push_back(c);
- return result;
- }
- // Try Unicode-extended name:
- err = U_ZERO_ERROR;
- c = ::u_charFromName(U_EXTENDED_CHAR_NAME, s.c_str(), &err);
- if (U_SUCCESS(err))
- {
- result.push_back(c);
- return result;
- }
- // try POSIX name:
- s = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s);
- result.assign(s.begin(), s.end());
- }
- if (result.empty() && (p2 - p1 == 1))
- result.push_back(*p1);
- return result;
- }
- bool isctype(char_type c, char_class_type f) const
- {
- constexpr char_class_type mask_blank = char_class_type(1) << offset_blank;
- constexpr char_class_type mask_space = char_class_type(1) << offset_space;
- constexpr char_class_type mask_xdigit = char_class_type(1) << offset_xdigit;
- constexpr char_class_type mask_underscore = char_class_type(1) << offset_underscore;
- constexpr char_class_type mask_unicode = char_class_type(1) << offset_unicode;
- constexpr char_class_type mask_any = char_class_type(1) << offset_any;
- constexpr char_class_type mask_ascii = char_class_type(1) << offset_ascii;
- constexpr char_class_type mask_horizontal = char_class_type(1) << offset_horizontal;
- constexpr char_class_type mask_vertical = char_class_type(1) << offset_vertical;
-
- // check for standard catagories first:
- char_class_type m = char_class_type(static_cast<char_class_type>(1) << u_charType(c));
- if ((m & f) != 0)
- return true;
- // now check for special cases:
- if (((f & mask_blank) != 0) && u_isblank(c))
- return true;
- if (((f & mask_space) != 0) && u_isspace(c))
- return true;
- if (((f & mask_xdigit) != 0) && (u_digit(c, 16) >= 0))
- return true;
- if (((f & mask_unicode) != 0) && (c >= 0x100))
- return true;
- if (((f & mask_underscore) != 0) && (c == '_'))
- return true;
- if (((f & mask_any) != 0) && (c <= 0x10FFFF))
- return true;
- if (((f & mask_ascii) != 0) && (c <= 0x7F))
- return true;
- if (((f & mask_vertical) != 0) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK)))
- return true;
- if (((f & mask_horizontal) != 0) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v')))
- return true;
- return false;
- }
- std::intmax_t toi(const char_type*& p1, const char_type* p2, int radix)const
- {
- return BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
- }
- int value(char_type c, int radix)const
- {
- return u_digit(c, static_cast< std::int8_t>(radix));
- }
- locale_type imbue(locale_type l)
- {
- locale_type result(m_pimpl->getloc());
- m_pimpl = BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(l);
- return result;
- }
- locale_type getloc()const
- {
- return locale_type();
- }
- std::string error_string(::boost::regex_constants::error_type n) const
- {
- return BOOST_REGEX_DETAIL_NS::get_default_error_string(n);
- }
-private:
- icu_regex_traits(const icu_regex_traits&);
- icu_regex_traits& operator=(const icu_regex_traits&);
-
- //
- // define the bitmasks offsets we need for additional character properties:
- //
- enum{
- offset_blank = U_CHAR_CATEGORY_COUNT,
- offset_space = U_CHAR_CATEGORY_COUNT+1,
- offset_xdigit = U_CHAR_CATEGORY_COUNT+2,
- offset_underscore = U_CHAR_CATEGORY_COUNT+3,
- offset_unicode = U_CHAR_CATEGORY_COUNT+4,
- offset_any = U_CHAR_CATEGORY_COUNT+5,
- offset_ascii = U_CHAR_CATEGORY_COUNT+6,
- offset_horizontal = U_CHAR_CATEGORY_COUNT+7,
- offset_vertical = U_CHAR_CATEGORY_COUNT+8
- };
-
- static char_class_type lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2)
- {
- //constexpr char_class_type mask_blank = char_class_type(1) << offset_blank;
- //constexpr char_class_type mask_space = char_class_type(1) << offset_space;
- //constexpr char_class_type mask_xdigit = char_class_type(1) << offset_xdigit;
- //constexpr char_class_type mask_underscore = char_class_type(1) << offset_underscore;
- //constexpr char_class_type mask_unicode = char_class_type(1) << offset_unicode;
- constexpr char_class_type mask_any = char_class_type(1) << offset_any;
- constexpr char_class_type mask_ascii = char_class_type(1) << offset_ascii;
- //constexpr char_class_type mask_horizontal = char_class_type(1) << offset_horizontal;
- //constexpr char_class_type mask_vertical = char_class_type(1) << offset_vertical;
-
- static const ::UChar32 prop_name_table[] = {
- /* any */ 'a', 'n', 'y',
- /* ascii */ 'a', 's', 'c', 'i', 'i',
- /* assigned */ 'a', 's', 's', 'i', 'g', 'n', 'e', 'd',
- /* c* */ 'c', '*',
- /* cc */ 'c', 'c',
- /* cf */ 'c', 'f',
- /* closepunctuation */ 'c', 'l', 'o', 's', 'e', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* cn */ 'c', 'n',
- /* co */ 'c', 'o',
- /* connectorpunctuation */ 'c', 'o', 'n', 'n', 'e', 'c', 't', 'o', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* control */ 'c', 'o', 'n', 't', 'r', 'o', 'l',
- /* cs */ 'c', 's',
- /* currencysymbol */ 'c', 'u', 'r', 'r', 'e', 'n', 'c', 'y', 's', 'y', 'm', 'b', 'o', 'l',
- /* dashpunctuation */ 'd', 'a', 's', 'h', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* decimaldigitnumber */ 'd', 'e', 'c', 'i', 'm', 'a', 'l', 'd', 'i', 'g', 'i', 't', 'n', 'u', 'm', 'b', 'e', 'r',
- /* enclosingmark */ 'e', 'n', 'c', 'l', 'o', 's', 'i', 'n', 'g', 'm', 'a', 'r', 'k',
- /* finalpunctuation */ 'f', 'i', 'n', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* format */ 'f', 'o', 'r', 'm', 'a', 't',
- /* initialpunctuation */ 'i', 'n', 'i', 't', 'i', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* l* */ 'l', '*',
- /* letter */ 'l', 'e', 't', 't', 'e', 'r',
- /* letternumber */ 'l', 'e', 't', 't', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r',
- /* lineseparator */ 'l', 'i', 'n', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* ll */ 'l', 'l',
- /* lm */ 'l', 'm',
- /* lo */ 'l', 'o',
- /* lowercaseletter */ 'l', 'o', 'w', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r',
- /* lt */ 'l', 't',
- /* lu */ 'l', 'u',
- /* m* */ 'm', '*',
- /* mark */ 'm', 'a', 'r', 'k',
- /* mathsymbol */ 'm', 'a', 't', 'h', 's', 'y', 'm', 'b', 'o', 'l',
- /* mc */ 'm', 'c',
- /* me */ 'm', 'e',
- /* mn */ 'm', 'n',
- /* modifierletter */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r',
- /* modifiersymbol */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l',
- /* n* */ 'n', '*',
- /* nd */ 'n', 'd',
- /* nl */ 'n', 'l',
- /* no */ 'n', 'o',
- /* nonspacingmark */ 'n', 'o', 'n', 's', 'p', 'a', 'c', 'i', 'n', 'g', 'm', 'a', 'r', 'k',
- /* notassigned */ 'n', 'o', 't', 'a', 's', 's', 'i', 'g', 'n', 'e', 'd',
- /* number */ 'n', 'u', 'm', 'b', 'e', 'r',
- /* openpunctuation */ 'o', 'p', 'e', 'n', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* other */ 'o', 't', 'h', 'e', 'r',
- /* otherletter */ 'o', 't', 'h', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r',
- /* othernumber */ 'o', 't', 'h', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r',
- /* otherpunctuation */ 'o', 't', 'h', 'e', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* othersymbol */ 'o', 't', 'h', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l',
- /* p* */ 'p', '*',
- /* paragraphseparator */ 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* pc */ 'p', 'c',
- /* pd */ 'p', 'd',
- /* pe */ 'p', 'e',
- /* pf */ 'p', 'f',
- /* pi */ 'p', 'i',
- /* po */ 'p', 'o',
- /* privateuse */ 'p', 'r', 'i', 'v', 'a', 't', 'e', 'u', 's', 'e',
- /* ps */ 'p', 's',
- /* punctuation */ 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n',
- /* s* */ 's', '*',
- /* sc */ 's', 'c',
- /* separator */ 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* sk */ 's', 'k',
- /* sm */ 's', 'm',
- /* so */ 's', 'o',
- /* spaceseparator */ 's', 'p', 'a', 'c', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r',
- /* spacingcombiningmark */ 's', 'p', 'a', 'c', 'i', 'n', 'g', 'c', 'o', 'm', 'b', 'i', 'n', 'i', 'n', 'g', 'm', 'a', 'r', 'k',
- /* surrogate */ 's', 'u', 'r', 'r', 'o', 'g', 'a', 't', 'e',
- /* symbol */ 's', 'y', 'm', 'b', 'o', 'l',
- /* titlecase */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e',
- /* titlecaseletter */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r',
- /* uppercaseletter */ 'u', 'p', 'p', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r',
- /* z* */ 'z', '*',
- /* zl */ 'z', 'l',
- /* zp */ 'z', 'p',
- /* zs */ 'z', 's',
- };
-
- static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> range_data[] = {
- { prop_name_table + 0, prop_name_table + 3, }, // any
- { prop_name_table + 3, prop_name_table + 8, }, // ascii
- { prop_name_table + 8, prop_name_table + 16, }, // assigned
- { prop_name_table + 16, prop_name_table + 18, }, // c*
- { prop_name_table + 18, prop_name_table + 20, }, // cc
- { prop_name_table + 20, prop_name_table + 22, }, // cf
- { prop_name_table + 22, prop_name_table + 38, }, // closepunctuation
- { prop_name_table + 38, prop_name_table + 40, }, // cn
- { prop_name_table + 40, prop_name_table + 42, }, // co
- { prop_name_table + 42, prop_name_table + 62, }, // connectorpunctuation
- { prop_name_table + 62, prop_name_table + 69, }, // control
- { prop_name_table + 69, prop_name_table + 71, }, // cs
- { prop_name_table + 71, prop_name_table + 85, }, // currencysymbol
- { prop_name_table + 85, prop_name_table + 100, }, // dashpunctuation
- { prop_name_table + 100, prop_name_table + 118, }, // decimaldigitnumber
- { prop_name_table + 118, prop_name_table + 131, }, // enclosingmark
- { prop_name_table + 131, prop_name_table + 147, }, // finalpunctuation
- { prop_name_table + 147, prop_name_table + 153, }, // format
- { prop_name_table + 153, prop_name_table + 171, }, // initialpunctuation
- { prop_name_table + 171, prop_name_table + 173, }, // l*
- { prop_name_table + 173, prop_name_table + 179, }, // letter
- { prop_name_table + 179, prop_name_table + 191, }, // letternumber
- { prop_name_table + 191, prop_name_table + 204, }, // lineseparator
- { prop_name_table + 204, prop_name_table + 206, }, // ll
- { prop_name_table + 206, prop_name_table + 208, }, // lm
- { prop_name_table + 208, prop_name_table + 210, }, // lo
- { prop_name_table + 210, prop_name_table + 225, }, // lowercaseletter
- { prop_name_table + 225, prop_name_table + 227, }, // lt
- { prop_name_table + 227, prop_name_table + 229, }, // lu
- { prop_name_table + 229, prop_name_table + 231, }, // m*
- { prop_name_table + 231, prop_name_table + 235, }, // mark
- { prop_name_table + 235, prop_name_table + 245, }, // mathsymbol
- { prop_name_table + 245, prop_name_table + 247, }, // mc
- { prop_name_table + 247, prop_name_table + 249, }, // me
- { prop_name_table + 249, prop_name_table + 251, }, // mn
- { prop_name_table + 251, prop_name_table + 265, }, // modifierletter
- { prop_name_table + 265, prop_name_table + 279, }, // modifiersymbol
- { prop_name_table + 279, prop_name_table + 281, }, // n*
- { prop_name_table + 281, prop_name_table + 283, }, // nd
- { prop_name_table + 283, prop_name_table + 285, }, // nl
- { prop_name_table + 285, prop_name_table + 287, }, // no
- { prop_name_table + 287, prop_name_table + 301, }, // nonspacingmark
- { prop_name_table + 301, prop_name_table + 312, }, // notassigned
- { prop_name_table + 312, prop_name_table + 318, }, // number
- { prop_name_table + 318, prop_name_table + 333, }, // openpunctuation
- { prop_name_table + 333, prop_name_table + 338, }, // other
- { prop_name_table + 338, prop_name_table + 349, }, // otherletter
- { prop_name_table + 349, prop_name_table + 360, }, // othernumber
- { prop_name_table + 360, prop_name_table + 376, }, // otherpunctuation
- { prop_name_table + 376, prop_name_table + 387, }, // othersymbol
- { prop_name_table + 387, prop_name_table + 389, }, // p*
- { prop_name_table + 389, prop_name_table + 407, }, // paragraphseparator
- { prop_name_table + 407, prop_name_table + 409, }, // pc
- { prop_name_table + 409, prop_name_table + 411, }, // pd
- { prop_name_table + 411, prop_name_table + 413, }, // pe
- { prop_name_table + 413, prop_name_table + 415, }, // pf
- { prop_name_table + 415, prop_name_table + 417, }, // pi
- { prop_name_table + 417, prop_name_table + 419, }, // po
- { prop_name_table + 419, prop_name_table + 429, }, // privateuse
- { prop_name_table + 429, prop_name_table + 431, }, // ps
- { prop_name_table + 431, prop_name_table + 442, }, // punctuation
- { prop_name_table + 442, prop_name_table + 444, }, // s*
- { prop_name_table + 444, prop_name_table + 446, }, // sc
- { prop_name_table + 446, prop_name_table + 455, }, // separator
- { prop_name_table + 455, prop_name_table + 457, }, // sk
- { prop_name_table + 457, prop_name_table + 459, }, // sm
- { prop_name_table + 459, prop_name_table + 461, }, // so
- { prop_name_table + 461, prop_name_table + 475, }, // spaceseparator
- { prop_name_table + 475, prop_name_table + 495, }, // spacingcombiningmark
- { prop_name_table + 495, prop_name_table + 504, }, // surrogate
- { prop_name_table + 504, prop_name_table + 510, }, // symbol
- { prop_name_table + 510, prop_name_table + 519, }, // titlecase
- { prop_name_table + 519, prop_name_table + 534, }, // titlecaseletter
- { prop_name_table + 534, prop_name_table + 549, }, // uppercaseletter
- { prop_name_table + 549, prop_name_table + 551, }, // z*
- { prop_name_table + 551, prop_name_table + 553, }, // zl
- { prop_name_table + 553, prop_name_table + 555, }, // zp
- { prop_name_table + 555, prop_name_table + 557, }, // zs
- };
-
- static const icu_regex_traits::char_class_type icu_class_map[] = {
- mask_any, // any
- mask_ascii, // ascii
- (0x3FFFFFFFu) & ~(U_GC_CN_MASK), // assigned
- U_GC_C_MASK, // c*
- U_GC_CC_MASK, // cc
- U_GC_CF_MASK, // cf
- U_GC_PE_MASK, // closepunctuation
- U_GC_CN_MASK, // cn
- U_GC_CO_MASK, // co
- U_GC_PC_MASK, // connectorpunctuation
- U_GC_CC_MASK, // control
- U_GC_CS_MASK, // cs
- U_GC_SC_MASK, // currencysymbol
- U_GC_PD_MASK, // dashpunctuation
- U_GC_ND_MASK, // decimaldigitnumber
- U_GC_ME_MASK, // enclosingmark
- U_GC_PF_MASK, // finalpunctuation
- U_GC_CF_MASK, // format
- U_GC_PI_MASK, // initialpunctuation
- U_GC_L_MASK, // l*
- U_GC_L_MASK, // letter
- U_GC_NL_MASK, // letternumber
- U_GC_ZL_MASK, // lineseparator
- U_GC_LL_MASK, // ll
- U_GC_LM_MASK, // lm
- U_GC_LO_MASK, // lo
- U_GC_LL_MASK, // lowercaseletter
- U_GC_LT_MASK, // lt
- U_GC_LU_MASK, // lu
- U_GC_M_MASK, // m*
- U_GC_M_MASK, // mark
- U_GC_SM_MASK, // mathsymbol
- U_GC_MC_MASK, // mc
- U_GC_ME_MASK, // me
- U_GC_MN_MASK, // mn
- U_GC_LM_MASK, // modifierletter
- U_GC_SK_MASK, // modifiersymbol
- U_GC_N_MASK, // n*
- U_GC_ND_MASK, // nd
- U_GC_NL_MASK, // nl
- U_GC_NO_MASK, // no
- U_GC_MN_MASK, // nonspacingmark
- U_GC_CN_MASK, // notassigned
- U_GC_N_MASK, // number
- U_GC_PS_MASK, // openpunctuation
- U_GC_C_MASK, // other
- U_GC_LO_MASK, // otherletter
- U_GC_NO_MASK, // othernumber
- U_GC_PO_MASK, // otherpunctuation
- U_GC_SO_MASK, // othersymbol
- U_GC_P_MASK, // p*
- U_GC_ZP_MASK, // paragraphseparator
- U_GC_PC_MASK, // pc
- U_GC_PD_MASK, // pd
- U_GC_PE_MASK, // pe
- U_GC_PF_MASK, // pf
- U_GC_PI_MASK, // pi
- U_GC_PO_MASK, // po
- U_GC_CO_MASK, // privateuse
- U_GC_PS_MASK, // ps
- U_GC_P_MASK, // punctuation
- U_GC_S_MASK, // s*
- U_GC_SC_MASK, // sc
- U_GC_Z_MASK, // separator
- U_GC_SK_MASK, // sk
- U_GC_SM_MASK, // sm
- U_GC_SO_MASK, // so
- U_GC_ZS_MASK, // spaceseparator
- U_GC_MC_MASK, // spacingcombiningmark
- U_GC_CS_MASK, // surrogate
- U_GC_S_MASK, // symbol
- U_GC_LT_MASK, // titlecase
- U_GC_LT_MASK, // titlecaseletter
- U_GC_LU_MASK, // uppercaseletter
- U_GC_Z_MASK, // z*
- U_GC_ZL_MASK, // zl
- U_GC_ZP_MASK, // zp
- U_GC_ZS_MASK, // zs
- };
-
-
- const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_begin = range_data;
- const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data) / sizeof(range_data[0]));
-
- BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> t = { p1, p2, };
- const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t);
- if ((p != ranges_end) && (t == *p))
- return icu_class_map[p - ranges_begin];
- return 0;
- }
- std::shared_ptr< ::boost::BOOST_REGEX_DETAIL_NS::icu_regex_traits_implementation> m_pimpl;
-};
-
-} // namespace boost
-
-namespace boost{
-
-// types:
-typedef basic_regex< ::UChar32, icu_regex_traits> u32regex;
-typedef match_results<const ::UChar32*> u32match;
-typedef match_results<const ::UChar*> u16match;
-
-//
-// Construction of 32-bit regex types from UTF-8 and UTF-16 primitives:
-//
-namespace BOOST_REGEX_DETAIL_NS{
-
-template <class InputIterator>
-inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const std::integral_constant<int, 1>*)
-{
- typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type;
- return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt);
-}
-
-template <class InputIterator>
-inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const std::integral_constant<int, 2>*)
-{
- typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type;
- return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt);
-}
-
-template <class InputIterator>
-inline u32regex do_make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt,
- const std::integral_constant<int, 4>*)
-{
- return u32regex(i, j, opt);
-}
-}
-
-// BOOST_REGEX_UCHAR_IS_WCHAR_T
-//
-// Source inspection of unicode/umachine.h in ICU version 59 indicates that:
-//
-// On version 59, UChar is always char16_t in C++ mode (and uint16_t in C mode)
-//
-// On earlier versions, the logic is
-//
-// #if U_SIZEOF_WCHAR_T==2
-// typedef wchar_t OldUChar;
-// #elif defined(__CHAR16_TYPE__)
-// typedef __CHAR16_TYPE__ OldUChar;
-// #else
-// typedef uint16_t OldUChar;
-// #endif
-//
-// That is, UChar is wchar_t only on versions below 59, when U_SIZEOF_WCHAR_T==2
-//
-// Hence,
-
-#define BOOST_REGEX_UCHAR_IS_WCHAR_T (U_ICU_VERSION_MAJOR_NUM < 59 && U_SIZEOF_WCHAR_T == 2)
-
-#if BOOST_REGEX_UCHAR_IS_WCHAR_T
- static_assert((std::is_same<UChar, wchar_t>::value), "Configuration logic has failed!");
-#else
- static_assert(!(std::is_same<UChar, wchar_t>::value), "Configuration logic has failed!");
-#endif
-
-//
-// Construction from an iterator pair:
-//
-template <class InputIterator>
-inline u32regex make_u32regex(InputIterator i,
- InputIterator j,
- boost::regex_constants::syntax_option_type opt)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(i, j, opt, static_cast<std::integral_constant<int, sizeof(*i)> const*>(0));
-}
-//
-// construction from UTF-8 nul-terminated strings:
-//
-inline u32regex make_u32regex(const char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(p), opt, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline u32regex make_u32regex(const unsigned char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(reinterpret_cast<const char*>(p)), opt, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-//
-// construction from UTF-16 nul-terminated strings:
-//
-#ifndef BOOST_NO_WREGEX
-inline u32regex make_u32regex(const wchar_t* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T
-inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-#endif
-//
-// construction from basic_string class-template:
-//
-template<class C, class T, class A>
-inline u32regex make_u32regex(const std::basic_string<C, T, A>& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.begin(), s.end(), opt, static_cast<std::integral_constant<int, sizeof(C)> const*>(0));
-}
-//
-// Construction from ICU string type:
-//
-inline u32regex make_u32regex(const U_NAMESPACE_QUALIFIER UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
-{
- return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-
-//
-// regex_match overloads that widen the character type as appropriate:
-//
-namespace BOOST_REGEX_DETAIL_NS{
-template<class MR1, class MR2, class NSubs>
-void copy_results(MR1& out, MR2 const& in, NSubs named_subs)
-{
- // copy results from an adapted MR2 match_results:
- out.set_size(in.size(), in.prefix().first.base(), in.suffix().second.base());
- out.set_base(in.base().base());
- out.set_named_subs(named_subs);
- for(int i = 0; i < (int)in.size(); ++i)
- {
- if(in[i].matched || !i)
- {
- out.set_first(in[i].first.base(), i);
- out.set_second(in[i].second.base(), i, in[i].matched);
- }
- }
-#ifdef BOOST_REGEX_MATCH_EXTRA
- // Copy full capture info as well:
- for(int i = 0; i < (int)in.size(); ++i)
- {
- if(in[i].captures().size())
- {
- out[i].get_captures().assign(in[i].captures().size(), typename MR1::value_type());
- for(int j = 0; j < (int)out[i].captures().size(); ++j)
- {
- out[i].get_captures()[j].first = in[i].captures()[j].first.base();
- out[i].get_captures()[j].second = in[i].captures()[j].second.base();
- out[i].get_captures()[j].matched = in[i].captures()[j].matched;
- }
- }
- }
-#endif
-}
-
-template <class BidiIterator, class Allocator>
-inline bool do_regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- std::integral_constant<int, 4> const*)
-{
- return ::boost::regex_match(first, last, m, e, flags);
-}
-template <class BidiIterator, class Allocator>
-bool do_regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- std::integral_constant<int, 2> const*)
-{
- typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags);
- // copy results across to m:
- if(result) copy_results(m, what, e.get_named_subs());
- return result;
-}
-template <class BidiIterator, class Allocator>
-bool do_regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- std::integral_constant<int, 1> const*)
-{
- typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags);
- // copy results across to m:
- if(result) copy_results(m, what, e.get_named_subs());
- return result;
-}
-} // namespace BOOST_REGEX_DETAIL_NS
-
-template <class BidiIterator, class Allocator>
-inline bool u32regex_match(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0));
-}
-inline bool u32regex_match(const UChar* p,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
-inline bool u32regex_match(const wchar_t* p,
- match_results<const wchar_t*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_match(const char* p,
- match_results<const char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_match(const unsigned char* p,
- match_results<const unsigned char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_match(const std::string& s,
- match_results<std::string::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-#ifndef BOOST_NO_STD_WSTRING
-inline bool u32regex_match(const std::wstring& s,
- match_results<std::wstring::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-//
-// regex_match overloads that do not return what matched:
-//
-template <class BidiIterator>
-inline bool u32regex_match(BidiIterator first, BidiIterator last,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<BidiIterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0));
-}
-inline bool u32regex_match(const UChar* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
-inline bool u32regex_match(const wchar_t* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const wchar_t*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_match(const char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_match(const unsigned char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const unsigned char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_match(const std::string& s,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<std::string::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-#ifndef BOOST_NO_STD_WSTRING
-inline bool u32regex_match(const std::wstring& s,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<std::wstring::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-
-//
-// regex_search overloads that widen the character type as appropriate:
-//
-namespace BOOST_REGEX_DETAIL_NS{
-template <class BidiIterator, class Allocator>
-inline bool do_regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base,
- std::integral_constant<int, 4> const*)
-{
- return ::boost::regex_search(first, last, m, e, flags, base);
-}
-template <class BidiIterator, class Allocator>
-bool do_regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base,
- std::integral_constant<int, 2> const*)
-{
- typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base));
- // copy results across to m:
- if(result) copy_results(m, what, e.get_named_subs());
- return result;
-}
-template <class BidiIterator, class Allocator>
-bool do_regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base,
- std::integral_constant<int, 1> const*)
-{
- typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type;
- typedef match_results<conv_type> match_type;
- //typedef typename match_type::allocator_type alloc_type;
- match_type what;
- bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base));
- // copy results across to m:
- if(result) copy_results(m, what, e.get_named_subs());
- return result;
-}
-}
-
-template <class BidiIterator, class Allocator>
-inline bool u32regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0));
-}
-template <class BidiIterator, class Allocator>
-inline bool u32regex_search(BidiIterator first, BidiIterator last,
- match_results<BidiIterator, Allocator>& m,
- const u32regex& e,
- match_flag_type flags,
- BidiIterator base)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, base, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0));
-}
-inline bool u32regex_search(const UChar* p,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
-inline bool u32regex_search(const wchar_t* p,
- match_results<const wchar_t*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_search(const char* p,
- match_results<const char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_search(const unsigned char* p,
- match_results<const unsigned char*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_search(const std::string& s,
- match_results<std::string::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<std::integral_constant<int, 1> const*>(0));
-}
-#ifndef BOOST_NO_STD_WSTRING
-inline bool u32regex_search(const std::wstring& s,
- match_results<std::wstring::const_iterator>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- match_results<const UChar*>& m,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<std::integral_constant<int, 2> const*>(0));
-}
-template <class BidiIterator>
-inline bool u32regex_search(BidiIterator first, BidiIterator last,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<BidiIterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0));
-}
-inline bool u32regex_search(const UChar* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<std::integral_constant<int, 2> const*>(0));
-}
-#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX)
-inline bool u32regex_search(const wchar_t* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const wchar_t*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_search(const char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_search(const unsigned char* p,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const unsigned char*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<std::integral_constant<int, 1> const*>(0));
-}
-inline bool u32regex_search(const std::string& s,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<std::string::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<std::integral_constant<int, 1> const*>(0));
-}
-#ifndef BOOST_NO_STD_WSTRING
-inline bool u32regex_search(const std::wstring& s,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<std::wstring::const_iterator> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<std::integral_constant<int, sizeof(wchar_t)> const*>(0));
-}
-#endif
-inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- match_flag_type flags = match_default)
-{
- match_results<const UChar*> m;
- return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<std::integral_constant<int, 2> const*>(0));
-}
-
-//
-// overloads for regex_replace with utf-8 and utf-16 data types:
-//
-namespace BOOST_REGEX_DETAIL_NS{
-template <class I>
-inline std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >
- make_utf32_seq(I i, I j, std::integral_constant<int, 1> const*)
-{
- return std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >(boost::u8_to_u32_iterator<I>(i, i, j), boost::u8_to_u32_iterator<I>(j, i, j));
-}
-template <class I>
-inline std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >
- make_utf32_seq(I i, I j, std::integral_constant<int, 2> const*)
-{
- return std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >(boost::u16_to_u32_iterator<I>(i, i, j), boost::u16_to_u32_iterator<I>(j, i, j));
-}
-template <class I>
-inline std::pair< I, I >
- make_utf32_seq(I i, I j, std::integral_constant<int, 4> const*)
-{
- return std::pair< I, I >(i, j);
-}
-template <class charT>
-inline std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >
- make_utf32_seq(const charT* p, std::integral_constant<int, 1> const*)
-{
- std::size_t len = std::strlen((const char*)p);
- return std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >(boost::u8_to_u32_iterator<const charT*>(p, p, p+len), boost::u8_to_u32_iterator<const charT*>(p+len, p, p+len));
-}
-template <class charT>
-inline std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >
- make_utf32_seq(const charT* p, std::integral_constant<int, 2> const*)
-{
- std::size_t len = u_strlen((const UChar*)p);
- return std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >(boost::u16_to_u32_iterator<const charT*>(p, p, p + len), boost::u16_to_u32_iterator<const charT*>(p+len, p, p + len));
-}
-template <class charT>
-inline std::pair< const charT*, const charT* >
- make_utf32_seq(const charT* p, std::integral_constant<int, 4> const*)
-{
- return std::pair< const charT*, const charT* >(p, p+icu_regex_traits::length((UChar32 const*)p));
-}
-template <class OutputIterator>
-inline OutputIterator make_utf32_out(OutputIterator o, std::integral_constant<int, 4> const*)
-{
- return o;
-}
-template <class OutputIterator>
-inline utf16_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, std::integral_constant<int, 2> const*)
-{
- return o;
-}
-template <class OutputIterator>
-inline utf8_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, std::integral_constant<int, 1> const*)
-{
- return o;
-}
-
-template <class OutputIterator, class I1, class I2>
-OutputIterator do_regex_replace(OutputIterator out,
- std::pair<I1, I1> const& in,
- const u32regex& e,
- const std::pair<I2, I2>& fmt,
- match_flag_type flags
- )
-{
- // unfortunately we have to copy the format string in order to pass in onward:
- std::vector<UChar32> f;
- f.assign(fmt.first, fmt.second);
-
- regex_iterator<I1, UChar32, icu_regex_traits> i(in.first, in.second, e, flags);
- regex_iterator<I1, UChar32, icu_regex_traits> j;
- if(i == j)
- {
- if(!(flags & regex_constants::format_no_copy))
- out = std::copy(in.first, in.second, out);
- }
- else
- {
- I1 last_m = in.first;
- while(i != j)
- {
- if(!(flags & regex_constants::format_no_copy))
- out = std::copy(i->prefix().first, i->prefix().second, out);
- if(!f.empty())
- out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, &*f.begin(), &*f.begin() + f.size(), flags, e.get_traits());
- else
- out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, static_cast<UChar32 const*>(0), static_cast<UChar32 const*>(0), flags, e.get_traits());
- last_m = (*i)[0].second;
- if(flags & regex_constants::format_first_only)
- break;
- ++i;
- }
- if(!(flags & regex_constants::format_no_copy))
- out = std::copy(last_m, in.second, out);
- }
- return out;
-}
-template <class BaseIterator>
-inline const BaseIterator& extract_output_base(const BaseIterator& b)
-{
- return b;
-}
-template <class BaseIterator>
-inline BaseIterator extract_output_base(const utf8_output_iterator<BaseIterator>& b)
-{
- return b.base();
-}
-template <class BaseIterator>
-inline BaseIterator extract_output_base(const utf16_output_iterator<BaseIterator>& b)
-{
- return b.base();
-}
-} // BOOST_REGEX_DETAIL_NS
-
-template <class OutputIterator, class BidirectionalIterator, class charT>
-inline OutputIterator u32regex_replace(OutputIterator out,
- BidirectionalIterator first,
- BidirectionalIterator last,
- const u32regex& e,
- const charT* fmt,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::extract_output_base
- (
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt, static_cast<std::integral_constant<int, sizeof(*fmt)> const*>(0)),
- flags)
- );
-}
-
-template <class OutputIterator, class Iterator, class charT>
-inline OutputIterator u32regex_replace(OutputIterator out,
- Iterator first,
- Iterator last,
- const u32regex& e,
- const std::basic_string<charT>& fmt,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::extract_output_base
- (
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.begin(), fmt.end(), static_cast<std::integral_constant<int, sizeof(charT)> const*>(0)),
- flags)
- );
-}
-
-template <class OutputIterator, class Iterator>
-inline OutputIterator u32regex_replace(OutputIterator out,
- Iterator first,
- Iterator last,
- const u32regex& e,
- const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
- match_flag_type flags = match_default)
-{
- return BOOST_REGEX_DETAIL_NS::extract_output_base
- (
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<std::integral_constant<int, sizeof(*first)> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<std::integral_constant<int, 2> const*>(0)),
- flags)
- );
-}
-
-template <class charT>
-std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
- const u32regex& e,
- const charT* fmt,
- match_flag_type flags = match_default)
-{
- std::basic_string<charT> result;
- BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
- u32regex_replace(i, s.begin(), s.end(), e, fmt, flags);
- return result;
-}
-
-template <class charT>
-std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
- const u32regex& e,
- const std::basic_string<charT>& fmt,
- match_flag_type flags = match_default)
-{
- std::basic_string<charT> result;
- BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
- u32regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags);
- return result;
-}
-
-namespace BOOST_REGEX_DETAIL_NS{
-
-class unicode_string_out_iterator
-{
- U_NAMESPACE_QUALIFIER UnicodeString* out;
-public:
- unicode_string_out_iterator(U_NAMESPACE_QUALIFIER UnicodeString& s) : out(&s) {}
- unicode_string_out_iterator& operator++() { return *this; }
- unicode_string_out_iterator& operator++(int) { return *this; }
- unicode_string_out_iterator& operator*() { return *this; }
- unicode_string_out_iterator& operator=(UChar v)
- {
- *out += v;
- return *this;
- }
- typedef std::ptrdiff_t difference_type;
- typedef UChar value_type;
- typedef value_type* pointer;
- typedef value_type& reference;
- typedef std::output_iterator_tag iterator_category;
-};
-
-}
-
-inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- const UChar* fmt,
- match_flag_type flags = match_default)
-{
- U_NAMESPACE_QUALIFIER UnicodeString result;
- BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result);
- u32regex_replace(i, s.getBuffer(), s.getBuffer()+s.length(), e, fmt, flags);
- return result;
-}
-
-inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s,
- const u32regex& e,
- const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
- match_flag_type flags = match_default)
-{
- U_NAMESPACE_QUALIFIER UnicodeString result;
- BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result);
- BOOST_REGEX_DETAIL_NS::do_regex_replace(
- BOOST_REGEX_DETAIL_NS::make_utf32_out(i, static_cast<std::integral_constant<int, 2> const*>(0)),
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(s.getBuffer(), s.getBuffer()+s.length(), static_cast<std::integral_constant<int, 2> const*>(0)),
- e,
- BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<std::integral_constant<int, 2> const*>(0)),
- flags);
- return result;
-}
-
-} // namespace boost.
-
-#ifdef BOOST_REGEX_MSVC
-#pragma warning (pop)
-#endif
-
-#include <boost/regex/v5/u32regex_iterator.hpp>
-#include <boost/regex/v5/u32regex_token_iterator.hpp>
-
-#endif
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v5/iterator_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v5/iterator_traits.hpp
deleted file mode 100644
index 293db6bf8c..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v5/iterator_traits.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *
- * Copyright (c) 1998-2002
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE iterator_traits.cpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Declares iterator traits workarounds.
- */
-
-#ifndef BOOST_REGEX_V5_ITERATOR_TRAITS_HPP
-#define BOOST_REGEX_V5_ITERATOR_TRAITS_HPP
-
-namespace boost{
-namespace BOOST_REGEX_DETAIL_NS{
-
-template <class T>
-struct regex_iterator_traits : public std::iterator_traits<T> {};
-
-} // namespace BOOST_REGEX_DETAIL_NS
-} // namespace boost
-
-#endif
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_iterator.hpp
deleted file mode 100644
index 6677019aca..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_iterator.hpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- *
- * Copyright (c) 2003
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE u32regex_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Provides u32regex_iterator implementation.
- */
-
-#ifndef BOOST_REGEX_V5_U32REGEX_ITERATOR_HPP
-#define BOOST_REGEX_V5_U32REGEX_ITERATOR_HPP
-
-namespace boost{
-
-template <class BidirectionalIterator>
-class u32regex_iterator_implementation
-{
- typedef u32regex regex_type;
-
- match_results<BidirectionalIterator> what; // current match
- BidirectionalIterator base; // start of sequence
- BidirectionalIterator end; // end of sequence
- const regex_type re; // the expression
- match_flag_type flags; // flags for matching
-
-public:
- u32regex_iterator_implementation(const regex_type* p, BidirectionalIterator last, match_flag_type f)
- : base(), end(last), re(*p), flags(f){}
- bool init(BidirectionalIterator first)
- {
- base = first;
- return u32regex_search(first, end, what, re, flags, base);
- }
- bool compare(const u32regex_iterator_implementation& that)
- {
- if(this == &that) return true;
- return (&re.get_data() == &that.re.get_data()) && (end == that.end) && (flags == that.flags) && (what[0].first == that.what[0].first) && (what[0].second == that.what[0].second);
- }
- const match_results<BidirectionalIterator>& get()
- { return what; }
- bool next()
- {
- //if(what.prefix().first != what[0].second)
- // flags |= match_prev_avail;
- BidirectionalIterator next_start = what[0].second;
- match_flag_type f(flags);
- if(!what.length())
- f |= regex_constants::match_not_initial_null;
- //if(base != next_start)
- // f |= regex_constants::match_not_bob;
- bool result = u32regex_search(next_start, end, what, re, f, base);
- if(result)
- what.set_base(base);
- return result;
- }
-private:
- u32regex_iterator_implementation& operator=(const u32regex_iterator_implementation&);
-};
-
-template <class BidirectionalIterator>
-class u32regex_iterator
-{
-private:
- typedef u32regex_iterator_implementation<BidirectionalIterator> impl;
- typedef std::shared_ptr<impl> pimpl;
-public:
- typedef u32regex regex_type;
- typedef match_results<BidirectionalIterator> value_type;
- typedef typename std::iterator_traits<BidirectionalIterator>::difference_type
- difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef std::forward_iterator_tag iterator_category;
-
- u32regex_iterator(){}
- u32regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
- const regex_type& re,
- match_flag_type m = match_default)
- : pdata(new impl(&re, b, m))
- {
- if(!pdata->init(a))
- {
- pdata.reset();
- }
- }
- u32regex_iterator(const u32regex_iterator& that)
- : pdata(that.pdata) {}
- u32regex_iterator& operator=(const u32regex_iterator& that)
- {
- pdata = that.pdata;
- return *this;
- }
- bool operator==(const u32regex_iterator& that)const
- {
- if((pdata.get() == 0) || (that.pdata.get() == 0))
- return pdata.get() == that.pdata.get();
- return pdata->compare(*(that.pdata.get()));
- }
- bool operator!=(const u32regex_iterator& that)const
- { return !(*this == that); }
- const value_type& operator*()const
- { return pdata->get(); }
- const value_type* operator->()const
- { return &(pdata->get()); }
- u32regex_iterator& operator++()
- {
- cow();
- if(0 == pdata->next())
- {
- pdata.reset();
- }
- return *this;
- }
- u32regex_iterator operator++(int)
- {
- u32regex_iterator result(*this);
- ++(*this);
- return result;
- }
-private:
-
- pimpl pdata;
-
- void cow()
- {
- // copy-on-write
- if(pdata.get() && (pdata.use_count() > 1))
- {
- pdata.reset(new impl(*(pdata.get())));
- }
- }
-};
-
-typedef u32regex_iterator<const char*> utf8regex_iterator;
-typedef u32regex_iterator<const UChar*> utf16regex_iterator;
-typedef u32regex_iterator<const UChar32*> utf32regex_iterator;
-
-inline u32regex_iterator<const char*> make_u32regex_iterator(const char* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const char*>(p, p+std::strlen(p), e, m);
-}
-#ifndef BOOST_NO_WREGEX
-inline u32regex_iterator<const wchar_t*> make_u32regex_iterator(const wchar_t* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const wchar_t*>(p, p+std::wcslen(p), e, m);
-}
-#endif
-#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
-inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const UChar*>(p, p+u_strlen(p), e, m);
-}
-#endif
-template <class charT, class Traits, class Alloc>
-inline u32regex_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_iterator<iter_type>(p.begin(), p.end(), e, m);
-}
-inline u32regex_iterator<const UChar*> make_u32regex_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, m);
-}
-
-} // namespace boost
-
-#endif // BOOST_REGEX_V5_REGEX_ITERATOR_HPP
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_token_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_token_iterator.hpp
deleted file mode 100644
index 3d3032652f..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v5/u32regex_token_iterator.hpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- *
- * Copyright (c) 2003
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE u32regex_token_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Provides u32regex_token_iterator implementation.
- */
-
-#ifndef BOOST_REGEX_V5_U32REGEX_TOKEN_ITERATOR_HPP
-#define BOOST_REGEX_V5_U32REGEX_TOKEN_ITERATOR_HPP
-
-namespace boost{
-
-#ifdef BOOST_REGEX_MSVC
-# pragma warning(push)
-# pragma warning(disable:4700)
-#endif
-
-template <class BidirectionalIterator>
-class u32regex_token_iterator_implementation
-{
- typedef u32regex regex_type;
- typedef sub_match<BidirectionalIterator> value_type;
-
- match_results<BidirectionalIterator> what; // current match
- BidirectionalIterator end; // end of search area
- BidirectionalIterator base; // start of search area
- const regex_type re; // the expression
- match_flag_type flags; // match flags
- value_type result; // the current string result
- int N; // the current sub-expression being enumerated
- std::vector<int> subs; // the sub-expressions to enumerate
-
-public:
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, int sub, match_flag_type f)
- : end(last), re(*p), flags(f){ subs.push_back(sub); }
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f)
- : end(last), re(*p), flags(f), subs(v){}
- template <std::size_t CN>
- u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const int (&submatches)[CN], match_flag_type f)
- : end(last), re(*p), flags(f)
- {
- for(std::size_t i = 0; i < CN; ++i)
- {
- subs.push_back(submatches[i]);
- }
- }
-
- bool init(BidirectionalIterator first)
- {
- base = first;
- N = 0;
- if(u32regex_search(first, end, what, re, flags, base) == true)
- {
- N = 0;
- result = ((subs[N] == -1) ? what.prefix() : what[(int)subs[N]]);
- return true;
- }
- else if((subs[N] == -1) && (first != end))
- {
- result.first = first;
- result.second = end;
- result.matched = (first != end);
- N = -1;
- return true;
- }
- return false;
- }
- bool compare(const u32regex_token_iterator_implementation& that)
- {
- if(this == &that) return true;
- return (&re.get_data() == &that.re.get_data())
- && (end == that.end)
- && (flags == that.flags)
- && (N == that.N)
- && (what[0].first == that.what[0].first)
- && (what[0].second == that.what[0].second);
- }
- const value_type& get()
- { return result; }
- bool next()
- {
- if(N == -1)
- return false;
- if(N+1 < (int)subs.size())
- {
- ++N;
- result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
- return true;
- }
- //if(what.prefix().first != what[0].second)
- // flags |= match_prev_avail | regex_constants::match_not_bob;
- BidirectionalIterator last_end(what[0].second);
- if(u32regex_search(last_end, end, what, re, ((what[0].first == what[0].second) ? flags | regex_constants::match_not_initial_null : flags), base))
- {
- N =0;
- result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
- return true;
- }
- else if((last_end != end) && (subs[0] == -1))
- {
- N =-1;
- result.first = last_end;
- result.second = end;
- result.matched = (last_end != end);
- return true;
- }
- return false;
- }
-private:
- u32regex_token_iterator_implementation& operator=(const u32regex_token_iterator_implementation&);
-};
-
-template <class BidirectionalIterator>
-class u32regex_token_iterator
-{
-private:
- typedef u32regex_token_iterator_implementation<BidirectionalIterator> impl;
- typedef std::shared_ptr<impl> pimpl;
-public:
- typedef u32regex regex_type;
- typedef sub_match<BidirectionalIterator> value_type;
- typedef typename std::iterator_traits<BidirectionalIterator>::difference_type
- difference_type;
- typedef const value_type* pointer;
- typedef const value_type& reference;
- typedef std::forward_iterator_tag iterator_category;
-
- u32regex_token_iterator(){}
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- int submatch = 0, match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatch, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- const std::vector<int>& submatches, match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatches, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
- template <std::size_t N>
- u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
- const int (&submatches)[N], match_flag_type m = match_default)
- : pdata(new impl(&re, b, submatches, m))
- {
- if(!pdata->init(a))
- pdata.reset();
- }
- u32regex_token_iterator(const u32regex_token_iterator& that)
- : pdata(that.pdata) {}
- u32regex_token_iterator& operator=(const u32regex_token_iterator& that)
- {
- pdata = that.pdata;
- return *this;
- }
- bool operator==(const u32regex_token_iterator& that)const
- {
- if((pdata.get() == 0) || (that.pdata.get() == 0))
- return pdata.get() == that.pdata.get();
- return pdata->compare(*(that.pdata.get()));
- }
- bool operator!=(const u32regex_token_iterator& that)const
- { return !(*this == that); }
- const value_type& operator*()const
- { return pdata->get(); }
- const value_type* operator->()const
- { return &(pdata->get()); }
- u32regex_token_iterator& operator++()
- {
- cow();
- if(0 == pdata->next())
- {
- pdata.reset();
- }
- return *this;
- }
- u32regex_token_iterator operator++(int)
- {
- u32regex_token_iterator result(*this);
- ++(*this);
- return result;
- }
-private:
-
- pimpl pdata;
-
- void cow()
- {
- // copy-on-write
- if(pdata.get() && (pdata.use_count() > 1))
- {
- pdata.reset(new impl(*(pdata.get())));
- }
- }
-};
-
-typedef u32regex_token_iterator<const char*> utf8regex_token_iterator;
-typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator;
-typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator;
-
-// construction from an integral sub_match state_id:
-inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
-}
-#ifndef BOOST_NO_WREGEX
-inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
-}
-#endif
-#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
-}
-#endif
-template <class charT, class Traits, class Alloc>
-inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
-}
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
-}
-
-// construction from a reference to an array:
-template <std::size_t N>
-inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
-}
-#ifndef BOOST_NO_WREGEX
-template <std::size_t N>
-inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
-}
-#endif
-#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
-template <std::size_t N>
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
-}
-#endif
-template <class charT, class Traits, class Alloc, std::size_t N>
-inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
-}
-template <std::size_t N>
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
-}
-
-// construction from a vector of sub_match state_id's:
-inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
-}
-#ifndef BOOST_NO_WREGEX
-inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
-}
-#endif
-#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
-}
-#endif
-template <class charT, class Traits, class Alloc>
-inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
- return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
-}
-inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
-{
- return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
-}
-
-#ifdef BOOST_REGEX_MSVC
-# pragma warning(pop)
-#endif
-
-} // namespace boost
-
-#endif // BOOST_REGEX_V5_REGEX_TOKEN_ITERATOR_HPP
-
-
-
-
diff --git a/contrib/restricted/boost/regex/include/boost/regex/v5/unicode_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v5/unicode_iterator.hpp
deleted file mode 100644
index 9d3dd8b962..0000000000
--- a/contrib/restricted/boost/regex/include/boost/regex/v5/unicode_iterator.hpp
+++ /dev/null
@@ -1,862 +0,0 @@
-/*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
-
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE unicode_iterator.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Iterator adapters for converting between different Unicode encodings.
- */
-
-/****************************************************************************
-
-Contents:
-~~~~~~~~~
-
-1) Read Only, Input Adapters:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-template <class BaseIterator, class U8Type = std::uint8_t>
-class u32_to_u8_iterator;
-
-Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-8.
-
-template <class BaseIterator, class U32Type = std::uint32_t>
-class u8_to_u32_iterator;
-
-Adapts sequence of UTF-8 code points to "look like" a sequence of UTF-32.
-
-template <class BaseIterator, class U16Type = std::uint16_t>
-class u32_to_u16_iterator;
-
-Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-16.
-
-template <class BaseIterator, class U32Type = std::uint32_t>
-class u16_to_u32_iterator;
-
-Adapts sequence of UTF-16 code points to "look like" a sequence of UTF-32.
-
-2) Single pass output iterator adapters:
-
-template <class BaseIterator>
-class utf8_output_iterator;
-
-Accepts UTF-32 code points and forwards them on as UTF-8 code points.
-
-template <class BaseIterator>
-class utf16_output_iterator;
-
-Accepts UTF-32 code points and forwards them on as UTF-16 code points.
-
-****************************************************************************/
-
-#ifndef BOOST_REGEX_UNICODE_ITERATOR_HPP
-#define BOOST_REGEX_UNICODE_ITERATOR_HPP
-#include <cstdint>
-#include <boost/regex/config.hpp>
-#include <stdexcept>
-#include <sstream>
-#include <ios>
-#include <limits.h> // CHAR_BIT
-
-#ifndef BOOST_REGEX_STANDALONE
-#include <boost/throw_exception.hpp>
-#endif
-
-namespace boost{
-
-namespace detail{
-
-static const std::uint16_t high_surrogate_base = 0xD7C0u;
-static const std::uint16_t low_surrogate_base = 0xDC00u;
-static const std::uint32_t ten_bit_mask = 0x3FFu;
-
-inline bool is_high_surrogate(std::uint16_t v)
-{
- return (v & 0xFFFFFC00u) == 0xd800u;
-}
-inline bool is_low_surrogate(std::uint16_t v)
-{
- return (v & 0xFFFFFC00u) == 0xdc00u;
-}
-template <class T>
-inline bool is_surrogate(T v)
-{
- return (v & 0xFFFFF800u) == 0xd800;
-}
-
-inline unsigned utf8_byte_count(std::uint8_t c)
-{
- // if the most significant bit with a zero in it is in position
- // 8-N then there are N bytes in this UTF-8 sequence:
- std::uint8_t mask = 0x80u;
- unsigned result = 0;
- while(c & mask)
- {
- ++result;
- mask >>= 1;
- }
- return (result == 0) ? 1 : ((result > 4) ? 4 : result);
-}
-
-inline unsigned utf8_trailing_byte_count(std::uint8_t c)
-{
- return utf8_byte_count(c) - 1;
-}
-
-#ifdef BOOST_REGEX_MSVC
-#pragma warning(push)
-#pragma warning(disable:4100)
-#endif
-#ifndef BOOST_NO_EXCEPTIONS
-BOOST_REGEX_NORETURN
-#endif
-inline void invalid_utf32_code_point(std::uint32_t val)
-{
- std::stringstream ss;
- ss << "Invalid UTF-32 code point U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-16 sequence";
- std::out_of_range e(ss.str());
-#ifndef BOOST_REGEX_STANDALONE
- boost::throw_exception(e);
-#else
- throw e;
-#endif
-}
-#ifdef BOOST_REGEX_MSVC
-#pragma warning(pop)
-#endif
-
-
-} // namespace detail
-
-template <class BaseIterator, class U16Type = std::uint16_t>
-class u32_to_u16_iterator
-{
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- static_assert(sizeof(base_value_type)*CHAR_BIT == 32, "Incorrectly sized template argument");
- static_assert(sizeof(U16Type)*CHAR_BIT == 16, "Incorrectly sized template argument");
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U16Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_current == 2)
- extract_current();
- return m_values[m_current];
- }
- bool operator==(const u32_to_u16_iterator& that)const
- {
- if(m_position == that.m_position)
- {
- // Both m_currents must be equal, or both even
- // this is the same as saying their sum must be even:
- return (m_current + that.m_current) & 1u ? false : true;
- }
- return false;
- }
- bool operator!=(const u32_to_u16_iterator& that)const
- {
- return !(*this == that);
- }
- u32_to_u16_iterator& operator++()
- {
- // if we have a pending read then read now, so that we know whether
- // to skip a position, or move to a low-surrogate:
- if(m_current == 2)
- {
- // pending read:
- extract_current();
- }
- // move to the next surrogate position:
- ++m_current;
- // if we've reached the end skip a position:
- if(m_values[m_current] == 0)
- {
- m_current = 2;
- ++m_position;
- }
- return *this;
- }
- u32_to_u16_iterator operator++(int)
- {
- u32_to_u16_iterator r(*this);
- ++(*this);
- return r;
- }
- u32_to_u16_iterator& operator--()
- {
- if(m_current != 1)
- {
- // decrementing an iterator always leads to a valid position:
- --m_position;
- extract_current();
- m_current = m_values[1] ? 1 : 0;
- }
- else
- {
- m_current = 0;
- }
- return *this;
- }
- u32_to_u16_iterator operator--(int)
- {
- u32_to_u16_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u32_to_u16_iterator() : m_position(), m_current(0)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- }
- u32_to_u16_iterator(BaseIterator b) : m_position(b), m_current(2)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- }
-private:
-
- void extract_current()const
- {
- // begin by checking for a code point out of range:
- std::uint32_t v = *m_position;
- if(v >= 0x10000u)
- {
- if(v > 0x10FFFFu)
- detail::invalid_utf32_code_point(*m_position);
- // split into two surrogates:
- m_values[0] = static_cast<U16Type>(v >> 10) + detail::high_surrogate_base;
- m_values[1] = static_cast<U16Type>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
- m_current = 0;
- BOOST_REGEX_ASSERT(detail::is_high_surrogate(m_values[0]));
- BOOST_REGEX_ASSERT(detail::is_low_surrogate(m_values[1]));
- }
- else
- {
- // 16-bit code point:
- m_values[0] = static_cast<U16Type>(*m_position);
- m_values[1] = 0;
- m_current = 0;
- // value must not be a surrogate:
- if(detail::is_surrogate(m_values[0]))
- detail::invalid_utf32_code_point(*m_position);
- }
- }
- BaseIterator m_position;
- mutable U16Type m_values[3];
- mutable unsigned m_current;
-};
-
-template <class BaseIterator, class U32Type = std::uint32_t>
-class u16_to_u32_iterator
-{
- // special values for pending iterator reads:
- static const U32Type pending_read = 0xffffffffu;
-
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- static_assert(sizeof(base_value_type)*CHAR_BIT == 16, "Incorrectly sized template argument");
- static_assert(sizeof(U32Type)*CHAR_BIT == 32, "Incorrectly sized template argument");
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U32Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_value == pending_read)
- extract_current();
- return m_value;
- }
- bool operator==(const u16_to_u32_iterator& that)const
- {
- return m_position == that.m_position;
- }
- bool operator!=(const u16_to_u32_iterator& that)const
- {
- return !(*this == that);
- }
- u16_to_u32_iterator& operator++()
- {
- // skip high surrogate first if there is one:
- if(detail::is_high_surrogate(*m_position)) ++m_position;
- ++m_position;
- m_value = pending_read;
- return *this;
- }
- u16_to_u32_iterator operator++(int)
- {
- u16_to_u32_iterator r(*this);
- ++(*this);
- return r;
- }
- u16_to_u32_iterator& operator--()
- {
- --m_position;
- // if we have a low surrogate then go back one more:
- if(detail::is_low_surrogate(*m_position))
- --m_position;
- m_value = pending_read;
- return *this;
- }
- u16_to_u32_iterator operator--(int)
- {
- u16_to_u32_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u16_to_u32_iterator() : m_position()
- {
- m_value = pending_read;
- }
- u16_to_u32_iterator(BaseIterator b) : m_position(b)
- {
- m_value = pending_read;
- }
- //
- // Range checked version:
- //
- u16_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b)
- {
- m_value = pending_read;
- //
- // The range must not start with a low surrogate, or end in a high surrogate,
- // otherwise we run the risk of running outside the underlying input range.
- // Likewise b must not be located at a low surrogate.
- //
- std::uint16_t val;
- if(start != end)
- {
- if((b != start) && (b != end))
- {
- val = *b;
- if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u))
- invalid_code_point(val);
- }
- val = *start;
- if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u))
- invalid_code_point(val);
- val = *--end;
- if(detail::is_high_surrogate(val))
- invalid_code_point(val);
- }
- }
-private:
- static void invalid_code_point(std::uint16_t val)
- {
- std::stringstream ss;
- ss << "Misplaced UTF-16 surrogate U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-32 sequence";
- std::out_of_range e(ss.str());
-#ifndef BOOST_REGEX_STANDALONE
- boost::throw_exception(e);
-#else
- throw e;
-#endif
- }
- void extract_current()const
- {
- m_value = static_cast<U32Type>(static_cast< std::uint16_t>(*m_position));
- // if the last value is a high surrogate then adjust m_position and m_value as needed:
- if(detail::is_high_surrogate(*m_position))
- {
- // precondition; next value must have be a low-surrogate:
- BaseIterator next(m_position);
- std::uint16_t t = *++next;
- if((t & 0xFC00u) != 0xDC00u)
- invalid_code_point(t);
- m_value = (m_value - detail::high_surrogate_base) << 10;
- m_value |= (static_cast<U32Type>(static_cast< std::uint16_t>(t)) & detail::ten_bit_mask);
- }
- // postcondition; result must not be a surrogate:
- if(detail::is_surrogate(m_value))
- invalid_code_point(static_cast< std::uint16_t>(m_value));
- }
- BaseIterator m_position;
- mutable U32Type m_value;
-};
-
-template <class BaseIterator, class U8Type = std::uint8_t>
-class u32_to_u8_iterator
-{
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- static_assert(sizeof(base_value_type)*CHAR_BIT == 32, "Incorrectly sized template argument");
- static_assert(sizeof(U8Type)*CHAR_BIT == 8, "Incorrectly sized template argument");
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U8Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_current == 4)
- extract_current();
- return m_values[m_current];
- }
- bool operator==(const u32_to_u8_iterator& that)const
- {
- if(m_position == that.m_position)
- {
- // either the m_current's must be equal, or one must be 0 and
- // the other 4: which means neither must have bits 1 or 2 set:
- return (m_current == that.m_current)
- || (((m_current | that.m_current) & 3) == 0);
- }
- return false;
- }
- bool operator!=(const u32_to_u8_iterator& that)const
- {
- return !(*this == that);
- }
- u32_to_u8_iterator& operator++()
- {
- // if we have a pending read then read now, so that we know whether
- // to skip a position, or move to a low-surrogate:
- if(m_current == 4)
- {
- // pending read:
- extract_current();
- }
- // move to the next surrogate position:
- ++m_current;
- // if we've reached the end skip a position:
- if(m_values[m_current] == 0)
- {
- m_current = 4;
- ++m_position;
- }
- return *this;
- }
- u32_to_u8_iterator operator++(int)
- {
- u32_to_u8_iterator r(*this);
- ++(*this);
- return r;
- }
- u32_to_u8_iterator& operator--()
- {
- if((m_current & 3) == 0)
- {
- --m_position;
- extract_current();
- m_current = 3;
- while(m_current && (m_values[m_current] == 0))
- --m_current;
- }
- else
- --m_current;
- return *this;
- }
- u32_to_u8_iterator operator--(int)
- {
- u32_to_u8_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u32_to_u8_iterator() : m_position(), m_current(0)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- m_values[3] = 0;
- m_values[4] = 0;
- }
- u32_to_u8_iterator(BaseIterator b) : m_position(b), m_current(4)
- {
- m_values[0] = 0;
- m_values[1] = 0;
- m_values[2] = 0;
- m_values[3] = 0;
- m_values[4] = 0;
- }
-private:
-
- void extract_current()const
- {
- std::uint32_t c = *m_position;
- if(c > 0x10FFFFu)
- detail::invalid_utf32_code_point(c);
- if(c < 0x80u)
- {
- m_values[0] = static_cast<unsigned char>(c);
- m_values[1] = static_cast<unsigned char>(0u);
- m_values[2] = static_cast<unsigned char>(0u);
- m_values[3] = static_cast<unsigned char>(0u);
- }
- else if(c < 0x800u)
- {
- m_values[0] = static_cast<unsigned char>(0xC0u + (c >> 6));
- m_values[1] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- m_values[2] = static_cast<unsigned char>(0u);
- m_values[3] = static_cast<unsigned char>(0u);
- }
- else if(c < 0x10000u)
- {
- m_values[0] = static_cast<unsigned char>(0xE0u + (c >> 12));
- m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- m_values[2] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- m_values[3] = static_cast<unsigned char>(0u);
- }
- else
- {
- m_values[0] = static_cast<unsigned char>(0xF0u + (c >> 18));
- m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
- m_values[2] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- m_values[3] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- m_current= 0;
- }
- BaseIterator m_position;
- mutable U8Type m_values[5];
- mutable unsigned m_current;
-};
-
-template <class BaseIterator, class U32Type = std::uint32_t>
-class u8_to_u32_iterator
-{
- // special values for pending iterator reads:
- static const U32Type pending_read = 0xffffffffu;
-
- typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
-
- static_assert(sizeof(base_value_type)*CHAR_BIT == 8, "Incorrectly sized template argument");
- static_assert(sizeof(U32Type)*CHAR_BIT == 32, "Incorrectly sized template argument");
-
-public:
- typedef std::ptrdiff_t difference_type;
- typedef U32Type value_type;
- typedef value_type const* pointer;
- typedef value_type const reference;
- typedef std::bidirectional_iterator_tag iterator_category;
-
- reference operator*()const
- {
- if(m_value == pending_read)
- extract_current();
- return m_value;
- }
- bool operator==(const u8_to_u32_iterator& that)const
- {
- return m_position == that.m_position;
- }
- bool operator!=(const u8_to_u32_iterator& that)const
- {
- return !(*this == that);
- }
- u8_to_u32_iterator& operator++()
- {
- // We must not start with a continuation character:
- if((static_cast<std::uint8_t>(*m_position) & 0xC0) == 0x80)
- invalid_sequence();
- // skip high surrogate first if there is one:
- unsigned c = detail::utf8_byte_count(*m_position);
- if(m_value == pending_read)
- {
- // Since we haven't read in a value, we need to validate the code points:
- for(unsigned i = 0; i < c; ++i)
- {
- ++m_position;
- // We must have a continuation byte:
- if((i != c - 1) && ((static_cast<std::uint8_t>(*m_position) & 0xC0) != 0x80))
- invalid_sequence();
- }
- }
- else
- {
- std::advance(m_position, c);
- }
- m_value = pending_read;
- return *this;
- }
- u8_to_u32_iterator operator++(int)
- {
- u8_to_u32_iterator r(*this);
- ++(*this);
- return r;
- }
- u8_to_u32_iterator& operator--()
- {
- // Keep backtracking until we don't have a trailing character:
- unsigned count = 0;
- while((*--m_position & 0xC0u) == 0x80u) ++count;
- // now check that the sequence was valid:
- if(count != detail::utf8_trailing_byte_count(*m_position))
- invalid_sequence();
- m_value = pending_read;
- return *this;
- }
- u8_to_u32_iterator operator--(int)
- {
- u8_to_u32_iterator r(*this);
- --(*this);
- return r;
- }
- BaseIterator base()const
- {
- return m_position;
- }
- // construct:
- u8_to_u32_iterator() : m_position()
- {
- m_value = pending_read;
- }
- u8_to_u32_iterator(BaseIterator b) : m_position(b)
- {
- m_value = pending_read;
- }
- //
- // Checked constructor:
- //
- u8_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b)
- {
- m_value = pending_read;
- //
- // We must not start with a continuation character, or end with a
- // truncated UTF-8 sequence otherwise we run the risk of going past
- // the start/end of the underlying sequence:
- //
- if(start != end)
- {
- unsigned char v = *start;
- if((v & 0xC0u) == 0x80u)
- invalid_sequence();
- if((b != start) && (b != end) && ((*b & 0xC0u) == 0x80u))
- invalid_sequence();
- BaseIterator pos = end;
- do
- {
- v = *--pos;
- }
- while((start != pos) && ((v & 0xC0u) == 0x80u));
- std::ptrdiff_t extra = detail::utf8_byte_count(v);
- if(std::distance(pos, end) < extra)
- invalid_sequence();
- }
- }
-private:
- static void invalid_sequence()
- {
- std::out_of_range e("Invalid UTF-8 sequence encountered while trying to encode UTF-32 character");
-#ifndef BOOST_REGEX_STANDALONE
- boost::throw_exception(e);
-#else
- throw e;
-#endif
- }
- void extract_current()const
- {
- m_value = static_cast<U32Type>(static_cast< std::uint8_t>(*m_position));
- // we must not have a continuation character:
- if((m_value & 0xC0u) == 0x80u)
- invalid_sequence();
- // see how many extra bytes we have:
- unsigned extra = detail::utf8_trailing_byte_count(*m_position);
- // extract the extra bits, 6 from each extra byte:
- BaseIterator next(m_position);
- for(unsigned c = 0; c < extra; ++c)
- {
- ++next;
- m_value <<= 6;
- // We must have a continuation byte:
- if((static_cast<std::uint8_t>(*next) & 0xC0) != 0x80)
- invalid_sequence();
- m_value += static_cast<std::uint8_t>(*next) & 0x3Fu;
- }
- // we now need to remove a few of the leftmost bits, but how many depends
- // upon how many extra bytes we've extracted:
- static const std::uint32_t masks[4] =
- {
- 0x7Fu,
- 0x7FFu,
- 0xFFFFu,
- 0x1FFFFFu,
- };
- m_value &= masks[extra];
- // check the result is in range:
- if(m_value > static_cast<U32Type>(0x10FFFFu))
- invalid_sequence();
- // The result must not be a surrogate:
- if((m_value >= static_cast<U32Type>(0xD800)) && (m_value <= static_cast<U32Type>(0xDFFF)))
- invalid_sequence();
- // We should not have had an invalidly encoded UTF8 sequence:
- if((extra > 0) && (m_value <= static_cast<U32Type>(masks[extra - 1])))
- invalid_sequence();
- }
- BaseIterator m_position;
- mutable U32Type m_value;
-};
-
-template <class BaseIterator>
-class utf16_output_iterator
-{
-public:
- typedef void difference_type;
- typedef void value_type;
- typedef std::uint32_t* pointer;
- typedef std::uint32_t& reference;
- typedef std::output_iterator_tag iterator_category;
-
- utf16_output_iterator(const BaseIterator& b)
- : m_position(b){}
- utf16_output_iterator(const utf16_output_iterator& that)
- : m_position(that.m_position){}
- utf16_output_iterator& operator=(const utf16_output_iterator& that)
- {
- m_position = that.m_position;
- return *this;
- }
- const utf16_output_iterator& operator*()const
- {
- return *this;
- }
- void operator=(std::uint32_t val)const
- {
- push(val);
- }
- utf16_output_iterator& operator++()
- {
- return *this;
- }
- utf16_output_iterator& operator++(int)
- {
- return *this;
- }
- BaseIterator base()const
- {
- return m_position;
- }
-private:
- void push(std::uint32_t v)const
- {
- if(v >= 0x10000u)
- {
- // begin by checking for a code point out of range:
- if(v > 0x10FFFFu)
- detail::invalid_utf32_code_point(v);
- // split into two surrogates:
- *m_position++ = static_cast<std::uint16_t>(v >> 10) + detail::high_surrogate_base;
- *m_position++ = static_cast<std::uint16_t>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
- }
- else
- {
- // 16-bit code point:
- // value must not be a surrogate:
- if(detail::is_surrogate(v))
- detail::invalid_utf32_code_point(v);
- *m_position++ = static_cast<std::uint16_t>(v);
- }
- }
- mutable BaseIterator m_position;
-};
-
-template <class BaseIterator>
-class utf8_output_iterator
-{
-public:
- typedef void difference_type;
- typedef void value_type;
- typedef std::uint32_t* pointer;
- typedef std::uint32_t& reference;
- typedef std::output_iterator_tag iterator_category;
-
- utf8_output_iterator(const BaseIterator& b)
- : m_position(b){}
- utf8_output_iterator(const utf8_output_iterator& that)
- : m_position(that.m_position){}
- utf8_output_iterator& operator=(const utf8_output_iterator& that)
- {
- m_position = that.m_position;
- return *this;
- }
- const utf8_output_iterator& operator*()const
- {
- return *this;
- }
- void operator=(std::uint32_t val)const
- {
- push(val);
- }
- utf8_output_iterator& operator++()
- {
- return *this;
- }
- utf8_output_iterator& operator++(int)
- {
- return *this;
- }
- BaseIterator base()const
- {
- return m_position;
- }
-private:
- void push(std::uint32_t c)const
- {
- if(c > 0x10FFFFu)
- detail::invalid_utf32_code_point(c);
- if(c < 0x80u)
- {
- *m_position++ = static_cast<unsigned char>(c);
- }
- else if(c < 0x800u)
- {
- *m_position++ = static_cast<unsigned char>(0xC0u + (c >> 6));
- *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- else if(c < 0x10000u)
- {
- *m_position++ = static_cast<unsigned char>(0xE0u + (c >> 12));
- *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- else
- {
- *m_position++ = static_cast<unsigned char>(0xF0u + (c >> 18));
- *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
- *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
- *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
- }
- }
- mutable BaseIterator m_position;
-};
-
-} // namespace boost
-
-#endif // BOOST_REGEX_UNICODE_ITERATOR_HPP
-