blob: 0d1aa2915fdd06211f2b378e5a759a3a2594f4dd [file] [log] [blame]
/*
* File: super_set.h
* Author: andrew
*
* Created on March 10, 2010, 2:04 PM
*/
#ifndef _SUPER_SET_H
#define _SUPER_SET_H
#include "dsa/svset.h"
#include <set>
// Contains stable references to a set
// The sets can be grown.
template<typename Ty>
class SuperSet {
//std::set provides stable iterators, and that matters a lot
typedef svset<Ty> InnerSetTy;
typedef std::set<InnerSetTy> OuterSetTy;
OuterSetTy container;
public:
typedef const typename OuterSetTy::value_type* setPtr;
setPtr getOrCreate(svset<Ty>& S) {
if (S.empty()) return 0;
return &(*container.insert(S).first);
}
setPtr getOrCreate(setPtr P, Ty t) {
svset<Ty> s;
if (P)
s.insert(P->begin(), P->end());
s.insert(t);
return getOrCreate(s);
}
};
#endif /* _SUPER_SET_H */