19 #ifndef INTRUSIVEMAP_H 20 #define INTRUSIVEMAP_H 40 #pragma GCC diagnostic push 42 #pragma GCC diagnostic ignored "-Wparentheses" 44 template <
class Key,
class Val>
55 template <
class K,
class V>
71 #pragma GCC diagnostic pop 79 template <
class Key,
class Val>
82 typedef std::set<IntrusiveWrap<Key, Val> >
Super;
113 iterator
begin() {
return iterator(Super::begin());}
116 iterator
end() {
return iterator(Super::end());}
128 std::pair<const_iterator, bool> p = Super::insert(x);
129 return make_pair(iterator(p.first), p.second);
132 template <
class I1,
class I2>
133 void insert(I1 i1, I2 i2) {Super::insert(i1,i2);}
164 template <
class K,
class V>
179 #pragma omit TCL_obj minsky::IntrusiveMap 180 #pragma omit pack minsky::IntrusiveMap 181 #pragma omit unpack minsky::IntrusiveMap 186 template <
class K,
class T>
187 struct is_associative_container<
minsky::IntrusiveMap<K,T> >:
188 public std::true_type {};
191 #include <pack_base.h> 192 #include <pack_stl.h> 198 template <
class K,
class V>
205 for (
auto i=a.begin(); i!=a.end(); ++i)
208 b<<static_cast<const V&>(*i);
213 template <
class K,
class V>
216 template <
class T,
class U>
217 void insert(T& a,
const U& v) {a.insert(v);}
218 template <
class T,
class U>
227 for (
size_t i=0; i<sz; ++i)
231 typename T::value_type v(
id);
232 unpack(b,d,static_cast<V&>(v));
240 #include "intrusiveMap.cd"
value_type * operator->()
value_type & operator[](const Key &k)
const_iterator end() const
void insert(const Key &k, const Val &v)
Super::const_iterator const_iterator
iterator(const_iterator it)
void operator()(cd::pack_t &b, const cd::string &d, T &a)
size_t count(const Key &k) const
IntrusiveWrap(const std::pair< K, V > x)
const value_type & operator*() const
KeyAssertion(const K &id)
void operator()(cd::pack_t &b, const cd::string &d, T &a)
const value_type * operator->() const
const_iterator begin() const
void insert(const T &a, const U &v)
IntrusiveWrap(const Key &id, const Val &v=Val())
TrackedIntrusiveMap(A... a)
IntrusiveWrap & operator=(IntrusiveWrap &v)
void unpack(classdesc::pack_t &b, civita::XVector &a)
std::pair< iterator, bool > insert(const value_type &x)
std::set< Key > keys() const
Expr operator*(const NodePtr &x, const Expr &y)
bool hasBeenAccessed(K x)
std::set< IntrusiveWrap< Key, Val > > Super
bool operator<(const IntrusiveWrap &x) const
const_iterator find(const Key &k) const
iterator find(const Key &k)
vector< SliceLabelToken, LibCAllocator< SliceLabelToken > > Key
std::set< Key > updateAccess
track writeable access into this Map
void insert(T &a, const U &v)
const std::set< K > & accessLog() const
Super::value_type value_type
value_type operator[](const Key &k) const
void insert(I1 i1, I2 i2)
void swap(IntrusiveMap &x)
IntrusiveWrap & operator=(const Val &v)