Files
FC1/CryCommon/IBitStream.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

101 lines
4.3 KiB
C++

#ifndef IBITSTREAM_H__
#define IBITSTREAM_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CStream;
#include "platform.h"
enum eBitStreamHint
{
eDoNotCompress, // ...
e8BitNormal, // Vec3, low quality normalized vector
eWorldPos, // Vec3, absolute world position
eASCIIText, // char *, static huffman compression
eEntityId, // u __int32,__int32, u __int16 16bit, some entities have higher probability (e.g. player)
eEntityClassId, // __int32,u __int16, for entity creation
e8BitRGB, // Vec3, 8bit Color
e4BitRGB, // Vec3, 4bit Color
eQuaternion, // Vec3, eQuaternion
eEulerAnglesHQ, // Vec3, YAW,PITCH,ROLL cyclic in [0..360[, special compression if PITCH=0 (not float but still quite high quality)
eSignedUnitValueLQ, // float, [-1..1] 8+1+1 bit if not zero, 1 bit of zero
};
struct IBitStream
{
//!
// virtual bool ReadBitStream( bool &Value )=0;
//!
virtual bool ReadBitStream( CStream &stm, int8 &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, int16 &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, int32 &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, uint8 &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, uint16 &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, uint32 &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, float &Value, const eBitStreamHint eHint )=0;
//!
virtual bool ReadBitStream( CStream &stm, Vec3 &Value, const eBitStreamHint eHint )=0;
//!
//! max 256 characters
virtual bool ReadBitStream( CStream &stm, char *Value, const DWORD nBufferSize, const eBitStreamHint eHint )=0;
// ----------------------------------------------------------------------------------------------------
//!
// virtual bool WriteBitStream( const bool Value )=0;
//!
virtual bool WriteBitStream( CStream &stm, const int8 Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const int16 Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const int32 Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const uint8 Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const uint16 Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const uint32 Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const float Value, const eBitStreamHint eHint )=0;
//!
virtual bool WriteBitStream( CStream &stm, const Vec3 &Value, const eBitStreamHint eHint )=0;
//!
//! max 256 characters
virtual bool WriteBitStream( CStream &stm, const char *Value, const DWORD nBufferSize, const eBitStreamHint eHint )=0;
// ----------------------------------------------------------------------------------------------------
// the follwoing method make use of the WriteBitStream and the ReadBitStream to simulate the error the
// write and read operations would have
//! to get the compression error
virtual void SimulateWriteRead( int8 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( int16 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( int32 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( uint8 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( uint16 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( uint32 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( float &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( Vec3 &Value, const eBitStreamHint eHint )=0;
//! to get the compression error
virtual void SimulateWriteRead( char *Value, const DWORD nBufferSize, const eBitStreamHint eHint )=0;
};
#endif //IBITSTREAM_H__