ArmControlState_generated.h
Go to the documentation of this file.
1 // automatically generated by the FlatBuffers compiler, do not modify
2 
3 #ifndef FLATBUFFERS_GENERATED_ARMCONTROLSTATE_GRL_FLATBUFFER_H_
4 #define FLATBUFFERS_GENERATED_ARMCONTROLSTATE_GRL_FLATBUFFER_H_
5 
6 #include "flatbuffers/flatbuffers.h"
7 
8 #include "Geometry_generated.h"
9 #include "JointState_generated.h"
10 
11 namespace grl {
12 namespace flatbuffer {
13 struct JointState;
14 } // namespace flatbuffer
15 } // namespace grl
16 namespace grl {
17 namespace flatbuffer {
18 struct Vector3d;
19 struct Quaternion;
20 struct Pose;
21 struct Wrench;
22 struct Inertia;
23 } // namespace flatbuffer
24 } // namespace grl
25 
26 namespace grl {
27 namespace flatbuffer {
28 
29 struct StartArm;
30 struct StopArm;
31 struct PauseArm;
32 struct TeachArm;
33 struct ShutdownArm;
34 struct MoveArmTrajectory;
35 struct MoveArmJointServo;
37 struct ArmControlState;
38 struct ArmControlSeries;
39 
40 enum ArmState {
50 };
51 
52 inline const char **EnumNamesArmState() {
53  static const char *names[] = { "NONE", "StartArm", "StopArm", "PauseArm", "ShutdownArm", "TeachArm", "MoveArmTrajectory", "MoveArmJointServo", "MoveArmCartesianServo", nullptr };
54  return names;
55 }
56 
57 inline const char *EnumNameArmState(ArmState e) { return EnumNamesArmState()[static_cast<int>(e)]; }
58 
59 inline bool VerifyArmState(flatbuffers::Verifier &verifier, const void *union_obj, ArmState type);
60 
61 struct StartArm FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
62  bool Verify(flatbuffers::Verifier &verifier) const {
63  return VerifyTableStart(verifier) &&
64  verifier.EndTable();
65  }
66 };
67 
69  flatbuffers::FlatBufferBuilder &fbb_;
70  flatbuffers::uoffset_t start_;
71  StartArmBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
72  StartArmBuilder &operator=(const StartArmBuilder &);
73  flatbuffers::Offset<StartArm> Finish() {
74  auto o = flatbuffers::Offset<StartArm>(fbb_.EndTable(start_, 0));
75  return o;
76  }
77 };
78 
79 inline flatbuffers::Offset<StartArm> CreateStartArm(flatbuffers::FlatBufferBuilder &_fbb) {
80  StartArmBuilder builder_(_fbb);
81  return builder_.Finish();
82 }
83 
84 struct StopArm FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
85  bool Verify(flatbuffers::Verifier &verifier) const {
86  return VerifyTableStart(verifier) &&
87  verifier.EndTable();
88  }
89 };
90 
92  flatbuffers::FlatBufferBuilder &fbb_;
93  flatbuffers::uoffset_t start_;
94  StopArmBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
95  StopArmBuilder &operator=(const StopArmBuilder &);
96  flatbuffers::Offset<StopArm> Finish() {
97  auto o = flatbuffers::Offset<StopArm>(fbb_.EndTable(start_, 0));
98  return o;
99  }
100 };
101 
102 inline flatbuffers::Offset<StopArm> CreateStopArm(flatbuffers::FlatBufferBuilder &_fbb) {
103  StopArmBuilder builder_(_fbb);
104  return builder_.Finish();
105 }
106 
107 struct PauseArm FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
108  bool Verify(flatbuffers::Verifier &verifier) const {
109  return VerifyTableStart(verifier) &&
110  verifier.EndTable();
111  }
112 };
113 
115  flatbuffers::FlatBufferBuilder &fbb_;
116  flatbuffers::uoffset_t start_;
117  PauseArmBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
118  PauseArmBuilder &operator=(const PauseArmBuilder &);
119  flatbuffers::Offset<PauseArm> Finish() {
120  auto o = flatbuffers::Offset<PauseArm>(fbb_.EndTable(start_, 0));
121  return o;
122  }
123 };
124 
125 inline flatbuffers::Offset<PauseArm> CreatePauseArm(flatbuffers::FlatBufferBuilder &_fbb) {
126  PauseArmBuilder builder_(_fbb);
127  return builder_.Finish();
128 }
129 
130 struct TeachArm FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
131  bool Verify(flatbuffers::Verifier &verifier) const {
132  return VerifyTableStart(verifier) &&
133  verifier.EndTable();
134  }
135 };
136 
138  flatbuffers::FlatBufferBuilder &fbb_;
139  flatbuffers::uoffset_t start_;
140  TeachArmBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
141  TeachArmBuilder &operator=(const TeachArmBuilder &);
142  flatbuffers::Offset<TeachArm> Finish() {
143  auto o = flatbuffers::Offset<TeachArm>(fbb_.EndTable(start_, 0));
144  return o;
145  }
146 };
147 
148 inline flatbuffers::Offset<TeachArm> CreateTeachArm(flatbuffers::FlatBufferBuilder &_fbb) {
149  TeachArmBuilder builder_(_fbb);
150  return builder_.Finish();
151 }
152 
153 struct ShutdownArm FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
154  bool Verify(flatbuffers::Verifier &verifier) const {
155  return VerifyTableStart(verifier) &&
156  verifier.EndTable();
157  }
158 };
159 
161  flatbuffers::FlatBufferBuilder &fbb_;
162  flatbuffers::uoffset_t start_;
163  ShutdownArmBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
164  ShutdownArmBuilder &operator=(const ShutdownArmBuilder &);
165  flatbuffers::Offset<ShutdownArm> Finish() {
166  auto o = flatbuffers::Offset<ShutdownArm>(fbb_.EndTable(start_, 0));
167  return o;
168  }
169 };
170 
171 inline flatbuffers::Offset<ShutdownArm> CreateShutdownArm(flatbuffers::FlatBufferBuilder &_fbb) {
172  ShutdownArmBuilder builder_(_fbb);
173  return builder_.Finish();
174 }
175 
176 struct MoveArmTrajectory FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
177  const flatbuffers::Vector<flatbuffers::Offset<grl::flatbuffer::JointState>> *traj() const { return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<grl::flatbuffer::JointState>> *>(4); }
178  bool Verify(flatbuffers::Verifier &verifier) const {
179  return VerifyTableStart(verifier) &&
180  VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* traj */) &&
181  verifier.Verify(traj()) &&
182  verifier.VerifyVectorOfTables(traj()) &&
183  verifier.EndTable();
184  }
185 };
186 
188  flatbuffers::FlatBufferBuilder &fbb_;
189  flatbuffers::uoffset_t start_;
190  void add_traj(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<grl::flatbuffer::JointState>>> traj) { fbb_.AddOffset(4, traj); }
191  MoveArmTrajectoryBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
193  flatbuffers::Offset<MoveArmTrajectory> Finish() {
194  auto o = flatbuffers::Offset<MoveArmTrajectory>(fbb_.EndTable(start_, 1));
195  return o;
196  }
197 };
198 
199 inline flatbuffers::Offset<MoveArmTrajectory> CreateMoveArmTrajectory(flatbuffers::FlatBufferBuilder &_fbb,
200  flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<grl::flatbuffer::JointState>>> traj = 0) {
201  MoveArmTrajectoryBuilder builder_(_fbb);
202  builder_.add_traj(traj);
203  return builder_.Finish();
204 }
205 
206 struct MoveArmJointServo FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
207  const grl::flatbuffer::JointState *goal() const { return GetPointer<const grl::flatbuffer::JointState *>(4); }
208  bool Verify(flatbuffers::Verifier &verifier) const {
209  return VerifyTableStart(verifier) &&
210  VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* goal */) &&
211  verifier.VerifyTable(goal()) &&
212  verifier.EndTable();
213  }
214 };
215 
217  flatbuffers::FlatBufferBuilder &fbb_;
218  flatbuffers::uoffset_t start_;
219  void add_goal(flatbuffers::Offset<grl::flatbuffer::JointState> goal) { fbb_.AddOffset(4, goal); }
220  MoveArmJointServoBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
222  flatbuffers::Offset<MoveArmJointServo> Finish() {
223  auto o = flatbuffers::Offset<MoveArmJointServo>(fbb_.EndTable(start_, 1));
224  return o;
225  }
226 };
227 
228 inline flatbuffers::Offset<MoveArmJointServo> CreateMoveArmJointServo(flatbuffers::FlatBufferBuilder &_fbb,
229  flatbuffers::Offset<grl::flatbuffer::JointState> goal = 0) {
230  MoveArmJointServoBuilder builder_(_fbb);
231  builder_.add_goal(goal);
232  return builder_.Finish();
233 }
234 
235 struct MoveArmCartesianServo FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
236  const flatbuffers::String *parent() const { return GetPointer<const flatbuffers::String *>(4); }
237  const grl::flatbuffer::Pose *goal() const { return GetStruct<const grl::flatbuffer::Pose *>(6); }
238  bool Verify(flatbuffers::Verifier &verifier) const {
239  return VerifyTableStart(verifier) &&
240  VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* parent */) &&
241  verifier.Verify(parent()) &&
242  VerifyField<grl::flatbuffer::Pose>(verifier, 6 /* goal */) &&
243  verifier.EndTable();
244  }
245 };
246 
248  flatbuffers::FlatBufferBuilder &fbb_;
249  flatbuffers::uoffset_t start_;
250  void add_parent(flatbuffers::Offset<flatbuffers::String> parent) { fbb_.AddOffset(4, parent); }
251  void add_goal(const grl::flatbuffer::Pose *goal) { fbb_.AddStruct(6, goal); }
252  MoveArmCartesianServoBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
254  flatbuffers::Offset<MoveArmCartesianServo> Finish() {
255  auto o = flatbuffers::Offset<MoveArmCartesianServo>(fbb_.EndTable(start_, 2));
256  return o;
257  }
258 };
259 
260 inline flatbuffers::Offset<MoveArmCartesianServo> CreateMoveArmCartesianServo(flatbuffers::FlatBufferBuilder &_fbb,
261  flatbuffers::Offset<flatbuffers::String> parent = 0,
262  const grl::flatbuffer::Pose *goal = 0) {
263  MoveArmCartesianServoBuilder builder_(_fbb);
264  builder_.add_goal(goal);
265  builder_.add_parent(parent);
266  return builder_.Finish();
267 }
268 
269 struct ArmControlState FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
270  const flatbuffers::String *name() const { return GetPointer<const flatbuffers::String *>(4); }
271  int64_t sequenceNumber() const { return GetField<int64_t>(6, 0); }
272  double timeStamp() const { return GetField<double>(8, 0); }
273  ArmState state_type() const { return static_cast<ArmState>(GetField<uint8_t>(10, 0)); }
274  const void *state() const { return GetPointer<const void *>(12); }
275  bool Verify(flatbuffers::Verifier &verifier) const {
276  return VerifyTableStart(verifier) &&
277  VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* name */) &&
278  verifier.Verify(name()) &&
279  VerifyField<int64_t>(verifier, 6 /* sequenceNumber */) &&
280  VerifyField<double>(verifier, 8 /* timeStamp */) &&
281  VerifyField<uint8_t>(verifier, 10 /* state_type */) &&
282  VerifyField<flatbuffers::uoffset_t>(verifier, 12 /* state */) &&
283  VerifyArmState(verifier, state(), state_type()) &&
284  verifier.EndTable();
285  }
286 };
287 
289  flatbuffers::FlatBufferBuilder &fbb_;
290  flatbuffers::uoffset_t start_;
291  void add_name(flatbuffers::Offset<flatbuffers::String> name) { fbb_.AddOffset(4, name); }
292  void add_sequenceNumber(int64_t sequenceNumber) { fbb_.AddElement<int64_t>(6, sequenceNumber, 0); }
293  void add_timeStamp(double timeStamp) { fbb_.AddElement<double>(8, timeStamp, 0); }
294  void add_state_type(ArmState state_type) { fbb_.AddElement<uint8_t>(10, static_cast<uint8_t>(state_type), 0); }
295  void add_state(flatbuffers::Offset<void> state) { fbb_.AddOffset(12, state); }
296  ArmControlStateBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
298  flatbuffers::Offset<ArmControlState> Finish() {
299  auto o = flatbuffers::Offset<ArmControlState>(fbb_.EndTable(start_, 5));
300  return o;
301  }
302 };
303 
304 inline flatbuffers::Offset<ArmControlState> CreateArmControlState(flatbuffers::FlatBufferBuilder &_fbb,
305  flatbuffers::Offset<flatbuffers::String> name = 0,
306  int64_t sequenceNumber = 0,
307  double timeStamp = 0,
308  ArmState state_type = ArmState_NONE,
309  flatbuffers::Offset<void> state = 0) {
310  ArmControlStateBuilder builder_(_fbb);
311  builder_.add_timeStamp(timeStamp);
312  builder_.add_sequenceNumber(sequenceNumber);
313  builder_.add_state(state);
314  builder_.add_name(name);
315  builder_.add_state_type(state_type);
316  return builder_.Finish();
317 }
318 
319 struct ArmControlSeries FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
320  const flatbuffers::Vector<flatbuffers::Offset<ArmControlState>> *states() const { return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<ArmControlState>> *>(4); }
321  bool Verify(flatbuffers::Verifier &verifier) const {
322  return VerifyTableStart(verifier) &&
323  VerifyField<flatbuffers::uoffset_t>(verifier, 4 /* states */) &&
324  verifier.Verify(states()) &&
325  verifier.VerifyVectorOfTables(states()) &&
326  verifier.EndTable();
327  }
328 };
329 
331  flatbuffers::FlatBufferBuilder &fbb_;
332  flatbuffers::uoffset_t start_;
333  void add_states(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<ArmControlState>>> states) { fbb_.AddOffset(4, states); }
334  ArmControlSeriesBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
336  flatbuffers::Offset<ArmControlSeries> Finish() {
337  auto o = flatbuffers::Offset<ArmControlSeries>(fbb_.EndTable(start_, 1));
338  return o;
339  }
340 };
341 
342 inline flatbuffers::Offset<ArmControlSeries> CreateArmControlSeries(flatbuffers::FlatBufferBuilder &_fbb,
343  flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<ArmControlState>>> states = 0) {
344  ArmControlSeriesBuilder builder_(_fbb);
345  builder_.add_states(states);
346  return builder_.Finish();
347 }
348 
349 inline bool VerifyArmState(flatbuffers::Verifier &verifier, const void *union_obj, ArmState type) {
350  switch (type) {
351  case ArmState_NONE: return true;
352  case ArmState_StartArm: return verifier.VerifyTable(reinterpret_cast<const StartArm *>(union_obj));
353  case ArmState_StopArm: return verifier.VerifyTable(reinterpret_cast<const StopArm *>(union_obj));
354  case ArmState_PauseArm: return verifier.VerifyTable(reinterpret_cast<const PauseArm *>(union_obj));
355  case ArmState_ShutdownArm: return verifier.VerifyTable(reinterpret_cast<const ShutdownArm *>(union_obj));
356  case ArmState_TeachArm: return verifier.VerifyTable(reinterpret_cast<const TeachArm *>(union_obj));
357  case ArmState_MoveArmTrajectory: return verifier.VerifyTable(reinterpret_cast<const MoveArmTrajectory *>(union_obj));
358  case ArmState_MoveArmJointServo: return verifier.VerifyTable(reinterpret_cast<const MoveArmJointServo *>(union_obj));
359  case ArmState_MoveArmCartesianServo: return verifier.VerifyTable(reinterpret_cast<const MoveArmCartesianServo *>(union_obj));
360  default: return false;
361  }
362 }
363 
364 inline const grl::flatbuffer::ArmControlSeries *GetArmControlSeries(const void *buf) { return flatbuffers::GetRoot<grl::flatbuffer::ArmControlSeries>(buf); }
365 
366 inline bool VerifyArmControlSeriesBuffer(flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer<grl::flatbuffer::ArmControlSeries>(); }
367 
368 inline const char *ArmControlSeriesIdentifier() { return "armc"; }
369 
370 inline bool ArmControlSeriesBufferHasIdentifier(const void *buf) { return flatbuffers::BufferHasIdentifier(buf, ArmControlSeriesIdentifier()); }
371 
372 inline const char *ArmControlSeriesExtension() { return "armc"; }
373 
374 inline void FinishArmControlSeriesBuffer(flatbuffers::FlatBufferBuilder &fbb, flatbuffers::Offset<grl::flatbuffer::ArmControlSeries> root) { fbb.Finish(root, ArmControlSeriesIdentifier()); }
375 
376 } // namespace flatbuffer
377 } // namespace grl
378 
379 #endif // FLATBUFFERS_GENERATED_ARMCONTROLSTATE_GRL_FLATBUFFER_H_
flatbuffers::Offset< MoveArmCartesianServo > CreateMoveArmCartesianServo(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::String > parent=0, const grl::flatbuffer::Pose *goal=0)
void add_goal(const grl::flatbuffer::Pose *goal)
const flatbuffers::String * parent() const
ArmControlSeriesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::FlatBufferBuilder & fbb_
const flatbuffers::Vector< flatbuffers::Offset< grl::flatbuffer::JointState > > * traj() const
ArmControlStateBuilder(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::Offset< ArmControlState > Finish()
void add_traj(flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< grl::flatbuffer::JointState >>> traj)
void add_name(flatbuffers::Offset< flatbuffers::String > name)
flatbuffers::Offset< StopArm > CreateStopArm(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::Offset< ArmControlSeries > Finish()
flatbuffers::Offset< StartArm > Finish()
const char * ArmControlSeriesExtension()
MoveArmTrajectoryBuilder(flatbuffers::FlatBufferBuilder &_fbb)
const grl::flatbuffer::Pose * goal() const
flatbuffers::Offset< MoveArmCartesianServo > Finish()
flatbuffers::Offset< PauseArm > Finish()
flatbuffers::FlatBufferBuilder & fbb_
const char ** EnumNamesArmState()
const char * EnumNameArmState(ArmState e)
flatbuffers::Offset< ArmControlSeries > CreateArmControlSeries(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< ArmControlState >>> states=0)
flatbuffers::Offset< MoveArmJointServo > CreateMoveArmJointServo(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< grl::flatbuffer::JointState > goal=0)
flatbuffers::Offset< ShutdownArm > CreateShutdownArm(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::Offset< MoveArmJointServo > Finish()
void add_parent(flatbuffers::Offset< flatbuffers::String > parent)
TeachArmBuilder(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::FlatBufferBuilder & fbb_
ShutdownArmBuilder(flatbuffers::FlatBufferBuilder &_fbb)
void add_states(flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< ArmControlState >>> states)
bool Verify(flatbuffers::Verifier &verifier) const
flatbuffers::Offset< TeachArm > Finish()
flatbuffers::Offset< StopArm > Finish()
MoveArmCartesianServoBuilder(flatbuffers::FlatBufferBuilder &_fbb)
MoveArmJointServoBuilder(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::Offset< StartArm > CreateStartArm(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::Offset< ArmControlState > CreateArmControlState(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::String > name=0, int64_t sequenceNumber=0, double timeStamp=0, ArmState state_type=ArmState_NONE, flatbuffers::Offset< void > state=0)
const grl::flatbuffer::JointState * goal() const
flatbuffers::Offset< ShutdownArm > Finish()
bool ArmControlSeriesBufferHasIdentifier(const void *buf)
flatbuffers::Offset< PauseArm > CreatePauseArm(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::FlatBufferBuilder & fbb_
void add_state(flatbuffers::Offset< void > state)
const flatbuffers::String * name() const
StartArmBuilder(flatbuffers::FlatBufferBuilder &_fbb)
flatbuffers::Offset< TeachArm > CreateTeachArm(flatbuffers::FlatBufferBuilder &_fbb)
StopArmBuilder(flatbuffers::FlatBufferBuilder &_fbb)
const char * ArmControlSeriesIdentifier()
const grl::flatbuffer::ArmControlSeries * GetArmControlSeries(const void *buf)
bool VerifyArmControlSeriesBuffer(flatbuffers::Verifier &verifier)
flatbuffers::Offset< MoveArmTrajectory > CreateMoveArmTrajectory(flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset< flatbuffers::Vector< flatbuffers::Offset< grl::flatbuffer::JointState >>> traj=0)
bool VerifyArmState(flatbuffers::Verifier &verifier, const void *union_obj, ArmState type)
flatbuffers::Offset< MoveArmTrajectory > Finish()
const flatbuffers::Vector< flatbuffers::Offset< ArmControlState > > * states() const
flatbuffers::FlatBufferBuilder & fbb_
PauseArmBuilder(flatbuffers::FlatBufferBuilder &_fbb)
void FinishArmControlSeriesBuffer(flatbuffers::FlatBufferBuilder &fbb, flatbuffers::Offset< grl::flatbuffer::ArmControlSeries > root)
void add_goal(flatbuffers::Offset< grl::flatbuffer::JointState > goal)