-
-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathtools.hpp
More file actions
204 lines (149 loc) · 4.2 KB
/
Copy pathtools.hpp
File metadata and controls
204 lines (149 loc) · 4.2 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
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// HFSM2 (hierarchical state machine for games and interactive applications)
// Created by Andrew Gresyk
#pragma once
#define HFSM2_ENABLE_LOG_INTERFACE
#define HFSM2_ENABLE_ASSERT
#include <hfsm2/machine.hpp>
#include <doctest/doctest.h>
#include <vector>
#include <assert.h>
#include <wchar.h> // wcscmp()
namespace test_tools {
////////////////////////////////////////////////////////////////////////////////
#define UNUSED(x)
//------------------------------------------------------------------------------
struct Event final {
enum class Type {
REPORT_SELECT,
//#if HFSM2_UTILITY_THEORY_AVAILABLE()
REPORT_RANK,
UTILITY,
//#endif
ENTRY_GUARD,
ENTER,
REENTER,
PRE_UPDATE,
UPDATE,
POST_UPDATE,
PRE_REACT,
REACT,
POST_REACT,
EXIT_GUARD,
EXIT,
SELECT_RESOLUTION,
//#if HFSM2_UTILITY_THEORY_AVAILABLE()
UTILITY_RESOLUTION,
RANDOM_RESOLUTION,
//#endif
//#if HFSM2_PLANS_AVAILABLE()
PLAN_SUCCEEDED,
PLAN_FAILED,
TASK_SUCCESS,
TASK_FAILURE,
PLAN_SUCCESS,
PLAN_FAILURE,
//#endif
CHANGE,
RESTART,
RESUME,
SELECT,
//#if HFSM2_UTILITY_THEORY_AVAILABLE()
UTILIZE,
RANDOMIZE,
//#endif
SCHEDULE,
CANCEL_PENDING,
COUNT
};
Event(const hfsm2::StateID origin_,
const Type type_,
const hfsm2::StateID target_ = hfsm2::INVALID_STATE_ID,
const float utility_ = 0.0f)
: origin{origin_}
, type{type_}
, target{target_}
, utility{utility_}
{}
Event(const Type type_,
const hfsm2::StateID target_,
const float utility_ = 0.0f)
: origin{hfsm2::INVALID_STATE_ID}
, type{type_}
, target{target_}
, utility{utility_}
{}
hfsm2::StateID origin;
Type type;
hfsm2::StateID target;
float utility;
};
using Events = std::vector<Event>;
////////////////////////////////////////////////////////////////////////////////
template <typename TConfig>
struct LoggerT final
: TConfig::LoggerInterface
{
using Interface = typename TConfig::LoggerInterface;
using typename Interface::Context;
#ifdef HFSM2_ENABLE_UTILITY_THEORY
using typename Interface::Utilty;
#endif
using typename Interface::Method;
using typename Interface::Prong;
using typename Interface::StateID;
using typename Interface::TransitionType;
#ifdef HFSM2_ENABLE_PLANS
using StatusEvent = typename Interface::StatusEvent;
#endif
void recordMethod(const Context& context,
const StateID origin,
const Method method) override;
void recordTransition(const Context& context,
const StateID origin,
const TransitionType transitionType,
const StateID target) override;
#ifdef HFSM2_ENABLE_PLANS
void recordTaskStatus(const Context& context,
const StateID region,
const StateID origin,
const StatusEvent event) override;
void recordPlanStatus(const Context& context,
const StateID region,
const StatusEvent event) override;
#endif
void recordCancelledPending(const Context& context,
const StateID origin) override;
void recordSelectResolution(const Context& context,
const StateID head,
const Prong prong) override;
#ifdef HFSM2_ENABLE_UTILITY_THEORY
void recordUtilityResolution(const Context& context,
const StateID head,
const Prong prong,
const Utilty utilty) override;
void recordRandomResolution(const Context& context,
const StateID head,
const Prong prong,
const Utilty utilty) override;
#endif
void assertSequence(const Events& reference);
Events history;
};
using Logger = LoggerT<::hfsm2::Config>;
////////////////////////////////////////////////////////////////////////////////
#ifdef HFSM2_ENABLE_STRUCTURE_REPORT
using StructureReference = std::vector<hfsm2::StructureEntry>;
template <typename TStructure>
void
assertStructure(const TStructure& structure,
const StructureReference& reference);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
using ActivityReference = std::vector<int8_t>;
template <typename TActivityHistory>
void
assertActivity(const TActivityHistory& activity,
const ActivityReference& reference);
#endif
////////////////////////////////////////////////////////////////////////////////
}
#include "tools.inl"