// Copyright (c) 2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.

#ifndef _TDocStdFormatVersion_HeaderFile
#define _TDocStdFormatVersion_HeaderFile

//! Storage format versions of OCAF documents in XML and binary file formats.
//!
//! OCAF document file format evolves and a new version number indicates each improvement of the
//! format. This enumeration lists all versions of an OCAF document. TDocStd_FormatVersion_CURRENT
//! value refers to the last file format version. By default, Open CASCADE Technology writes new
//! documents using the last file format version. The last version of Open CASCADE Technology is
//! able to read old documents of any version. However, a previous version of Open CASCADE
//! Technology may not be able to read a new document. In this case use the method
//! ChangeStorageFormatVersion() from TDocStd_Document to change the file format version. Then, save
//! the document by means of SaveAs() from TDocStd_Application.
//!
//! If it is necessary to improve an XML or binary file format of OCAF document, follow please the
//! next steps:
//! - increment the file format version in this enumeration. Put a reference to the last file format
//! version by means of TDocStd_FormatVersion_CURRENT.
//! - introduce the improvement in OCAF attribute storage and retrieval drivers, if necessary.
//!   As an example, please consider the file XmlMDataStd_TreeNodeDriver.cxx.
//! - test the improvement on current file format version and on the previous one.
enum TDocStd_FormatVersion
{
  TDocStd_FormatVersion_VERSION_2 = 2, //!< First supported version

  TDocStd_FormatVersion_VERSION_3, //!< OCCT 6.3.0
                                   //!< * XML: Adding DeltaOnModification functionality to set of
                                   //!< Standard attributes [#0019403]
                                   //!< * BIN: Add Delta to numbers data, changes in ShapeSection
                                   //!< [#0019986, #0019403]

  TDocStd_FormatVersion_VERSION_4, //!< OCCT 6.3.1
                                   //!< * XML: Naming mechanism improvement [#0021004]
                                   //!< * BIN: entry, ContextLabel for tree [#0021004]

  TDocStd_FormatVersion_VERSION_5, //!< OCCT 6.3.1
                                   //!< * XML: Separation of OCAF to Lite and Standard parts
                                   //!< completion [#0021093]
                                   //!< * BIN: Convert old format to new [#0021093]

  TDocStd_FormatVersion_VERSION_6, //!< OCCT 6.5.0
                                   //!< * XML: Add location [#0022192]
                                   //!< * BIN: Add location [#0022192]

  TDocStd_FormatVersion_VERSION_7, //!< OCCT 6.7.0
                                   //!< * XML: Add orientation [#0023766]
                                   //!< * BIN: Add orientation, type migration [#0023766]

  TDocStd_FormatVersion_VERSION_8, //!< OCCT 7.0.0
                                   //!< * XML: Replace TPrsStd_AISPresentation attribute with
                                   //!< TDataXtd_Presentation [#0026290]
                                   //!< * BIN: Stop convert old format [#0026290]

  TDocStd_FormatVersion_VERSION_9, //!< OCCT 7.1.0
                                   //!< * BIN: Add GUIDs, Process user defined guid [#0027932]

  TDocStd_FormatVersion_VERSION_10, //!< OCCT 7.2.0
                                    //!< * BIN: ReadTOC changed to handle 64-bit file length
                                    //!< [#0028736]

  TDocStd_FormatVersion_VERSION_11, //!< OCCT 7.6.0
                                    //!< * BIN, XML: TopTools_FormatVersion_CURRENT changed to 3 and
                                    //!< BinTools_FormatVersion_CURRENT changed to 4 to preserve
                                    //!< per-vertex normal information in case of triangulation-only
                                    //!< Faces [#0031136]
  TDocStd_FormatVersion_VERSION_12, //!< OCCT 7.6.0
                                    //!< * BIN: New binary format for fast reading of part of OCAF
                                    //!< document [#0031918]

  TDocStd_FormatVersion_CURRENT = TDocStd_FormatVersion_VERSION_12 //!< Current version
};

enum
{
  TDocStd_FormatVersion_LOWER = TDocStd_FormatVersion_VERSION_2,
  TDocStd_FormatVersion_UPPER = TDocStd_FormatVersion_VERSION_12
};

#endif // _TDocStdFormatVersion_HeaderFile
