summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2013-01-31 18:59:22 +0100
committerJan Holesovsky <kendy@suse.cz>2013-01-31 18:59:22 +0100
commit40605ecc1faa02939e5e03abecdadbaea6afbe12 (patch)
tree573ef1d10dd47147f70a26d2472daa566a98fd45
parent509d83a3f7ddbff57ceb11a91f5aa210d14f079a (diff)
Dense B+ tree: Avoid some unnecessary (and actually wrong) memcpy's.
No performance impact - too rare operation. Change-Id: I0b7095b7b369753ed54c3a72f52f8d9cf95f26e7
-rw-r--r--sw/inc/densebplustree.cxx16
-rw-r--r--sw/qa/core/densebplustree-test.cxx13
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;
}