/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #ifndef _ODDBUNDOCONTROLLER_INCLUDED_ #define _ODDBUNDOCONTROLLER_INCLUDED_ #include "RxObject.h" #include "RxIterator.h" #include "DbRootExport.h" #include "OdStreamBuf.h" /** \details */ class DBROOT_EXPORT ODRX_ABSTRACT OdDbUndoControllerRecord : public OdRxObject { protected: OdDbUndoControllerRecord(); public: ODRX_DECLARE_MEMBERS(OdDbUndoControllerRecord); virtual OdUInt32 options() const = 0; virtual OdUInt64 size() const { return (OdUInt64)-1; } virtual OdStreamBufPtr getData() const { return OdStreamBufPtr(); } }; typedef OdSmartPtr OdDbUndoControllerRecordPtr; /** \details This class defines the interface for Undo Controller objects for OdDbDatabase instances. \remarks The implementer manages resources for storing undo and redo information. */ class DBROOT_EXPORT ODRX_ABSTRACT OdDbUndoController : public OdRxObject { public: enum UndoBlockMarkers { kDefault = 0, kBlockBegin = 1, kBlockEnd = 2, kMarker = 3 }; ODRX_DECLARE_MEMBERS(OdDbUndoController); /** \details Saves undo information in some manner. \param pStream [in] stream that contains single undo step data. \param nSize [in] size of the undo information (starting from the current stream position). \param opt [in] optional data saved with the undo block (may be from UndoBlockMarkers enum or a user extension) \remarks Implementer should save nSize bytes from the specified stream. */ virtual void pushData(OdStreamBuf* pStream, OdUInt64 nSize, OdUInt32 opt = kDefault) = 0; /** \details Returns true if some undo information is stored inside this object and can be retrieved via popData(). */ virtual bool hasData() const = 0; /** \details Gives back the most recent single undo step data. \param pStream [out] stream to write data to \returns options/markers saved with the data block \remarks Implementer should write back single undo step data saved in this object via the most recent call pushData into specified stream and then free internal resources used for storing undo step. */ virtual OdUInt32 popData(OdStreamBuf* pStream) = 0; /* \details * Returns an iterator for the undo records (OdDbUndoControllerRecord) from the last to the frist. */ virtual OdRxIteratorPtr newRecordStackIterator() const = 0; /* \details * Is called from the OdDbDatabase::clearUndo() */ virtual void clearData() = 0; }; /** \details This template class is a specialization of the OdSmartPtr class for OdDbUndoController object pointers. */ typedef OdSmartPtr OdDbUndoControllerPtr; #endif // _ODDBUNDOCONTROLLER_INCLUDED_