Lua: Fix type confusion between signed and unsigned
[lsnes.git] / include / library / memtracker.hpp
blob41b754896b27a8aaec24de7a1220cb41550b08f0
1 #ifndef _library__memtracker__hpp__included__
2 #define _library__memtracker__hpp__included__
4 #include "threads.hpp"
5 #include <map>
7 class memtracker
9 public:
10 memtracker();
11 ~memtracker();
12 void operator()(const char* category, ssize_t change);
13 void reset(const char* category, size_t value);
14 std::map<std::string, size_t> report();
15 static memtracker& singleton();
16 class autorelease
18 public:
19 autorelease(memtracker& _track, const char* cat, size_t amount)
20 : tracker(_track), category(cat), committed(amount)
22 tracker(category, committed);
24 ~autorelease()
26 tracker(category, -(ssize_t)committed);
28 void operator()(ssize_t delta)
30 if(delta < 0 && committed < (size_t)-delta) {
31 tracker(category, -(ssize_t)committed);
32 committed = 0;
33 } else {
34 tracker(category, delta);
35 committed = committed + delta;
38 private:
39 memtracker& tracker;
40 const char* category;
41 size_t committed;
43 private:
44 bool invalid;
45 threads::lock mut;
46 std::map<std::string, size_t> data;
47 memtracker(const memtracker&);
48 memtracker& operator=(const memtracker&);
52 #endif