71 bool operator()(
const value_weak_pointer& lhs,
72 const value_weak_pointer& rhs)
const 74 value_pointer LHS(lhs.lock()), RHS(rhs.lock());
75 return LHS && RHS && LHS.get() < RHS.get();
77 bool operator()(
const value_pointer& lhs,
78 const value_weak_pointer& rhs)
const 80 value_pointer RHS(rhs.lock());
81 return RHS && lhs.get() < RHS.get();
83 bool operator()(
const value_weak_pointer& lhs,
84 const value_pointer& rhs)
const 86 value_pointer LHS(lhs.lock());
87 return LHS && LHS.get() < rhs.get();
91 typedef std::set<value_weak_pointer, weak_less> store_t;
97 std::tr1::shared_ptr<data> _data;
103 std::tr1::weak_ptr<data> container;
104 value_pointer realself;
105 dtor(
const std::tr1::weak_ptr<data>& d,
106 const value_pointer& w)
107 :container(d), realself(w)
109 void operator()(value_type *)
114 std::tr1::shared_ptr<data> C(container.lock());
116 guard_type G(C->mutex);
152 guard_type G(_data->mutex);
153 return _data->store.clear();
160 guard_type G(_data->mutex);
161 return _data->store.empty();
169 guard_type G(_data->mutex);
170 return _data->store.size();
176 void insert(value_pointer&);
181 guard_type G(_data->mutex);
182 return _data->store.erase(v);
207 typename store_t::iterator
it, end;
213 ret = (it++)->
lock();
230 throw std::invalid_argument(
"Only unique() references may be inserted");
233 typename store_t::const_iterator it = _data->store.find(v);
234 if(it==_data->store.end()) {
239 _data->store.insert(chainptr);
257 for(
typename store_t::const_iterator it=_data->store.begin(),
258 end=_data->store.end(); it!=end; ++it)
279 ret.reserve(_data->store.size());
280 for(
typename store_t::const_iterator it=_data->store.begin(),
281 end=_data->store.end(); it!=end; ++it)
284 if(P) ret.push_back(P);
std::set< value_pointer > set_type
#define assert(exp)
Declare that a condition should be true.
set_type lock_set() const
size_t erase(value_pointer &v)
epicsMutex & mutex() const
weak_set()
Construct a new empty set.
a std::set-ish container where entries are removed when ref. counts fall to zero
APIs for the epicsMutex mutual exclusion semaphore.
vector_type lock_vector() const
value_pointer next()
yield the next live entry
std::tr1::weak_ptr< T > value_weak_pointer
epicsGuard< epicsMutex > guard_type
std::vector< value_pointer > vector_type
epicsGuard< epicsMutex > guard
an iterator-ish object which also locks the set during iteration
std::tr1::shared_ptr< T > value_pointer
void insert(value_pointer &)
epicsGuardRelease< epicsMutex > release_type