#include <set>
#include <boost/unordered_set.hpp>
-namespace boost {
+namespace boost
+{
- template <class K, class C, class A, class T>
- bool set_contains(const std::set<K,C,A>& s, const T& x) {
- return s.find(x) != s.end();
- }
-
- template <class K, class H, class C, class A, class T>
- bool set_contains(const boost::unordered_set<K,H,C,A>& s, const T& x) {
- return s.find(x) != s.end();
- }
-
- template <class K, class C, class A>
- bool set_equal(const std::set<K,C,A>& x,
- const std::set<K,C,A>& y)
- {
- return x == y;
- }
+template < class K, class C, class A, class T >
+bool set_contains(const std::set< K, C, A >& s, const T& x)
+{
+ return s.find(x) != s.end();
+}
+
+template < class K, class H, class C, class A, class T >
+bool set_contains(const boost::unordered_set< K, H, C, A >& s, const T& x)
+{
+ return s.find(x) != s.end();
+}
+
+template < class K, class C, class A >
+bool set_equal(const std::set< K, C, A >& x, const std::set< K, C, A >& y)
+{
+ return x == y;
+}
- // Not the same as lexicographical_compare_3way applied to std::set.
- // this is equivalent semantically to bitset::operator<()
- template <class K, class C, class A>
- int set_lex_order(const std::set<K,C,A>& x,
- const std::set<K,C,A>& y)
+// Not the same as lexicographical_compare_3way applied to std::set.
+// this is equivalent semantically to bitset::operator<()
+template < class K, class C, class A >
+int set_lex_order(const std::set< K, C, A >& x, const std::set< K, C, A >& y)
+{
+ typename std::set< K, C, A >::iterator xi = x.begin(), yi = y.begin(),
+ xend = x.end(), yend = y.end();
+ for (; xi != xend && yi != yend; ++xi, ++yi)
{
- typename std::set<K,C,A>::iterator
- xi = x.begin(), yi = y.begin(), xend = x.end(), yend = y.end();
- for (; xi != xend && yi != yend; ++xi, ++yi) {
if (*xi < *yi)
- return 1;
+ return 1;
else if (*yi < *xi)
- return -1;
- }
- if (xi == xend)
+ return -1;
+ }
+ if (xi == xend)
return (yi == yend) ? 0 : -1;
- else
+ else
return 1;
- }
+}
- template <class K, class C, class A>
- void set_clear(std::set<K,C,A>& x) {
- x.clear();
- }
+template < class K, class C, class A > void set_clear(std::set< K, C, A >& x)
+{
+ x.clear();
+}
- template <class K, class C, class A>
- bool set_empty(const std::set<K,C,A>& x) {
- return x.empty();
- }
+template < class K, class C, class A >
+bool set_empty(const std::set< K, C, A >& x)
+{
+ return x.empty();
+}
- template <class K, class C, class A, class T>
- void set_insert(std::set<K,C,A>& x, const T& a) {
- x.insert(a);
- }
+template < class K, class C, class A, class T >
+void set_insert(std::set< K, C, A >& x, const T& a)
+{
+ x.insert(a);
+}
- template <class K, class C, class A, class T>
- void set_remove(std::set<K,C,A>& x, const T& a) {
- x.erase(a);
- }
-
- template <class K, class C, class A>
- void set_intersect(const std::set<K,C,A>& x,
- const std::set<K,C,A>& y,
- std::set<K,C,A>& z)
- {
- z.clear();
- std::set_intersection(x.begin(), x.end(),
- y.begin(), y.end(),
- std::inserter(z));
- }
+template < class K, class C, class A, class T >
+void set_remove(std::set< K, C, A >& x, const T& a)
+{
+ x.erase(a);
+}
- template <class K, class C, class A>
- void set_union(const std::set<K,C,A>& x,
- const std::set<K,C,A>& y,
- std::set<K,C,A>& z)
- {
- z.clear();
- std::set_union(x.begin(), x.end(),
- y.begin(), y.end(),
- std::inserter(z));
- }
+template < class K, class C, class A >
+void set_intersect(const std::set< K, C, A >& x, const std::set< K, C, A >& y,
+ std::set< K, C, A >& z)
+{
+ z.clear();
+ std::set_intersection(
+ x.begin(), x.end(), y.begin(), y.end(), std::inserter(z));
+}
- template <class K, class C, class A>
- void set_difference(const std::set<K,C,A>& x,
- const std::set<K,C,A>& y,
- std::set<K,C,A>& z)
- {
- z.clear();
- std::set_difference(x.begin(), x.end(),
- y.begin(), y.end(),
- std::inserter(z, z.begin()));
- }
+template < class K, class C, class A >
+void set_union(const std::set< K, C, A >& x, const std::set< K, C, A >& y,
+ std::set< K, C, A >& z)
+{
+ z.clear();
+ std::set_union(x.begin(), x.end(), y.begin(), y.end(), std::inserter(z));
+}
- template <class K, class C, class A>
- bool set_subset(const std::set<K,C,A>& x,
- const std::set<K,C,A>& y)
- {
- return std::includes(x.begin(), x.end(), y.begin(), y.end());
- }
+template < class K, class C, class A >
+void set_difference(const std::set< K, C, A >& x, const std::set< K, C, A >& y,
+ std::set< K, C, A >& z)
+{
+ z.clear();
+ std::set_difference(
+ x.begin(), x.end(), y.begin(), y.end(), std::inserter(z, z.begin()));
+}
- // Shit, can't implement this without knowing the size of the
- // universe.
- template <class K, class C, class A>
- void set_compliment(const std::set<K,C,A>& /*x*/,
- std::set<K,C,A>& z)
- {
- z.clear();
-
- }
-
-} // namespace boost
+template < class K, class C, class A >
+bool set_subset(const std::set< K, C, A >& x, const std::set< K, C, A >& y)
+{
+ return std::includes(x.begin(), x.end(), y.begin(), y.end());
+}
+
+// Shit, can't implement this without knowing the size of the
+// universe.
+template < class K, class C, class A >
+void set_compliment(const std::set< K, C, A >& /*x*/, std::set< K, C, A >& z)
+{
+ z.clear();
+}
+
+} // namespace boost
#endif // BOOST_SET_ADAPTOR_HPP