Torch
Loading...
Searching...
No Matches
SequenceFactory.h
1
#pragma once
2
3
#include <factories/BaseFactory.h>
4
#include <unordered_set>
5
6
namespace
FZX {
7
8
typedef
std::variant<uint8_t, uint16_t, uint32_t> SeqArg;
9
10
enum class
SeqArgType {
11
U8, S16, CS16
12
};
13
14
enum class
SequenceState {
15
player,
16
channel,
17
layer,
18
data,
19
envelope
20
};
21
22
struct
SeqLabelInfo {
23
uint32_t pos;
24
SequenceState state;
25
uint32_t channel;
26
uint32_t layer;
27
bool
largeNotes;
28
SeqLabelInfo(uint32_t pos, SequenceState state, uint32_t channel, uint32_t layer,
bool
largeNotes) : pos(pos), state(state), channel(channel), layer(layer), largeNotes(largeNotes) {}
29
};
30
31
struct
SeqCommand
{
32
uint8_t cmd;
33
uint32_t pos;
34
SequenceState state;
35
int32_t channel;
36
int32_t layer;
37
uint32_t size;
38
std::vector<SeqArg> args;
39
bool
operator<(
const
SeqCommand
& command)
const
{
40
return
pos < command.pos;
41
}
42
};
43
44
class
SequenceData :
public
IParsedData
{
45
public
:
46
std::vector<SeqCommand> mCmds;
47
std::unordered_set<uint32_t> mLabels;
48
bool
mHasFooter;
49
50
SequenceData(std::vector<SeqCommand> cmds, std::unordered_set<uint32_t> labels,
bool
hasFooter) : mCmds(std::move(cmds)), mLabels(std::move(labels)), mHasFooter(hasFooter) {}
51
};
52
53
class
SequenceHeaderExporter
:
public
BaseExporter
{
54
ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement)
override
;
55
};
56
57
class
SequenceBinaryExporter
:
public
BaseExporter
{
58
ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement)
override
;
59
};
60
61
class
SequenceCodeExporter
:
public
BaseExporter
{
62
ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement)
override
;
63
};
64
65
class
SequenceFactory
:
public
BaseFactory
{
66
public
:
67
std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data)
override
;
68
inline
std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters()
override
{
69
return
{
70
REGISTER(Code,
SequenceCodeExporter
)
71
REGISTER(Header,
SequenceHeaderExporter
)
72
REGISTER(Binary,
SequenceBinaryExporter
)
73
};
74
}
75
};
76
}
BaseExporter
Definition
BaseFactory.h:88
BaseFactory
Definition
BaseFactory.h:94
FZX::SequenceBinaryExporter
Definition
SequenceFactory.h:57
FZX::SequenceCodeExporter
Definition
SequenceFactory.h:61
FZX::SequenceFactory
Definition
SequenceFactory.h:65
FZX::SequenceHeaderExporter
Definition
SequenceFactory.h:53
IParsedData
Definition
BaseFactory.h:80
FZX::SeqCommand
Definition
SequenceFactory.h:31
src
factories
fzerox
SequenceFactory.h
Generated by
1.14.0