SvPersistStream dead

since commit 1e4b1e4a1a
"Removing unused SfxItemPool serialisation from editeng"

Change-Id: I8a3cd36a13b7d2322047c2035e0f23c70ca9cdf0
Reviewed-on: https://gerrit.libreoffice.org/40880
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2017-08-08 13:24:31 +02:00
parent 61d49afadb
commit c605c8d078
12 changed files with 20 additions and 995 deletions

View File

@@ -224,7 +224,7 @@ SvxFieldData* SvxFieldData::Create(const uno::Reference<text::XTextContent>& xTe
}
SV_IMPL_PERSIST1( SvxFieldData, SvPersistBase );
SV_IMPL_PERSIST1( SvxFieldData );
SvxFieldData::SvxFieldData()
@@ -251,16 +251,6 @@ bool SvxFieldData::operator==( const SvxFieldData& rFld ) const
}
void SvxFieldData::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxFieldData::Save( SvPersistStream & /*rStm*/ )
{
}
MetaAction* SvxFieldData::createBeginComment() const
{
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
@@ -314,7 +304,7 @@ bool SvxFieldItem::operator==( const SfxPoolItem& rItem ) const
// The following are the derivatives of SvxFieldData ...
SV_IMPL_PERSIST1( SvxDateField, SvxFieldData );
SV_IMPL_PERSIST1( SvxDateField );
SvxDateField::SvxDateField()
@@ -351,26 +341,6 @@ bool SvxDateField::operator==( const SvxFieldData& rOther ) const
}
void SvxDateField::Load( SvPersistStream & rStm )
{
sal_uInt16 nType, nFormat;
rStm.ReadInt32( nFixDate );
rStm.ReadUInt16( nType );
rStm.ReadUInt16( nFormat );
eType = (SvxDateType)nType;
eFormat= (SvxDateFormat)nFormat;
}
void SvxDateField::Save( SvPersistStream & rStm )
{
rStm.WriteInt32( nFixDate );
rStm.WriteUInt16( (sal_uInt16)eType );
rStm.WriteUInt16( eFormat );
}
OUString SvxDateField::GetFormatted( SvNumberFormatter& rFormatter, LanguageType eLang ) const
{
@@ -448,7 +418,7 @@ MetaAction* SvxDateField::createBeginComment() const
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
}
SV_IMPL_PERSIST1( SvxURLField, SvxFieldData );
SV_IMPL_PERSIST1( SvxURLField );
SvxURLField::SvxURLField()
@@ -483,58 +453,6 @@ bool SvxURLField::operator==( const SvxFieldData& rOther ) const
}
static void write_unicode( SvPersistStream & rStm, const OUString& rString )
{
sal_uInt16 nL = sal::static_int_cast<sal_uInt16>(rString.getLength());
rStm.WriteUInt16( nL );
//endian specific?, yipes!
rStm.WriteBytes( rString.getStr(), nL*sizeof(sal_Unicode) );
}
static OUString read_unicode( SvPersistStream & rStm )
{
rtl_uString *pStr = nullptr;
sal_uInt16 nL = 0;
rStm.ReadUInt16( nL );
const size_t nMaxRecords = rStm.remainingSize() / sizeof(sal_Unicode);
if (nL > nMaxRecords)
{
SAL_WARN("editeng", "Parsing error: " << nMaxRecords <<
" max possible entries, but " << nL << " claimed, truncating");
nL = nMaxRecords;
}
if (nL)
{
pStr = rtl_uString_alloc(nL);
//endian specific?, yipes!
rStm.ReadBytes(pStr->buffer, nL*sizeof(sal_Unicode));
}
//take ownership of buffer and return, otherwise return empty string
return pStr ? OUString(pStr, SAL_NO_ACQUIRE) : OUString();
}
void SvxURLField::Load( SvPersistStream & rStm )
{
sal_uInt16 nFormat = 0;
rStm.ReadUInt16( nFormat );
eFormat= (SvxURLFormat)nFormat;
aURL = read_unicode( rStm );
aRepresentation = read_unicode( rStm );
aTargetFrame = read_unicode( rStm );
}
void SvxURLField::Save( SvPersistStream & rStm )
{
rStm.WriteUInt16( eFormat );
write_unicode( rStm, aURL );
write_unicode( rStm, aRepresentation );
write_unicode( rStm, aTargetFrame );
}
MetaAction* SvxURLField::createBeginComment() const
{
// #i46618# Adding target URL to metafile comment
@@ -548,7 +466,7 @@ MetaAction* SvxURLField::createBeginComment() const
// SvxPageTitleField methods
//
SV_IMPL_PERSIST1( SvxPageTitleField, SvxFieldData );
SV_IMPL_PERSIST1( SvxPageTitleField );
SvxPageTitleField::SvxPageTitleField() {}
@@ -562,14 +480,6 @@ bool SvxPageTitleField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxPageTitleField *>(&rCmp) != nullptr );
}
void SvxPageTitleField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxPageTitleField::Save( SvPersistStream & /*rStm*/ )
{
}
MetaAction* SvxPageTitleField::createBeginComment() const
{
return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageTitleField" );
@@ -581,7 +491,7 @@ MetaAction* SvxPageTitleField::createBeginComment() const
// The fields that were removed from Calc:
SV_IMPL_PERSIST1( SvxPageField, SvxFieldData );
SV_IMPL_PERSIST1( SvxPageField );
SvxPageField::SvxPageField() {}
@@ -595,21 +505,13 @@ bool SvxPageField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxPageField *>(&rCmp) != nullptr );
}
void SvxPageField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxPageField::Save( SvPersistStream & /*rStm*/ )
{
}
MetaAction* SvxPageField::createBeginComment() const
{
return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageField" );
}
SV_IMPL_PERSIST1( SvxPagesField, SvxFieldData );
SV_IMPL_PERSIST1( SvxPagesField );
SvxPagesField::SvxPagesField() {}
@@ -623,15 +525,7 @@ bool SvxPagesField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxPagesField *>(&rCmp) != nullptr);
}
void SvxPagesField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxPagesField::Save( SvPersistStream & /*rStm*/ )
{
}
SV_IMPL_PERSIST1( SvxTimeField, SvxFieldData );
SV_IMPL_PERSIST1( SvxTimeField );
SvxTimeField::SvxTimeField() {}
@@ -645,20 +539,12 @@ bool SvxTimeField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxTimeField *>(&rCmp) != nullptr);
}
void SvxTimeField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxTimeField::Save( SvPersistStream & /*rStm*/ )
{
}
MetaAction* SvxTimeField::createBeginComment() const
{
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
}
SV_IMPL_PERSIST1( SvxFileField, SvxFieldData );
SV_IMPL_PERSIST1( SvxFileField );
SvxFileField::SvxFileField() {}
@@ -672,15 +558,7 @@ bool SvxFileField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxFileField *>(&rCmp) != nullptr );
}
void SvxFileField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxFileField::Save( SvPersistStream & /*rStm*/ )
{
}
SV_IMPL_PERSIST1( SvxTableField, SvxFieldData );
SV_IMPL_PERSIST1( SvxTableField );
SvxTableField::SvxTableField() : mnTab(0) {}
@@ -705,19 +583,10 @@ bool SvxTableField::operator==( const SvxFieldData& rCmp ) const
return mnTab == static_cast<const SvxTableField&>(rCmp).mnTab;
}
void SvxTableField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxTableField::Save( SvPersistStream & /*rStm*/ )
{
}
// SvxExtTimeField
SV_IMPL_PERSIST1( SvxExtTimeField, SvxFieldData );
SV_IMPL_PERSIST1( SvxExtTimeField );
SvxExtTimeField::SvxExtTimeField()
@@ -754,27 +623,6 @@ bool SvxExtTimeField::operator==( const SvxFieldData& rOther ) const
}
void SvxExtTimeField::Load( SvPersistStream & rStm )
{
sal_uInt16 nType, nFormat;
rStm.ReadInt64(m_nFixTime);
rStm.ReadUInt16( nType );
rStm.ReadUInt16( nFormat );
eType = (SvxTimeType) nType;
eFormat= (SvxTimeFormat) nFormat;
}
void SvxExtTimeField::Save( SvPersistStream & rStm )
{
rStm.WriteInt64(m_nFixTime);
rStm.WriteUInt16( eType );
rStm.WriteUInt16( eFormat );
}
OUString SvxExtTimeField::GetFormatted( SvNumberFormatter& rFormatter, LanguageType eLang ) const
{
tools::Time aTime( tools::Time::EMPTY );
@@ -855,7 +703,7 @@ MetaAction* SvxExtTimeField::createBeginComment() const
// SvxExtFileField
SV_IMPL_PERSIST1( SvxExtFileField, SvxFieldData );
SV_IMPL_PERSIST1( SvxExtFileField );
SvxExtFileField::SvxExtFileField()
@@ -891,31 +739,6 @@ bool SvxExtFileField::operator==( const SvxFieldData& rOther ) const
}
void SvxExtFileField::Load( SvPersistStream & rStm )
{
sal_uInt16 nType, nFormat;
// UNICODE: rStm >> aFile;
aFile = rStm.ReadUniOrByteString(rStm.GetStreamCharSet());
rStm.ReadUInt16( nType );
rStm.ReadUInt16( nFormat );
eType = (SvxFileType) nType;
eFormat= (SvxFileFormat) nFormat;
}
void SvxExtFileField::Save( SvPersistStream & rStm )
{
// UNICODE: rStm << aFile;
rStm.WriteUniOrByteString(aFile, rStm.GetStreamCharSet());
rStm.WriteUInt16( eType );
rStm.WriteUInt16( eFormat );
}
OUString SvxExtFileField::GetFormatted() const
{
OUString aString;
@@ -995,7 +818,7 @@ OUString SvxExtFileField::GetFormatted() const
// SvxAuthorField
SV_IMPL_PERSIST1( SvxAuthorField, SvxFieldData );
SV_IMPL_PERSIST1( SvxAuthorField );
SvxAuthorField::SvxAuthorField()
@@ -1038,33 +861,6 @@ bool SvxAuthorField::operator==( const SvxFieldData& rOther ) const
}
void SvxAuthorField::Load( SvPersistStream & rStm )
{
sal_uInt16 nType = 0, nFormat = 0;
aName = read_unicode( rStm );
aFirstName = read_unicode( rStm );
aShortName = read_unicode( rStm );
rStm.ReadUInt16( nType );
rStm.ReadUInt16( nFormat );
eType = (SvxAuthorType) nType;
eFormat= (SvxAuthorFormat) nFormat;
}
void SvxAuthorField::Save( SvPersistStream & rStm )
{
write_unicode( rStm, aName );
write_unicode( rStm, aFirstName );
write_unicode( rStm, aShortName );
rStm.WriteUInt16( eType );
rStm.WriteUInt16( eFormat );
}
OUString SvxAuthorField::GetFormatted() const
{
OUString aString;
@@ -1090,29 +886,7 @@ OUString SvxAuthorField::GetFormatted() const
return aString;
}
static SvClassManager* pClassMgr=nullptr;
SvClassManager& SvxFieldItem::GetClassManager()
{
if ( !pClassMgr )
{
pClassMgr = new SvClassManager;
pClassMgr->Register(SvxFieldData::StaticClassId(), SvxFieldData::CreateInstance);
pClassMgr->Register(SvxURLField::StaticClassId(), SvxURLField::CreateInstance);
pClassMgr->Register(SvxDateField::StaticClassId(), SvxDateField::CreateInstance);
pClassMgr->Register(SvxPageField::StaticClassId(), SvxPageField::CreateInstance);
pClassMgr->Register(SvxPageTitleField::StaticClassId(), SvxPageTitleField::CreateInstance);
pClassMgr->Register(SvxTimeField::StaticClassId(), SvxTimeField::CreateInstance);
pClassMgr->Register(SvxExtTimeField::StaticClassId(), SvxExtTimeField::CreateInstance);
pClassMgr->Register(SvxExtFileField::StaticClassId(), SvxExtFileField::CreateInstance);
pClassMgr->Register(SvxAuthorField::StaticClassId(), SvxAuthorField::CreateInstance);
}
return *pClassMgr;
}
SV_IMPL_PERSIST1( SvxHeaderField, SvxFieldData );
SV_IMPL_PERSIST1( SvxHeaderField );
SvxHeaderField::SvxHeaderField() {}
@@ -1126,16 +900,8 @@ bool SvxHeaderField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxHeaderField *>(&rCmp) != nullptr );
}
void SvxHeaderField::Load( SvPersistStream & /*rStm*/ )
{
}
SV_IMPL_PERSIST1( SvxFooterField );
void SvxHeaderField::Save( SvPersistStream & /*rStm*/ )
{
}
SV_IMPL_PERSIST1( SvxFooterField, SvxFieldData );
SvxFooterField::SvxFooterField() {}
SvxFieldData* SvxFooterField::Clone() const
@@ -1148,16 +914,7 @@ bool SvxFooterField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxFooterField *>(&rCmp) != nullptr );
}
void SvxFooterField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxFooterField::Save( SvPersistStream & /*rStm*/ )
{
}
SV_IMPL_PERSIST1( SvxDateTimeField, SvxFieldData );
SV_IMPL_PERSIST1( SvxDateTimeField );
SvxFieldData* SvxDateTimeField::Clone() const
{
@@ -1169,14 +926,6 @@ bool SvxDateTimeField::operator==( const SvxFieldData& rCmp ) const
return ( dynamic_cast< const SvxDateTimeField *>(&rCmp) != nullptr );
}
void SvxDateTimeField::Load( SvPersistStream & /*rStm*/ )
{
}
void SvxDateTimeField::Save( SvPersistStream & /*rStm*/ )
{
}
SvxDateTimeField::SvxDateTimeField() {}
OUString SvxDateTimeField::GetFormatted(

View File

@@ -20,7 +20,7 @@
#include <editeng/measfld.hxx>
SV_IMPL_PERSIST1(SdrMeasureField,SvxFieldData);
SV_IMPL_PERSIST1(SdrMeasureField);
SdrMeasureField::~SdrMeasureField()
{
@@ -36,16 +36,4 @@ bool SdrMeasureField::operator==(const SvxFieldData& rSrc) const
return eMeasureFieldKind == static_cast<const SdrMeasureField&>(rSrc).GetMeasureFieldKind();
}
void SdrMeasureField::Load(SvPersistStream& rIn)
{
sal_uInt16 nFieldKind;
rIn.ReadUInt16( nFieldKind );
eMeasureFieldKind=(SdrMeasureFieldKind)nFieldKind;
}
void SdrMeasureField::Save(SvPersistStream& rOut)
{
rOut.WriteUInt16( eMeasureFieldKind );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -82,7 +82,7 @@ public:
}
};
class SvMetaObject : public SvRttiBase
class SvMetaObject : public SvRefBase
{
protected:
OString aName;

View File

@@ -76,7 +76,6 @@ public:
virtual SfxPoolItem* Clone( SfxItemPool *pPool = nullptr ) const override;
const SvxFieldData* GetField() const { return mxField.get(); }
static SvClassManager& GetClassManager();
};

