diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-11-19 10:43:19 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-11-19 11:01:07 +0000 |
commit | 5d8e23fdb98a74372ca3da37559af4b45655fee4 (patch) | |
tree | 8930928dab177cbe1bbc3df13e38a50c74b29925 /include/basebmp | |
parent | 319524767ea1f399be6a9491eb053a74abf3dd1e (diff) |
coverity#1226488 Big parameter passed by value
Change-Id: I55ee5dcd7ed18fe907fc06aba345d96a90fb2324
Diffstat (limited to 'include/basebmp')
-rw-r--r-- | include/basebmp/compositeiterator.hxx | 140 |
1 files changed, 87 insertions, 53 deletions
diff --git a/include/basebmp/compositeiterator.hxx b/include/basebmp/compositeiterator.hxx index 4fb9c10f0bb4..182318160483 100644 --- a/include/basebmp/compositeiterator.hxx +++ b/include/basebmp/compositeiterator.hxx @@ -89,26 +89,51 @@ namespace detail typedef DifferenceType difference_type; typedef IteratorCategory iterator_category; + struct Impl + { + iterator1_type maIter1; + iterator2_type maIter2; + Impl() + : maIter1() + , maIter2() + { + } + Impl(const iterator1_type& rIter1, const iterator2_type& rIter2) + : maIter1(rIter1) + , maIter2(rIter2) + { + } + }; + protected: - iterator1_type maIter1; - iterator2_type maIter2; + Impl* pImpl; private: bool equal(CompositeIteratorBase const & rhs) const { - return (maIter1 == rhs.maIter1) && (maIter2 == rhs.maIter2); + return (pImpl->maIter1 == rhs.pImpl->maIter1) && (pImpl->maIter2 == rhs.pImpl->maIter2); } public: - CompositeIteratorBase() : - maIter1(), - maIter2() - {} + CompositeIteratorBase() + { + pImpl = new Impl(); + } - CompositeIteratorBase( const iterator1_type& rIter1, const iterator2_type& rIter2 ) : - maIter1( rIter1 ), - maIter2( rIter2 ) - {} + CompositeIteratorBase(const iterator1_type& rIter1, const iterator2_type& rIter2) + { + pImpl = new Impl(rIter1, rIter2); + } + + CompositeIteratorBase(const CompositeIteratorBase& rOther) + { + pImpl = new Impl(rOther.pImpl->maIter1, rOther.pImpl->maIter2); + } + + ~CompositeIteratorBase() + { + delete pImpl; + } bool operator==(Derived const & rhs) const { @@ -122,21 +147,21 @@ namespace detail difference_type operator-(Derived const & rhs) const { - OSL_ASSERT( maIter1 - rhs.maIter1 == maIter2 - rhs.maIter2 ); - return maIter1 - rhs.maIter1; + OSL_ASSERT(pImpl->maIter1 - rhs.pImpl->maIter1 == pImpl->maIter2 - rhs.pImpl->maIter2); + return pImpl->maIter1 - rhs.pImpl->maIter1; } Derived & operator+=(difference_type const & s) { - maIter1 += s; - maIter2 += s; + pImpl->maIter1 += s; + pImpl->maIter2 += s; return static_cast<Derived&>(*this); } Derived & operator-=(difference_type const & s) { - maIter1 -= s; - maIter2 -= s; + pImpl->maIter1 -= s; + pImpl->maIter2 -= s; return static_cast<Derived&>(*this); } @@ -156,63 +181,70 @@ namespace detail Derived& operator++() { - ++maIter1; - ++maIter2; + ++pImpl->maIter1; + ++pImpl->maIter2; return static_cast<Derived&>(*this); } Derived& operator--() { - --maIter1; - --maIter2; + --pImpl->maIter1; + --pImpl->maIter2; return static_cast<Derived&>(*this); } Derived operator++(int) { Derived ret(static_cast<Derived const&>(*this)); - ++maIter1; - ++maIter2; + ++pImpl->maIter1; + ++pImpl->maIter2; return ret; } Derived operator--(int) { Derived ret(static_cast<Derived const&>(*this)); - --maIter1; - --maIter2; + --pImpl->maIter1; + --pImpl->maIter2; return ret; } value_type get() const { - return value_type(maIter1.get(), - maIter2.get()); + return value_type(pImpl->maIter1.get(), + pImpl->maIter2.get()); } value_type get(difference_type const & d) const { - return value_type(maIter1.get(d), - maIter2.get(d)); + return value_type(pImpl->maIter1.get(d), + pImpl->maIter2.get(d)); } void set( value_type v ) const { - maIter1.set(v); - maIter2.set(v); + pImpl->maIter1.set(v); + pImpl->maIter2.set(v); } void set( value_type v, difference_type const & d ) const { - maIter1.set(v,d); - maIter2.set(v,d); + pImpl->maIter1.set(v,d); + pImpl->maIter2.set(v,d); } - const iterator1_type& first() const { return maIter1; } - iterator1_type& first() { return maIter1; } + CompositeIteratorBase& operator=(const CompositeIteratorBase& rNew) + { + this->pImpl->maIter1 = rNew.pImpl->maIter1; + this->pImpl->maIter2 = rNew.pImpl->maIter2; + return *this; + } - const iterator2_type& second() const { return maIter2; } - iterator2_type& second() { return maIter2; } + const iterator1_type& first() const { return pImpl->maIter1; } + iterator1_type& first() { return pImpl->maIter1; } + + const iterator2_type& second() const { return pImpl->maIter2; } + iterator2_type& second() { return pImpl->maIter2; } }; } @@ -314,43 +346,45 @@ public: CompositeIterator2D() : base_type(), - x(this->maIter1.x,this->maIter2.x), - y(this->maIter1.y,this->maIter2.y) + x(this->pImpl->maIter1.x,this->pImpl->maIter2.x), + y(this->pImpl->maIter1.y,this->pImpl->maIter2.y) {} CompositeIterator2D( const Iterator1& rIter1, const Iterator2& rIter2 ) : base_type( rIter1, rIter2 ), - x(this->maIter1.x,this->maIter2.x), - y(this->maIter1.y,this->maIter2.y) + x(this->pImpl->maIter1.x,this->pImpl->maIter2.x), + y(this->pImpl->maIter1.y,this->pImpl->maIter2.y) {} CompositeIterator2D( const CompositeIterator2D& rOld ) : base_type(rOld), - x(this->maIter1.x,this->maIter2.x), - y(this->maIter1.y,this->maIter2.y) + x(this->pImpl->maIter1.x,this->pImpl->maIter2.x), + y(this->pImpl->maIter1.y,this->pImpl->maIter2.y) {} CompositeIterator2D& operator=( const CompositeIterator2D& rNew ) { - this->maIter1 = rNew.maIter1; - this->maIter2 = rNew.maIter2; + this->pImpl->maIter1 = rNew.pImpl->maIter1; + this->pImpl->maIter2 = rNew.pImpl->maIter2; + + x = MoveX(this->pImpl->maIter1.x, + this->pImpl->maIter2.x); + y = MoveY(this->pImpl->maIter1.y, + this->pImpl->maIter2.y); - x = MoveX(this->maIter1.x, - this->maIter2.x); - y = MoveY(this->maIter1.y, - this->maIter2.y); + return *this; } row_iterator rowIterator() const { - return row_iterator(this->maIter1.rowIterator(), - this->maIter2.rowIterator()); + return row_iterator(this->pImpl->maIter1.rowIterator(), + this->pImpl->maIter2.rowIterator()); } column_iterator columnIterator() const { - return column_iterator(this->maIter1.columnIterator(), - this->maIter2.columnIterator()); + return column_iterator(this->pImpl->maIter1.columnIterator(), + this->pImpl->maIter2.columnIterator()); } }; |