diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2011-12-06 09:54:59 -0500 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2011-12-06 09:54:59 -0500 |
commit | 3e6c522084385e5c40796849b9cefa69e95c981f (patch) | |
tree | 3aeff09062d415b9f3361c17c3bc194ccdb0e031 /indra | |
parent | 1a6846444f35a89001dffa33d1f76067193165f7 (diff) |
LLSD-14: Extract remaining conditional LLSD mbrs to namespace llsd.
Per Monty's code review, it's dubious practice to have a class in which
certain members are sometimes visible, other times not. If these were virtual
methods, or non-static data members, the error would be obvious -- but even
with static data members and non-virtual methods, it looks like an ODR
violation. Extract conditional methods as free functions, as in changeset
07cd70e75473.
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llcommon/llsd.cpp | 38 | ||||
-rw-r--r-- | indra/llcommon/llsd.h | 22 |
2 files changed, 23 insertions, 37 deletions
diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp index 151eb4084a..e295e3c621 100644 --- a/indra/llcommon/llsd.cpp +++ b/indra/llcommon/llsd.cpp @@ -54,23 +54,17 @@ namespace using namespace LLSDUnnamedNamespace; #endif - -// Normally undefined -#ifdef LLSD_DEBUG_INFO +namespace llsd +{ // statics -S32 LLSD::sLLSDAllocationCount = 0; -S32 LLSD::sLLSDNetObjects = 0; - -#define ALLOC_LLSD_OBJECT { sLLSDNetObjects++; sLLSDAllocationCount++; } -#define FREE_LLSD_OBJECT { sLLSDNetObjects--; } +S32 sLLSDAllocationCount = 0; +S32 sLLSDNetObjects = 0; -#else +} // namespace llsd -#define ALLOC_LLSD_OBJECT -#define FREE_LLSD_OBJECT - -#endif +#define ALLOC_LLSD_OBJECT { llsd::sLLSDNetObjects++; llsd::sLLSDAllocationCount++; } +#define FREE_LLSD_OBJECT { llsd::sLLSDNetObjects--; } class LLSD::Impl /**< This class is the abstract base class of the implementation of LLSD @@ -158,6 +152,8 @@ public: safe(llsd.impl).calcStats(type_counts, share_counts); } + static const Impl& getImpl(const LLSD& llsd) { return safe(llsd.impl); } + static Impl& getImpl(LLSD& llsd) { return safe(llsd.impl); } static const LLSD& undef(); @@ -452,10 +448,8 @@ namespace { std::cout << "Map size: " << mData.size() << std::endl; - #ifdef LLSD_DEBUG_INFO - std::cout << "LLSD Net Objects: " << LLSD::sLLSDNetObjects << std::endl; - std::cout << "LLSD allocations: " << LLSD::sLLSDAllocationCount << std::endl; - #endif + std::cout << "LLSD Net Objects: " << llsd::sLLSDNetObjects << std::endl; + std::cout << "LLSD allocations: " << llsd::sLLSDAllocationCount << std::endl; std::cout << "LLSD::Impl Net Objects: " << sOutstandingCount << std::endl; std::cout << "LLSD::Impl allocations: " << sAllocationCount << std::endl; @@ -958,12 +952,10 @@ namespace llsd U32 allocationCount() { return LLSD::Impl::sAllocationCount; } U32 outstandingCount() { return LLSD::Impl::sOutstandingCount; } -} // namespace llsd - // Diagnostic dump of contents in an LLSD object -#ifdef LLSD_DEBUG_INFO -void LLSD::dumpStats() const { safe(impl).dumpStats(); } -#endif +void dumpStats(const LLSD& llsd) { LLSD::Impl::getImpl(llsd).dumpStats(); } + +} // namespace llsd // static std::string LLSD::typeString(Type type) @@ -982,7 +974,7 @@ std::string LLSD::typeString(Type type) "Array" }; - if (0 <= type && type < (sizeof(sTypeNameArray)/sizeof(sTypeNameArray[0]))) + if (0 <= type && type < LL_ARRAY_SIZE(sTypeNameArray)) { return sTypeNameArray[type]; } diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h index ae083dd629..5eb69059ac 100644 --- a/indra/llcommon/llsd.h +++ b/indra/llcommon/llsd.h @@ -401,20 +401,8 @@ private: //@} public: -#ifdef LLSD_DEBUG_INFO - void dumpStats() const; // Output information on object and usage -#endif static std::string typeString(Type type); // Return human-readable type as a string - -#ifdef LLSD_DEBUG_INFO - /// @warn THESE COUNTS WILL NOT BE ACCURATE IN A MULTI-THREADED - /// ENVIRONMENT. - /// - /// These counts track LLSD (public) objects. - static S32 sLLSDAllocationCount; // Number of LLSD objects ever created - static S32 sLLSDNetObjects; // Number of LLSD objects that exist -#endif }; struct llsd_select_bool : public std::unary_function<LLSD, LLSD::Boolean> @@ -465,15 +453,21 @@ LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLSD& llsd); namespace llsd { +#ifdef LLSD_DEBUG_INFO /** @name Unit Testing Interface */ //@{ -#ifdef LLSD_DEBUG_INFO - /// @warn THESE COUNTS WILL NOT BE ACCURATE IN A MULTI-THREADED + LL_COMMON_API void dumpStats(const LLSD&); ///< Output information on object and usage + + /// @warn THE FOLLOWING COUNTS WILL NOT BE ACCURATE IN A MULTI-THREADED /// ENVIRONMENT. /// /// These counts track LLSD::Impl (hidden) objects. LL_COMMON_API U32 allocationCount(); ///< how many Impls have been made LL_COMMON_API U32 outstandingCount(); ///< how many Impls are still alive + + /// These counts track LLSD (public) objects. + LL_COMMON_API extern S32 sLLSDAllocationCount; ///< Number of LLSD objects ever created + LL_COMMON_API extern S32 sLLSDNetObjects; ///< Number of LLSD objects that exist #endif //@} |