diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..dfd2cff --- /dev/null +++ b/.hgignore @@ -0,0 +1 @@ +QtC-pvData.creator.user diff --git a/pvDataApp/Makefile b/pvDataApp/Makefile index 89e3d6d..8b5bc4b 100644 --- a/pvDataApp/Makefile +++ b/pvDataApp/Makefile @@ -41,6 +41,7 @@ LIBSRCS += timeFunction.cpp LIBSRCS += timer.cpp LIBSRCS += queueVoid.cpp LIBSRCS += messageQueue.cpp +LIBSRCS += StatusCreateFactory.cpp SRC_DIRS += $(PVDATA)/pv @@ -83,7 +84,6 @@ LIBSRCS += PVDataCreateFactory.cpp LIBSRCS += Convert.cpp LIBSRCS += StandardField.cpp LIBSRCS += StandardPVField.cpp -LIBSRCS += StatusCreateFactory.cpp SRC_DIRS += $(PVDATA)/property diff --git a/pvDataApp/factory/StatusCreateFactory.cpp b/pvDataApp/misc/StatusCreateFactory.cpp similarity index 93% rename from pvDataApp/factory/StatusCreateFactory.cpp rename to pvDataApp/misc/StatusCreateFactory.cpp index f18a0f9..a87563a 100644 --- a/pvDataApp/factory/StatusCreateFactory.cpp +++ b/pvDataApp/misc/StatusCreateFactory.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include "lock.h" #include "factory.h" #include "byteBuffer.h" #include "showConstructDestruct.h" @@ -53,6 +53,13 @@ class StatusImpl : public Status { public: + StatusImpl(StatusType type, String message) : + m_type(type), m_message(message) + { + Lock xx(globalMutex); + totalConstruct++; + } + StatusImpl(StatusType type, String message, String stackDump) : m_type(type), m_message(message), m_stackDump(stackDump) { @@ -150,13 +157,18 @@ class StatusCreateImpl : public StatusCreate { m_ok = createStatus(STATUSTYPE_OK, "OK", 0); } + ~StatusCreateImpl() + { + delete m_ok; + } + virtual Status* getStatusOK() { return m_ok; } virtual Status* createStatus(StatusType type, String message, BaseException* cause) { if (cause == 0) - return new StatusImpl(type, message, ""); + return new StatusImpl(type, message); else { std::string stackDump; diff --git a/pvDataApp/misc/bitSet.cpp b/pvDataApp/misc/bitSet.cpp index 0948c55..dec41dc 100644 --- a/pvDataApp/misc/bitSet.cpp +++ b/pvDataApp/misc/bitSet.cpp @@ -7,19 +7,63 @@ #include "string.h" #include "stdio.h" #include "bitSet.h" +#include "lock.h" namespace epics { namespace pvData { + //static DebugLevel debugLevel = lowDebug; + + static volatile int64 totalConstruct = 0; + static volatile int64 totalDestruct = 0; + static Mutex *globalMutex = 0; + + static int64 getTotalConstruct() + { + Lock xx(globalMutex); + return totalConstruct; + } + + static int64 getTotalDestruct() + { + Lock xx(globalMutex); + return totalDestruct; + } + + static ConstructDestructCallback *pConstructDestructCallback; + + static void init() + { + static Mutex mutex = Mutex(); + Lock xx(&mutex); + if(globalMutex==0) { + globalMutex = new Mutex(); + pConstructDestructCallback = new ConstructDestructCallback( + String("bitSet"), + getTotalConstruct,getTotalDestruct,0); + } + } + BitSet::BitSet() : words(0), wordsLength(0), wordsInUse(0) { initWords(BITS_PER_WORD); + + init(); + Lock xx(globalMutex); + totalConstruct++; } BitSet::BitSet(uint32 nbits) : words(0), wordsLength(0), wordsInUse(0) { initWords(nbits); + + init(); + Lock xx(globalMutex); + totalConstruct++; } BitSet::~BitSet() { delete words; + + Lock xx(globalMutex); + totalDestruct++; } void BitSet::initWords(uint32 nbits) { @@ -315,8 +359,6 @@ namespace epics { namespace pvData { return !(*this == set); } - void BitSet::toString(StringBuilder buffer) { toString(buffer, 0); } - void BitSet::toString(StringBuilder buffer, int indentLevel) const { *buffer += '{'; diff --git a/pvDataApp/misc/bitSet.h b/pvDataApp/misc/bitSet.h index f477e1c..982f5f3 100644 --- a/pvDataApp/misc/bitSet.h +++ b/pvDataApp/misc/bitSet.h @@ -8,6 +8,8 @@ #define BITSET_H #include #include +#include "factory.h" +#include "showConstructDestruct.h" //#include "byteBuffer.h" //#include "serialize.h" namespace epics { namespace pvData { @@ -213,9 +215,7 @@ namespace epics { namespace pvData { bool operator!=(const BitSet &set) const; - void toString(StringBuilder buffer); - - void toString(StringBuilder buffer, int indentLevel) const; + void toString(StringBuilder buffer, int indentLevel = 0) const; private: diff --git a/pvDataApp/misc/status.h b/pvDataApp/misc/status.h index 5e9b38b..0334acd 100644 --- a/pvDataApp/misc/status.h +++ b/pvDataApp/misc/status.h @@ -95,7 +95,7 @@ namespace epics { namespace pvData { * @param cause exception that caused an error. Optional. * @return status instance. */ - virtual Status* createStatus(StatusType type, String message, BaseException* cause) = 0; + virtual Status* createStatus(StatusType type, String message, BaseException* cause = 0) = 0; /** * Deserialize status. diff --git a/testApp/misc/testBitSet.cpp b/testApp/misc/testBitSet.cpp index 15eda03..82c3067 100644 --- a/testApp/misc/testBitSet.cpp +++ b/testApp/misc/testBitSet.cpp @@ -11,8 +11,8 @@ #include #include #include -#include "bitSet.h" - +#include +#include #include @@ -143,6 +143,7 @@ int main(int argc,char *argv[]) { testGetSetClearFlip(); testOperators(); + //getShowConstructDestruct()->constuctDestructTotals(stdout); return(0); }