Files
mars-flaim/xflaim/src/fsrefupd.cpp
dsandersoremutah 76cb67c695 Removed some unused parameters from the b-tree methods.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@466 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2006-05-25 21:22:30 +00:00

102 lines
2.7 KiB
C++

//------------------------------------------------------------------------------
// Desc: Insert and delete keys in an index B-Tree.
//
// Tabs: 3
//
// Copyright (c) 1991-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id: fsrefupd.cpp 3114 2006-01-19 13:22:45 -0700 (Thu, 19 Jan 2006) dsanders $
//------------------------------------------------------------------------------
#include "flaimsys.h"
/***************************************************************************
Desc: Update (add or delete) a single reference
*****************************************************************************/
RCODE F_Db::refUpdate(
LFILE * pLFile,
IXD * pIxd,
KREF_ENTRY * pKrefEntry,
FLMBOOL bNormalUpdate)
{
RCODE rc = NE_XFLM_OK;
F_Btree * pbtree = NULL;
IXKeyCompare compareObject;
// Get a btree
if (RC_BAD( rc = gv_XFlmSysData.pBtPool->btpReserveBtree( &pbtree)))
{
goto Exit;
}
flmAssert( pLFile->uiRootBlk);
compareObject.setIxInfo( this, pIxd);
if (bNormalUpdate && pKrefEntry->bDelete)
{
compareObject.setOldNodeList( m_pOldNodeList);
}
if( RC_BAD( rc = pbtree->btOpen( this, pLFile,
(pIxd->uiFlags & IXD_ABS_POS) ? TRUE : FALSE,
(pIxd->pFirstData) ? TRUE : FALSE, &compareObject)))
{
goto Exit;
}
if (!pKrefEntry->bDelete)
{
pbtree->btResetBtree();
if( RC_BAD( rc = pbtree->btInsertEntry(
(FLMBYTE *)&pKrefEntry [1], pKrefEntry->ui16KeyLen,
pKrefEntry->uiDataLen
? ((FLMBYTE *)(&pKrefEntry [1])) + 1 + pKrefEntry->ui16KeyLen
: NULL,
pKrefEntry->uiDataLen, TRUE, TRUE)))
{
goto Exit;
}
}
else
{
pbtree->btResetBtree();
if (RC_BAD( rc = pbtree->btRemoveEntry(
(FLMBYTE *)&pKrefEntry [1], pKrefEntry->ui16KeyLen)))
{
if (rc == NE_XFLM_NOT_FOUND)
{
// Already been deleted, ignore the error condition and go on.
RC_UNEXPECTED_ASSERT( rc);
rc = NE_XFLM_OK;
}
goto Exit;
}
}
Exit:
if (pbtree)
{
gv_XFlmSysData.pBtPool->btpReturnBtree( &pbtree);
}
return( rc);
}