diff options
Diffstat (limited to 'rsc/source/res/rscclobj.cxx')
-rw-r--r-- | rsc/source/res/rscclobj.cxx | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/rsc/source/res/rscclobj.cxx b/rsc/source/res/rscclobj.cxx new file mode 100644 index 000000000000..895c778525e8 --- /dev/null +++ b/rsc/source/res/rscclobj.cxx @@ -0,0 +1,188 @@ +/* -*- 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_rsc.hxx" +/****************** 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() +|* +*************************************************************************/ +BOOL RefNode::PutObjNode( ObjNode * pPutObject ){ +// insert a node in the b-tree pObjBiTree +// if the node with the same name is in pObjBiTree, +// return FALSE and no insert, + + if( pObjBiTree ) + return( pObjBiTree->Insert( pPutObject ) ); + + pObjBiTree = pPutObject; + return( 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, ULONG lKey ){ + pRscObj = pData; + aRscId = rId; + lFileKey = lKey; +} + +/************************************************************************* +|* +|* ObjNode::DelObjNode() +|* +*************************************************************************/ +ObjNode * ObjNode::DelObjNode( RscTop * pClass, 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() +|* +*************************************************************************/ +BOOL ObjNode::IsConsistent() +{ + BOOL bRet = TRUE; + + if( (long)aRscId > 0x7FFF || (long)aRscId < 1 ) + { + bRet = FALSE; + } + else + { + if( Left() ) + { + if( !((ObjNode *)Left())->IsConsistent() ) + bRet = FALSE; + if( ((ObjNode *)Left())->aRscId >= aRscId ) + { + bRet = FALSE; + } + }; + if( Right() ) + { + if( ((ObjNode *)Right())->aRscId <= aRscId ) + { + bRet = FALSE; + } + if( !((ObjNode *)Right())->IsConsistent() ) + bRet = FALSE; + }; + }; + + return( bRet ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |