32 #define EMP_NO_MEM_CHECK 42 #ifdef EMP_NO_MEM_CHECK 44 #define EMP_TRACK_CONSTRUCT(CLASS_NAME) 45 #define EMP_TRACK_DESTRUCT(CLASS_NAME) 46 #define EMP_TRACK_COUNT(CLASS_NAME) 0 47 #define EMP_TRACK_STATUS std::string("(not in debug mode)") 51 #define EMP_TRACK_CONSTRUCT(CLASS_NAME) emp::internal::TrackMem_Inc(#CLASS_NAME) 52 #define EMP_TRACK_DESTRUCT(CLASS_NAME) emp::internal::TrackMem_Dec(#CLASS_NAME) 53 #define EMP_TRACK_COUNT(CLASS_NAME) emp::internal::TrackMem_Count(#CLASS_NAME) 54 #define EMP_TRACK_STATUS emp::internal::TrackMem_Status() 61 static std::map<std::string,int> * track_mem_class_map =
nullptr;
62 if (!track_mem_class_map) track_mem_class_map =
new std::map<std::string,int>;
63 return *track_mem_class_map;
70 for (
auto stat : mem_map) {
71 ss <<
"[" << stat.first <<
"] : " << stat.second <<
std::endl;
79 if (mem_map.find(class_name) == mem_map.end()) {
80 mem_map[class_name] = 0;
82 mem_map[class_name]++;
90 if (mem_map.find(class_name) == mem_map.end()) {
92 "]; map size = ", mem_map.size());
95 mem_map[class_name]--;
96 if (mem_map[class_name] < 0) {
106 if (mem_map.find(class_name) == mem_map.end()) {
109 return mem_map[class_name];
static void CappedAlert(size_t cap, TYPE_SET...inputs)
A version of Alert that will cap how many times it can go off.
Definition: alert.h:38
static std::map< std::string, int > & TrackMem_GetMap()
Definition: mem_track.h:60
static void TrackMem_Dec(const std::string &class_name)
Definition: mem_track.h:85
static const PrintStr endl("<br>")
Pre-define emp::endl to insert a "<br>" and thus acting like a newline.
static void TrackMem_Inc(const std::string &class_name)
Definition: mem_track.h:76
static std::string TrackMem_Status()
Definition: mem_track.h:66
If we are in emscripten, make sure to include the header.
Definition: array.h:37
static int TrackMem_Count(const std::string &class_name)
Definition: mem_track.h:102