Loading files
3d097a032This file is pinned to the selected release. Download the original to open it in your design tool.
// Copyright (c) 2021 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 _BinTools_IStream_HeaderFile
#define _BinTools_IStream_HeaderFile
#include <BinTools.hxx>
#include <BinTools_ObjectType.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <TopAbs_Orientation.hxx>
#include <gp_Pnt.hxx>
//! Substitution of IStream for shape reader for fast management of position in the file (get and
//! go) and operation on all reading types.
class BinTools_IStream
{
public:
//! Creates IStream using the current stream IStream.
Standard_EXPORT BinTools_IStream(Standard_IStream& theStream);
//! Reads and returns the type.
Standard_EXPORT BinTools_ObjectType ReadType();
//! Returns the last read type.
Standard_EXPORT const BinTools_ObjectType& LastType() { return myLastType; }
//! Returns the shape type by the last retrieved type.
Standard_EXPORT TopAbs_ShapeEnum ShapeType();
//! Returns the shape orientation by the last retrieved type.
Standard_EXPORT TopAbs_Orientation ShapeOrientation();
//! Returns the current position in the stream.
Standard_EXPORT uint64_t Position() { return myPosition; }
//! Moves the current stream position to the given one.
Standard_EXPORT void GoTo(const uint64_t& thePosition);
//! Returns true if the last restored type is one of a reference
Standard_EXPORT bool IsReference();
//! Reads a reference IStream using the last restored type.
Standard_EXPORT uint64_t ReadReference();
//! Returns the original IStream.
Standard_EXPORT Standard_IStream& Stream() { return *myStream; }
//! Makes up to date the myPosition because myStream was used outside and position is changed.
Standard_EXPORT void UpdatePosition() { myPosition = uint64_t(myStream->tellg()); }
//! Returns false if stream reading is failed.
Standard_EXPORT operator bool() const;
//! Reads real value from the stream.
Standard_EXPORT double ReadReal()
{
double aValue;
*this >> aValue;
return aValue;
}
Standard_EXPORT BinTools_IStream& operator>>(double& theValue);
//! Reads integer value from the stream.
Standard_EXPORT int ReadInteger()
{
int aValue;
*this >> aValue;
return aValue;
}
Standard_EXPORT BinTools_IStream& operator>>(int& theValue);
//! Reads point coordinates value from the stream.
Standard_EXPORT gp_Pnt ReadPnt()
{
gp_Pnt aValue;
*this >> aValue;
return aValue;
}
Standard_EXPORT BinTools_IStream& operator>>(gp_Pnt& theValue);
//! Reads byte value from the stream.
Standard_EXPORT uint8_t ReadByte()
{
uint8_t aValue;
*this >> aValue;
return aValue;
}
Standard_EXPORT BinTools_IStream& operator>>(uint8_t& theValue);
//! Reads boolean value from the stream (stored as one byte).
Standard_EXPORT bool ReadBool() { return ReadByte() != 0; }
Standard_EXPORT BinTools_IStream& operator>>(bool& theValue)
{
theValue = ReadByte() != 0;
return *this;
}
//! Reads short real value from the stream.
Standard_EXPORT float ReadShortReal()
{
float aValue;
*this >> aValue;
return aValue;
}
Standard_EXPORT BinTools_IStream& operator>>(float& theValue);
//! Reads transformation value from the stream.
Standard_EXPORT BinTools_IStream& operator>>(gp_Trsf& theValue);
//! Reads 3 boolean values from one byte
Standard_EXPORT void ReadBools(bool& theBool1, bool& theBool2, bool& theBool3);
//! Reads 7 boolean values from one byte
Standard_EXPORT void ReadBools(bool& theBool1,
bool& theBool2,
bool& theBool3,
bool& theBool4,
bool& theBool5,
bool& theBool6,
bool& theBool7);
private:
Standard_IStream* myStream; ///< pointer to the stream
uint64_t myPosition; ///< equivalent to tellg returned value for fast access
BinTools_ObjectType myLastType; ///< last type that was read
};
#endif // _BinTools_IStream_HeaderFile