30 #include "DspComponent.h"
31 #include "DspWireBus.h"
32 #include "DspCircuitThread.h"
68 virtual void PauseAutoTick();
70 void SetThreadCount(
unsigned short threadCount );
71 unsigned short GetThreadCount()
const;
73 bool AddComponent(
DspComponent* component, std::string componentName =
"" );
74 bool AddComponent(
DspComponent& component, std::string componentName =
"" );
78 void RemoveComponent( std::string componentName );
80 void RemoveAllComponents();
82 template<
class ComponentType >
83 ComponentType* GetComponent( std::string componentName );
85 unsigned short GetComponentCount()
const;
88 template<
class FromComponentType,
class FromOutputType,
class ToComponentType,
class ToInputType >
89 bool ConnectOutToIn( FromComponentType& fromComponent, FromOutputType fromOutput, ToComponentType& toComponent, ToInputType toInput );
92 template<
class FromInputType,
class ToComponentType,
class ToInputType >
93 bool ConnectInToIn( FromInputType fromInput, ToComponentType& toComponent, ToInputType toInput );
96 template<
class FromComponentType,
class FromOutputType,
class ToOutputType >
97 bool ConnectOutToOut( FromComponentType& fromComponent, FromOutputType fromOutput, ToOutputType toOutput );
100 template<
class FromComponentType,
class FromOutputType,
class ToComponentType,
class ToInputType >
101 void DisconnectOutToIn( FromComponentType& fromComponent, FromOutputType fromOutput, ToComponentType& toComponent, ToInputType toInput );
104 template<
class FromInputType,
class ToComponentType,
class ToInputType >
105 bool DisconnectInToIn( FromInputType fromInput, ToComponentType& toComponent, ToInputType toInput );
108 template<
class FromComponentType,
class FromOutputType,
class ToOutputType >
109 bool DisconnectOutToOut( FromComponentType& fromComponent, FromOutputType fromOutput, ToOutputType toOutput );
111 void DisconnectComponent( std::string component );
113 bool AddInput( std::string inputName =
"" );
114 bool AddOutput( std::string outputName =
"" );
123 std::vector< DspComponent* > _components;
125 std::vector< DspCircuitThread > _circuitThreads;
126 unsigned short _currentThreadIndex;
131 bool _FindComponent(
DspComponent* component,
unsigned short& returnIndex )
const;
132 bool _FindComponent(
DspComponent& component,
unsigned short& returnIndex )
const;
133 bool _FindComponent( std::string componentName,
unsigned short& returnIndex )
const;
134 bool _FindComponent(
unsigned short componentIndex,
unsigned short& returnIndex )
const;
136 void _DisconnectComponent(
unsigned short componentIndex );
137 void _RemoveComponent(
unsigned short componentIndex );
142 template<
class ComponentType >
143 ComponentType* DspCircuit::GetComponent( std::string componentName )
145 unsigned short componentIndex;
147 if( _FindComponent( componentName, componentIndex ) )
149 return static_cast< ComponentType*
>( _components[componentIndex] );
159 template<
class FromComponentType,
class FromOutputType,
class ToComponentType,
class ToInputType >
160 bool DspCircuit::ConnectOutToIn( FromComponentType& fromComponent, FromOutputType fromOutput, ToComponentType& toComponent, ToInputType toInput )
162 unsigned short fromComponentIndex;
163 unsigned short toComponentIndex;
166 if( !_FindComponent( fromComponent, fromComponentIndex ) ||
167 !_FindComponent( toComponent, toComponentIndex ) )
174 bool result = _components[toComponentIndex]->ConnectInput( _components[fromComponentIndex], fromOutput, toInput );
183 template<
class FromInputType,
class ToComponentType,
class ToInputType >
184 bool DspCircuit::ConnectInToIn( FromInputType fromInput, ToComponentType& toComponent, ToInputType toInput )
186 unsigned short fromInputIndex;
187 unsigned short toComponentIndex;
188 unsigned short toInputIndex;
191 if( !FindInput( fromInput, fromInputIndex ) ||
192 !_FindComponent( toComponent, toComponentIndex ) ||
193 !_components[toComponentIndex]->FindInput( toInput, toInputIndex ) )
200 bool result = _inToInWires.AddWire( _components[toComponentIndex], fromInputIndex, toInputIndex );
209 template<
class FromComponentType,
class FromOutputType,
class ToOutputType >
210 bool DspCircuit::ConnectOutToOut( FromComponentType& fromComponent, FromOutputType fromOutput, ToOutputType toOutput )
212 unsigned short fromComponentIndex;
213 unsigned short fromOutputIndex;
214 unsigned short toOutputIndex;
217 if( !_FindComponent( fromComponent, fromComponentIndex ) ||
218 !_components[fromComponentIndex]->FindOutput( fromOutput, fromOutputIndex ) ||
219 !FindOutput( toOutput, toOutputIndex ) )
226 bool result = _outToOutWires.AddWire( _components[fromComponentIndex], fromOutputIndex, toOutputIndex );
235 template<
class FromComponentType,
class FromOutputType,
class ToComponentType,
class ToInputType >
236 void DspCircuit::DisconnectOutToIn( FromComponentType& fromComponent, FromOutputType fromOutput, ToComponentType& toComponent, ToInputType toInput )
238 unsigned short fromComponentIndex;
239 unsigned short toComponentIndex;
242 if( !_FindComponent( fromComponent, fromComponentIndex ) ||
243 !_FindComponent( toComponent, toComponentIndex ) )
250 _components[toComponentIndex]->DisconnectInput( _components[fromComponentIndex], fromOutput, toInput );
257 template<
class FromInputType,
class ToComponentType,
class ToInputType >
258 bool DspCircuit::DisconnectInToIn( FromInputType fromInput, ToComponentType& toComponent, ToInputType toInput )
260 unsigned short fromInputIndex;
261 unsigned short toComponentIndex;
262 unsigned short toInputIndex;
265 if( !FindInput( fromInput, fromInputIndex ) ||
266 !_FindComponent( toComponent, toComponentIndex ) ||
267 !_components[toComponentIndex]->FindInput( toInput, toInputIndex ) )
274 bool result = _inToInWires.RemoveWire( _components[toComponentIndex], fromInputIndex, toInputIndex );
283 template<
class FromComponentType,
class FromOutputType,
class ToOutputType >
284 bool DspCircuit::DisconnectOutToOut( FromComponentType& fromComponent, FromOutputType fromOutput, ToOutputType toOutput )
286 unsigned short fromComponentIndex;
287 unsigned short fromOutputIndex;
288 unsigned short toOutputIndex;
291 if( !_FindComponent( fromComponent, fromComponentIndex ) ||
292 !_components[fromComponentIndex]->FindOutput( fromOutput, fromOutputIndex ) ||
293 !FindOutput( toOutput, toOutputIndex ) )
300 bool result = _outToOutWires.RemoveWire( _components[fromComponentIndex], fromOutputIndex, toOutputIndex );
309 #endif // DSPCIRCUIT_H