Configuration

Input Ports

There are no input ports for this process.

Output Ports

Pipefile Usage

The following sections describe the blocks needed to use this process in a pipe file.

Pipefile block

# ================================================================
process <this-proc>
  :: collate
# ================================================================

Process connections

The following Input ports will need to be set

# There are no input port's for this process

The following Output ports will need to be set

# This process will produce the following output ports

Class Description

class collate_process : public sprokit::process

A process for collating input data from multiple input edges.

\process Collate incoming data into a single stream. A collation operation reads input from a set of input ports and serializes that data to a single output port. This collation process can handle multiple collation operations. Each set of collation ports is identified by a unique tag.

\iports

\iport{status/\portvar{tag}} The status of the result \portvar{tag}. \iport{coll/\portvar{tag}/\portvar{item}} A port to collate data for \portvar{tag} from. Data is collated from ports in ASCII-betical order.

\oports

\oport{res/\portvar{tag}} The collated result \portvar{tag}.

\reqs

\req Each input port \port{status/\portvar{tag}} must be connected. \req Each \portvar{tag} must have at least two inputs to collate. \req Each output port \port{res/\portvar{tag}} must be connected.

The status port is used to signal upstream status about the collate set. Only complete and flush packet types are handled. Regular data packets are ignored on that port.

This process automatically makes the input and output types for each tag the same based on the type of the port that is first connected.

process collate :: collate_process

# -- Connect collate set "input1"
# status port
connect foo.p1_stat  to  collate.status/input1

# actual data ports
connect foo_1.out       to  collate.coll/input1/A
connect foo_2.out       to  collate.coll/input1/B

connect collate.res/input1  to bar.input

# -- Connect collate set "input2"
# status port can feed multiple groups
connect foo.p1_stat  to  collate.status/input2

# actual data ports
connect foo_1.out       to  collate.coll/input2/A
connect foo_2.out       to  collate.coll/input2/B
connect foo_3.out       to  collate.coll/input2/C

connect collate.res/input2  to bar.other

Todo:

Add configuration to allow forcing a number of inputs for a result.

Add configuration to allow same number of sources for all results.

Note

Edges for a \portvar{tag} may only be connected after the \port{status/\portvar{tag}} is connected to. Before this connection happens, the other ports to not exist and will cause errors. In short: The first connection for any \portvar{tag} must be \port{status/\portvar{tag}}.

Note

It is not immediately apparent how the input ports become sorted in ASCII-betical order on “item” order.

class priv
class tag_info