0031918: Application Framework - New binary format for fast reading part of OCAF...
[occt.git] / src / BinLDrivers / BinLDrivers_DocumentStorageDriver.hxx
index e91d56c..2ba79f2 100644 (file)
@@ -37,6 +37,7 @@ class CDM_Document;
 class TDF_Label;
 class TCollection_AsciiString;
 class BinLDrivers_DocumentSection;
+class BinObjMgt_Position;
 
 
 class BinLDrivers_DocumentStorageDriver;
@@ -67,7 +68,8 @@ public:
   //! Create a section that should be written after the OCAF data
   Standard_EXPORT void AddSection (const TCollection_AsciiString& theName, const Standard_Boolean isPostRead = Standard_True);
 
-
+  //! Return true if document should be stored in quick mode for partial reading
+  Standard_EXPORT Standard_Boolean IsQuickPart (const Standard_Integer theVersion) const;
 
 
   DEFINE_STANDARD_RTTIEXT(BinLDrivers_DocumentStorageDriver,PCDM_StorageDriver)
@@ -77,7 +79,8 @@ protected:
   
   //! Write the tree under <theLabel> to the stream <theOS>
   Standard_EXPORT void WriteSubTree (const TDF_Label& theData,
-                                     Standard_OStream& theOS, 
+                                     Standard_OStream& theOS,
+                                     const Standard_Boolean& theQuickPart,
                                      const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! define the procedure of writing a section to file.
@@ -91,6 +94,13 @@ protected:
                                                   const TDocStd_FormatVersion theDocVer,
                                                   const Message_ProgressRange& theRange = Message_ProgressRange());
 
+  //! Enables writing in the quick part access mode.
+  Standard_EXPORT virtual void EnableQuickPartWriting (
+    const Handle(Message_Messenger)& /*theMessageDriver*/, const Standard_Boolean /*theValue*/) {}
+
+  //! clears the writing-cash data in drivers if any.
+  Standard_EXPORT virtual void Clear();
+
   Handle(BinMDF_ADriverTable) myDrivers;
   BinObjMgt_SRelocationTable myRelocTable;
   Handle(Message_Messenger) myMsgDriver;
@@ -108,13 +118,17 @@ private:
   
   Standard_EXPORT void UnsupportedAttrMsg (const Handle(Standard_Type)& theType);
 
+  //! Writes sizes along the file where it is needed for quick part mode
+  Standard_EXPORT void WriteSizes (Standard_OStream& theOS);
+
   BinObjMgt_Persistent myPAtt;
   TDF_LabelList myEmptyLabels;
   TColStd_MapOfTransient myMapUnsupported;
   TColStd_IndexedMapOfTransient myTypesMap;
   BinLDrivers_VectorOfDocumentSection mySections;
   TCollection_ExtendedString myFileName;
-
+  //! Sizes of labels and some attributes that will be stored in the second pass
+  NCollection_List<Handle(BinObjMgt_Position)> mySizesToWrite;
 };
 
 #endif // _BinLDrivers_DocumentStorageDriver_HeaderFile