Updated core
[LibreOffice.git] / comphelper / source / property / propertysetinfo.cxx
blob2567a06301092f22f714f173603bf7548f9a26c8
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include "comphelper/propertysetinfo.hxx"
23 using namespace ::rtl;
24 using namespace ::comphelper;
25 using namespace ::com::sun::star;
26 using namespace ::com::sun::star::uno;
27 using namespace ::com::sun::star::beans;
28 using namespace ::com::sun::star::lang;
30 namespace comphelper
32 class PropertyMapImpl
34 public:
35 PropertyMapImpl() throw();
36 virtual ~PropertyMapImpl() throw();
38 void add( PropertyMapEntry* pMap, sal_Int32 nCount = -1 ) throw();
39 void remove( const OUString& aName ) throw();
41 Sequence< Property > getProperties() throw();
43 const PropertyMap* getPropertyMap() const throw();
45 Property getPropertyByName( const OUString& aName ) throw( UnknownPropertyException );
46 sal_Bool hasPropertyByName( const OUString& aName ) throw();
48 private:
49 PropertyMap maPropertyMap;
50 Sequence< Property > maProperties;
54 PropertyMapImpl::PropertyMapImpl() throw()
58 PropertyMapImpl::~PropertyMapImpl() throw()
62 void PropertyMapImpl::add( PropertyMapEntry* pMap, sal_Int32 nCount ) throw()
64 // nCount < 0 => add all
65 // nCount == 0 => add nothing
66 // nCount > 0 => add at most nCount entries
68 while( pMap->mpName && ( ( nCount < 0) || ( nCount-- > 0 ) ) )
70 OUString aName( pMap->mpName, pMap->mnNameLen, RTL_TEXTENCODING_ASCII_US );
72 #ifdef DBG_UTIL
73 PropertyMap::iterator aIter = maPropertyMap.find( aName );
74 if( aIter != maPropertyMap.end() )
76 OSL_FAIL( "Warning: PropertyMapEntry added twice, possible error!");
78 #endif
79 if( NULL == pMap->mpType )
81 OSL_FAIL( "No type in PropertyMapEntry!");
82 pMap->mpType = &::getCppuType((const sal_Int32*)0);
85 maPropertyMap[aName] = pMap;
87 if( maProperties.getLength() )
88 maProperties.realloc( 0 );
90 pMap = &pMap[1];
94 void PropertyMapImpl::remove( const OUString& aName ) throw()
96 maPropertyMap.erase( aName );
98 if( maProperties.getLength() )
99 maProperties.realloc( 0 );
102 Sequence< Property > PropertyMapImpl::getProperties() throw()
104 // maybe we have to generate the properties after
105 // a change in the property map or at first call
106 // to getProperties
107 if( maProperties.getLength() != (sal_Int32)maPropertyMap.size() )
109 maProperties = Sequence< Property >( maPropertyMap.size() );
110 Property* pProperties = maProperties.getArray();
112 PropertyMap::iterator aIter = maPropertyMap.begin();
113 const PropertyMap::iterator aEnd = maPropertyMap.end();
114 while( aIter != aEnd )
116 PropertyMapEntry* pEntry = (*aIter).second;
118 pProperties->Name = OUString( pEntry->mpName, pEntry->mnNameLen, RTL_TEXTENCODING_ASCII_US );
119 pProperties->Handle = pEntry->mnHandle;
120 pProperties->Type = *pEntry->mpType;
121 pProperties->Attributes = pEntry->mnAttributes;
123 ++pProperties;
124 ++aIter;
128 return maProperties;
131 const PropertyMap* PropertyMapImpl::getPropertyMap() const throw()
133 return &maPropertyMap;
136 Property PropertyMapImpl::getPropertyByName( const OUString& aName ) throw( UnknownPropertyException )
138 PropertyMap::iterator aIter = maPropertyMap.find( aName );
140 if( maPropertyMap.end() == aIter )
141 throw UnknownPropertyException( aName, NULL );
143 PropertyMapEntry* pEntry = (*aIter).second;
145 return Property( aName, pEntry->mnHandle, *pEntry->mpType, pEntry->mnAttributes );
148 sal_Bool PropertyMapImpl::hasPropertyByName( const OUString& aName ) throw()
150 return maPropertyMap.find( aName ) != maPropertyMap.end();
153 ///////////////////////////////////////////////////////////////////////
155 PropertySetInfo::PropertySetInfo() throw()
157 mpMap = new PropertyMapImpl();
160 PropertySetInfo::PropertySetInfo( PropertyMapEntry* pMap ) throw()
162 mpMap = new PropertyMapImpl();
163 mpMap->add( pMap );
166 PropertySetInfo::~PropertySetInfo() throw()
168 delete mpMap;
171 void PropertySetInfo::add( PropertyMapEntry* pMap ) throw()
173 mpMap->add( pMap );
176 void PropertySetInfo::remove( const OUString& aName ) throw()
178 mpMap->remove( aName );
181 Sequence< ::com::sun::star::beans::Property > SAL_CALL PropertySetInfo::getProperties() throw(::com::sun::star::uno::RuntimeException)
183 return mpMap->getProperties();
186 Property SAL_CALL PropertySetInfo::getPropertyByName( const OUString& aName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException)
188 return mpMap->getPropertyByName( aName );
191 sal_Bool SAL_CALL PropertySetInfo::hasPropertyByName( const OUString& Name ) throw(::com::sun::star::uno::RuntimeException)
193 return mpMap->hasPropertyByName( Name );
196 const PropertyMap* PropertySetInfo::getPropertyMap() const throw()
198 return mpMap->getPropertyMap();
201 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */