annotate DEPENDENCIES/generic/include/boost/graph/detail/set_adaptor.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // (C) Copyright Jeremy Siek 2001.
Chris@16 2 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 3 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5
Chris@16 6 #ifndef BOOST_SET_ADAPTOR_HPP
Chris@16 7 #define BOOST_SET_ADAPTOR_HPP
Chris@16 8
Chris@16 9 #include <set>
Chris@16 10 #include <boost/unordered_set.hpp>
Chris@16 11
Chris@16 12 namespace boost {
Chris@16 13
Chris@16 14 template <class K, class C, class A, class T>
Chris@16 15 bool set_contains(const std::set<K,C,A>& s, const T& x) {
Chris@16 16 return s.find(x) != s.end();
Chris@16 17 }
Chris@16 18
Chris@16 19 template <class K, class H, class C, class A, class T>
Chris@16 20 bool set_contains(const boost::unordered_set<K,H,C,A>& s, const T& x) {
Chris@16 21 return s.find(x) != s.end();
Chris@16 22 }
Chris@16 23
Chris@16 24 template <class K, class C, class A>
Chris@16 25 bool set_equal(const std::set<K,C,A>& x,
Chris@16 26 const std::set<K,C,A>& y)
Chris@16 27 {
Chris@16 28 return x == y;
Chris@16 29 }
Chris@16 30
Chris@16 31 // Not the same as lexicographical_compare_3way applied to std::set.
Chris@16 32 // this is equivalent semantically to bitset::operator<()
Chris@16 33 template <class K, class C, class A>
Chris@16 34 int set_lex_order(const std::set<K,C,A>& x,
Chris@16 35 const std::set<K,C,A>& y)
Chris@16 36 {
Chris@16 37 typename std::set<K,C,A>::iterator
Chris@16 38 xi = x.begin(), yi = y.begin(), xend = x.end(), yend = y.end();
Chris@16 39 for (; xi != xend && yi != yend; ++xi, ++yi) {
Chris@16 40 if (*xi < *yi)
Chris@16 41 return 1;
Chris@16 42 else if (*yi < *xi)
Chris@16 43 return -1;
Chris@16 44 }
Chris@16 45 if (xi == xend)
Chris@16 46 return (yi == yend) ? 0 : -1;
Chris@16 47 else
Chris@16 48 return 1;
Chris@16 49 }
Chris@16 50
Chris@16 51 template <class K, class C, class A>
Chris@16 52 void set_clear(std::set<K,C,A>& x) {
Chris@16 53 x.clear();
Chris@16 54 }
Chris@16 55
Chris@16 56 template <class K, class C, class A>
Chris@16 57 bool set_empty(const std::set<K,C,A>& x) {
Chris@16 58 return x.empty();
Chris@16 59 }
Chris@16 60
Chris@16 61 template <class K, class C, class A, class T>
Chris@16 62 void set_insert(std::set<K,C,A>& x, const T& a) {
Chris@16 63 x.insert(a);
Chris@16 64 }
Chris@16 65
Chris@16 66 template <class K, class C, class A, class T>
Chris@16 67 void set_remove(std::set<K,C,A>& x, const T& a) {
Chris@16 68 x.erase(a);
Chris@16 69 }
Chris@16 70
Chris@16 71 template <class K, class C, class A>
Chris@16 72 void set_intersect(const std::set<K,C,A>& x,
Chris@16 73 const std::set<K,C,A>& y,
Chris@16 74 std::set<K,C,A>& z)
Chris@16 75 {
Chris@16 76 z.clear();
Chris@16 77 std::set_intersection(x.begin(), x.end(),
Chris@16 78 y.begin(), y.end(),
Chris@16 79 std::inserter(z));
Chris@16 80 }
Chris@16 81
Chris@16 82 template <class K, class C, class A>
Chris@16 83 void set_union(const std::set<K,C,A>& x,
Chris@16 84 const std::set<K,C,A>& y,
Chris@16 85 std::set<K,C,A>& z)
Chris@16 86 {
Chris@16 87 z.clear();
Chris@16 88 std::set_union(x.begin(), x.end(),
Chris@16 89 y.begin(), y.end(),
Chris@16 90 std::inserter(z));
Chris@16 91 }
Chris@16 92
Chris@16 93 template <class K, class C, class A>
Chris@16 94 void set_difference(const std::set<K,C,A>& x,
Chris@16 95 const std::set<K,C,A>& y,
Chris@16 96 std::set<K,C,A>& z)
Chris@16 97 {
Chris@16 98 z.clear();
Chris@16 99 std::set_difference(x.begin(), x.end(),
Chris@16 100 y.begin(), y.end(),
Chris@16 101 std::inserter(z, z.begin()));
Chris@16 102 }
Chris@16 103
Chris@16 104 template <class K, class C, class A>
Chris@16 105 bool set_subset(const std::set<K,C,A>& x,
Chris@16 106 const std::set<K,C,A>& y)
Chris@16 107 {
Chris@16 108 return std::includes(x.begin(), x.end(), y.begin(), y.end());
Chris@16 109 }
Chris@16 110
Chris@16 111 // Shit, can't implement this without knowing the size of the
Chris@16 112 // universe.
Chris@16 113 template <class K, class C, class A>
Chris@16 114 void set_compliment(const std::set<K,C,A>& /*x*/,
Chris@16 115 std::set<K,C,A>& z)
Chris@16 116 {
Chris@16 117 z.clear();
Chris@16 118
Chris@16 119 }
Chris@16 120
Chris@16 121 } // namespace boost
Chris@16 122
Chris@16 123 #endif // BOOST_SET_ADAPTOR_HPP