Package org.jcsp.plugNplay.ints

# Class MultiplexInt

java.lang.Object
org.jcsp.plugNplay.ints.MultiplexInt

All Implemented Interfaces:
  `CSProcess`

public final class MultiplexInt extends Object implements CSProcess
Fair multiplexes its input integer stream array into one output stream (carrying source channel and data pairs).

## Process Diagram

## Description

`MultiplexInt` is a process to convert multiple streams of `int`s to a single stream in such a way that it can be `de-multiplexed` later. The protocol on the outgoing multiplexed stream consists of an `int`, that represents the channel identity of the multiplexed data, followed by the multiplexed data.

The ordering of the channels in the `in` array makes no difference to the functionality of this process -- the multiplexing services all channels fairly.

## Channel Protocols

Input Channels
in[] | int | All channels in this package carry integers.
Output Channels
out | int, int | An `out` message is an index followed by the multiplexed data.

## Example

The following example shows how to use `MultiplexInt` in a small program.

     import org.jcsp.lang.*;
     import org.jcsp.plugNplay.ints.*;

     public class MultiplexIntExample {

       public static void main (String[] argv) {

         final One2OneChannelInt[] a = Channel.one2oneIntArray (3);
         final One2OneChannelInt b = Channel.one2oneInt ();

         new Parallel (
           new CSProcess[] {
             new NumbersInt (a[0].out ()),
             new FibonacciInt (a[1].out ()),
             new SquaresInt (a[2].out ()),
             new MultiplexInt (Channel.getInputArray (a), b.out ()),
             new CSProcess () {
               public void run () {
                 String[] key = {"Numbers ",
                                 "            Fibonacci ",
                                 "                          Squares "};
                 while (true) {
                   System.out.print (key[b.in ().read ()]);   // print channel source
                   System.out.println (b.in ().read ());      // print multiplexed data
                 }
               }
             }
           }
         ).run ();

       }

     }

Author:
  P.H. Welch and P.D. Austin
See Also:
  - `DemultiplexInt`
  - `ParaplexInt`
  - `DeparaplexInt`
  - `PlexInt`

## Constructor Summary

Constructors
Constructor
Description
`MultiplexInt(AltingChannelInputInt[] in, ChannelOutputInt out)`
Construct a new MultiplexInt process with the input Channel in and the output Channels out.

## Method Summary

Modifier and Type
Method
Description
`void`
`run()`
The main body of this process.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### MultiplexInt

public MultiplexInt(AltingChannelInputInt[] in, ChannelOutputInt out)
Construct a new MultiplexInt process with the input Channel in and the output Channels out. The ordering of the Channels in the in array make no difference to the functionality of this process -- the multiplexing services all channels fairly.

Parameters:
  `in` - the input channels
  `out` - the output channel

## Method Details

### run

public void run()
The main body of this process.

Specified by:
  `run` in interface `CSProcess`