PriorityEncoder Class
(Automation::PriorityEncoder)Header: | #include <PriorityEncoder.h> |
Inherits: | CDPOperator<T> |
Public Functions
PriorityEncoder(const CDPPropertyBase &in) |
Reimplemented Public Functions
virtual void | Configure(XMLPrimitive *operatorXML) override |
virtual void | Create(const char *shortName, CDPBaseObject *pParent) override |
virtual void | FillNodeChildren(CDP::StudioAPI::NodeStream &stream) const override |
virtual unsigned int | Process() override |
- 18 public functions inherited from CDPOperator
- 17 public functions inherited from CDPOperatorBase
- 46 public functions inherited from CDPBaseObject
- 26 public functions inherited from CDP::StudioAPI::CDPNode
- 22 public functions inherited from CDP::StudioAPI::ICDPNode
Additional Inherited Members
- 1 public variable inherited from CDPOperatorBase
- 1 static public member inherited from CDPBaseObject
- 1 protected function inherited from CDP::StudioAPI::CDPNode
- 8 protected variables inherited from CDPOperator
- 5 protected variables inherited from CDPOperatorBase
- 11 protected variables inherited from CDPBaseObject
Detailed Description
The PriorityEncoder
PriorityEncoder is an operator that encodes the highest valued input's index as an output Index value. It implements the Priority encoder algorithm but also extends this for values. https://en.wikipedia.org/wiki/Priority_encoder
Arguments
Name | Description |
---|---|
Index | Index of the first occurrence of input argument with the highest value in Priority model and lowest value in InversePriority mode. When IgnoreZeroValues is set the encoder will not consider 0 at inputs as a value. The Index value for the first input argument is '0'. When none of the inputs are high, the Index value defaults to '0'. |
Actual Processing Code of the PriorityEncoder
unsigned int PriorityEncoder<T>::Process() { auto selected = 0u; bool priority = m_mode == "Priority"; T indexedValue = priority?std::numeric_limits<T>::lowest():std::numeric_limits<T>::max(); for (auto i=0u; i < m_arguments.size(); i++) if ((!m_ignoreZeroValues || *m_arguments[i]!=static_cast<T>(0)) && m_arguments[i] != m_index) { if (priority && *m_arguments[i] > indexedValue) { selected = i - 1; indexedValue = static_cast<T>(*m_arguments[i]); } else if (!priority && *m_arguments[i] < indexedValue) { selected = i - 1; indexedValue = static_cast<T>(*m_arguments[i]); } } *m_index = selected; return STATUS_OK; }
See also Argument.
Member Function Documentation
PriorityEncoder::PriorityEncoder(const CDPPropertyBase &in)
Default constructs an instance of PriorityEncoder.
[override virtual]
void PriorityEncoder::Configure(XMLPrimitive *operatorXML)
[override virtual]
void PriorityEncoder::Create(const char *shortName, CDPBaseObject *pParent)
Reimplemented from CDPBaseObject::Create().
[override virtual]
void PriorityEncoder::FillNodeChildren(CDP::StudioAPI::NodeStream &stream) const
Reimplemented from CDPNode::FillNodeChildren().
Exposes himself and Arguments to Studio
[override virtual]
unsigned int PriorityEncoder::Process()
Get started with CDP Studio today
Let us help you take your great ideas and turn them into the products your customer will love.