1 #ifndef PROTON_SET_HEADER
2 #define PROTON_SET_HEADER
9 #include <proton/pool.hpp>
23 template <
typename T,
typename C,
typename A,
typename V >
24 std::set<T,C,A>& operator<<(std::set<T,C,A>& x, V&& val)
35 template <
typename T,
typename C,
typename A,
typename V >
49 template <
typename T,
typename C,
typename A>
50 std::ostream& operator<<(std::ostream& s, const std::set<T,C,A>& x)
65 template <
typename T,
typename C,
typename A>
66 std::wostream& operator<<(std::wostream& s, const std::set<T,C,A>& x)
81 template <
typename T,
typename C,
typename A>
82 void sort(std::set<T,C,A>& x)
88 template<
typename T,
typename C=std::less<T>,
typename A=smart_allocator<T> >
89 class set_ :
public std::set<T,C,A>{
91 typedef std::set<T,C,A> baseT;
96 template<
typename ...argT>
set_(argT&& ...a):baseT(a...)
101 set_(std::initializer_list<T> a):baseT(a.begin(),a.end())
114 explicit set_(
const baseT& x):baseT(x)
117 set_(baseT&& x)noexcept:baseT(x)
162 return reinterpret_cast<baseT&
>(*this);
185 auto it=this->begin();
196 void remove(
const T& val)
198 auto end=this->end();
199 auto it=this->find(val);
201 throw std::invalid_argument(
"The given value doesn't exist in this sequence.");
210 auto end=this->end();
211 auto it=this->find(val);
225 template <
typename T,
typename C,
typename A>
226 std::set<T,C,A>&
operator&=(std::set<T,C,A>& x,
const std::set<T,C,A>& y)
228 auto it=x.begin(), end=x.end();
243 template <
typename T,
typename C,
typename A>
244 std::set<T,C,A>&
operator|=(std::set<T,C,A>& x,
const std::set<T,C,A>& y)
254 template <
typename T,
typename C,
typename A>
258 std::set_intersection(x.begin(), x.end(),y.begin(),y.end(),std::inserter(z,z.begin()));
265 template <
typename T,
typename C,
typename A>
269 std::set_union(x.begin(), x.end(),y.begin(),y.end(),std::inserter(z,z.begin()));
275 template<
typename T,
typename C,
typename A>
281 template<
typename T,
typename C,
typename A>
282 const set_<T,C,A>&
cast_(
const std::set<T,C,A>& x)
284 return reinterpret_cast<const set_<T,C,A>&
>(x);
287 template<
typename T,
typename C,
typename A>
288 set_<T,C,A>&&
cast_(std::set<T,C,A>&& x)
290 return reinterpret_cast<set_<T,C,A>&&
>(x);
293 template<
typename T,
typename C,
typename A>
294 const set_<T,C,A>&&
cast_(
const std::set<T,C,A>&& x)
296 return reinterpret_cast<const set_<T,C,A>&&
>(x);
305 template<
typename T,
typename C,
typename allocT>
306 struct has_t<std::set<T,C,allocT> >{
307 template<
typename V>
static bool result(
const std::set<T,C,allocT>& x, V&& v)
309 return x.find(v)!=x.end();
313 template<
typename T,
typename C,
typename allocT>
314 struct has_t<set_<T,C,allocT> >{
315 template<
typename V>
static bool result(
const set_<T,C,allocT>& x, V&& v)
317 return x.find(v)!=x.end();
324 #endif // PROTON_SET_HEADER