summaryrefslogtreecommitdiff
path: root/include/tools/pstm.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/tools/pstm.hxx')
-rw-r--r--include/tools/pstm.hxx135
1 files changed, 3 insertions, 132 deletions
diff --git a/include/tools/pstm.hxx b/include/tools/pstm.hxx
index 6292a52c897f..1f55c7c0fa0f 100644
--- a/include/tools/pstm.hxx
+++ b/include/tools/pstm.hxx
@@ -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