]> gcc.gnu.org Git - gcc.git/blame - libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_container_traits.cc
Update copyright years.
[gcc.git] / libstdc++-v3 / testsuite / ext / pb_ds / example / priority_queue_container_traits.cc
CommitLineData
4569a895
AT
1// -*- C++ -*-
2
5624e564 3// Copyright (C) 2005-2015 Free Software Foundation, Inc.
4569a895
AT
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the terms
7// of the GNU General Public License as published by the Free Software
748086b7 8// Foundation; either version 3, or (at your option) any later
4569a895
AT
9// version.
10
11// This library is distributed in the hope that it will be useful, but
12// WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// General Public License for more details.
15
16// You should have received a copy of the GNU General Public License
748086b7
JJ
17// along with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
4569a895 19
4569a895
AT
20
21// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
22
23// Permission to use, copy, modify, sell, and distribute this software
24// is hereby granted without fee, provided that the above copyright
25// notice appears in all copies, and that both that copyright notice
26// and this permission notice appear in supporting documentation. None
27// of the above authors, nor IBM Haifa Research Laboratories, make any
28// representation about the suitability of this software for any
29// purpose. It is provided "as is" without express or implied
30// warranty.
31
32/**
33 * @file priority_queue_container_traits_example.cpp
34 * A basic example showing how to use container_traits for querying container types
35 * for their behavior.
36 */
37
38/**
39 * The following example shows how to use container_traits in order to print
40 * out information on an priority queue's behavior, e.g., its underlying
41 * data structure.
42 */
43
44#include <iostream>
45#include <ext/pb_ds/priority_queue.hpp>
46#include <ext/pb_ds/tag_and_trait.hpp>
47
48using namespace std;
5e11f978 49using namespace __gnu_pbds;
4569a895
AT
50
51template<class DS_Category>
52void
53print_container_category(DS_Category);
54
55template<>
56void
57print_container_category(binary_heap_tag)
58{ cout << "Binary heap:" << endl; }
59
60template<>
61void
62print_container_category(binomial_heap_tag)
63{ cout << "Binomial heap:" << endl; }
64
65template<>
66void
67print_container_category(rc_binomial_heap_tag)
68{ cout << "Redundant-counter binomial heap:" << endl; }
69
70template<>
71void
72print_container_category(pairing_heap_tag)
73{ cout << "Pairing heap:" << endl; }
74
75template<>
76void
77print_container_category(thin_heap_tag)
78{ cout << "Thin heap:" << endl; }
79
80template<class Invalidation_Guarantee>
81void
82print_invalidation_guarantee(Invalidation_Guarantee);
83
84template<>
85void
86print_invalidation_guarantee(basic_invalidation_guarantee)
87{
88 cout << "Guarantees only that found references, pointers, and "
89 "iterators are valid as long as the container object is not "
90 "modified" << endl;
91}
92
93template<>
94void
95print_invalidation_guarantee(point_invalidation_guarantee)
96{
97 cout << "Guarantees that found references, pointers, and "
98 "point_iterators are valid even if the container object "
99 "is modified" << endl;
100}
101
102template<>
103void
104print_invalidation_guarantee(range_invalidation_guarantee)
105{
106 cout << "Guarantees that iterators remain valid even if the "
107 "container object is modified" << endl;
108}
109
110void
111print_split_join_can_throw(bool can)
112{
113 if (can)
114 {
115 cout << "Can throw exceptions if split or joined" << endl;
116 return;
117 }
118 cout << "Cannot throw exceptions if split or joined" << endl;
119}
120
121template<class DS_Traits>
122void
123print_container_attributes()
124{
125 // First print out the data structure category.
126 print_container_category(typename DS_Traits::container_category());
127
128 // Now print the attributes of the container.
129 print_invalidation_guarantee(typename DS_Traits::invalidation_guarantee());
130 print_split_join_can_throw(DS_Traits::split_join_can_throw);
131 cout << endl << endl;
132}
133
134int main()
135{
136 {
137 // Print the attributes of a binary heap.
138 typedef
5e11f978 139 __gnu_pbds::priority_queue<
4569a895
AT
140 int,
141 std::less<int>,
142 binary_heap_tag>
143 t;
144
145 print_container_attributes<container_traits<t> >();
146 }
147
148 {
149 // Print the attributes of a binomial heap.
150 typedef
5e11f978 151 __gnu_pbds::priority_queue<
4569a895
AT
152 int,
153 std::less<int>,
154 binomial_heap_tag>
155 t;
156
157 print_container_attributes<container_traits<t> >();
158 }
159
160 {
161 // Print the attributes of a redundant-counter binomial heap.
162 typedef
5e11f978 163 __gnu_pbds::priority_queue<
4569a895
AT
164 int,
165 std::less<int>,
166 rc_binomial_heap_tag>
167 t;
168
169 print_container_attributes<container_traits<t> >();
170 }
171
172 {
173 // Print the attributes of a pairing heap.
174 typedef
5e11f978 175 __gnu_pbds::priority_queue<
4569a895
AT
176 int,
177 std::less<int>,
178 pairing_heap_tag>
179 t;
180
181 print_container_attributes<container_traits<t> >();
182 }
183
184 {
185 /**
186 * Print the attributes of a thin heap.
187 */
188
189 typedef
5e11f978 190 __gnu_pbds::priority_queue<
4569a895
AT
191 int,
192 std::less<int>,
193 thin_heap_tag>
194 t;
195
196 print_container_attributes<container_traits<t> >();
197 }
198
199 return 0;
200}
This page took 0.774868 seconds and 5 git commands to generate.