From b698c73690b7a858335763bcae0fe3229925e40b Mon Sep 17 00:00:00 2001 From: Ryan Lucchese Date: Tue, 30 Jun 2015 12:18:12 -0600 Subject: [PATCH 1/5] return const correct reverse iterator to prevent Solaris compiler from choking on const conversion --- taglib/toolkit/tbytevector.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index 45ad0317..e9175d64 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -746,7 +746,7 @@ ByteVector::ReverseIterator ByteVector::rbegin() ByteVector::ConstReverseIterator ByteVector::rbegin() const { - return d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length)); + return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length))))); } ByteVector::ReverseIterator ByteVector::rend() @@ -757,7 +757,7 @@ ByteVector::ReverseIterator ByteVector::rend() ByteVector::ConstReverseIterator ByteVector::rend() const { - return d->data->data.rbegin() + (d->data->data.size() - d->offset); + return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - d->offset)))); } bool ByteVector::isNull() const From a3dccdc7a3a7c5121adf96aa91d58df58343361e Mon Sep 17 00:00:00 2001 From: Ryan Lucchese Date: Tue, 30 Jun 2015 12:46:25 -0600 Subject: [PATCH 2/5] added sun compiler version check before changing constness of ConstReverseIterator in ByteVector --- taglib/toolkit/tbytevector.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index e9175d64..ac32af71 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -746,7 +746,11 @@ ByteVector::ReverseIterator ByteVector::rbegin() ByteVector::ConstReverseIterator ByteVector::rbegin() const { +#if __SUNPRO_CC >= 0x5130 return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length))))); +#else + return d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length)); +#endif } ByteVector::ReverseIterator ByteVector::rend() @@ -757,7 +761,11 @@ ByteVector::ReverseIterator ByteVector::rend() ByteVector::ConstReverseIterator ByteVector::rend() const { +#if __SUNPRO_CC >= 0x5130 return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - d->offset)))); +#else + return d->data->data.rbegin() + (d->data->data.size() - d->offset); +#endif } bool ByteVector::isNull() const From d8e8ec69fe471ac034dfc24d4576bd32081bae90 Mon Sep 17 00:00:00 2001 From: Ryan Lucchese Date: Tue, 30 Jun 2015 13:41:09 -0600 Subject: [PATCH 3/5] changed SUNPRO_CC version check to first check if SUNPRO_CC is defined --- taglib/toolkit/tbytevector.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index ac32af71..4c17a739 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -746,7 +746,7 @@ ByteVector::ReverseIterator ByteVector::rbegin() ByteVector::ConstReverseIterator ByteVector::rbegin() const { -#if __SUNPRO_CC >= 0x5130 +#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length))))); #else return d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length)); @@ -761,7 +761,7 @@ ByteVector::ReverseIterator ByteVector::rend() ByteVector::ConstReverseIterator ByteVector::rend() const { -#if __SUNPRO_CC >= 0x5130 +#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - d->offset)))); #else return d->data->data.rbegin() + (d->data->data.size() - d->offset); From e8c1a1173062dca6c08cd152e676295c66ba0b6a Mon Sep 17 00:00:00 2001 From: Ryan Lucchese Date: Wed, 1 Jul 2015 15:47:21 -0600 Subject: [PATCH 4/5] better const correctness for ByteVector::rbegin() const and ByteVector::rend() const --- taglib/toolkit/tbytevector.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index 4c17a739..fb561e25 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -746,11 +746,8 @@ ByteVector::ReverseIterator ByteVector::rbegin() ByteVector::ConstReverseIterator ByteVector::rbegin() const { -#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) - return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length))))); -#else - return d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length)); -#endif + const std::vector &v = d->data->data; + return v.rbegin() + (v.size() - (d->offset + d->length)); } ByteVector::ReverseIterator ByteVector::rend() @@ -761,11 +758,8 @@ ByteVector::ReverseIterator ByteVector::rend() ByteVector::ConstReverseIterator ByteVector::rend() const { -#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) - return ConstReverseIterator(static_cast(&*(d->data->data.rbegin() + (d->data->data.size() - d->offset)))); -#else - return d->data->data.rbegin() + (d->data->data.size() - d->offset); -#endif + const std::vector &v = d->data->data; + return v.rbegin() + (v.size() - d->offset); } bool ByteVector::isNull() const From 04bee3faeca7765b4ab8b87ab8fe0903f8c4ece4 Mon Sep 17 00:00:00 2001 From: Ryan Lucchese Date: Mon, 6 Jul 2015 16:25:57 -0600 Subject: [PATCH 5/5] added comments explaining ByteVector::rbegin() const and ByteVector::rend() const --- taglib/toolkit/tbytevector.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index fb561e25..7840d1a2 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -746,6 +746,7 @@ ByteVector::ReverseIterator ByteVector::rbegin() ByteVector::ConstReverseIterator ByteVector::rbegin() const { + // we need a const reference to the data vector so we can ensure the const version of rbegin() is called const std::vector &v = d->data->data; return v.rbegin() + (v.size() - (d->offset + d->length)); } @@ -758,6 +759,7 @@ ByteVector::ReverseIterator ByteVector::rend() ByteVector::ConstReverseIterator ByteVector::rend() const { + // we need a const reference to the data vector so we can ensure the const version of rbegin() is called const std::vector &v = d->data->data; return v.rbegin() + (v.size() - d->offset); }