View File

@@ -1,29 +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_SVX_SVDFIELD_HXX
#define INCLUDED_SVX_SVDFIELD_HXX
#include <svx/svxdllapi.h>
void SVX_DLLPUBLIC SdrRegisterFieldClasses();
#endif // INCLUDED_SVX_SVDFIELD_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -26,147 +26,18 @@
#include <map>
#include <unordered_map>
#define ERRCODE_IO_NOFACTORY ERRCODE_IO_WRONGFORMAT
class SvPersistBase;
typedef void * (*SvCreateInstancePersist)( SvPersistBase ** );
#define SV_CLASS_REGISTER( Class ) \
Register( Class::StaticClassId(), Class::CreateInstance )
class TOOLS_DLLPUBLIC SvClassManager
{
typedef std::unordered_map<sal_Int32, SvCreateInstancePersist> Map;
Map aAssocTable;
public:
void Register( sal_Int32 nClassId, SvCreateInstancePersist pFunc );
SvCreateInstancePersist Get( sal_Int32 nClassId );
};
class TOOLS_DLLPUBLIC SvRttiBase : public SvRefBase
{
public:
};
#define SV_DECL_PERSIST1( Class, CLASS_ID ) \
static sal_Int32 StaticClassId() { return CLASS_ID; } \
static void * CreateInstance( SvPersistBase ** ppBase ); \
friend SvPersistStream& operator >> ( SvPersistStream & rStm, \
Class *& rpObj); \
virtual sal_Int32 GetClassId() const override; \
virtual void Load( SvPersistStream & ) override; \
virtual void Save( SvPersistStream & ) override;
#define SV_IMPL_PERSIST1( Class, Super1 ) \
void * Class::CreateInstance( SvPersistBase ** ppBase )\
{ \
Class * p = new Class(); \
*ppBase = p; \
return p; \
} \
sal_Int32 Class::GetClassId() const \
#define SV_IMPL_PERSIST1( Class ) \
sal_Int32 Class::GetClassId() const \
{ return StaticClassId(); } \
SvPersistStream& operator >> (SvPersistStream & rStm, Class *& rpObj)\
{ \
SvPersistBase * pObj; \
rStm >> pObj; \
rpObj = dynamic_cast< Class*>( pObj ); \
return rStm; \
}
class SvPersistStream;
class SvPersistBase : public SvRttiBase
class SvPersistBase : public SvRefBase
{
public:
virtual sal_Int32 GetClassId() const = 0;
virtual void Load( SvPersistStream & ) = 0;
virtual void Save( SvPersistStream & ) = 0;
TOOLS_DLLPUBLIC friend SvPersistStream& operator >> ( SvPersistStream & rStm,
SvPersistBase *& rpObj );
};
class SvStream;
/** Persistent Stream
This class provides accessor to storing and loading runtime objects.
All dependent objects have to be stored as well.
In order to load objects automatically, every object class must
provide a Factory method to read an object from stream.
The list of all classes is stored in a <SvClassManager> object
and is sent to SvPersistStream upon initialization.
By using the Method SvPersistStream::WriteCompressed and
SvPersistStream::ReadCompressed, compressed sal_uInt32 values may be
written to / read from the Stream.
Several helper methods exists for writing and reading
object lengths to the stream: SvPersistStream::WriteDummyLen,
SvPersistStream::WriteLen and SvPersistStream::ReadLen.
[Example]
One example is described in the constructor.
Assume a ring-like dependency, where A references B,
B itself references C, and C references to both D and A.
The order of the objects upon saving and loading does not matter,
as long objects are loaded in the same order they were stored.
Saving: Loading:
A,B,C,D A,B,C,D correct
B,A,C,D B,A,C,D correct
C,A,B,D A,B,C,D wrong
A,B,C,D A,B,C wrong
@note The file formats DBG_UTIL and !DBG_UTIL differ, but we can read from
both versions.
*/
class TOOLS_DLLPUBLIC SvPersistStream : public SvStream
{
public:
typedef UniqueIndex<SvPersistBase>::Index Index;
private:
typedef std::map<SvPersistBase*, Index> PersistBaseMap;
SvClassManager & rClassMgr;
SvStream * pStm;
PersistBaseMap aPTable; // reversed pointer and key
UniqueIndex<SvPersistBase>
aPUIdx;
Index nStartIdx;
virtual std::size_t GetData(void* pData, std::size_t nSize) override;
virtual std::size_t PutData(const void* pData, std::size_t nSize) override;
virtual sal_uInt64 SeekPos(sal_uInt64 nPos) override;
virtual void FlushData() override;
protected:
void WriteObj( sal_uInt8 nHdr, SvPersistBase * pObj );
void ReadObj( SvPersistBase * & rpObj );
public:
virtual void ResetError() override;
SvPersistStream( SvClassManager &, SvStream * pStream );
virtual ~SvPersistStream() override;
SvPersistBase * GetObject( Index nIdx ) const;
Index GetIndex( SvPersistBase * ) const;
static void WriteCompressed( SvStream & rStm, sal_uInt32 nVal );
static sal_uInt32 ReadCompressed( SvStream & rStm );
sal_uInt32 WriteDummyLen();
void WriteLen( sal_uInt32 nLenPos );
sal_uInt32 ReadLen( sal_uInt32 * pTestPos );
SvPersistStream& WritePointer( SvPersistBase * pObj );
SvPersistStream& ReadPointer( SvPersistBase * & rpObj );
TOOLS_DLLPUBLIC friend SvPersistStream& WriteSvPersistBase(SvPersistStream &, SvPersistBase *);
TOOLS_DLLPUBLIC friend SvPersistStream& operator >> (SvPersistStream &, SvPersistBase * &);
};
#endif

