Kaydet (Commit) 13aa5950 authored tarafından Noel Grandin's avatar Noel Grandin

use rtl::Reference in Model

instead of storing both raw pointers and an uno::Reference

Change-Id: I93871eaf9807d0fa846a4e1090d7ee7b1db01c5e
Reviewed-on: https://gerrit.libreoffice.org/33571Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 068edb65
......@@ -81,7 +81,7 @@ using namespace xforms;
void Model::ensureAtLeastOneInstance()
{
if( ! mpInstances->hasItems() )
if( ! mxInstances->hasItems() )
{
// create a default instance
newInstance( OUString(), OUString(), true );
......@@ -92,13 +92,8 @@ void Model::ensureAtLeastOneInstance()
/** Model default constructor; create empty model */
Model::Model() :
msID(),
mpBindings( nullptr ),
mpSubmissions( nullptr ),
mpInstances( new InstanceCollection ),
mxInstances( new InstanceCollection ),
mxNamespaces( new NameContainer<OUString>() ),
mxBindings( mpBindings ),
mxSubmissions( mpSubmissions ),
mxInstances( mpInstances ),
mbInitialized( false ),
mbExternalData( true )
{
......@@ -106,11 +101,8 @@ Model::Model() :
// initialize bindings collections
// (not in initializer list to avoid use of incomplete 'this')
mpBindings = new BindingCollection( this );
mxBindings = mpBindings;
mpSubmissions = new SubmissionCollection( this );
mxSubmissions = mpSubmissions;
mxBindings = new BindingCollection( this );
mxSubmissions = new SubmissionCollection( this );
// invariant only holds after construction
DBG_INVARIANT();
......@@ -118,10 +110,6 @@ Model::Model() :
Model::~Model() throw()
{
// give up bindings & submissions; the mxBindings/mxSubmissions
// references will then delete them
mpBindings = nullptr;
mpSubmissions = nullptr;
}
static Model* lcl_getModel( const Reference<XUnoTunnel>& xTunnel )
......@@ -194,14 +182,9 @@ void Model::setExternalData( bool _bData )
#if OSL_DEBUG_LEVEL > 0
void Model::dbg_assertInvariant() const
{
assert(mpInstances && "no instances found");
assert(mxInstances.is() && "No instance container!");
assert(mpBindings && "no bindings element");
assert(mxBindings.is() && "No Bindings container");
assert(mpSubmissions && "no submissions element");
assert(mxSubmissions.is() && "No Submission container");
assert(mxInstances && "no instances found");
assert(mxBindings && "no bindings element");
assert(mxSubmissions && "no submissions element");
}
#endif
......@@ -262,13 +245,13 @@ MIP Model::queryMIP( const XNode_t& xNode ) const
void Model::rebind()
{
OSL_ENSURE( mpBindings != nullptr, "bindings?" );
OSL_ENSURE( mxBindings, "bindings?" );
// iterate over all bindings and call update
sal_Int32 nCount = mpBindings->countItems();
sal_Int32 nCount = mxBindings->countItems();
for( sal_Int32 i = 0; i < nCount; i++ )
{
Binding* pBind = Binding::getBinding( mpBindings->Collection<XPropertySet_t>::getItem( i ) );
Binding* pBind = Binding::getBinding( mxBindings->Collection<XPropertySet_t>::getItem( i ) );
OSL_ENSURE( pBind != nullptr, "binding?" );
pBind->update();
}
......@@ -278,10 +261,10 @@ void Model::rebind()
void Model::deferNotifications( bool bDefer )
{
// iterate over all bindings and defer notifications
sal_Int32 nCount = mpBindings->countItems();
sal_Int32 nCount = mxBindings->countItems();
for( sal_Int32 i = 0; i < nCount; i++ )
{
Binding* pBind = Binding::getBinding( mpBindings->Collection<XPropertySet_t>::getItem( i ) );
Binding* pBind = Binding::getBinding( mxBindings->Collection<XPropertySet_t>::getItem( i ) );
OSL_ENSURE( pBind != nullptr, "binding?" );
pBind->deferNotifications( bDefer );
}
......@@ -353,7 +336,7 @@ bool Model::setSimpleContent( const XNode_t& xConstNode,
void Model::loadInstance( sal_Int32 nInstance )
{
Sequence<PropertyValue> aSequence = mpInstances->getItem( nInstance );
Sequence<PropertyValue> aSequence = mxInstances->getItem( nInstance );
// find URL from instance
OUString sURL;
......@@ -376,7 +359,7 @@ void Model::loadInstance( sal_Int32 nInstance )
OUString sEmpty;
setInstanceData( aSequence, nullptr, &xInstance,
bOnce ? &sEmpty : &sURL, nullptr);
mpInstances->setItem( nInstance, aSequence );
mxInstances->setItem( nInstance, aSequence );
}
}
}
......@@ -390,7 +373,7 @@ void Model::loadInstance( sal_Int32 nInstance )
void Model::loadInstances()
{
// iterate over instance array to get PropertyValue-Sequence
const sal_Int32 nInstances = mpInstances->countItems();
const sal_Int32 nInstances = mxInstances->countItems();
for( sal_Int32 nInstance = 0; nInstance < nInstances; nInstance++ )
{
loadInstance( nInstance );
......@@ -401,10 +384,10 @@ void Model::loadInstances()
bool Model::isValid() const
{
bool bValid = true;
sal_Int32 nCount = mpBindings->countItems();
sal_Int32 nCount = mxBindings->countItems();
for( sal_Int32 i = 0; bValid && i < nCount; i++ )
{
Binding* pBind = Binding::getBinding( mpBindings->Collection<XPropertySet_t>::getItem( i ) );
Binding* pBind = Binding::getBinding( mxBindings->Collection<XPropertySet_t>::getItem( i ) );
OSL_ENSURE( pBind != nullptr, "binding?" );
bValid = pBind->isValid();
}
......@@ -479,10 +462,10 @@ void SAL_CALL Model::submitWithInteraction(
{
DBG_INVARIANT();
if( mpSubmissions->hasItem( sID ) )
if( mxSubmissions->hasItem( sID ) )
{
Submission* pSubmission =
Submission::getSubmission( mpSubmissions->getItem( sID ) );
Submission::getSubmission( mxSubmissions->getItem( sID ) );
OSL_ENSURE( pSubmission != nullptr, "no submission?" );
OSL_ENSURE( pSubmission->getModel() == Reference<XModel>( this ),
"wrong model" );
......@@ -514,7 +497,7 @@ css::uno::Reference<css::xforms::XDataTypeRepository> SAL_CALL Model::getDataTyp
css::uno::Reference<css::container::XSet> Model::getInstances()
throw( RuntimeException, std::exception )
{
return mxInstances;
return mxInstances.get();
}
css::uno::Reference<css::xml::dom::XDocument> Model::getInstanceDocument( const OUString& rName )
......@@ -522,9 +505,9 @@ css::uno::Reference<css::xml::dom::XDocument> Model::getInstanceDocument( const
{
ensureAtLeastOneInstance();
Reference<XDocument> aInstance;
sal_Int32 nInstance = lcl_findInstance( mpInstances, rName );
sal_Int32 nInstance = lcl_findInstance( mxInstances.get(), rName );
if( nInstance != -1 )
getInstanceData( mpInstances->getItem( nInstance ),
getInstanceData( mxInstances->getItem( nInstance ),
nullptr, &aInstance, nullptr, nullptr );
return aInstance;
}
......@@ -533,9 +516,9 @@ css::uno::Reference<css::xml::dom::XDocument> SAL_CALL Model::getDefaultInstance
throw( RuntimeException, std::exception )
{
ensureAtLeastOneInstance();
DBG_ASSERT( mpInstances->countItems() > 0, "no instance?" );
DBG_ASSERT( mxInstances->countItems() > 0, "no instance?" );
Reference<XDocument> aInstance;
getInstanceData( mpInstances->getItem( 0 ), nullptr, &aInstance, nullptr, nullptr );
getInstanceData( mxInstances->getItem( 0 ), nullptr, &aInstance, nullptr, nullptr );
return aInstance;
}
......@@ -563,14 +546,14 @@ Model::XPropertySet_t Model::getBinding( const OUString& sId )
throw( RuntimeException, std::exception )
{
DBG_INVARIANT();
return mpBindings->hasItem( sId ) ? mpBindings->getItem( sId ) : nullptr;
return mxBindings->hasItem( sId ) ? mxBindings->getItem( sId ) : nullptr;
}
css::uno::Reference<css::container::XSet> Model::getBindings()
throw( RuntimeException, std::exception )
{
DBG_INVARIANT();
return mxBindings;
return mxBindings.get();
}
......@@ -599,8 +582,8 @@ css::uno::Reference<css::xforms::XSubmission> Model::getSubmission( const OUStri
{
DBG_INVARIANT();
css::uno::Reference<css::xforms::XSubmission> xSubmission;
if ( mpSubmissions->hasItem( sId ) )
xSubmission.set(mpSubmissions->getItem( sId ), css::uno::UNO_QUERY);
if ( mxSubmissions->hasItem( sId ) )
xSubmission.set(mxSubmissions->getItem( sId ), css::uno::UNO_QUERY);
return xSubmission;
}
......@@ -608,7 +591,7 @@ css::uno::Reference<css::container::XSet> Model::getSubmissions()
throw( RuntimeException, std::exception )
{
DBG_INVARIANT();
return mxSubmissions;
return mxSubmissions.get();
}
......
......@@ -27,8 +27,8 @@
#include <com/sun/star/util/XUpdatable.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include <rtl/ref.hxx>
#include "mip.hxx"
#include <map>
......@@ -86,9 +86,9 @@ class Model : public Model_t
private:
OUString msID; /// the model ID
BindingCollection* mpBindings; /// the bindings
SubmissionCollection* mpSubmissions; /// the submissions
InstanceCollection* mpInstances; /// the instance(s)
rtl::Reference<BindingCollection> mxBindings; /// the bindings
rtl::Reference<SubmissionCollection> mxSubmissions; /// the submissions
rtl::Reference<InstanceCollection> mxInstances; /// the instance(s)
css::uno::Reference<css::xforms::XDataTypeRepository> mxDataTypes; /// the XSD data-types used
css::uno::Reference<css::xml::dom::XDocument> mxForeignSchema; /// the XSD-schema part we cannot
......@@ -97,12 +97,6 @@ private:
css::uno::Reference<css::container::XNameContainer> mxNamespaces; /// namespaces for entire model
// references to mpBindings/mpSubmissions, for UNO reference counting
css::uno::Reference<css::container::XSet> mxBindings;
css::uno::Reference<css::container::XSet> mxSubmissions;
css::uno::Reference<css::container::XSet> mxInstances;
MIPs_t maMIPs; /// map nodes to their MIPs
bool mbInitialized; /// has model been initialized ?
......
......@@ -391,7 +391,7 @@ void Model::removeBindingIfUseless( const XPropertySet_t& xBinding )
if( pBinding != nullptr )
{
if( ! pBinding->isUseful() )
mpBindings->removeItem( pBinding );
mxBindings->removeItem( pBinding );
}
}
......@@ -411,7 +411,7 @@ css::uno::Reference<css::xml::dom::XDocument> Model::newInstance( const OUString
Sequence<PropertyValue> aSequence;
bool bOnce = bURLOnce; // bool, so we can take address in setInstanceData
setInstanceData( aSequence, &sName, &xInstance, &sURL, &bOnce );
sal_Int32 nInstance = mpInstances->addItem( aSequence );
sal_Int32 nInstance = mxInstances->addItem( aSequence );
loadInstance( nInstance );
return xInstance;
......@@ -451,10 +451,10 @@ void Model::renameInstance( const OUString& sFrom,
sal_Bool bURLOnce )
throw( RuntimeException, std::exception )
{
sal_Int32 nPos = lcl_findInstance( mpInstances, sFrom );
sal_Int32 nPos = lcl_findInstance( mxInstances.get(), sFrom );
if( nPos != -1 )
{
Sequence<PropertyValue> aSeq = mpInstances->getItem( nPos );
Sequence<PropertyValue> aSeq = mxInstances->getItem( nPos );
PropertyValue* pSeq = aSeq.getArray();
sal_Int32 nLength = aSeq.getLength();
......@@ -482,16 +482,16 @@ void Model::renameInstance( const OUString& sFrom,
pSeq[ nProp ].Value <<= bURLOnce;
// set instance
mpInstances->setItem( nPos, aSeq );
mxInstances->setItem( nPos, aSeq );
}
}
void Model::removeInstance( const OUString& sName )
throw( RuntimeException, std::exception )
{
sal_Int32 nPos = lcl_findInstance( mpInstances, sName );
sal_Int32 nPos = lcl_findInstance( mxInstances.get(), sName );
if( nPos != -1 )
mpInstances->removeItem( mpInstances->getItem( nPos ) );
mxInstances->removeItem( mxInstances->getItem( nPos ) );
}
static Reference<XNameContainer> lcl_getModels(
......@@ -666,10 +666,10 @@ Model::XNode_t Model::renameNode( const XNode_t& xNode,
// iterate over bindings and replace default expressions
OUString sNewDefaultBindingExpression =
getDefaultBindingExpressionForNode( xNew );
for( sal_Int32 n = 0; n < mpBindings->countItems(); n++ )
for( sal_Int32 n = 0; n < mxBindings->countItems(); n++ )
{
Binding* pBinding = Binding::getBinding(
mpBindings->Collection<XPropertySet_t>::getItem( n ) );
mxBindings->Collection<XPropertySet_t>::getItem( n ) );
if( pBinding->getBindingExpression()
== sOldDefaultBindingExpression )
......@@ -694,10 +694,10 @@ Model::XPropertySet_t Model::getBindingForNode( const XNode_t& xNode,
Binding* pBestBinding = nullptr;
sal_Int32 nBestScore = 0;
for( sal_Int32 n = 0; n < mpBindings->countItems(); n++ )
for( sal_Int32 n = 0; n < mxBindings->countItems(); n++ )
{
Binding* pBinding = Binding::getBinding(
mpBindings->Collection<XPropertySet_t>::getItem( n ) );
mxBindings->Collection<XPropertySet_t>::getItem( n ) );
OSL_ENSURE( pBinding != nullptr, "no binding?" );
Reference<XNodeList> xNodeList = pBinding->getXNodeList();
......@@ -732,7 +732,7 @@ Model::XPropertySet_t Model::getBindingForNode( const XNode_t& xNode,
pBestBinding = new Binding();
pBestBinding->setBindingExpression(
getDefaultBindingExpressionForNode( xNode ) );
mpBindings->addItem( pBestBinding );
mxBindings->addItem( pBestBinding );
}
return pBestBinding;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment