| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #ifndef TestSuite_JSONStats_h
- #define TestSuite_JSONStats_h
- #include "../../JSONOptions.h"
- #if defined(JSON_UNIT_TEST) || defined(JSON_DEBUG)
- #define LIBJSON_OBJECT(name)\
- static size_t & getCtorCounter(void){\
- static size_t count = 0;\
- static int i = JSONStats::setCallbacks(getCtorCounter, getCopyCtorCounter, getAssignmentCounter, getDtorCounter, #name);\
- return count;\
- }\
- static size_t & getCopyCtorCounter(void){\
- static size_t count = 0;\
- static int i = JSONStats::setCallbacks(getCtorCounter, getCopyCtorCounter, getAssignmentCounter, getDtorCounter, #name);\
- return count;\
- }\
- static size_t & getAssignmentCounter(void){\
- static size_t count = 0;\
- static int i = JSONStats::setCallbacks(getCtorCounter, getCopyCtorCounter, getAssignmentCounter, getDtorCounter, #name);\
- return count;\
- }\
- static size_t & getDtorCounter(void){\
- static size_t count = 0;\
- static int i = JSONStats::setCallbacks(getCtorCounter, getCopyCtorCounter, getAssignmentCounter, getDtorCounter, #name);\
- return count;\
- }
- #define LIBJSON_CTOR getCtorCounter() += 1
- #define LIBJSON_COPY_CTOR getCopyCtorCounter() += 1
- #define LIBJSON_ASSIGNMENT getAssignmentCounter() += 1
- #define LIBJSON_DTOR getDtorCounter() += 1
-
- #include <map>
- #include <sstream>
- #include <iostream>
- #include <string>
- class JSONStats {
- public:
- ~JSONStats(void){
- std::map<getCounter_m, objectStructure*> & mymap = getMapper();
- std::map<getCounter_m, objectStructure*>::iterator b = mymap.begin();
- std::map<getCounter_m, objectStructure*>::iterator e = mymap.end();
- std::cout << "Counters for libjson:" << std::endl;
- for(; b != e; ++b){
- std::cout << " " << b -> second -> _name << std::endl;
- std::cout << " Constructor: " << b -> second -> _cTor() << std::endl;
- std::cout << " Copy Constructor: " << b -> second -> _ccTor() << std::endl;
- std::cout << " Assignment: " << b -> second -> _assign() << std::endl;
- std::cout << " Destructor: " << b -> second -> _dTor() << std::endl;
- delete b -> second;
- }
- }
-
- typedef size_t & (*getCounter_m)(void);
- struct objectStructure {
- objectStructure(getCounter_m cTor, getCounter_m ccTor, getCounter_m assign, getCounter_m dTor, const std::string & name):
- _cTor(cTor), _ccTor(ccTor), _assign(assign), _dTor(dTor), _name(name){}
- std::string _name;
- getCounter_m _cTor;
- getCounter_m _ccTor;
- getCounter_m _assign;
- getCounter_m _dTor;
- };
- static int setCallbacks(getCounter_m cTor, getCounter_m ccTor, getCounter_m assign, getCounter_m dtor, const std::string & name){
- getMapper()[cTor] = new objectStructure (cTor, ccTor, assign, dtor, name);
- return 0;
- }
-
- static std::map<getCounter_m, objectStructure*> & getMapper(void) {
- static std::map<getCounter_m, objectStructure*> mymap;
- return mymap;
- }
- };
- #else
- #define LIBJSON_OBJECT(name)
- #define LIBJSON_CTOR (void)0
- #define LIBJSON_DTOR (void)0
- #define LIBJSON_COPY_CTOR (void)0
- #define LIBJSON_ASSIGNMENT (void)0
- typedef int JSONStats;
- #endif
- #endif
|