View File

@@ -100,7 +100,6 @@
#include <svx/imapdlg.hxx>
#include "editutil.hxx"
#include <svx/svdfield.hxx>
#include "dwfunctr.hxx"
#include "acredlin.hxx"
@@ -262,14 +261,6 @@ void ScDLL::Init()
sc::SearchResultsDlgWrapper::RegisterChildWindow(false, pMod);
ScCondFormatDlgWrapper::RegisterChildWindow(false, pMod);
// EditEngine Field; insofar not already defined in OfficeApplication::Init
SvClassManager& rClassManager = SvxFieldItem::GetClassManager();
rClassManager.Register(SvxPagesField::StaticClassId(), SvxPagesField::CreateInstance);
rClassManager.Register(SvxFileField::StaticClassId(), SvxFileField::CreateInstance);
rClassManager.Register(SvxTableField::StaticClassId(), SvxTableField::CreateInstance);
SdrRegisterFieldClasses(); // Register SvDraw fields
// Add 3DObject Factory
E3dObjFactory();

View File

@@ -25,7 +25,6 @@
#include <unotools/configmgr.hxx>
#include <unotools/moduleoptions.hxx>
#include <svx/fmobjfac.hxx>
#include <svx/svdfield.hxx>
#include <svx/objfac3d.hxx>
#include <vcl/svapp.hxx>
@@ -277,9 +276,6 @@ void SdDLL::Init()
// register your controllers here
RegisterControllers(pModule);
// register SvDraw-Fields
SdrRegisterFieldClasses();
// register 3D-object-factory
E3dObjFactory();

