mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
55 lines
1.7 KiB
C++
55 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include "Stream.h"
|
|
|
|
namespace IO
|
|
{
|
|
// MemoryStream supports reading and writing data to memory
|
|
class MemoryStream : public Stream
|
|
{
|
|
public:
|
|
MemoryStream();
|
|
MemoryStream(uint64_t Capacity);
|
|
MemoryStream(uint8_t* Buffer, uint64_t Index, uint64_t Count);
|
|
MemoryStream(uint8_t* Buffer, uint64_t Index, uint64_t Count, bool Writable);
|
|
MemoryStream(uint8_t* Buffer, uint64_t Index, uint64_t Count, bool Writable, bool LeaveOpen);
|
|
MemoryStream(uint8_t* Buffer, uint64_t Index, uint64_t Count, bool Writable, bool LeaveOpen, bool Expandable);
|
|
virtual ~MemoryStream();
|
|
|
|
// Implement Getters and Setters
|
|
virtual bool CanRead();
|
|
virtual bool CanWrite();
|
|
virtual bool CanSeek();
|
|
virtual bool GetIsEndOfFile();
|
|
virtual uint64_t GetLength();
|
|
virtual uint64_t GetPosition();
|
|
virtual void SetLength(uint64_t Length);
|
|
virtual void SetPosition(uint64_t Position);
|
|
|
|
// Implement functions
|
|
virtual void Close();
|
|
virtual void Flush();
|
|
virtual void Seek(uint64_t Offset, SeekOrigin Origin);
|
|
virtual uint64_t Read(uint8_t* Buffer, uint64_t Offset, uint64_t Count);
|
|
virtual uint64_t Read(uint8_t* Buffer, uint64_t Offset, uint64_t Count, uint64_t Position);
|
|
virtual void Write(uint8_t* Buffer, uint64_t Offset, uint64_t Count);
|
|
virtual void Write(uint8_t* Buffer, uint64_t Offset, uint64_t Count, uint64_t Position);
|
|
|
|
private:
|
|
// Memory flags cached
|
|
bool _CanWrite;
|
|
bool _Expandable;
|
|
bool _KeepOpen;
|
|
uint64_t _Origin;
|
|
uint64_t _Length;
|
|
uint64_t _Position;
|
|
|
|
// Memory buffer and size, internal
|
|
uint64_t _BufferSize;
|
|
uint8_t* _Buffer;
|
|
|
|
// Handles reallocation of the internal buffer
|
|
void EnsureCapacity(uint64_t Size);
|
|
};
|
|
} |