-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFrame.cpp
More file actions
63 lines (52 loc) · 1.47 KB
/
Frame.cpp
File metadata and controls
63 lines (52 loc) · 1.47 KB
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
#include "Frame.h"
#include <bits/ranges_base.h>
namespace Noble::Compiler
{
void Frame::WriteOp(const Op::Type &op)
{
ops.Add(op);
}
Address::Single Frame::WriteAddress(const Address::Single &address)
{
ops.Add(Translation::AddressToOps(address));
return ops.Count() - Translation::OpsPerAddress;
}
void Frame::WriteAddress(const Address::Single &address, const Address::Single &addressIndex)
{
const List<Op::Type> addressOps = Translation::AddressToOps(address);
for (int i = 0; i < addressOps.Count(); ++i)
{
ops[i + addressIndex] = addressOps[i];
}
}
void Frame::WriteConstant(const ValueType value)
{
WriteOp(Op::Code::Constant);
WriteAddress(AddConstant(value));
}
Op::Type Frame::ReadOp(const Address::Single& address)
{
return ops[address];
}
Address::Single Frame::ReadAddress(const Address::Single &address) const
{
return Translation::OpsToAddress(ops, address);
}
const ValueType& Frame::ReadConstant(const Address::Single address) const
{
return constants[address];
}
Address::Single Frame::AddConstant(const ValueType value)
{
constants.Add(value);
return constants.Count() - 1;
}
const List<Op::Type>& Frame::GetOps() const
{
return ops;
}
const List<ValueType>& Frame::GetConstants() const
{
return constants;
}
}