8 #ifndef WIBBLE_OPERATORS_H
9 #define WIBBLE_OPERATORS_H
28 template<
typename T >
29 T
operator+(
const T &i,
typename T::difference_type o ) {
35 template<
typename T >
36 std::set< T >
operator &(
const std::set< T > &a,
const std::set< T > &b ) {
38 std::set_intersection( a.begin(), a.end(), b.begin(), b.end(),
39 std::inserter( ret, ret.begin() ) );
43 template<
typename T >
44 std::set< T >
operator &(
const std::set< T > &a,
const T &b ) {
46 if ( a.find( b ) != a.end() ) {
51 return std::set< T >();
54 template<
typename T >
55 std::set< T >
operator |(
const std::set< T > &a,
const T& item ) {
56 std::set< T > ret = a;
61 template<
typename T >
66 template<
typename T >
68 std::set< T > ret = a;
69 ret.insert(*item.
begin());
73 template<
typename T >
74 std::set< T >
operator |(
const std::set< T > &a,
const std::set< T > &b ) {
76 std::set_union( a.begin(), a.end(), b.begin(), b.end(),
77 std::inserter( ret, ret.begin() ) );
81 template<
typename T >
82 std::set< T >
operator -(
const std::set< T > &a,
const std::set< T > &b ) {
84 std::set_difference( a.begin(), a.end(), b.begin(), b.end(),
85 std::inserter(ret, ret.begin() ) );
89 template<
typename T >
90 std::set< T >
operator -(
const std::set< T > &a,
const T& item ) {
91 std::set< T > ret = a;
96 template<
typename T >
98 std::set< T > ret = a;
99 ret.erase(*item.
begin());
103 template<
typename T >
108 template<
typename T >
114 template<
typename T >
122 template<
typename T,
typename SEQ >
123 std::set< T > &
operator|=( std::set< T > &a,
const SEQ& items )
125 for (
typename SEQ::const_iterator i = items.begin();
126 i != items.end(); ++i)
132 template<
typename T >
133 std::set< T > &
operator |=( std::set< T > &a,
const std::set< T > &b ) {
137 for (
typename std::set<T>::const_iterator i = b.begin();
144 template<
typename T,
typename SEQ >
154 typename SEQ::const_iterator ib = b.begin();
155 while (ia != a.end())
157 if (ib != b.end() && *ib < *ia)
161 else if (ib == b.end() || *ia != *ib)
176 template<
typename T >
182 template<
typename T >
189 template<
typename T >
192 a.erase(*item.
begin());
197 template<
typename T,
typename SEQ >
201 typename SEQ::const_iterator ib = b.begin();
202 while (ia != a.end() && ib != b.end())
219 template<
typename T >
220 bool operator<=( const T &a, const std::set< T > &b ) {
221 return b.find( a ) != b.end();
224 template<
typename T >
225 bool operator<=( const std::set< T > &a,
const std::set< T > &b ) {
226 typename std::set<T>::const_iterator x = a.begin();
228 for (
typename std::set<T>::const_iterator y = b.begin(); y != b.end(); ++y )