186 lines
5.5 KiB
C++
186 lines
5.5 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org 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 Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
/****************** I N C L U D E S **************************************/
|
|
|
|
// C and C++ Includes.
|
|
|
|
// Solar Definitionen
|
|
#include <tools/solar.h>
|
|
|
|
// Programmabhaengige Includes.
|
|
#include <rscclobj.hxx>
|
|
#include <rsctop.hxx>
|
|
|
|
/****************** C O D E **********************************************/
|
|
|
|
/****************** R e f N o d e ****************************************/
|
|
/*************************************************************************
|
|
|*
|
|
|* RefNode::RefNode()
|
|
|*
|
|
*************************************************************************/
|
|
RefNode::RefNode( Atom nTyp ){
|
|
pObjBiTree = 0;
|
|
nTypNameId = nTyp;
|
|
}
|
|
|
|
/*************************************************************************
|
|
|*
|
|
|* RefNode::GetId()
|
|
|*
|
|
*************************************************************************/
|
|
sal_uInt32 RefNode::GetId() const
|
|
{
|
|
return( nTypNameId );
|
|
}
|
|
|
|
/*************************************************************************
|
|
|*
|
|
|* RefNode::PutObjNode()
|
|
|*
|
|
*************************************************************************/
|
|
sal_Bool RefNode::PutObjNode( ObjNode * pPutObject ){
|
|
// insert a node in the b-tree pObjBiTree
|
|
// if the node with the same name is in pObjBiTree,
|
|
// return sal_False and no insert,
|
|
|
|
if( pObjBiTree )
|
|
return( pObjBiTree->Insert( pPutObject ) );
|
|
|
|
pObjBiTree = pPutObject;
|
|
return( sal_True );
|
|
}
|
|
|
|
/****************** O b j N o d e ****************************************/
|
|
/*************************************************************************
|
|
|*
|
|
|* RefNode::GetObjNode()
|
|
|*
|
|
*************************************************************************/
|
|
ObjNode * RefNode :: GetObjNode( const RscId & rRscId ){
|
|
// insert a node in the b-tree pObjBiTree
|
|
// if the node with the same name is in pObjBiTree,
|
|
// return NULL and no insert,
|
|
// if not return the pointer to the Object
|
|
|
|
if( pObjBiTree )
|
|
return( pObjBiTree->Search( rRscId ) );
|
|
return( NULL );
|
|
}
|
|
|
|
/*************************************************************************
|
|
|*
|
|
|* ObjNode::ObjNode()
|
|
|*
|
|
*************************************************************************/
|
|
ObjNode::ObjNode( const RscId & rId, CLASS_DATA pData, sal_uLong lKey ){
|
|
pRscObj = pData;
|
|
aRscId = rId;
|
|
lFileKey = lKey;
|
|
}
|
|
|
|
/*************************************************************************
|
|
|*
|
|
|* ObjNode::DelObjNode()
|
|
|*
|
|
*************************************************************************/
|
|
ObjNode * ObjNode::DelObjNode( RscTop * pClass, sal_uLong nFileKey ){
|
|
ObjNode * pRetNode = this;
|
|
|
|
if( Right() )
|
|
pRight = ((ObjNode *)Right())->DelObjNode( pClass, nFileKey );
|
|
if( Left() )
|
|
pLeft = ((ObjNode *)Left())->DelObjNode( pClass, nFileKey );
|
|
|
|
if( GetFileKey() == nFileKey ){
|
|
if( GetRscObj() ){
|
|
pClass->Destroy( RSCINST( pClass, GetRscObj() ) );
|
|
rtl_freeMemory( GetRscObj() );
|
|
}
|
|
pRetNode = (ObjNode *)Right();
|
|
if( pRetNode ){
|
|
if( Left() )
|
|
pRetNode->Insert( (ObjNode *)Left() );
|
|
}
|
|
else
|
|
pRetNode = (ObjNode *)Left();
|
|
delete this;
|
|
}
|
|
return pRetNode;
|
|
}
|
|
|
|
/*************************************************************************
|
|
|*
|
|
|* ObjNode::GetId()
|
|
|*
|
|
*************************************************************************/
|
|
sal_uInt32 ObjNode::GetId() const
|
|
{
|
|
return( (sal_uInt32)(long)aRscId );
|
|
}
|
|
|
|
/*************************************************************************
|
|
|*
|
|
|* ObjNode::IsConsistent()
|
|
|*
|
|
*************************************************************************/
|
|
sal_Bool ObjNode::IsConsistent()
|
|
{
|
|
sal_Bool bRet = sal_True;
|
|
|
|
if( (long)aRscId > 0x7FFF || (long)aRscId < 1 )
|
|
{
|
|
bRet = sal_False;
|
|
}
|
|
else
|
|
{
|
|
if( Left() )
|
|
{
|
|
if( !((ObjNode *)Left())->IsConsistent() )
|
|
bRet = sal_False;
|
|
if( ((ObjNode *)Left())->aRscId >= aRscId )
|
|
{
|
|
bRet = sal_False;
|
|
}
|
|
};
|
|
if( Right() )
|
|
{
|
|
if( ((ObjNode *)Right())->aRscId <= aRscId )
|
|
{
|
|
bRet = sal_False;
|
|
}
|
|
if( !((ObjNode *)Right())->IsConsistent() )
|
|
bRet = sal_False;
|
|
};
|
|
};
|
|
|
|
return( bRet );
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|