From 7315438355c20c9f04fcb5f3b65ef2a839b1d1f3 Mon Sep 17 00:00:00 2001 From: ageay Date: Wed, 21 Aug 2013 15:01:04 +0000 Subject: [PATCH] Modification of the getHeapMemorySize computation. --- src/MEDCoupling/MEDCouplingRefCountObject.cxx | 41 +++++++++++++++++++ src/MEDCoupling/MEDCouplingRefCountObject.hxx | 2 + src/MEDCoupling_Swig/MEDCouplingCommon.i | 3 +- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/MEDCoupling/MEDCouplingRefCountObject.cxx b/src/MEDCoupling/MEDCouplingRefCountObject.cxx index b2374b980..49d954f8e 100644 --- a/src/MEDCoupling/MEDCouplingRefCountObject.cxx +++ b/src/MEDCoupling/MEDCouplingRefCountObject.cxx @@ -21,6 +21,7 @@ #include "MEDCouplingRefCountObject.hxx" #include "MED_version.h" +#include #include using namespace ParaMEDMEM; @@ -112,6 +113,46 @@ std::size_t RefCountObject::getHeapMemorySize() const return ret; } +std::string RefCountObject::getHeapMemorySizeStr() const +{ + static const char *UNITS[4]={"B","kB","MB","GB"}; + std::size_t m(getHeapMemorySize()); + std::ostringstream oss; oss.precision(3); + std::size_t remain(0); + int i(0); + for(;i<4;i++) + { + if(m<1024) + { + oss << m; + if(remain!=0) + { + std::ostringstream oss2; oss2 << std::fixed << ((double)remain)/1024.; + std::string s(oss2.str()); + s=s.substr(1,4); + std::size_t pos(s.find_last_not_of('0')); + if(pos==4) + oss << s; + else + oss << s.substr(0,pos+1); + } + oss << " " << UNITS[i]; + break; + } + else + { + if(i!=3) + { + remain=(m%1024); + m/=1024; + } + } + } + if(i==4) + oss << m << " " << UNITS[3]; + return oss.str(); +} + bool RefCountObject::decrRef() const { bool ret=((--_cnt)==0); diff --git a/src/MEDCoupling/MEDCouplingRefCountObject.hxx b/src/MEDCoupling/MEDCouplingRefCountObject.hxx index 883f4599d..3d987d706 100644 --- a/src/MEDCoupling/MEDCouplingRefCountObject.hxx +++ b/src/MEDCoupling/MEDCouplingRefCountObject.hxx @@ -24,6 +24,7 @@ #include "MEDCoupling.hxx" #include +#include #include namespace ParaMEDMEM @@ -69,6 +70,7 @@ namespace ParaMEDMEM MEDCOUPLING_EXPORT bool decrRef() const; MEDCOUPLING_EXPORT void incrRef() const; MEDCOUPLING_EXPORT std::size_t getHeapMemorySize() const; + MEDCOUPLING_EXPORT std::string getHeapMemorySizeStr() const; MEDCOUPLING_EXPORT virtual std::size_t getHeapMemorySizeWithoutChildren() const = 0; MEDCOUPLING_EXPORT virtual std::vector getDirectChildren() const = 0; MEDCOUPLING_EXPORT int getRCValue() const; diff --git a/src/MEDCoupling_Swig/MEDCouplingCommon.i b/src/MEDCoupling_Swig/MEDCouplingCommon.i index c8339a201..df1fa3a07 100644 --- a/src/MEDCoupling_Swig/MEDCouplingCommon.i +++ b/src/MEDCoupling_Swig/MEDCouplingCommon.i @@ -568,7 +568,8 @@ namespace ParaMEDMEM bool decrRef() const; void incrRef() const; int getRCValue() const; - virtual std::size_t getHeapMemorySize() const; + std::size_t getHeapMemorySize() const; + std::string RefCountObject::getHeapMemorySizeStr() const; }; } -- 2.39.2