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:
@@ -224,7 +224,7 @@ SvxFieldData* SvxFieldData::Create(const uno::Reference<text::XTextContent>& xTe
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxFieldData, SvPersistBase );
|
SV_IMPL_PERSIST1( SvxFieldData );
|
||||||
|
|
||||||
|
|
||||||
SvxFieldData::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
|
MetaAction* SvxFieldData::createBeginComment() const
|
||||||
{
|
{
|
||||||
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
|
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
|
||||||
@@ -314,7 +304,7 @@ bool SvxFieldItem::operator==( const SfxPoolItem& rItem ) const
|
|||||||
// The following are the derivatives of SvxFieldData ...
|
// The following are the derivatives of SvxFieldData ...
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxDateField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxDateField );
|
||||||
|
|
||||||
|
|
||||||
SvxDateField::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
|
OUString SvxDateField::GetFormatted( SvNumberFormatter& rFormatter, LanguageType eLang ) const
|
||||||
{
|
{
|
||||||
@@ -448,7 +418,7 @@ MetaAction* SvxDateField::createBeginComment() const
|
|||||||
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
|
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxURLField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxURLField );
|
||||||
|
|
||||||
|
|
||||||
SvxURLField::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
|
MetaAction* SvxURLField::createBeginComment() const
|
||||||
{
|
{
|
||||||
// #i46618# Adding target URL to metafile comment
|
// #i46618# Adding target URL to metafile comment
|
||||||
@@ -548,7 +466,7 @@ MetaAction* SvxURLField::createBeginComment() const
|
|||||||
// SvxPageTitleField methods
|
// SvxPageTitleField methods
|
||||||
//
|
//
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxPageTitleField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxPageTitleField );
|
||||||
|
|
||||||
SvxPageTitleField::SvxPageTitleField() {}
|
SvxPageTitleField::SvxPageTitleField() {}
|
||||||
|
|
||||||
@@ -562,14 +480,6 @@ bool SvxPageTitleField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxPageTitleField *>(&rCmp) != nullptr );
|
return ( dynamic_cast< const SvxPageTitleField *>(&rCmp) != nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxPageTitleField::Load( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxPageTitleField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
MetaAction* SvxPageTitleField::createBeginComment() const
|
MetaAction* SvxPageTitleField::createBeginComment() const
|
||||||
{
|
{
|
||||||
return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageTitleField" );
|
return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageTitleField" );
|
||||||
@@ -581,7 +491,7 @@ MetaAction* SvxPageTitleField::createBeginComment() const
|
|||||||
// The fields that were removed from Calc:
|
// The fields that were removed from Calc:
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxPageField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxPageField );
|
||||||
|
|
||||||
SvxPageField::SvxPageField() {}
|
SvxPageField::SvxPageField() {}
|
||||||
|
|
||||||
@@ -595,21 +505,13 @@ bool SvxPageField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxPageField *>(&rCmp) != nullptr );
|
return ( dynamic_cast< const SvxPageField *>(&rCmp) != nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxPageField::Load( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxPageField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
MetaAction* SvxPageField::createBeginComment() const
|
MetaAction* SvxPageField::createBeginComment() const
|
||||||
{
|
{
|
||||||
return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageField" );
|
return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageField" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxPagesField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxPagesField );
|
||||||
|
|
||||||
SvxPagesField::SvxPagesField() {}
|
SvxPagesField::SvxPagesField() {}
|
||||||
|
|
||||||
@@ -623,15 +525,7 @@ bool SvxPagesField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxPagesField *>(&rCmp) != nullptr);
|
return ( dynamic_cast< const SvxPagesField *>(&rCmp) != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxPagesField::Load( SvPersistStream & /*rStm*/ )
|
SV_IMPL_PERSIST1( SvxTimeField );
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxPagesField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxTimeField, SvxFieldData );
|
|
||||||
|
|
||||||
SvxTimeField::SvxTimeField() {}
|
SvxTimeField::SvxTimeField() {}
|
||||||
|
|
||||||
@@ -645,20 +539,12 @@ bool SvxTimeField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxTimeField *>(&rCmp) != nullptr);
|
return ( dynamic_cast< const SvxTimeField *>(&rCmp) != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxTimeField::Load( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxTimeField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
MetaAction* SvxTimeField::createBeginComment() const
|
MetaAction* SvxTimeField::createBeginComment() const
|
||||||
{
|
{
|
||||||
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
|
return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxFileField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxFileField );
|
||||||
|
|
||||||
SvxFileField::SvxFileField() {}
|
SvxFileField::SvxFileField() {}
|
||||||
|
|
||||||
@@ -672,15 +558,7 @@ bool SvxFileField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxFileField *>(&rCmp) != nullptr );
|
return ( dynamic_cast< const SvxFileField *>(&rCmp) != nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxFileField::Load( SvPersistStream & /*rStm*/ )
|
SV_IMPL_PERSIST1( SvxTableField );
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxFileField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxTableField, SvxFieldData );
|
|
||||||
|
|
||||||
SvxTableField::SvxTableField() : mnTab(0) {}
|
SvxTableField::SvxTableField() : mnTab(0) {}
|
||||||
|
|
||||||
@@ -705,19 +583,10 @@ bool SvxTableField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return mnTab == static_cast<const SvxTableField&>(rCmp).mnTab;
|
return mnTab == static_cast<const SvxTableField&>(rCmp).mnTab;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxTableField::Load( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxTableField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// SvxExtTimeField
|
// SvxExtTimeField
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxExtTimeField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxExtTimeField );
|
||||||
|
|
||||||
|
|
||||||
SvxExtTimeField::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
|
OUString SvxExtTimeField::GetFormatted( SvNumberFormatter& rFormatter, LanguageType eLang ) const
|
||||||
{
|
{
|
||||||
tools::Time aTime( tools::Time::EMPTY );
|
tools::Time aTime( tools::Time::EMPTY );
|
||||||
@@ -855,7 +703,7 @@ MetaAction* SvxExtTimeField::createBeginComment() const
|
|||||||
// SvxExtFileField
|
// SvxExtFileField
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxExtFileField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxExtFileField );
|
||||||
|
|
||||||
|
|
||||||
SvxExtFileField::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 SvxExtFileField::GetFormatted() const
|
||||||
{
|
{
|
||||||
OUString aString;
|
OUString aString;
|
||||||
@@ -995,7 +818,7 @@ OUString SvxExtFileField::GetFormatted() const
|
|||||||
// SvxAuthorField
|
// SvxAuthorField
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxAuthorField, SvxFieldData );
|
SV_IMPL_PERSIST1( SvxAuthorField );
|
||||||
|
|
||||||
|
|
||||||
SvxAuthorField::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 SvxAuthorField::GetFormatted() const
|
||||||
{
|
{
|
||||||
OUString aString;
|
OUString aString;
|
||||||
@@ -1090,29 +886,7 @@ OUString SvxAuthorField::GetFormatted() const
|
|||||||
return aString;
|
return aString;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SvClassManager* pClassMgr=nullptr;
|
SV_IMPL_PERSIST1( SvxHeaderField );
|
||||||
|
|
||||||
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 );
|
|
||||||
|
|
||||||
SvxHeaderField::SvxHeaderField() {}
|
SvxHeaderField::SvxHeaderField() {}
|
||||||
|
|
||||||
@@ -1126,16 +900,8 @@ bool SvxHeaderField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxHeaderField *>(&rCmp) != nullptr );
|
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() {}
|
SvxFooterField::SvxFooterField() {}
|
||||||
|
|
||||||
SvxFieldData* SvxFooterField::Clone() const
|
SvxFieldData* SvxFooterField::Clone() const
|
||||||
@@ -1148,16 +914,7 @@ bool SvxFooterField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxFooterField *>(&rCmp) != nullptr );
|
return ( dynamic_cast< const SvxFooterField *>(&rCmp) != nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxFooterField::Load( SvPersistStream & /*rStm*/ )
|
SV_IMPL_PERSIST1( SvxDateTimeField );
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxFooterField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SV_IMPL_PERSIST1( SvxDateTimeField, SvxFieldData );
|
|
||||||
|
|
||||||
SvxFieldData* SvxDateTimeField::Clone() const
|
SvxFieldData* SvxDateTimeField::Clone() const
|
||||||
{
|
{
|
||||||
@@ -1169,14 +926,6 @@ bool SvxDateTimeField::operator==( const SvxFieldData& rCmp ) const
|
|||||||
return ( dynamic_cast< const SvxDateTimeField *>(&rCmp) != nullptr );
|
return ( dynamic_cast< const SvxDateTimeField *>(&rCmp) != nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SvxDateTimeField::Load( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SvxDateTimeField::Save( SvPersistStream & /*rStm*/ )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SvxDateTimeField::SvxDateTimeField() {}
|
SvxDateTimeField::SvxDateTimeField() {}
|
||||||
|
|
||||||
OUString SvxDateTimeField::GetFormatted(
|
OUString SvxDateTimeField::GetFormatted(
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
#include <editeng/measfld.hxx>
|
#include <editeng/measfld.hxx>
|
||||||
|
|
||||||
SV_IMPL_PERSIST1(SdrMeasureField,SvxFieldData);
|
SV_IMPL_PERSIST1(SdrMeasureField);
|
||||||
|
|
||||||
SdrMeasureField::~SdrMeasureField()
|
SdrMeasureField::~SdrMeasureField()
|
||||||
{
|
{
|
||||||
@@ -36,16 +36,4 @@ bool SdrMeasureField::operator==(const SvxFieldData& rSrc) const
|
|||||||
return eMeasureFieldKind == static_cast<const SdrMeasureField&>(rSrc).GetMeasureFieldKind();
|
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: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
@@ -82,7 +82,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SvMetaObject : public SvRttiBase
|
class SvMetaObject : public SvRefBase
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
OString aName;
|
OString aName;
|
||||||
|
@@ -76,7 +76,6 @@ public:
|
|||||||
virtual SfxPoolItem* Clone( SfxItemPool *pPool = nullptr ) const override;
|
virtual SfxPoolItem* Clone( SfxItemPool *pPool = nullptr ) const override;
|
||||||
|
|
||||||
const SvxFieldData* GetField() const { return mxField.get(); }
|
const SvxFieldData* GetField() const { return mxField.get(); }
|
||||||
static SvClassManager& GetClassManager();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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: */
|
|
@@ -26,147 +26,18 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <unordered_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 ) \
|
#define SV_DECL_PERSIST1( Class, CLASS_ID ) \
|
||||||
static sal_Int32 StaticClassId() { return 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 sal_Int32 GetClassId() const override; \
|
||||||
virtual void Load( SvPersistStream & ) override; \
|
|
||||||
virtual void Save( SvPersistStream & ) override;
|
|
||||||
|
|
||||||
#define SV_IMPL_PERSIST1( Class, Super1 ) \
|
#define SV_IMPL_PERSIST1( Class ) \
|
||||||
void * Class::CreateInstance( SvPersistBase ** ppBase )\
|
sal_Int32 Class::GetClassId() const \
|
||||||
{ \
|
|
||||||
Class * p = new Class(); \
|
|
||||||
*ppBase = p; \
|
|
||||||
return p; \
|
|
||||||
} \
|
|
||||||
sal_Int32 Class::GetClassId() const \
|
|
||||||
{ return StaticClassId(); } \
|
{ return StaticClassId(); } \
|
||||||
SvPersistStream& operator >> (SvPersistStream & rStm, Class *& rpObj)\
|
|
||||||
{ \
|
|
||||||
SvPersistBase * pObj; \
|
|
||||||
rStm >> pObj; \
|
|
||||||
rpObj = dynamic_cast< Class*>( pObj ); \
|
|
||||||
return rStm; \
|
|
||||||
}
|
|
||||||
|
|
||||||
class SvPersistStream;
|
class SvPersistBase : public SvRefBase
|
||||||
|
|
||||||
class SvPersistBase : public SvRttiBase
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual sal_Int32 GetClassId() const = 0;
|
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
|
#endif
|
||||||
|
@@ -100,7 +100,6 @@
|
|||||||
#include <svx/imapdlg.hxx>
|
#include <svx/imapdlg.hxx>
|
||||||
|
|
||||||
#include "editutil.hxx"
|
#include "editutil.hxx"
|
||||||
#include <svx/svdfield.hxx>
|
|
||||||
|
|
||||||
#include "dwfunctr.hxx"
|
#include "dwfunctr.hxx"
|
||||||
#include "acredlin.hxx"
|
#include "acredlin.hxx"
|
||||||
@@ -262,14 +261,6 @@ void ScDLL::Init()
|
|||||||
sc::SearchResultsDlgWrapper::RegisterChildWindow(false, pMod);
|
sc::SearchResultsDlgWrapper::RegisterChildWindow(false, pMod);
|
||||||
ScCondFormatDlgWrapper::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
|
// Add 3DObject Factory
|
||||||
E3dObjFactory();
|
E3dObjFactory();
|
||||||
|
|
||||||
|
@@ -25,7 +25,6 @@
|
|||||||
#include <unotools/configmgr.hxx>
|
#include <unotools/configmgr.hxx>
|
||||||
#include <unotools/moduleoptions.hxx>
|
#include <unotools/moduleoptions.hxx>
|
||||||
#include <svx/fmobjfac.hxx>
|
#include <svx/fmobjfac.hxx>
|
||||||
#include <svx/svdfield.hxx>
|
|
||||||
#include <svx/objfac3d.hxx>
|
#include <svx/objfac3d.hxx>
|
||||||
#include <vcl/svapp.hxx>
|
#include <vcl/svapp.hxx>
|
||||||
|
|
||||||
@@ -277,9 +276,6 @@ void SdDLL::Init()
|
|||||||
// register your controllers here
|
// register your controllers here
|
||||||
RegisterControllers(pModule);
|
RegisterControllers(pModule);
|
||||||
|
|
||||||
// register SvDraw-Fields
|
|
||||||
SdrRegisterFieldClasses();
|
|
||||||
|
|
||||||
// register 3D-object-factory
|
// register 3D-object-factory
|
||||||
E3dObjFactory();
|
E3dObjFactory();
|
||||||
|
|
||||||
|
@@ -18,27 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <editeng/eeitem.hxx>
|
#include <editeng/eeitem.hxx>
|
||||||
|
|
||||||
#include <editeng/measfld.hxx>
|
#include <editeng/measfld.hxx>
|
||||||
#include <svx/svdotext.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 SdrTextObj::CalcFieldValue(const SvxFieldItem& /*rField*/, sal_Int32 /*nPara*/, sal_uInt16 /*nPos*/,
|
||||||
bool /*bEdit*/, Color*& /*rpTxtColor*/, Color*& /*rpFldColor*/, OUString& /*rRet*/) const
|
bool /*bEdit*/, Color*& /*rpTxtColor*/, Color*& /*rpFldColor*/, OUString& /*rRet*/) const
|
||||||
|
@@ -40,7 +40,6 @@
|
|||||||
#include <comphelper/processfactory.hxx>
|
#include <comphelper/processfactory.hxx>
|
||||||
|
|
||||||
#include <svx/fmobjfac.hxx>
|
#include <svx/fmobjfac.hxx>
|
||||||
#include <svx/svdfield.hxx>
|
|
||||||
#include <svx/objfac3d.hxx>
|
#include <svx/objfac3d.hxx>
|
||||||
#include <editeng/acorrcfg.hxx>
|
#include <editeng/acorrcfg.hxx>
|
||||||
|
|
||||||
@@ -110,9 +109,6 @@ SwDLL::SwDLL()
|
|||||||
pDocFact->SetDocumentServiceName("com.sun.star.text.TextDocument");
|
pDocFact->SetDocumentServiceName("com.sun.star.text.TextDocument");
|
||||||
}
|
}
|
||||||
|
|
||||||
// register SvDraw-Fields
|
|
||||||
SdrRegisterFieldClasses();
|
|
||||||
|
|
||||||
// register 3D-object-Factory
|
// register 3D-object-Factory
|
||||||
E3dObjFactory();
|
E3dObjFactory();
|
||||||
|
|
||||||
|
@@ -70,7 +70,6 @@ $(eval $(call gb_Library_add_exception_objects,tl,\
|
|||||||
tools/source/misc/cpuid \
|
tools/source/misc/cpuid \
|
||||||
tools/source/misc/extendapplicationenvironment \
|
tools/source/misc/extendapplicationenvironment \
|
||||||
tools/source/ref/globname \
|
tools/source/ref/globname \
|
||||||
tools/source/ref/pstm \
|
|
||||||
tools/source/ref/ref \
|
tools/source/ref/ref \
|
||||||
tools/source/stream/stream \
|
tools/source/stream/stream \
|
||||||
tools/source/stream/vcompat \
|
tools/source/stream/vcompat \
|
||||||
|
@@ -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: */
|
|
Reference in New Issue
Block a user