/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: wsbpstbl.h Abstract: Abstract classes that provides persistence methods. Author: Chuck Bardeen [cbardeen] 29-Oct-1996 Revision History: --*/ #ifndef _WSBPSTBL_ #define _WSBPSTBL_ #include "wsbpstrg.h" // The name of the stream that is created when objects are persisted // to structured storage files. #define WSB_PERSIST_DEFAULT_STREAM_NAME OLESTR("WsbStuff") // The size of the overhead associated with persisting an object. #define WSB_PERSIST_BASE_SIZE sizeof(CLSID) // Times used for autosave functionality #define DEFAULT_AUTOSAVE_INTERVAL (5 * 60 * 1000) // 5 minutes #define MAX_AUTOSAVE_INTERVAL (24 * 60 * 60 * 1000) // 24 hours // Macros to help determine how much space is needed to persist an // object or a portion of an object. #define WsbPersistSize(a) (WSB_PERSIST_BASE_SIZE + a) #define WsbPersistSizeOf(a) (WsbPersistSize(sizeof(a))) /*++ Enumeration Name: WSB_PERSIST_STATE Description: An enumeration that indicates the state of the persistance object. The states actually used depend on the type of persistance which is used. --*/ typedef enum { WSB_PERSIST_STATE_UNINIT = 0, // Uninitialized WSB_PERSIST_STATE_NORMAL = 1, // Normal state WSB_PERSIST_STATE_NOSCRIBBLE = 2, // No scribble state WSB_PERSIST_STATE_RELEASED = 3 // File was released } WSB_PERSIST_STATE; /*++ Class Name: CWsbPersistStream Class Description: An object persistable to/from a stream. This is really an abstract class, but is constructable so that other class can delegate to it. --*/ class WSB_EXPORT CWsbPersistStream : public CComObjectRoot, public IPersistStream, public IWsbPersistStream { BEGIN_COM_MAP(CWsbPersistStream) COM_INTERFACE_ENTRY(IPersist) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbPersistStream) END_COM_MAP() // CComObjectRoot public: STDMETHOD(FinalConstruct)(void); void FinalRelease(void); #if defined(WSB_TRACK_MEMORY) ULONG InternalAddRef( ); ULONG InternalRelease( ); #endif // IPersistStream public: STDMETHOD(IsDirty)(void); // IWsbPersistStream public: STDMETHOD(SetIsDirty)(BOOL bIsDirty); protected: BOOL m_isDirty; }; /*++ Class Name: CWsbPersistable Class Description: A object persistable to/from a stream, storage, or file. This is really an abstract class, but is constructable so that other class can delegate to it. CWsbPersistStream should be used instead of this class unless storage and/or file persistence is absolutely necessary! If the object is persisted as part of a parent object, then only the parent object (or its parent) needs to support persistence to storage and/or file. --*/ class WSB_EXPORT CWsbPersistable : public CWsbPersistStream, public IPersistFile, public IWsbPersistable { BEGIN_COM_MAP(CWsbPersistable) COM_INTERFACE_ENTRY2(IPersist, CWsbPersistStream) COM_INTERFACE_ENTRY2(IPersistStream, CWsbPersistStream) COM_INTERFACE_ENTRY2(IWsbPersistStream, CWsbPersistStream) COM_INTERFACE_ENTRY(IPersistFile) COM_INTERFACE_ENTRY(IWsbPersistable) END_COM_MAP() // CComObjectRoot public: STDMETHOD(FinalConstruct)(void); void FinalRelease(void); // IPersistFile public: STDMETHOD(GetCurFile)(LPOLESTR* pszFileName); STDMETHOD(Load)(LPCOLESTR pszFileName, DWORD dwMode); STDMETHOD(Save)(LPCOLESTR pszFileName, BOOL bRemember); STDMETHOD(SaveCompleted)(LPCOLESTR pszFileName); // IWsbPersistStream STDMETHOD(IsDirty)(void) { return(CWsbPersistStream::IsDirty()); } STDMETHOD(SetIsDirty)(BOOL bIsDirty) { return(CWsbPersistStream::SetIsDirty(bIsDirty)); } // IWsbPersistable public: STDMETHOD(GetDefaultFileName)(LPOLESTR* pszFileName, ULONG ulBufferSize); STDMETHOD(ReleaseFile)(void); STDMETHOD(SetDefaultFileName)(LPOLESTR pszFileName); protected: WSB_PERSIST_STATE m_persistState; CWsbStringPtr m_persistFileName; CWsbStringPtr m_persistDefaultName; CComPtr m_persistStorage; CComPtr m_persistStream; }; // Persistence Helper Functions extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, BOOL* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, GUID* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, LONG* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, SHORT* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, BYTE* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, UCHAR* pValue, ULONG bufferSize); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, OLECHAR** pValue, ULONG bufferSize); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULONG* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, USHORT* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, LONGLONG* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULONGLONG* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, DATE* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, FILETIME* pValue); extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULARGE_INTEGER* pValue); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, BOOL value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, GUID value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, LONG value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, SHORT value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, BYTE value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, UCHAR* value, ULONG bufferSize); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, OLECHAR* value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULONG value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, USHORT value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, LONGLONG value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULONGLONG value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, DATE value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, FILETIME value); extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULARGE_INTEGER value); extern WSB_EXPORT HRESULT WsbBstrFromStream(IStream* pStream, BSTR* pValue); extern WSB_EXPORT HRESULT WsbBstrToStream(IStream* pStream, BSTR value); extern WSB_EXPORT HRESULT WsbPrintfToStream(IStream* pStream, OLECHAR* fmtString, ...); extern WSB_EXPORT HRESULT WsbStreamToFile(HANDLE hFile, IStream* pStream, BOOL AddCR); extern WSB_EXPORT HRESULT WsbSafeCreate(OLECHAR *, IPersistFile* pIPFile); extern WSB_EXPORT HRESULT WsbSafeLoad(OLECHAR *, IPersistFile* pIPFile, BOOL UseBackup); extern WSB_EXPORT HRESULT WsbSafeSave(IPersistFile* pIPFile); extern WSB_EXPORT HRESULT WsbMakeBackupName(OLECHAR* pSaveName, OLECHAR* pExtension, OLECHAR** ppBackupName); #endif // _WSBPSTBL_