/* -*- 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ /****************** I N C L U D E S **************************************/ // C and C++ Includes. // Solar Definitionen #include // Programmabhaengige Includes. #include #include /****************** 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: */