summaryrefslogtreecommitdiff
path: root/lib/binarytools/Stream.h
blob: f22c21256596ceabe2ac121a440716769767ab3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once

#include <cstdint>
#include <memory>
#include <vector>

namespace LUS {
enum class SeekOffsetType { Start, Current, End };

class Stream {
  public:
    virtual ~Stream() = default;
    virtual uint64_t GetLength() = 0;
    uint64_t GetBaseAddress();

    virtual void Seek(int32_t offset, SeekOffsetType seekType) = 0;

    virtual std::unique_ptr<char[]> Read(size_t length) = 0;
    virtual void Read(const char* dest, size_t length) = 0;
    virtual int8_t ReadByte() = 0;

    virtual void Write(char* destBuffer, size_t length) = 0;
    virtual void WriteByte(int8_t value) = 0;

    virtual std::vector<char> ToVector() = 0;

    virtual void Flush() = 0;
    virtual void Close() = 0;

  protected:
    uint64_t mBaseAddress;
};
} // namespace LUS