48 #include <epicsVersion.h> 49 #include <epicsAtomic.h> 51 #define REFTRACE_INCREMENT(counter) ::epics::atomic::increment(counter) 52 #define REFTRACE_DECREMENT(counter) ::epics::atomic::decrement(counter) 60 void registerRefCounter(
const char *name,
const size_t* counter);
64 void unregisterRefCounter(
const char *name,
const size_t* counter);
68 size_t readRefCounter(
const char *name);
71 class epicsShareClass RefSnapshot
78 Count() :current(0u), delta(0) {}
79 explicit Count(size_t c,
long d) :current(c), delta(d) {}
80 bool operator==(
const Count& o)
const 81 {
return current==o.current && delta==o.delta; }
85 typedef std::map<std::string, Count> cnt_map_t;
88 typedef cnt_map_t::const_iterator iterator;
89 typedef cnt_map_t::const_iterator const_iterator;
97 const Count& operator[](
const std::string& name)
const;
99 iterator begin()
const {
return counts.begin(); }
100 iterator end()
const {
return counts.end(); }
101 size_t size()
const {
return counts.size(); }
103 inline void swap(RefSnapshot& o)
105 counts.swap(o.counts);
113 RefSnapshot operator-(
const RefSnapshot& rhs)
const;
118 std::ostream& operator<<(std::ostream& strm,
const RefSnapshot& snap);
122 class epicsShareClass RefMonitor
128 virtual ~RefMonitor();
130 void start(
double period=10.0);
132 bool running()
const;
139 virtual void show(
const RefSnapshot& snap,
bool complete=
false);
150 char* epicsRefSnapshotCurrent();