summaryrefslogtreecommitdiff
path: root/deimos/core/io.h
blob: 12de30e48f29bb77c5058c955f8afbd057641f30 (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
34
35
36
37
38
39
40
41
#pragma once

#include "deimos/core/base.h"

namespace deimos
{

class IWriter
{
public:
    IWriter() = default;

    deimos_NO_COPY_MOVE(IWriter);

    virtual ~IWriter() = default;

    virtual void Write(Span<const std::byte>) = 0;
};

class BufferWriter : public IWriter
{
    std::byte*      m_buffer;
    int64_t         m_size;
    int64_t         m_written = 0;

public:
    explicit BufferWriter(Span<std::byte> buffer) :
        m_buffer{buffer.begin()},
        m_size{buffer.size()}
    {}

    void Write(Span<const std::byte>) override;

    constexpr Span<const std::byte> GetWritten() const
    {
        return { m_buffer, m_written };
    }
};

} // namespace deimos