View File

@@ -18,27 +18,8 @@
*/
#include <editeng/eeitem.hxx>
#include <editeng/measfld.hxx>
#include <svx/svdotext.hxx>
#include <svx/svdfield.hxx>
static bool bInit = false;
// Do not remove this, it is still used in src536a!
void SdrRegisterFieldClasses()
{
if ( !bInit )
{
SvxFieldItem::GetClassManager().SV_CLASS_REGISTER(SdrMeasureField);
SvxFieldItem::GetClassManager().SV_CLASS_REGISTER(SvxHeaderField);
SvxFieldItem::GetClassManager().SV_CLASS_REGISTER(SvxFooterField);
SvxFieldItem::GetClassManager().SV_CLASS_REGISTER(SvxDateTimeField);
bInit = true;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////// */
bool SdrTextObj::CalcFieldValue(const SvxFieldItem& /*rField*/, sal_Int32 /*nPara*/, sal_uInt16 /*nPos*/,
bool /*bEdit*/, Color*& /*rpTxtColor*/, Color*& /*rpFldColor*/, OUString& /*rRet*/) const

View File

@@ -40,7 +40,6 @@
#include <comphelper/processfactory.hxx>
#include <svx/fmobjfac.hxx>
#include <svx/svdfield.hxx>
#include <svx/objfac3d.hxx>
#include <editeng/acorrcfg.hxx>
@@ -110,9 +109,6 @@ SwDLL::SwDLL()
pDocFact->SetDocumentServiceName("com.sun.star.text.TextDocument");
}
// register SvDraw-Fields
SdrRegisterFieldClasses();
// register 3D-object-Factory
E3dObjFactory();

View File

@@ -70,7 +70,6 @@ $(eval $(call gb_Library_add_exception_objects,tl,\
tools/source/misc/cpuid \
tools/source/misc/extendapplicationenvironment \
tools/source/ref/globname \
tools/source/ref/pstm \
tools/source/ref/ref \
tools/source/stream/stream \
tools/source/stream/vcompat \

View File

@@ -1,516 +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 <tools/pstm.hxx>
#include <rtl/strbuf.hxx>
#include <osl/diagnose.h>
#include <sal/log.hxx>
#define STOR_NO_OPTIMIZE
void SvClassManager::Register( sal_Int32 nClassId, SvCreateInstancePersist pFunc )
{
#ifdef DBG_UTIL
SvCreateInstancePersist p;
p = Get( nClassId );
assert( (!p || p == pFunc) && "register class with same id");
#endif
aAssocTable.insert(Map::value_type(nClassId, pFunc));
}
SvCreateInstancePersist SvClassManager::Get( sal_Int32 nClassId )
{
Map::const_iterator i(aAssocTable.find(nClassId));
return i == aAssocTable.end() ? nullptr : i->second;
}
/** Constructor
@param rMgr Stores factories for objects that can persisted
@param pStream This stream is used as the medium for PersistStream
@param nStartIdxP Start value for object identifier (set > 0 )
@warning Objects rMgr and pStream must not be manipulated while used in
SvPersistStream. An Exception to this is pvStream
(cf. <SvPersistStream::SetStream>).
@see SvPersistStream::SetStream
*/
SvPersistStream::SvPersistStream( SvClassManager & rMgr, SvStream * pStream )
: rClassMgr( rMgr )
, pStm( pStream )
, aPUIdx( UniqueIndex<SvPersistBase>::Index(1) )
, nStartIdx( 1 )
{
m_isWritable = true;
if( pStm )
{
SetVersion( pStm->GetVersion() );
SetError( pStm->GetError() );
SyncSvStream( pStm->Tell() );
}
}
SvPersistStream::~SvPersistStream()
{
if( pStm != nullptr )
{
SyncSysStream();
pStm->SetError( GetError() );
pStm = nullptr;
}
}
void SvPersistStream::ResetError()
{
SvStream::ResetError();
assert(pStm && "stream not set");
pStm->ResetError();
}
std::size_t SvPersistStream::GetData( void* pData, std::size_t nSize )
{
assert(pStm && "stream not set");
std::size_t const nRet = pStm->ReadBytes( pData, nSize );
SetError( pStm->GetError() );
return nRet;
}
std::size_t SvPersistStream::PutData( const void* pData, std::size_t nSize )
{
assert(pStm && "stream not set");
std::size_t const nRet = pStm->WriteBytes( pData, nSize );
SetError( pStm->GetError() );
return nRet;
}
sal_uInt64 SvPersistStream::SeekPos(sal_uInt64 const nPos)
{
assert(pStm && "stream not set");
sal_uInt64 nRet = pStm->Seek( nPos );
SetError( pStm->GetError() );
return nRet;
}
void SvPersistStream::FlushData()
{
}
SvPersistStream::Index SvPersistStream::GetIndex( SvPersistBase * pObj ) const
{
PersistBaseMap::const_iterator it = aPTable.find( pObj );
if( it == aPTable.end() )
{
return Index(0);
}
return it->second;
}
SvPersistBase * SvPersistStream::GetObject( Index nIdx ) const
{
if( nIdx >= nStartIdx )
return aPUIdx.Get( nIdx );
return nullptr;
}
#define LEN_1 0x80
#define LEN_2 0x40
#define LEN_4 0x20
#define LEN_5 0x10
/** Reads a compressed word from the stream.
For details on what format is used for compression, see
<SvPersistStream::WriteCompressed>.
@param rStm Source to read compressed data from
@return Uncompressed word
@see SvPersistStream::WriteCompressed
*/
sal_uInt32 SvPersistStream::ReadCompressed( SvStream & rStm )
{
sal_uInt32 nRet(0);
sal_uInt8 nMask;
rStm.ReadUChar( nMask );
if( nMask & LEN_1 )
nRet = ~LEN_1 & nMask;
else if( nMask & LEN_2 )
{
nRet = ~LEN_2 & nMask;
nRet <<= 8;
rStm.ReadUChar( nMask );
nRet |= nMask;
}
else if( nMask & LEN_4 )
{
nRet = ~LEN_4 & nMask;
nRet <<= 8;
rStm.ReadUChar( nMask );
nRet |= nMask;
nRet <<= 16;
sal_uInt16 n;
rStm.ReadUInt16( n );
nRet |= n;
}
else if( nMask & LEN_5 )
{
if( nMask & 0x0F )
{
rStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
OSL_FAIL( "format error" );
}
rStm.ReadUInt32( nRet );
}
else
{
rStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
OSL_FAIL( "format error" );
}
return nRet;
}
/** Writes compressed stream
@param rStm Source for writing compressed data
@param nVal This value will be compressed and written
nVal is compressed and written to stream using the following algorithm
nVal < 0x80 => 0x80 + nVal of size 1 Byte.
nVal < 0x4000 => 0x4000 + nVal of size 2 Byte.
nVal < 0x20000000 => 0x20000000 + nVal of size 4 Byte.
nVal > 0x1FFFFFFF => 0x1000000000+ nVal of size 5 Byte.
@see SvPersistStream::ReadCompressed
*/
void SvPersistStream::WriteCompressed( SvStream & rStm, sal_uInt32 nVal )
{
#ifdef STOR_NO_OPTIMIZE
if( nVal < 0x80 )
rStm.WriteUChar( LEN_1 | nVal );
else if( nVal < 0x4000 )
{
rStm.WriteUChar( LEN_2 | (nVal >> 8) );
rStm.WriteUChar( nVal );
}
else if( nVal < 0x20000000 )
{
// highest sal_uInt8
rStm.WriteUChar( LEN_4 | (nVal >> 24) );
// 2nd highest sal_uInt8
rStm.WriteUChar( nVal >> 16 );
rStm.WriteUInt16( nVal );
}
else
#endif
{
rStm.WriteUChar( LEN_5 );
rStm.WriteUInt32( nVal );
}
}
/** This method writes length value of 4 Bytes to the stream and returns the
stream position.
Example:
@code
sal_uInt32 nObjPos = rStm.WriteDummyLen();
...
// write data
...
rStm.WriteLen( nObjPos );
@endcode
@return Position of stream behind length value
@see SvPersistStream::ReadLen
@see SvPersistStream::WriteLen
*/
sal_uInt32 SvPersistStream::WriteDummyLen()
{
WriteUInt32( 0 );
return Tell();
}
/** Write difference between current position and nObjPos
as sal_uInt32 to position nObjPos-4 in the stream.
Afterwards, reset stream to old position.
Example: Difference does not contain length value
@code
sal_uInt32 nObjPos = rStm.WriteDummyLen();
...
// write data
...
rStm.WriteLen( nObjPos );
// write more data
@endcode
@param nObjPos Position+4, on which length is written to
@see SvPersistStream::ReadLen
@see SvPersistStream::WriteDummyLen
*/
void SvPersistStream::WriteLen( sal_uInt32 nObjPos )
{
sal_uInt32 nPos = Tell();
sal_uInt32 nLen = nPos - nObjPos;
// Length in stream must be 4 Bytes
Seek( nObjPos - sizeof( sal_uInt32 ) );
// write length
WriteUInt32( nLen );
Seek( nPos );
}
/** Read a length value written to stream
@param pTestPos Position of the stream after reading length. May be NULL.
@see SvPersistStream::WriteDummyLen
@see SvPersistStream::WriteLen
*/
sal_uInt32 SvPersistStream::ReadLen( sal_uInt32 * pTestPos )
{
sal_uInt32 nLen;
ReadUInt32( nLen );
if( pTestPos )
*pTestPos = Tell();
return nLen;
}
// File format backward-compatible
#ifdef STOR_NO_OPTIMIZE
#define P_VER (sal_uInt8)0x00
#else
#define P_VER (sal_uInt8)0x01
#endif
#define P_VER_MASK (sal_uInt8)0x0F
#define P_ID_0 (sal_uInt8)0x80
#define P_OBJ (sal_uInt8)0x40
#define P_DBGUTIL (sal_uInt8)0x20
#define P_ID (sal_uInt8)0x10
#ifdef STOR_NO_OPTIMIZE
#define P_STD P_DBGUTIL
#else
#define P_STD 0
#endif
static void WriteId
(
SvStream & rStm,
sal_uInt8 nHdr,
sal_uInt32 nId,
sal_uInt16 nClassId
)
{
#ifdef STOR_NO_OPTIMIZE
nHdr |= P_ID;
#endif
nHdr |= P_VER;
if( nHdr & P_ID )
{
if( (nHdr & P_OBJ) || nId != 0 )
{ // Id set only for pointers or DBGUTIL
rStm.WriteUChar( nHdr );
SvPersistStream::WriteCompressed( rStm, nId );
}
else
{ // NULL Pointer
rStm.WriteUChar( nHdr | P_ID_0 );
return;
}
}
else
rStm.WriteUChar( nHdr );
if( (nHdr & P_DBGUTIL) || (nHdr & P_OBJ) )
// Objects always have a class id
// Pointers only for DBG_UTIL and != NULL
SvPersistStream::WriteCompressed( rStm, nClassId );
}
static void ReadId
(
SvStream & rStm,
sal_uInt8 & nHdr,
SvPersistStream::Index & nId,
sal_uInt16 & nClassId
)
{
nClassId = 0;
rStm.ReadUChar( nHdr );
if( nHdr & P_ID_0 )
nId = SvPersistStream::Index(0);
else
{
if( (nHdr & P_VER_MASK) == 0 )
{
if( (nHdr & P_DBGUTIL) || !(nHdr & P_OBJ) )
nId = SvPersistStream::Index(SvPersistStream::ReadCompressed( rStm ));
else
nId = SvPersistStream::Index(0);
}
else if( nHdr & P_ID )
nId = SvPersistStream::Index(SvPersistStream::ReadCompressed( rStm ));
if( (nHdr & P_DBGUTIL) || (nHdr & P_OBJ) )
nClassId = (sal_uInt16)SvPersistStream::ReadCompressed( rStm );
}
}
void SvPersistStream::WriteObj
(
sal_uInt8 nHdr,
SvPersistBase * pObj
)
{
#ifdef STOR_NO_OPTIMIZE
sal_uInt32 nObjPos = 0;
if( nHdr & P_DBGUTIL )
// remember position for length value
nObjPos = WriteDummyLen();
#endif
pObj->Save( *this );
#ifdef STOR_NO_OPTIMIZE
if( nHdr & P_DBGUTIL )
WriteLen( nObjPos );
#endif
}
SvPersistStream& SvPersistStream::WritePointer
(
SvPersistBase * pObj
)
{
sal_uInt8 nP = P_STD;
if( pObj )
{
Index nId = GetIndex( pObj );
if( nId )
nP |= P_ID;
else
{
nId = aPUIdx.Insert( pObj );
aPTable[ pObj ] = nId;
nP |= P_OBJ;
}
WriteId( *this, nP, (sal_uInt32)nId, pObj->GetClassId() );
if( nP & P_OBJ )
WriteObj( nP, pObj );
}
else
{ // NULL Pointer
WriteId( *this, nP | P_ID, 0, 0 );
}
return *this;
}
void SvPersistStream::ReadObj
(
SvPersistBase * & rpObj
)
{
sal_uInt8 nHdr;
Index nId(0);
sal_uInt16 nClassId;
rpObj = nullptr; // specification: 0 in case of error
ReadId( *this, nHdr, nId, nClassId );
// get version number through masking
if( P_VER < (nHdr & P_VER_MASK) )
{
SetError( SVSTREAM_FILEFORMAT_ERROR );
OSL_FAIL( "false version" );
}
if( !(nHdr & P_ID_0) && GetError() == ERRCODE_NONE )
{
if( P_OBJ & nHdr )
{ // read object, nId only set for P_DBGUTIL
SAL_WARN_IF( (nHdr & P_DBGUTIL) && nullptr != aPUIdx.Get( nId ), "tools","object already exists");
SvCreateInstancePersist pFunc = rClassMgr.Get( nClassId );
sal_uInt32 nObjLen(0), nObjPos(0);
if( nHdr & P_DBGUTIL )
nObjLen = ReadLen( &nObjPos );
if( !pFunc )
{
#ifdef DBG_UTIL
SAL_INFO( "tools", "no class with id: " << nClassId << " registered" );
#else
(void)nObjLen;
#endif
SetError( ERRCODE_IO_NOFACTORY );
return;
}
pFunc( &rpObj );
// Save reference
rpObj->AddFirstRef();
// insert into table
const Index nNewId = aPUIdx.Insert( rpObj );
// in order to restore state after saving
aPTable[ rpObj ] = nNewId;
SAL_WARN_IF( (nHdr & P_DBGUTIL) && (nId != nNewId), "tools","read write id conflict: not the same");
rpObj->Load( *this );
SAL_WARN_IF( nObjLen + nObjPos != Tell(), "tools", "false object len: read = " << (Tell() - nObjPos)
<< ", should = " << nObjLen);
rpObj->RestoreNoDelete();
rpObj->ReleaseRef();
}
else
{
rpObj = GetObject( nId );
SAL_WARN_IF(rpObj==nullptr,"tools","object does not exist");
SAL_WARN_IF( rpObj->GetClassId() != nClassId , "tools" , "class mismatch" );
}
}
}
SvPersistStream& SvPersistStream::ReadPointer
(
SvPersistBase * & rpObj
)
{
ReadObj( rpObj );
return *this;
}
SvPersistStream& WriteSvPersistBase
(
SvPersistStream & rStm,
SvPersistBase * pObj
)
{
return rStm.WritePointer( pObj );
}
SvPersistStream& operator >>
(
SvPersistStream & rStm,
SvPersistBase * & rpObj
)
{
return rStm.ReadPointer( rpObj );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */