0031918: Application Framework - New binary format for fast reading part of OCAF...
[occt.git] / src / BinTools / BinTools_ShapeSet.hxx
index 87cae7c..83add95 100644 (file)
 #ifndef _BinTools_ShapeSet_HeaderFile
 #define _BinTools_ShapeSet_HeaderFile
 
-#include <Standard.hxx>
-#include <Standard_DefineAlloc.hxx>
-#include <Standard_Handle.hxx>
+#include <BinTools_ShapeSetBase.hxx>
 
 #include <TopTools_IndexedMapOfShape.hxx>
-#include <BinTools_FormatVersion.hxx>
 #include <BinTools_LocationSet.hxx>
-#include <Standard_Integer.hxx>
 #include <BRep_Builder.hxx>
 #include <BinTools_SurfaceSet.hxx>
 #include <BinTools_CurveSet.hxx>
 #include <BinTools_Curve2dSet.hxx>
 #include <TColStd_IndexedMapOfTransient.hxx>
-#include <Standard_Boolean.hxx>
 #include <Standard_OStream.hxx>
 #include <Standard_IStream.hxx>
-#include <TopAbs_ShapeEnum.hxx>
-
-class TopoDS_Shape;
-class BinTools_LocationSet;
 
 
 //! Writes topology in OStream in binary format
-class BinTools_ShapeSet 
+class BinTools_ShapeSet : public BinTools_ShapeSetBase
 {
 public:
 
@@ -51,25 +42,6 @@ public:
 
   Standard_EXPORT virtual ~BinTools_ShapeSet();
 
-  //! Return true if shape should be stored with triangles.
-  Standard_Boolean IsWithTriangles() const { return myWithTriangles; }
-  //! Return true if shape should be stored triangulation with normals.
-  Standard_Boolean IsWithNormals() const { return myWithNormals; }
-
-
-  //! Define if shape will be stored with triangles.
-  //! Ignored (always written) if face defines only triangulation (no surface).
-  void SetWithTriangles (const Standard_Boolean theWithTriangles) { myWithTriangles = theWithTriangles; }
-  //! Define if shape will be stored triangulation with normals.
-  //! Ignored (always written) if face defines only triangulation (no surface).
-  void SetWithNormals(const Standard_Boolean theWithNormals) { myWithNormals = theWithNormals; }
-
-  //! Sets the BinTools_FormatVersion.
-  Standard_EXPORT void SetFormatNb (const Standard_Integer theFormatNb);
-
-  //! Returns the BinTools_FormatVersion.
-  Standard_EXPORT Standard_Integer FormatNb() const;
-  
   //! Clears the content of the set.
   Standard_EXPORT virtual void Clear();
   
@@ -78,7 +50,7 @@ public:
   Standard_EXPORT Standard_Integer Add (const TopoDS_Shape& S);
   
   //! Returns the sub-shape of index <I>.
-  Standard_EXPORT const TopoDS_Shape& Shape (const Standard_Integer I) const;
+  Standard_EXPORT const TopoDS_Shape& Shape (const Standard_Integer I);
   
   //! Returns the index of <S>.
   Standard_EXPORT Standard_Integer Index (const TopoDS_Shape& S) const;
@@ -104,7 +76,7 @@ public:
   //! Write the flags, the subshapes.
   Standard_EXPORT virtual void Write
     (Standard_OStream& OS,
-     const Message_ProgressRange& theRange = Message_ProgressRange()) const;
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Reads the content of me from the binary stream  <IS>. me
   //! is first cleared.
@@ -120,42 +92,48 @@ public:
   //! Reads the flag, the subshapes.
   Standard_EXPORT virtual void Read
     (Standard_IStream& IS,
-        const Message_ProgressRange& theRange = Message_ProgressRange());
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
   //! Writes   on  <OS>   the shape   <S>.    Writes the
   //! orientation, the index of the TShape and the index
   //! of the Location.
-  Standard_EXPORT virtual void Write (const TopoDS_Shape& S, Standard_OStream& OS) const;
+  Standard_EXPORT virtual void Write (const TopoDS_Shape& S, Standard_OStream& OS);
   
   //! Writes the geometry of  me  on the stream <OS> in a
   //! binary format that can be read back by Read.
   Standard_EXPORT virtual void WriteGeometry
     (Standard_OStream& OS,
-        const Message_ProgressRange& theRange = Message_ProgressRange()) const;
+     const Message_ProgressRange& theRange = Message_ProgressRange()) const;
   
   //! Reads the geometry of me from the  stream  <IS>.
   Standard_EXPORT virtual void ReadGeometry
     (Standard_IStream& IS,
-        const Message_ProgressRange& theRange = Message_ProgressRange());
+     const Message_ProgressRange& theRange = Message_ProgressRange());
   
-  //! Reads  from <IS>  a shape  and  returns  it in  S.
+  //! Reads from <IS> a shape flags and sub-shapes and modifies S.
+  Standard_EXPORT virtual void ReadFlagsAndSubs
+    (TopoDS_Shape& S, const TopAbs_ShapeEnum T,
+     Standard_IStream& IS, const Standard_Integer NbShapes);
+
+  //! Reads from <IS> a shape and returns it in S.
   //! <NbShapes> is the number of tshapes in the set.
-  Standard_EXPORT virtual void Read
-    (TopoDS_Shape& S,
-     Standard_IStream& IS, const Standard_Integer NbShapes) const;
-  
-  //! Writes the geometry of <S>  on the stream <OS> in a
+  Standard_EXPORT virtual void ReadSubs
+  (TopoDS_Shape& S, Standard_IStream& IS, const Standard_Integer NbShapes);
+
+  //! An empty virtual method for redefinition in shape-reader.
+  Standard_EXPORT virtual void Read (Standard_IStream& /*theStream*/, TopoDS_Shape& /*theShape*/) {};
+
+  //! Writes the shape <S> on the stream <OS> in a
   //! binary format that can be read back by Read.
-  Standard_EXPORT virtual void WriteGeometry (const TopoDS_Shape& S, Standard_OStream& OS) const;
-  
-  //! Reads the geometry of a shape of type <T> from the
-  //! stream <IS> and returns it in <S>.
-  Standard_EXPORT virtual void ReadGeometry (const TopAbs_ShapeEnum T, Standard_IStream& IS, TopoDS_Shape& S);
+  Standard_EXPORT virtual void WriteShape (const TopoDS_Shape& S, Standard_OStream& OS) const;
   
-  //! Stores the goemetry of <S>.
-  Standard_EXPORT virtual void AddGeometry (const TopoDS_Shape& S);
+  //! Reads  a shape of type <T> from the stream <IS> and returns it in <S>.
+  Standard_EXPORT virtual void ReadShape (const TopAbs_ShapeEnum T, Standard_IStream& IS, TopoDS_Shape& S);
+
+  //! Stores the shape <S>.
+  Standard_EXPORT virtual void AddShape (const TopoDS_Shape& S);
   
-  //! Inserts  the shape <S2> in  the  shape <S1>.
+  //! Inserts  the shape <S2> in the shape <S1>.
   Standard_EXPORT virtual void AddShapes (TopoDS_Shape& S1, const TopoDS_Shape& S2);
   
   //! Reads the 3d polygons  of me
@@ -197,15 +175,10 @@ public:
     (Standard_OStream& OS,
         const Message_ProgressRange& theRange = Message_ProgressRange()) const;
 
-public:
-
-  static const Standard_CString THE_ASCII_VERSIONS[BinTools_FormatVersion_UPPER + 1];
-
 private:
 
-  TopTools_IndexedMapOfShape myShapes;
+  TopTools_IndexedMapOfShape myShapes; ///< index and its shape (started from 1)
   BinTools_LocationSet myLocations;
-  Standard_Integer myFormatNb;
   BRep_Builder myBuilder;
   BinTools_SurfaceSet mySurfaces;
   BinTools_CurveSet myCurves;
@@ -216,9 +189,6 @@ private:
                              Standard_Boolean> myTriangulations; //!< Contains a boolean flag with information
                                                                  //!  to save normals for triangulation
   NCollection_IndexedMap<Handle(Poly_PolygonOnTriangulation), TColStd_MapTransientHasher> myNodes;
-  Standard_Boolean myWithTriangles;
-  Standard_Boolean myWithNormals;
-
 };
 
 #endif // _BinTools_ShapeSet_HeaderFile