From kde-commits Tue Sep 05 00:51:51 2006 From: =?utf-8?q?Lu=C3=ADs=20Pedro=20Coelho?= Date: Tue, 05 Sep 2006 00:51:51 +0000 To: kde-commits Subject: branches/KDE/3.5/kdepim/indexlib Message-Id: <1157417511.101096.26545.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=115741763731838 SVN commit 581014 by luis_pedro: Cleanup correctly when deleting. Previously, references would be wrong. M +9 -0 leafdata.cpp M +12 -0 memreference.h --- branches/KDE/3.5/kdepim/indexlib/leafdata.cpp #581013:581014 @@ -117,6 +117,15 @@ unsigned nbytes = end().raw() - first.raw(); std::memmove( const_cast( first.raw() ), next.raw(), nbytes ); set_usedbytes( usedbytes() - nbytes ); + unsigned char* iter = first.raw(); + for ( ; iter < end().raw(); ++iter) { + if (*iter) --*iter; + else { + ++iter; + byte_io::write(iter,byte_io::read(iter)-1); + iter += byte_io::byte_lenght(); + } + } } } --- branches/KDE/3.5/kdepim/indexlib/memreference.h #581013:581014 @@ -85,12 +85,24 @@ } template +memory_reference operator --( memory_reference ref ) { + return ref = ref - 1; +} + +template T operator ++( memory_reference ref, int ) { T v = ref; ref = ref + 1; return v; } +template +T operator --( memory_reference ref, int ) { + T v = ref; + ref = ref - 1; + return v; +} + template memory_reference operator -= ( memory_reference ref, U v ) { return ref = ref - v;