From 30b215a82b8a7272d28898df83b70e254cd04c6d Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 14 Feb 2010 18:33:57 +0000 Subject: (svn r19134) -Fix (r16983, r17219): YAPF debug output was quite broken. --- src/misc/blob.hpp | 12 ++++++++---- src/misc/dbg_helpers.cpp | 6 ++++-- src/misc/str.hpp | 28 +++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 7 deletions(-) (limited to 'src/misc') diff --git a/src/misc/blob.hpp b/src/misc/blob.hpp index d475231b6..e2e130d61 100644 --- a/src/misc/blob.hpp +++ b/src/misc/blob.hpp @@ -64,8 +64,12 @@ protected: } ptr_u; private: - /** Just to silence an unsilencable GCC 4.4+ warning */ - static const CHdr hdrEmpty[]; + /** + * Just to silence an unsilencable GCC 4.4+ warning + * Note: This cannot be 'const' as we do a lot of 'hdrEmpty[0]->m_size += 0;' and 'hdrEmpty[0]->m_max_size += 0;' + * after const_casting. + */ + static CHdr hdrEmpty[]; public: static const bsize_t Ttail_reserve = 4; ///< four extra bytes will be always allocated and zeroed at the end @@ -117,13 +121,13 @@ protected: /** blob header accessor - use it rather than using the pointer arithmetics directly - non-const version */ FORCEINLINE CHdr& Hdr() { - return ptr_u.m_pHdr_1[-1]; + return *(ptr_u.m_pHdr_1 - 1); } /** blob header accessor - use it rather than using the pointer arithmetics directly - const version */ FORCEINLINE const CHdr& Hdr() const { - return ptr_u.m_pHdr_1[-1]; + return *(ptr_u.m_pHdr_1 - 1); } /** return reference to the actual blob size - used when the size needs to be modified */ diff --git a/src/misc/dbg_helpers.cpp b/src/misc/dbg_helpers.cpp index 6a98680dc..c6018f0ec 100644 --- a/src/misc/dbg_helpers.cpp +++ b/src/misc/dbg_helpers.cpp @@ -109,7 +109,9 @@ bool DumpTarget::FindKnownName(size_t type_id, const void *ptr, CStrA &name) void DumpTarget::WriteIndent() { int num_spaces = 2 * m_indent; - memset(m_out.GrowSizeNC(num_spaces), ' ', num_spaces); + if (num_spaces > 0) { + memset(m_out.GrowSizeNC(num_spaces), ' ', num_spaces); + } } /** Write a line with indent at the beginning and at the end. */ @@ -175,4 +177,4 @@ void DumpTarget::EndStruct() } /** Just to silence an unsilencable GCC 4.4+ warning */ -/* static */ const CBlobBaseSimple::CHdr CBlobBaseSimple::hdrEmpty[] = {{0, 0}, {0, 0}}; +/* static */ CBlobBaseSimple::CHdr CBlobBaseSimple::hdrEmpty[] = {{0, 0}, {0, 0}}; diff --git a/src/misc/str.hpp b/src/misc/str.hpp index 9a4663a6e..9204dbfb7 100644 --- a/src/misc/str.hpp +++ b/src/misc/str.hpp @@ -27,6 +27,12 @@ struct CStrA : public CBlobT { } + /** Copy constructor */ + FORCEINLINE CStrA(const CStrA &src) : base(src) + { + base::FixTail(); + } + /** Take over ownership constructor */ FORCEINLINE CStrA(const OnTransfer& ot) : base(ot) @@ -50,14 +56,34 @@ struct CStrA : public CBlobT } } + /** Append another CStrA. */ + FORCEINLINE void Append(const CStrA &src) + { + if (src.RawSize() > 0) { + base::AppendRaw(src); + base::FixTail(); + } + } + /** Assignment from C string. */ - FORCEINLINE CStrA& operator = (const char *src) + FORCEINLINE CStrA &operator = (const char *src) { base::Clear(); AppendStr(src); return *this; } + /** Assignment from another CStrA. */ + FORCEINLINE CStrA &operator = (const CStrA &src) + { + if (&src != this) { + base::Clear(); + base::AppendRaw(src); + base::FixTail(); + } + return *this; + } + /** Lower-than operator (to support stl collections) */ FORCEINLINE bool operator < (const CStrA &other) const { -- cgit v1.2.3-54-g00ecf