basic: one more WeakImplHelper<XPropertySetInfo> duplicate

This one may be quite busted even since it compares
sal_Int32(-1) with USHRT_MAX.

Change-Id: I894b382ad499ee49f4616c7704afbb90f0556744
This commit is contained in:
Michael Stahl
2015-09-11 23:42:10 +02:00
parent fb1e645e4a
commit b3ee922299
2 changed files with 14 additions and 129 deletions

View File

@@ -23,6 +23,9 @@
#include <basic/sbstar.hxx>
#include <basic/sbuno.hxx>
#include <sbunoobj.hxx>
#include <comphelper/propertysetinfo.hxx>
#include <limits.h>
using com::sun::star::uno::Reference;
@@ -40,14 +43,6 @@ struct SbCompare_UString_PropertyValue_Impl
}
};
extern "C" int SAL_CALL SbCompare_UString_Property_Impl( const void *arg1, const void *arg2 )
{
const OUString *pArg1 = static_cast<OUString const *>(arg1);
const Property *pArg2 = static_cast<Property const *>(arg2);
return pArg1->compareTo( pArg2->Name );
}
SbPropertyValues::SbPropertyValues()
{
@@ -60,15 +55,22 @@ SbPropertyValues::~SbPropertyValues()
m_xInfo.clear();
}
Reference< XPropertySetInfo > SbPropertyValues::getPropertySetInfo() throw( RuntimeException, std::exception )
{
// create on demand?
if (!m_xInfo.is())
{
SbPropertySetInfo *pInfo = new SbPropertySetInfo( m_aPropVals );
m_xInfo.set(pInfo);
uno::Sequence<beans::Property> props(m_aPropVals.size());
for (size_t n = 0; n < m_aPropVals.size(); ++n)
{
Property &rProp = props.getArray()[n];
const PropertyValue &rPropVal = m_aPropVals[n];
rProp.Name = rPropVal.Name;
rProp.Handle = rPropVal.Handle;
rProp.Type = cppu::UnoType<void>::get();
rProp.Attributes = 0;
}
m_xInfo.set(new ::comphelper::PropertySetInfo(props));
}
return m_xInfo;
}
@@ -188,81 +190,6 @@ void SbPropertyValues::setPropertyValues(const Sequence< PropertyValue >& rPrope
}
//PropertySetInfoImpl
PropertySetInfoImpl::PropertySetInfoImpl()
{
}
sal_Int32 PropertySetInfoImpl::GetIndex_Impl( const OUString &rPropName ) const
{
Property *pP;
pP = static_cast<Property*>(
bsearch( &rPropName, _aProps.getConstArray(), _aProps.getLength(),
sizeof( Property ),
SbCompare_UString_Property_Impl ));
return pP ? sal::static_int_cast<sal_Int32>( pP - _aProps.getConstArray() ) : -1;
}
Property PropertySetInfoImpl::getPropertyByName(const OUString& Name) throw( RuntimeException )
{
sal_Int32 nIndex = GetIndex_Impl( Name );
if( USHRT_MAX != nIndex )
return _aProps.getConstArray()[ nIndex ];
return Property();
}
bool PropertySetInfoImpl::hasPropertyByName(const OUString& Name) throw( RuntimeException )
{
sal_Int32 nIndex = GetIndex_Impl( Name );
return USHRT_MAX != nIndex;
}
SbPropertySetInfo::SbPropertySetInfo( const SbPropertyValueArr_Impl &rPropVals )
{
aImpl._aProps.realloc( rPropVals.size() );
for ( size_t n = 0; n < rPropVals.size(); ++n )
{
Property &rProp = aImpl._aProps.getArray()[n];
const PropertyValue &rPropVal = rPropVals[n];
rProp.Name = rPropVal.Name;
rProp.Handle = rPropVal.Handle;
rProp.Type = cppu::UnoType<void>::get();
rProp.Attributes = 0;
}
}
SbPropertySetInfo::~SbPropertySetInfo()
{
}
Sequence< Property > SbPropertySetInfo::getProperties() throw( RuntimeException, std::exception )
{
return aImpl.getProperties();
}
Property SbPropertySetInfo::getPropertyByName(const OUString& Name)
throw( RuntimeException, std::exception )
{
return aImpl.getPropertyByName( Name );
}
sal_Bool SbPropertySetInfo::hasPropertyByName(const OUString& Name)
throw( RuntimeException, std::exception )
{
return aImpl.hasPropertyByName( Name );
}
void RTL_Impl_CreatePropertySet( StarBASIC* pBasic, SbxArray& rPar, bool bWrite )
{
(void)pBasic;

View File

@@ -84,48 +84,6 @@ public:
virtual void SAL_CALL setPropertyValues(const css::uno::Sequence< css::beans::PropertyValue >& PropertyValues_) throw (css::beans::UnknownPropertyException, css::beans::PropertyVetoException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
};
// AB 20.3.2000 Help Class for XPropertySetInfo implementation
class PropertySetInfoImpl
{
friend class SbPropertySetInfo;
css::uno::Sequence< css::beans::Property > _aProps;
sal_Int32 GetIndex_Impl( const OUString &rPropName ) const;
public:
PropertySetInfoImpl();
PropertySetInfoImpl( css::uno::Sequence< css::beans::Property >& rProps );
// XPropertySetInfo
css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() throw () { return _aProps;}
css::beans::Property SAL_CALL getPropertyByName(const OUString& Name)
throw( css::uno::RuntimeException );
bool SAL_CALL hasPropertyByName(const OUString& Name)
throw ( css::uno::RuntimeException );
};
class SbPropertySetInfo: public ::cppu::WeakImplHelper< css::beans::XPropertySetInfo >
{
PropertySetInfoImpl aImpl;
public:
SbPropertySetInfo( const SbPropertyValueArr_Impl &rPropVals );
virtual ~SbPropertySetInfo();
// XPropertySetInfo
virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties()
throw( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
virtual css::beans::Property SAL_CALL getPropertyByName(const OUString& Name)
throw( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
virtual sal_Bool SAL_CALL hasPropertyByName(const OUString& Name)
throw( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
};
class StarBASIC;
class SbxArray;