office-gobmx/rsc/source/res/rscclobj.cxx
2011-11-27 13:17:36 -06:00

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: */