-
Notifications
You must be signed in to change notification settings - Fork 0
/
StateTransitionTable.h
70 lines (52 loc) · 1.45 KB
/
StateTransitionTable.h
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
#pragma once
// State for each cell of the world
typedef int State;
// Define an invalid colour
#define INVALID_STATE ((State)-1)
// I'll store an index of the color only for the grid
typedef int ColourIndex;
// Define an invalid colour
#define INVALID_COLOUR ((ColourIndex)-1)
// Possible movements
enum eMovement
{
eNone, // Don't turn
eLeft, // Turn 90 degree left
eRight, // Turn 90 degree right
eUturn, // Turn 180 degree
eMovement_Max
};
// Color
struct Colour
{
Colour() : R(0), G(0), B(0) {}
unsigned char R;
unsigned char G;
unsigned char B;
};
// Operation for each colour
struct Operation
{
Operation() : writeColour(INVALID_COLOUR), turn(eNone), nextState(INVALID_STATE) {}
bool IsValid() const { return writeColour != INVALID_COLOUR && nextState != INVALID_STATE; }
ColourIndex writeColour;
eMovement turn;
State nextState;
};
//
class StateTransitionTable
{
public:
StateTransitionTable(const int numStates, const int inNumColours );
virtual ~StateTransitionTable(void);
const Operation& GetOperation(const State inState, const ColourIndex inColour ) const;
bool SetOperation(const State inState, const ColourIndex inColour, const Operation& inOperation );
private:
// Number of colour and states;
int m_numState;
int m_numColour;
// Table with the operations. Coloums are operations for each colour, rows are the states;
Operation** m_operations;
// Invalid operation in case of error
Operation m_invalidOperation;
};