Collectors
Collectors (CLXs) are one the most frequently used CDL objects, and can be thought of as logical AND gates. Any number of connections can be made to the collecting face (shown on left), and when all of the events have arrived, a single compound event is provided to the consuming object, which is connected to the providing face (shown on right). Collections are nestable in the sense that compound events can themselves be collected. In random mode, events are simultaneously requested and collected in arrival order; in sequential mode, events are collected in the direction indicated by the collection face indicator. Sequential collection is generally adopted for arbitrated stores that have blocking exclusion; this provides a means of avoiding deadly embraces. Compound events can be split back into their constituent parts by splitter objects (see below). See Collectors.
Competers
Competers (CPXs) are one of CDLs less frequently used objects. Most of the time multiple consumers share events that emanate from a single provider but occasionally the opposite is required and the application logic specifically requires that the consumers compete (farming out tasks to balance load etc). Each connected consumer competes for each event provided to the competer on a first come first served basis. Distributors (see DBX below) can be thought of as the opposite of competers in that they ensure that all consumed events are shared by all connectors. In most cases competers are actually gratuitous because 'competing' is the default behavior for most objects that are not explicitly distributed. See Competers.
Distributors
Distributors (DBXs) are another frequently used CDL object and can be thought of as broadcasting each consumed event, to each connected consumer. The consumed event could be an atomic or compound event and remains open until the last consumer has indicated completion by closing. This provides CDL with an equivalent of automatic data and enables compose-able thread-safe communication by reference. See Distributors.
Demultiplexors
Demultiplexors (DMXs) are used to de-multiplex events that are provided by multiplexors (see MPX below). Note that multiplexed events can be passed through any arbitrary object tree (collected, split, distributed etc) and then de-multiplexed. This maintains the compose-ability of CDL circuitry. See Demultiplexors.
Multiplexors
Multiplexors (MPXs) can be thought of as logical OR gates, and any event retrieved by the consuming face (shown on left), is immediately delivered to the providing face (shown on right). As with all consuming objects, consumed events can be atomic or compounded. Multiplexors are frequently used as means of serializing parallel event streams or as an equivalents to 'WaitForMultipleObjects' or 'Select' functions. See Multiplexors.
Reducers
Reducers (RDXs) provide a means of selecting one in every N consumed events for delivery to their providing faces; all intermediary events are discarded. The period and phase of event delivery is configurable. These objects are generally associated with intrinsically concurrent applications. See Reducers.
Splitters
Splitters (SPXs) are used to split compound events that are provided by collectors (see CLX above). Note that compound events can be passed through any arbitrary object tree (re-collected, multiplexed, distributed etc) and then split. This maintains the compose-ability of CDL circuitry. See Splitters.