SotFactory is in fact not used: remove + cleanup

Also SotData_Impl is used only in exchange.cxx now. Move there.

Change-Id: I548095c2226d92aea4193bb1a3671e2381996435
This commit is contained in:
Matúš Kukan
2016-01-04 22:27:23 +01:00
parent 5b22663e37
commit 3b7150c0ab
9 changed files with 28 additions and 455 deletions

View File

@@ -25,11 +25,8 @@
#include <tools/ref.hxx>
#include <sot/sotdllapi.h>
class SotFactory;
class SOT_DLLPUBLIC SotObject : virtual public SvRefBase
{
friend class SotFactory;
sal_uInt16 nOwnerLockCount;
bool bOwner;
bool bInClose; // TRUE, in DoClose
@@ -41,9 +38,6 @@ protected:
public:
SotObject();
static SotFactory * ClassFactory();
virtual void * Cast( const SotFactory * );
bool Owner() const { return bOwner; }
sal_uInt16 GetOwnerLockCount() const { return nOwnerLockCount; }

View File

@@ -22,8 +22,6 @@
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Reference.h>
#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/embed/XStorage.hpp>
#include <sot/object.hxx>
#include <tools/stream.hxx>
@@ -31,13 +29,8 @@
#include <sot/storinfo.hxx>
#include <sot/sotdllapi.h>
class SotFactory;
class SotStorage;
enum class SotClipboardFormatId : sal_uLong;
/*************************************************************************
*************************************************************************/
class SotStorage;
class BaseStorageStream;
class SOT_DLLPUBLIC SotStorageStream : virtual public SotObject, public SvStream
@@ -56,9 +49,6 @@ public:
SotStorageStream( BaseStorageStream *pStm );
SotStorageStream();
static SotFactory * ClassFactory();
virtual void * Cast( const SotFactory * ) override;
virtual void ResetError() override;
virtual void SetSize( sal_uInt64 nNewSize ) override;
@@ -69,13 +59,7 @@ public:
virtual sal_uInt64 remainingSize() override;
};
namespace ucbhelper
{
class Content;
}
class BaseStorage;
class UNOStorageHolder;
class SOT_DLLPUBLIC SotStorage : virtual public SotObject
{
friend class SotStorageStream;
@@ -104,9 +88,6 @@ public:
SotStorage( SvStream * pStm, bool bDelete );
SotStorage();
static SotFactory * ClassFactory();
virtual void * Cast( const SotFactory * ) override;
SvMemoryStream * CreateMemoryStream();
static bool IsStorageFile( const OUString & rFileName );

View File

@@ -56,7 +56,6 @@ $(eval $(call gb_Library_add_exception_objects,sot,\
sot/source/base/object \
sot/source/base/exchange \
sot/source/base/filelist \
sot/source/base/factory \
sot/source/sdstor/stg \
sot/source/sdstor/stgavl \
sot/source/sdstor/stgcache \

View File

@@ -1,57 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SOT_FACTORY_HXX
#define INCLUDED_SOT_FACTORY_HXX
#include <sal/config.h>
#include <tools/globname.hxx>
class SotObject;
class SotFactory : public SvGlobalName
{
sal_uInt16 nSuperCount; // Anzahl der Superklassen
const SotFactory ** pSuperClasses; // Superklassen
protected:
virtual ~SotFactory();
public:
static void IncSvObjectCount( SotObject * = nullptr );
static void DecSvObjectCount( SotObject * = nullptr );
#ifdef DBG_UTIL
static const SotFactory * Find( const SvGlobalName & );
#endif
SotFactory( const SvGlobalName & );
void PutSuperClass( const SotFactory * );
bool Is( const SotFactory * pSuperClass ) const;
private:
SotFactory( const SotFactory & ) = delete;
SotFactory & operator = ( const SotFactory & ) = delete;
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -1,53 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SOT_SOTDATA_HXX
#define INCLUDED_SOT_SOTDATA_HXX
#include <sal/config.h>
#include <com/sun/star/datatransfer/DataFlavor.hpp>
#include <vector>
#include <list>
class SotFactory;
class SotObject;
typedef ::std::vector< SotFactory* > SotFactoryList;
typedef ::std::vector< css::datatransfer::DataFlavor* > tDataFlavorList;
struct SotData_Impl
{
sal_uInt32 nSvObjCount;
std::list<SotObject*> aObjectList;
SotFactoryList * pFactoryList;
SotFactory * pSotObjectFactory;
SotFactory * pSotStorageStreamFactory;
SotFactory * pSotStorageFactory;
tDataFlavorList* pDataFlavorList;
SotData_Impl();
~SotData_Impl();
};
SotData_Impl* SOTDATA();
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -22,15 +22,17 @@
#include <tools/debug.hxx>
#include <tools/solar.h>
#include <tools/globname.hxx>
#include <sotdata.hxx>
#include <sot/exchange.hxx>
#include <sot/formats.hxx>
#include <sysformats.hxx>
#include <comphelper/classids.hxx>
#include <rtl/instance.hxx>
#include <com/sun/star/datatransfer/DataFlavor.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <comphelper/documentconstants.hxx>
#include <vector>
using namespace::com::sun::star::uno;
using namespace::com::sun::star::datatransfer;
@@ -208,11 +210,35 @@ namespace
struct FormatArray_Impl
: public rtl::StaticAggregate<
const DataFlavorRepresentation, ImplFormatArray_Impl > {};
typedef std::vector<css::datatransfer::DataFlavor*> tDataFlavorList;
struct SotData_Impl
{
tDataFlavorList* pDataFlavorList;
SotData_Impl(): pDataFlavorList(nullptr) {}
~SotData_Impl()
{
if (pDataFlavorList)
{
for( tDataFlavorList::iterator aI = pDataFlavorList->begin(),
aEnd = pDataFlavorList->end(); aI != aEnd; ++aI)
{
delete *aI;
}
delete pDataFlavorList;
}
}
};
struct ImplData : public rtl::Static<SotData_Impl, ImplData> {};
}
static tDataFlavorList& InitFormats_Impl()
{
SotData_Impl * pSotData = SOTDATA();
SotData_Impl *pSotData = &ImplData::get();
if( !pSotData->pDataFlavorList )
pSotData->pDataFlavorList = new tDataFlavorList();
return *pSotData->pDataFlavorList;

View File

@@ -1,203 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <factory.hxx>
#include <tools/debug.hxx>
#include <sot/object.hxx>
#include <sotdata.hxx>
#include <comphelper/classids.hxx>
#include <osl/diagnose.h>
#include <rtl/instance.hxx>
#include <rtl/strbuf.hxx>
/************** class SotData_Impl *********************************************/
/*************************************************************************
|* SotData_Impl::SotData_Impl
|*
|* Beschreibung
*************************************************************************/
SotData_Impl::SotData_Impl()
: nSvObjCount( 0 )
, pFactoryList( nullptr )
, pSotObjectFactory( nullptr )
, pSotStorageStreamFactory( nullptr )
, pSotStorageFactory( nullptr )
, pDataFlavorList( nullptr )
{
}
SotData_Impl::~SotData_Impl()
{
if (pDataFlavorList)
{
for( tDataFlavorList::iterator aI = pDataFlavorList->begin(),
aEnd = pDataFlavorList->end(); aI != aEnd; ++aI)
{
delete *aI;
}
delete pDataFlavorList;
}
delete pFactoryList;
}
/*************************************************************************
|* SOTDATA()
|*
|* Beschreibung
*************************************************************************/
namespace { struct ImplData : public rtl::Static<SotData_Impl, ImplData> {}; }
SotData_Impl * SOTDATA()
{
return &ImplData::get();
}
/************** class SotFactory *****************************************/
/*************************************************************************
|* SotFactory::SotFactory()
|*
|* Beschreibung
*************************************************************************/
SotFactory::SotFactory( const SvGlobalName & rName )
: SvGlobalName ( rName )
, nSuperCount ( 0 )
, pSuperClasses ( nullptr )
{
#ifdef DBG_UTIL
SvGlobalName aEmptyName;
if( aEmptyName != *this )
{ // wegen Sfx-BasicFactories
DBG_ASSERT( aEmptyName != *this, "create factory without SvGlobalName" );
if( Find( *this ) )
{
OSL_FAIL( "create factories with the same unique name" );
}
}
#endif
SotData_Impl * pSotData = SOTDATA();
if( !pSotData->pFactoryList )
pSotData->pFactoryList = new SotFactoryList();
// muss nach hinten, wegen Reihenfolge beim zerstoeren
pSotData->pFactoryList->push_back( this );
}
SotFactory::~SotFactory()
{
delete [] pSuperClasses;
}
/*************************************************************************
|* SotFactory::Find()
|*
|* Beschreibung
*************************************************************************/
#ifdef DBG_UTIL
const SotFactory* SotFactory::Find( const SvGlobalName & rFactName )
{
SvGlobalName aEmpty;
SotData_Impl * pSotData = SOTDATA();
if( rFactName != aEmpty && pSotData->pFactoryList )
{
for ( size_t i = 0, n = pSotData->pFactoryList->size(); i < n; ++i ) {
SotFactory* pFact = (*pSotData->pFactoryList)[ i ];
if( *pFact == rFactName )
return pFact;
}
}
return nullptr;
}
#endif
/*************************************************************************
|* SotFactory::PutSuperClass()
|*
|* Beschreibung
*************************************************************************/
void SotFactory::PutSuperClass( const SotFactory * pFact )
{
nSuperCount++;
if( !pSuperClasses )
pSuperClasses = new const SotFactory * [ nSuperCount ];
else
{
const SotFactory ** pTmp = new const SotFactory * [ nSuperCount ];
memcpy( static_cast<void *>(pTmp), static_cast<void *>(pSuperClasses),
sizeof( void * ) * (nSuperCount -1) );
delete [] pSuperClasses;
pSuperClasses = pTmp;
}
pSuperClasses[ nSuperCount -1 ] = pFact;
}
/*************************************************************************
|* SotFactory::IncSvObjectCount()
|*
|* Beschreibung
*************************************************************************/
void SotFactory::IncSvObjectCount( SotObject * pObj )
{
SotData_Impl * pSotData = SOTDATA();
pSotData->nSvObjCount++;
if( pObj )
pSotData->aObjectList.push_back( pObj );
}
/*************************************************************************
|* SotFactory::DecSvObjectCount()
|*
|* Beschreibung
*************************************************************************/
void SotFactory::DecSvObjectCount( SotObject * pObj )
{
SotData_Impl * pSotData = SOTDATA();
pSotData->nSvObjCount--;
if( pObj )
pSotData->aObjectList.remove( pObj );
if( !pSotData->nSvObjCount )
{
//keine internen und externen Referenzen mehr
}
}
/*************************************************************************
|* SotFactory::Is()
|*
|* Beschreibung
*************************************************************************/
bool SotFactory::Is( const SotFactory * pSuperCl ) const
{
if( this == pSuperCl )
return true;
for( sal_uInt16 i = 0; i < nSuperCount; i++ )
{
if( pSuperClasses[ i ]->Is( pSuperCl ) )
return true;
}
return false;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -18,60 +18,16 @@
*/
#include <sot/object.hxx>
#include <factory.hxx>
#include <sotdata.hxx>
/************** class SotObject ******************************************/
class SotObjectFactory : public SotFactory
{
public:
explicit SotObjectFactory(const SvGlobalName& rName)
: SotFactory( rName )
{
}
};
SotFactory * SotObject::ClassFactory()
{
SotFactory **ppFactory = &(SOTDATA()->pSotObjectFactory);
if( !*ppFactory )
{
*ppFactory = new SotObjectFactory(
SvGlobalName( 0xf44b7830, 0xf83c, 0x11d0,
0xaa, 0xa1, 0x0, 0xa0, 0x24, 0x9d, 0x55, 0x90 ) );
}
return *ppFactory;
}
void * SotObject::Cast( const SotFactory * pFact )
{
void * pRet = nullptr;
if( !pFact || pFact == ClassFactory() )
pRet = this;
return pRet;
}
/*************************************************************************
|* SotObject::SotObject()
|*
|* Beschreibung
*************************************************************************/
SotObject::SotObject()
: nOwnerLockCount( 0 )
, bOwner ( true )
, bInClose ( false )
{
SotFactory::IncSvObjectCount( this );
}
/*************************************************************************
|*
|* SotObject::~SotObject()
|*
*************************************************************************/
SotObject::~SotObject()
{
SotFactory::DecSvObjectCount( this );
}
void SotObject::OwnerLock

View File

@@ -36,46 +36,10 @@
#include <unotools/ucbhelper.hxx>
#include <comphelper/processfactory.hxx>
#include <factory.hxx>
#include <sotdata.hxx>
#include <memory>
using namespace ::com::sun::star;
/************** class SotStorageStream ***********************************/
class SotStorageStreamFactory : public SotFactory
{
public:
explicit SotStorageStreamFactory(const SvGlobalName& rName)
: SotFactory(rName)
{
}
};
SotFactory * SotStorageStream::ClassFactory()
{
SotFactory **ppFactory = &(SOTDATA()->pSotStorageStreamFactory);
if( !*ppFactory )
{
*ppFactory = new SotStorageStreamFactory(
SvGlobalName( 0xd7deb420, 0xf902, 0x11d0,
0xaa, 0xa1, 0x0, 0xa0, 0x24, 0x9d, 0x55, 0x90 ) );
(*ppFactory)->PutSuperClass( SotObject::ClassFactory() );
}
return *ppFactory;
}
void * SotStorageStream::Cast( const SotFactory * pFact )
{
void * pRet = nullptr;
if( !pFact || pFact == ClassFactory() )
pRet = this;
if( !pRet )
pRet = SotObject::Cast( pFact );
return pRet;
}
SvLockBytesRef MakeLockBytes_Impl( const OUString & rName, StreamMode nMode )
{
SvLockBytesRef xLB;
@@ -291,40 +255,6 @@ bool SotStorageStream::SetProperty( const OUString& rName, const css::uno::Any&
}
}
/************** class SotStorage ******************************************
*************************************************************************/
class SotStorageFactory : public SotFactory
{
public:
explicit SotStorageFactory(const SvGlobalName & rName)
: SotFactory(rName)
{
}
};
SotFactory * SotStorage::ClassFactory()
{
SotFactory **ppFactory = &(SOTDATA()->pSotStorageFactory);
if( !*ppFactory )
{
*ppFactory = new SotStorageFactory(
SvGlobalName( 0x980ce7e0, 0xf905, 0x11d0,
0xaa, 0xa1, 0x0, 0xa0, 0x24, 0x9d, 0x55, 0x90 ) );
(*ppFactory)->PutSuperClass( SotObject::ClassFactory() );
}
return *ppFactory;
}
void * SotStorage::Cast( const SotFactory * pFact )
{
void * pRet = nullptr;
if( !pFact || pFact == ClassFactory() )
pRet = this;
if( !pRet )
pRet = SotObject::Cast( pFact );
return pRet;
}
/************************************************************************
|*
|* SotStorage::SotStorage()