70#include "Configuration.h"
71#include "Identified.h"
82 struct Jack : Identified<Jack>
85 virtual const char*
TypeName() const noexcept = 0;
98 virtual
void Pulse () noexcept = 0;
135 Jack_Imp(
const Jack_Imp& jack) =
delete;
136 dclspc Jack_Imp(Jack_Imp&& jack)
noexcept;
137 explicit dclspc Jack_Imp(
const std::string& name);
139 Jack_Imp& operator=(
const Jack_Imp&) =
delete;
140 Jack_Imp& operator=(Jack_Imp&& jack) =
delete;
142 dclspc ~Jack_Imp()
noexcept;
144 dclspc
const char*
TypeName() const noexcept override;
150 void dclspc
Pulse() noexcept override;
160 bool dclspc
Plugged() const noexcept override;
162 void dclspc
Clear() noexcept override;
168 void DoClear() noexcept;
177 struct JackEnumerator{
181 typedef JackEnumerator collection_type;
182 typedef Jack value_type;
194 return const_cast<Jack&
>(_GetJack( idx ));
198 return _GetJack( idx );
207 virtual ~JackEnumerator() =
default;
209 JackEnumerator(
const JackEnumerator& ) =
default;
210 JackEnumerator( JackEnumerator&& ) =
default;
211 JackEnumerator& operator=(
const JackEnumerator& ) =
default;
212 JackEnumerator& operator=( JackEnumerator&& ) =
default;
213 JackEnumerator() =
default;
215 virtual const Jack& _GetJack(
int idx )
const = 0;
219 template<
class EnumeratorType,
220 class PointerType =
Jack*,
221 class ReferenceType =
Jack&>
224 using iterator_category = std::random_access_iterator_tag;
225 using value_type =
Jack;
226 using difference_type = ptrdiff_t;
227 using pointer = PointerType;
228 using reference = ReferenceType;
232 : m_Container( Container ),
233 m_IndexCurrent( bEnd ? Container.CountJacks() : 0 )
243 JackIterator operator++(
int ){
244 JackIterator retval( *
this );
250 return m_Container.GetJack( m_IndexCurrent );
253 JackIterator& operator--(){
258 JackIterator operator--(
int ){
259 JackIterator retval( *
this );
264 ReferenceType operator[](
int n )
const{
265 return m_Container.GetJack( m_IndexCurrent + n );
268 ReferenceType operator->()
const{
269 return m_Container.GetJack( m_IndexCurrent );
272 bool operator==(
const JackIterator& iter )
const{
273 assert( &m_Container == &iter.m_Container );
274 return m_IndexCurrent == iter.m_IndexCurrent;
277 bool operator!=(
const JackIterator& iter )
const noexcept{
278 assert( &m_Container == &iter.m_Container );
279 return m_IndexCurrent != iter.m_IndexCurrent;
282 bool operator<(
const JackIterator& iter )
const{
283 assert( &m_Container == &iter.m_Container );
284 return m_IndexCurrent < iter.m_IndexCurrent;
287 bool operator<=(
const JackIterator& iter )
const{
288 assert( &m_Container == &iter.m_Container );
289 return m_IndexCurrent <= iter.m_IndexCurrent;
292 bool operator>(
const JackIterator& iter )
const{
293 assert( &m_Container == &iter.m_Container );
294 return m_IndexCurrent > iter.m_IndexCurrent;
297 bool operator>=(
const JackIterator& iter )
const{
298 assert( &m_Container == &iter.m_Container );
299 return m_IndexCurrent >= iter.m_IndexCurrent;
311 JackIterator iter( *
this );
312 iter.m_IndexCurrent += n;
316 JackIterator iter( *
this );
317 iter.m_IndexCurrent -= n;
321 EnumeratorType& m_Container;
325 inline JackIterator<JackEnumerator> begin( JackEnumerator& jackEnumerator ){
326 return JackIterator<JackEnumerator>( jackEnumerator );
329 inline JackIterator<const JackEnumerator,const Jack*, const Jack&> begin(
const JackEnumerator& jackEnumerator ){
330 return JackIterator<const JackEnumerator, const Jack*, const Jack&>( jackEnumerator );
333 inline JackIterator<JackEnumerator> end( JackEnumerator& jackEnumerator ){
334 return JackIterator<JackEnumerator>( jackEnumerator,
true );
337 inline JackIterator<const JackEnumerator, const Jack*, const Jack&> end(
const JackEnumerator& jackEnumerator ){
338 return JackIterator<const JackEnumerator, const Jack*, const Jack&>( jackEnumerator,
true );
void dclspc Pulse() noexcept override
This function gets called from the owner of a Jack on a certain event.
void dclspc InsertAndAppend(Plug *pPlug) noexcept override
Inserts the plug at this Jack. If a plug is already inserted this will be appended into pPlug's Jack.
void dclspc Clear() noexcept override
Clear the Jack from any plug.
dclspc Plug * GetPlug() const noexcept override
Gets a connected plug if any.
void dclspc InsertAtTail(Plug *pPlug) override
Inserts the plug at this Jack if no plug is already inserted. Inserts it at the tail of this plug cha...
dclspc const char * TypeName() const noexcept override
bool dclspc Plugged() const noexcept override
Is a Plug already plugged into this jack?
void dclspc Insert(Plug *pPlug) noexcept override
Connects together a Plug with a Jack.
IDType dclspc RefPlugID() const noexcept override
JackIterator(EnumeratorType &Container, bool bEnd=false)
Construction.
Definition Jack.h:231
constexpr auto operator*(const Interval< Valtype > &i1, Valtype2 scalar) noexcept -> Interval< decltype(Valtype{} *Valtype2{})>
Interval operator.
Definition Interval.h:628
constexpr bool operator!=(const Interval< Valtype > &i1, const Interval< Valtype > &i2) noexcept
Interval operator.
Definition Interval.h:701
constexpr bool operator>(const Interval< Valtype > &i1, const Interval< Valtype > &i2) noexcept
Definition Interval.h:665
void operator+=(Interval< Valtype > &i1, const Interval< Valtype > &i2) noexcept
Interval operator.
Definition Interval.h:586
constexpr bool operator==(const Interval< Valtype > &i1, const Interval< Valtype > &i2) noexcept
Interval operator.
Definition Interval.h:696
constexpr bool operator<(const Interval< Valtype > &i1, const Interval< Valtype > &i2) noexcept
Definition Interval.h:657
constexpr Interval< Valtype > operator+(const Interval< Valtype > &i1, const Interval< Valtype > &i2) noexcept
Interval operator.
Definition Interval.h:591
constexpr Interval< Valtype > operator-(const Interval< Valtype > &i1, Valtype l) noexcept
Interval operator.
Definition Interval.h:613
constexpr Value< Dimension< L, M, T > > & operator-=(Value< Dimension< L, M, T > > &a, const Value< Dimension< L, M, T > > &b) noexcept
Dimensionated Values operator.
Definition DimensionedValues.h:490
constexpr bool operator>=(const Value< Dimension< L, M, T > > &a, const Value< Dimension< L, M, T > > &b) noexcept
Dimensionated Values operator.
Definition DimensionedValues.h:659
constexpr bool operator<=(const Value< Dimension< L, M, T > > &a, const Value< Dimension< L, M, T > > &b) noexcept
Dimensionated Values operator.
Definition DimensionedValues.h:655
Namespace of all the trax track libraries classes and methods.
Definition Collection.h:17
Type used for IDs in the trax library.
Definition IDType.h:43
Interface for enumerating the Jacks an object provides.
Definition Jack.h:177
virtual int CountJacks() const =0
Jack & GetJack(int idx)
Definition Jack.h:192
const Jack & GetJack(int idx) const
Definition Jack.h:197
A jack a plug can get connected with.
Definition Jack.h:83
virtual Plug * GetPlug() const noexcept=0
Gets a connected plug if any.
virtual IDType RefPlugID() const noexcept=0
virtual void Pulse() noexcept=0
This function gets called from the owner of a Jack on a certain event.
virtual void InsertAndAppend(Plug *pPlug) noexcept=0
Inserts the plug at this Jack. If a plug is already inserted this will be appended into pPlug's Jack.
virtual void InsertAtTail(Plug *pPlug)=0
Inserts the plug at this Jack if no plug is already inserted. Inserts it at the tail of this plug cha...
virtual const char * TypeName() const noexcept=0
virtual bool Plugged() const noexcept=0
Is a Plug already plugged into this jack?
virtual void Insert(Plug *pPlug) noexcept=0
Connects together a Plug with a Jack.
virtual void Clear() noexcept=0
Clear the Jack from any plug.
A Plug of some object can get plugged into a jack of some object, specific to a certain event.
Definition Plug.h:57