-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfasmIO.cpp
102 lines (80 loc) · 1.64 KB
/
fasmIO.cpp
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "fasmIO.h"
#include <cassert>
_fasmcpp::AssemblerIO::AssemblerIO()
{
}
_fasmcpp::AssemblerIO::AssemblerIO(const char* string)
: _buffer(string, string + strlen(string))
{
}
_fasmcpp::AssemblerIO::AssemblerIO(const char* buffer, size_t size)
: _buffer(buffer, buffer + size)
{
}
void _fasmcpp::AssemblerIO::open()
{
assert(!_open);
_open = true;
_position = 0;
}
size_t _fasmcpp::AssemblerIO::getPosition() const
{
assert(_open);
return _position;
}
void _fasmcpp::AssemblerIO::setPosition(int offset, OffsetMode mode)
{
assert(_open);
switch (mode)
{
case AssemblerIO::Begin:
_position = offset;
break;
case AssemblerIO::Current:
_position += offset;
break;
case AssemblerIO::End:
_position = getSize() + offset;
break;
default:
assert(0);
}
assert(_position >= 0 && _position <= getSize());
}
const char* _fasmcpp::AssemblerIO::getData() const
{
return _buffer.data();
}
size_t _fasmcpp::AssemblerIO::getSize() const
{
return _buffer.size();
}
bool _fasmcpp::AssemblerIO::isOpen() const
{
return _open;
}
void _fasmcpp::AssemblerIO::close()
{
_open = false;
}
void _fasmcpp::AssemblerInput::read(char* buffer, size_t size) const
{
assert(_open && _position >= 0 && _position + size <= getSize());
const char* begin = _buffer.data() + _position;
std::copy(begin, begin + size, buffer);
}
void _fasmcpp::AssemblerOutput::open()
{
AssemblerIO::open();
_buffer.clear();
}
void _fasmcpp::AssemblerOutput::write(const char* buffer, size_t size)
{
assert(_open);
size_t end = _position + size;
if (end > getSize())
{
_buffer.resize(end);
}
std::copy(buffer, buffer + size, _buffer.data() + _position);
}