VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
iffStateComponent.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
12 #include <vrfutil/rwUUID.h>
13 
14 #include <vlutil/vlString.h>
15 #include <matrix/vlVector.h>
16 
17 namespace makVrf
18 {
22  {
25  : myModeSettingsList("mode-settings")
26  , myHostId(DtUUID::nullUUID())
27  {
28  }
29 
31  : myModeSettingsList(orig.myModeSettingsList)
32  , myHostId(orig.myHostId)
33  {
34  }
35 
37  {
38  myModeSettingsList = rhs.myModeSettingsList;
39  myHostId = rhs.myHostId;
40 
41  return *this;
42  }
43 
44  bool hasModeSetting(int i) const
45  {
46  return myModeSettingsList.hasModeSetting(i);
47  }
48 
49  const DtIffModeSetting* modeSetting(int i) const
50  {
51  return myModeSettingsList.modeSetting(i);
52  }
53 
55  {
56  return myModeSettingsList.modeSetting(i);
57  }
58 
59  std::vector<DtModeType> enabledModes() const
60  {
61  return myModeSettingsList.enabledModes();
62  }
63 
65  {
66  return myModeSettingsList;
67  }
68 
70  {
71  return myModeSettingsList;
72  }
73 
74  DEFINE_ACCESSOR_MUTATOR(DtUUID, hostId, HostId)
75 
76  protected:
77  DtIffModeSettingsList myModeSettingsList;
78  DtUUID myHostId;
79  };
80 
84  {
85  public:
87 
89  : DtFrameStateInterface(sd)
90  {
91  }
92 
93  virtual const DtIffModeSetting* modeSetting(int) const { throw DtUnimplementedMethod("The const DtIffModeSetting* modeSetting(int) const method is unimplemented"); };
94  virtual DtIffModeSetting* modeSetting(int) { throw DtUnimplementedMethod("The DtIffModeSetting* modeSetting(int) method is unimplemented"); };
95  virtual void setEnabledModes(const std::vector<DtModeType>&) { throw DtUnimplementedMethod("The void setEnabledModes(const std::vector<DtModeType>&) method is unimplemented"); };
96  virtual std::vector<DtModeType> enabledModes() const { throw DtUnimplementedMethod("The std::vector<DtModeType> enabledModes() const) method is unimplemented"); };
97  virtual bool anyModeIsOn() const { throw DtUnimplementedMethod("The bool anyModeIsOn() const method is unimplemented"); };
98  virtual bool modeIsOn(DtModeType) const { throw DtUnimplementedMethod("The bool modeIsOn(DtModeType) const method is unimplemented"); };
99  virtual bool hasModeSetting(DtModeType) const { throw DtUnimplementedMethod("The bool hasModeSetting(DtModeType) const method is unimplemented"); };
102 
103  virtual bool canHaveModeCodeSet(DtModeType modeType) const
104  {
105  return CAN_HAVE_CODES_SET(modeType);
106  }
107  };
108 
111  {
112  public:
114 
115  virtual const DtIffModeSetting* modeSetting(int) const override;
116  virtual DtIffModeSetting* modeSetting(int) override;
117 
118  virtual void setEnabledModes(const std::vector<DtModeType>&) override;
119  virtual std::vector<DtModeType> enabledModes() const override;
120  virtual bool anyModeIsOn() const override;
121  virtual bool modeIsOn(DtModeType) const override;
122  virtual bool hasModeSetting(DtModeType) const override;
123 
125  const DtIffStateComponentData& frameState() const { return myData; };
126  DtIffStateComponentData& frameState() { return myData; };
127 
128  virtual const DtUUID& hostId() const override;
129  virtual void setHostId(const DtUUID&) override;
130  virtual const DtIffModeSettingsList& modeSettings() const override;
131 
133  virtual void makeWritable() override {};
134 
136  virtual void makeReadOnly() override {};
137 
138  protected:
140  };
141 
144  {
145  public:
147 
149  const DtIffStateComponentData& frameState() const { return myData; };
150 
151  virtual bool anyModeIsOn() const override;
152  virtual const DtIffModeSetting* modeSetting(int) const override;
153  virtual std::vector<DtModeType> enabledModes() const override;
154  virtual const DtUUID& hostId() const override;
155  virtual const DtIffModeSettingsList& modeSettings() const override;
156  virtual bool modeIsOn(DtModeType) const override;
157  virtual bool hasModeSetting(DtModeType) const override;
158 
159  protected:
162  {
163  myData = data;
164  }
165 
166  protected:
168  };
169 
173  {
174  public:
176 
177  bool isDoubleBuffered() { return true; };
178  virtual const DtFrameStateInterface* currentFrameState() const override { return &myCurrentFrameState; }
179  virtual DtFrameStateInterface* nextFrameState() override { return &myNextFrameState; };
180  virtual const DtFrameStateInterface* nextFrameState() const override { return &myNextFrameState; };
181 
182  virtual void updateDataStorage() override
183  {
184  if (myNextFrameState.isWritable())
185  {
186  myCurrentFrameState.advanceFrame(myNextFrameState.frameState());
187  }
188 
189  myCurrentFrameState.emitComponentUpdated();
190  }
191 
192  virtual void updateStateData(DtStateData* sd) override
193  {
194  myCurrentFrameState.updateStateData(sd);
195  myNextFrameState.updateStateData(sd);
196  }
197 
198  virtual void aboutToBeDeleted() override
199  {
201  myCurrentFrameState.aboutToBeDeleted();
202  myNextFrameState.aboutToBeDeleted();
203  }
204 
205  protected:
208  };
209 
213 }
DtIffModeSettingsList & modeSettings()
Definition: iffStateComponent.h:64
UUID is a unique ID wrapper class.
Definition: uuid.h:59
virtual bool modeIsOn(DtModeType) const
Definition: iffStateComponent.h:98
Definition: stateDataTypes.h:23
DtIffStateComponentData()
Default modes to be enabled mimic current VRL mode enabled.
Definition: iffStateComponent.h:24
DtIffStateComponentNextFrame myNextFrameState
Definition: iffStateComponent.h:207
const DtIffStateComponentData & frameState() const
Next frame access write access. Ensure this is only used in a single thread (i.e.a controller thread)...
Definition: iffStateComponent.h:125
DtStateComponentCreator< DtIffStateComponentImplementation > DtIffStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: iffStateComponent.h:212
std::vector< DtModeType > enabledModes() const
Definition: iffStateComponent.h:59
virtual std::vector< DtModeType > enabledModes() const
Definition: iffStateComponent.h:96
virtual bool hasModeSetting(DtModeType) const
Definition: iffStateComponent.h:99
virtual DtFrameStateInterface * nextFrameState() override
Definition: iffStateComponent.h:179
Definition: stateComponent.h:269
virtual bool anyModeIsOn() const
Definition: iffStateComponent.h:97
bool isDoubleBuffered()
Definition: iffStateComponent.h:177
bool hasModeSetting(int i) const
Definition: iffStateComponent.h:44
virtual const DtFrameStateInterface * currentFrameState() const override
Definition: iffStateComponent.h:178
const DtIffModeSettingsList & modeSettings() const
Definition: iffStateComponent.h:69
2) Define the next frame class. This will be used for write access.
Definition: iffStateComponent.h:110
3) Define the current frame class. This will be used for read access.
Definition: iffStateComponent.h:143
Contains the DtUUID class declaration.
#define UNDEFINED_RETURNREF_ACCESSOR(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:34
DtIffModeSettingsList myModeSettingsList
Definition: iffStateComponent.h:77
DtIffStateComponentCurrentFrame myCurrentFrameState
Definition: iffStateComponent.h:206
Definition: stateComponent.h:86
virtual void makeWritable() override
Override to make component writable.
Definition: iffStateComponent.h:133
DtUUID myHostId
Definition: iffStateComponent.h:78
DtIffModeSetting * modeSetting(int i)
Definition: iffStateComponent.h:54
virtual void updateDataStorage() override
Implement to update data storage. Called from advanceFrame.
Definition: iffStateComponent.h:182
virtual void aboutToBeDeleted() override
Definition: iffStateComponent.h:198
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
virtual const DtIffModeSetting * modeSetting(int) const
Definition: iffStateComponent.h:93
Definition: iffModeSettings.h:88
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:231
Definition: iffModeSettings.h:124
virtual void updateStateData(DtStateData *sd) override
Implement to update data storage to the new state data.
Definition: iffStateComponent.h:192
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:384
#define CAN_HAVE_CODES_SET(modeType)
Definition: iffModeSettings.h:50
const DtIffModeSetting * modeSetting(int i) const
Definition: iffStateComponent.h:49
The DtIFFStateComponentList is a collection of iff components. Note that once a mode is enabled it ca...
Definition: iffStateComponent.h:21
4) Define the state component that will contain the wrappers to the next and current frame states tha...
Definition: iffStateComponent.h:172
virtual void aboutToBeDeleted()
virtual DtIffModeSetting * modeSetting(int)
Definition: iffStateComponent.h:94
const DtIffStateComponentData & frameState() const
Current frame state only can access current frame buffers. This ensures thread safety.
Definition: iffStateComponent.h:149
#define UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:57
#define DEFINE_ACCESSOR_MUTATOR(ReturnType, Accessor, Mutator)
Definition: doubleBufferedDataStorage.h:23
DtIffStateComponentData(const DtIffStateComponentData &orig)
Definition: iffStateComponent.h:30
DtIffStateComponentData & operator=(const DtIffStateComponentData &rhs)
Definition: iffStateComponent.h:36
virtual const DtFrameStateInterface * nextFrameState() const override
Definition: iffStateComponent.h:180
#define DT_DLL_vrfStateData
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfStateDataDefines.h:26
1) Define the interface class that will be used to represent the next and curent frames. The UNDEFINED_ macros are convenience macros that will define methods that throw exceptions (until they are implemented)
Definition: iffStateComponent.h:83
void advanceFrame(const DtIffStateComponentData &data)
Definition: iffStateComponent.h:161
Contains the DtStateComponent class declaration.
DtIffStateComponentData & frameState()
Definition: iffStateComponent.h:126
virtual void setEnabledModes(const std::vector< DtModeType > &)
Definition: iffStateComponent.h:95
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:294
DtIffStateComponentData myData
Definition: iffStateComponent.h:167

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)