stlab.adobe.com Adobe Systems Incorporated
set.hpp
Go to the documentation of this file.
1 /*
2  Copyright 2005-2007 Adobe Systems Incorporated
3  Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
4  or a copy at http://stlab.adobe.com/licenses.html)
5 */
6 
7 /*************************************************************************************************/
8 
9 #ifndef ADOBE_ALGORITHM_SET_HPP
10 #define ADOBE_ALGORITHM_SET_HPP
11 
12 #include <adobe/config.hpp>
13 
14 #include <boost/range/begin.hpp>
15 #include <boost/range/end.hpp>
16 #include <boost/bind.hpp>
17 
18 #include <algorithm>
19 
20 /*************************************************************************************************/
21 
22 namespace adobe {
23 
24 /*************************************************************************************************/
36 /*************************************************************************************************/
42 template <class InputRange1, class InputRange2>
43 inline bool includes(const InputRange1& range1, const InputRange2& range2)
44 {
45  return std::includes( boost::begin(range1), boost::end(range1),
46  boost::begin(range2), boost::end(range2));
47 }
48 
54 template <class InputIterator1, class InputIterator2, class Compare>
55 inline bool includes( InputIterator1 first1, InputIterator1 last1,
56  InputIterator2 first2, InputIterator2 last2,
57  Compare comp)
58 
59 {
60  return std::includes(first1, last1, first2, last2, boost::bind(comp, _1, _2));
61 }
62 
68 template <class InputRange1, class InputRange2, class Compare>
69 inline bool includes(const InputRange1& range1, const InputRange2& range2, Compare comp)
70 {
71  return adobe::includes( boost::begin(range1), boost::end(range1),
72  boost::begin(range2), boost::end(range2),
73  comp);
74 }
75 
81 template <class InputRange1, class InputRange2, class OutputIterator>
82 inline OutputIterator set_union(const InputRange1& range1, const InputRange2& range2, OutputIterator result)
83 {
84  return std::set_union( boost::begin(range1), boost::end(range1),
85  boost::begin(range2), boost::end(range2),
86  result);
87 }
88 
94 template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
95 inline OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
96  InputIterator2 first2, InputIterator2 last2,
97  OutputIterator result, Compare comp)
98 {
99  return std::set_union(first1, last1, first2, last2, result, boost::bind(comp, _1, _2));
100 }
101 
107 template <class InputRange1, class InputRange2, class OutputIterator, class Compare>
108 inline OutputIterator set_union(const InputRange1& range1, const InputRange2& range2, OutputIterator result, Compare comp)
109 {
110  return adobe::set_union(boost::begin(range1), boost::end(range1),
111  boost::begin(range2), boost::end(range2),
112  result, comp);
113 }
114 
120 template <class InputRange1, class InputRange2, class OutputIterator>
121 inline OutputIterator set_intersection(const InputRange1& range1, const InputRange2& range2, OutputIterator result)
122 {
123  return std::set_intersection( boost::begin(range1), boost::end(range1),
124  boost::begin(range2), boost::end(range2),
125  result);
126 }
127 
133 template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
134 inline OutputIterator set_intersection( InputIterator1 first1, InputIterator1 last1,
135  InputIterator2 first2, InputIterator2 last2,
136  OutputIterator result, Compare comp)
137 {
138  return std::set_intersection(first1, last1, first2, last2, result, boost::bind(comp, _1, _2));
139 }
140 
146 template <class InputRange1, class InputRange2, class OutputIterator, class Compare>
147 inline OutputIterator set_intersection(const InputRange1& range1, const InputRange2& range2, OutputIterator result, Compare comp)
148 {
149  return adobe::set_intersection( boost::begin(range1), boost::end(range1),
150  boost::begin(range2), boost::end(range2),
151  result, comp);
152 }
153 
159 template <class InputRange1, class InputRange2, class OutputIterator>
160 inline OutputIterator set_difference(const InputRange1& range1, const InputRange2& range2, OutputIterator result)
161 {
162  return std::set_difference( boost::begin(range1), boost::end(range1),
163  boost::begin(range2), boost::end(range2),
164  result);
165 }
166 
172 template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
173 inline OutputIterator set_difference( InputIterator1 first1, InputIterator1 last1,
174  InputIterator2 first2, InputIterator2 last2,
175  OutputIterator result, Compare comp)
176 {
177  return std::set_difference(first1, last1, first2, last2, result, boost::bind(comp, _1, _2));
178 }
179 
185 template <class InputRange1, class InputRange2, class OutputIterator, class Compare>
186 inline OutputIterator set_difference(const InputRange1& range1, const InputRange2& range2, OutputIterator result, Compare comp)
187 {
188  return adobe::set_difference( boost::begin(range1), boost::end(range1),
189  boost::begin(range2), boost::end(range2),
190  result, comp);
191 }
192 
198 template <class InputRange1, class InputRange2, class OutputIterator>
199 inline OutputIterator set_symmetric_difference(const InputRange1& range1, const InputRange2& range2, OutputIterator result)
200 {
201  return std::set_symmetric_difference( boost::begin(range1), boost::end(range1),
202  boost::begin(range2), boost::end(range2),
203  result);
204 }
205 
211 template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
212 inline OutputIterator set_symmetric_difference( InputIterator1 first1, InputIterator1 last1,
213  InputIterator2 first2, InputIterator2 last2,
214  OutputIterator result, Compare comp)
215 {
216  return std::set_symmetric_difference(first1, last1, first2, last2, result, boost::bind(comp, _1, _2));
217 }
218 
224 template <class InputRange1, class InputRange2, class OutputIterator, class Compare>
225 inline OutputIterator set_symmetric_difference(const InputRange1& range1, const InputRange2& range2, OutputIterator result, Compare comp)
226 {
227  return adobe::set_symmetric_difference( boost::begin(range1), boost::end(range1),
228  boost::begin(range2), boost::end(range2),
229  result, comp);
230 }
231 
232 /*************************************************************************************************/
233 
234 } // namespace adobe
235 
236 /*************************************************************************************************/
237 
238 #endif
239 
240 /*************************************************************************************************/
OutputIterator set_intersection(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result)
set implementation
Definition: set.hpp:121
OutputIterator set_union(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result, Compare comp)
set implementation
Definition: set.hpp:108
OutputIterator set_intersection(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result, Compare comp)
set implementation
Definition: set.hpp:147
OutputIterator set_difference(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result, Compare comp)
set implementation
Definition: set.hpp:186
OutputIterator set_symmetric_difference(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result, Compare comp)
set implementation
Definition: set.hpp:225
bool includes(const InputRange1 &range1, const InputRange2 &range2)
set implementation
Definition: set.hpp:43
OutputIterator set_symmetric_difference(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result)
set implementation
Definition: set.hpp:199
bool includes(const InputRange1 &range1, const InputRange2 &range2, Compare comp)
set implementation
Definition: set.hpp:69
OutputIterator set_union(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result)
set implementation
Definition: set.hpp:82
OutputIterator set_difference(const InputRange1 &range1, const InputRange2 &range2, OutputIterator result)
set implementation
Definition: set.hpp:160

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google