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