From 40605ecc1faa02939e5e03abecdadbaea6afbe12 Mon Sep 17 00:00:00 2001 From: Jan Holesovsky Date: Thu, 31 Jan 2013 18:59:22 +0100 Subject: Dense B+ tree: Avoid some unnecessary (and actually wrong) memcpy's. No performance impact - too rare operation. Change-Id: I0b7095b7b369753ed54c3a72f52f8d9cf95f26e7 --- sw/inc/densebplustree.cxx | 16 ++++------------ sw/qa/core/densebplustree-test.cxx | 13 +++++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/sw/inc/densebplustree.cxx b/sw/inc/densebplustree.cxx index cebf95d00a50..a1865462b11d 100644 --- a/sw/inc/densebplustree.cxx +++ b/sw/inc/densebplustree.cxx @@ -357,31 +357,23 @@ DBPTreeNode< Key, Value >* DenseBPlusTree< Key, Value >::splitNode( DBPTreeNode< { aParent.pNode->insert( aParent.nIndex + 1, offset, pNewNode ); - memcpy( pNewParents, pParents, sizeof( pParents[ 0 ] ) * nParentsLength ); + memcpy( pNewParents, pParents, sizeof( pParents[ 0 ] ) * ( nParentsLength - 1 ) ); rNewParentsLength = nParentsLength; pNewParents[ rNewParentsLength - 1 ] = aParent; } else { - NodeWithIndex pRetParents[ m_nDepth ]; - int nRetParentsLength; - DBPTreeNode< Key, Value > *pNewParent = splitNode( aParent.pNode, bIsAppend, pParents, nParentsLength - 1, pRetParents, nRetParentsLength ); + DBPTreeNode< Key, Value > *pNewParent = splitNode( aParent.pNode, bIsAppend, pParents, nParentsLength - 1, pNewParents, rNewParentsLength ); if ( aParent.nIndex <= aParent.pNode->m_nUsed ) { aParent.pNode->insert( aParent.nIndex + 1, offset, pNewNode ); - - memcpy( pNewParents, pParents, sizeof( pParents[ 0 ] ) * nParentsLength ); - rNewParentsLength = nParentsLength; - pNewParents[ rNewParentsLength - 1 ] = aParent; + pNewParents[ rNewParentsLength++ ] = aParent; } else { pNewParent->insert( aParent.nIndex - aParent.pNode->m_nUsed + 1, offset, pNewNode ); - - memcpy( pNewParents, pParents, sizeof( pParents[ 0 ] ) * nParentsLength ); - rNewParentsLength = nParentsLength; - pNewParents[ rNewParentsLength - 1 ] = NodeWithIndex( pNewParent, aParent.nIndex - aParent.pNode->m_nUsed + 1 ); + pNewParents[ rNewParentsLength++ ] = NodeWithIndex( pNewParent, aParent.nIndex - aParent.pNode->m_nUsed + 1 ); } } } diff --git a/sw/qa/core/densebplustree-test.cxx b/sw/qa/core/densebplustree-test.cxx index e270d0949608..0ea0d8effd92 100644 --- a/sw/qa/core/densebplustree-test.cxx +++ b/sw/qa/core/densebplustree-test.cxx @@ -52,6 +52,7 @@ void print_time( const char* msg, const struct timeval &before, const struct tim int main( int, char** ) { +#if 1 struct timeval tv_before, tv_after; gettimeofday( &tv_before, NULL ); @@ -81,6 +82,18 @@ int main( int, char** ) aTest2.Insert( new BigPtrEntryMock(i), 0 ); gettimeofday( &tv_after, NULL ); print_time( "DenseBPlusTree - insert at front", tv_before, tv_after ); +#endif + +#if 0 + DenseBPlusTree< int, int > aNumbers; + aNumbers.Insert( 20, 0 ); + aNumbers.Insert( 10, 0 ); + aNumbers.Insert( 30, 2 ); + aNumbers.Insert( 1000, 3 ); + for ( int i = 0; i < 100; ++i ) + aNumbers.Insert( i, 3 );//aNumbers.Count() ); + aNumbers.dump(); +#endif return 0; } -- cgit v1.2.3