30 #ifndef AGS_SHARED_UTIL_DATASTREAM_H 31 #define AGS_SHARED_UTIL_DATASTREAM_H 33 #include "ags/shared/util/bbop.h" 34 #include "ags/shared/util/stream.h" 42 DataStream(DataEndianess stream_endianess = kLittleEndian);
45 int16_t ReadInt16()
override;
46 int32_t ReadInt32()
override;
47 int64_t ReadInt64()
override;
56 inline size_t ReadArray(
void *buffer,
size_t elem_size,
size_t count)
override {
57 return Read(buffer, elem_size * count) / elem_size;
60 inline size_t ReadArrayOfInt16(int16_t *buffer,
size_t count)
override {
61 return MustSwapBytes() ?
62 ReadAndConvertArrayOfInt16(buffer, count) : ReadArray(buffer,
sizeof(int16_t), count);
65 inline size_t ReadArrayOfInt32(int32_t *buffer,
size_t count)
override {
66 return MustSwapBytes() ?
67 ReadAndConvertArrayOfInt32(buffer, count) : ReadArray(buffer,
sizeof(int32_t), count);
70 inline size_t ReadArrayOfInt64(int64_t *buffer,
size_t count)
override {
71 return MustSwapBytes() ?
72 ReadAndConvertArrayOfInt64(buffer, count) : ReadArray(buffer,
sizeof(int64_t), count);
75 size_t WriteInt16(int16_t val)
override;
76 size_t WriteInt32(int32_t val)
override;
77 size_t WriteInt64(int64_t val)
override;
79 inline size_t WriteArray(
const void *buffer,
size_t elem_size,
size_t count)
override {
80 return Write(buffer, elem_size * count) / elem_size;
83 inline size_t WriteArrayOfInt16(
const int16_t *buffer,
size_t count)
override {
84 return MustSwapBytes() ?
85 WriteAndConvertArrayOfInt16(buffer, count) : WriteArray(buffer,
sizeof(int16_t), count);
88 inline size_t WriteArrayOfInt32(
const int32_t *buffer,
size_t count)
override {
89 return MustSwapBytes() ?
90 WriteAndConvertArrayOfInt32(buffer, count) : WriteArray(buffer,
sizeof(int32_t), count);
93 inline size_t WriteArrayOfInt64(
const int64_t *buffer,
size_t count)
override {
94 return MustSwapBytes() ?
95 WriteAndConvertArrayOfInt64(buffer, count) : WriteArray(buffer,
sizeof(int64_t), count);
99 DataEndianess _streamEndianess;
103 size_t ReadAndConvertArrayOfInt16(int16_t *buffer,
size_t count);
104 size_t ReadAndConvertArrayOfInt32(int32_t *buffer,
size_t count);
105 size_t ReadAndConvertArrayOfInt64(int64_t *buffer,
size_t count);
106 size_t WriteAndConvertArrayOfInt16(
const int16_t *buffer,
size_t count);
107 size_t WriteAndConvertArrayOfInt32(
const int32_t *buffer,
size_t count);
108 size_t WriteAndConvertArrayOfInt64(
const int64_t *buffer,
size_t count);
110 inline bool MustSwapBytes() {
111 return kDefaultSystemEndianess != _streamEndianess;
114 inline void ConvertInt16(int16_t &val) {
115 if (MustSwapBytes()) val = BBOp::SwapBytesInt16(val);
117 inline void ConvertInt32(int32_t &val) {
118 if (MustSwapBytes()) val = BBOp::SwapBytesInt32(val);
120 inline void ConvertInt64(int64_t &val) {
121 if (MustSwapBytes()) val = BBOp::SwapBytesInt64(val);
138 const char *GetPath()
const {
return _base->GetPath().GetCStr(); }
139 bool EOS()
const override {
return _position >= _end; }
140 bool GetError()
const override {
return _base->GetError(); }
141 soff_t GetLength()
const override {
return _end - _start; }
142 soff_t GetPosition()
const override {
return _position - _start; }
143 size_t Read(
void *buffer,
size_t len)
override;
144 int32_t ReadByte()
override;
145 size_t Write(
const void *buffer,
size_t len)
override;
146 int32_t WriteByte(uint8_t b)
override;
147 soff_t Seek(soff_t offset, StreamSeek origin = kSeekCurrent)
override;
148 bool Flush()
override {
return _base->Flush(); }
149 void Close()
override;
155 soff_t _position = 0;
Definition: achievements_tables.h:27
Definition: data_stream.h:132
Definition: data_stream.h:40