initPath (index, feedbackChannel);
Class type = feedbackChannel.getType (); if (type == Integer.TYPE) { feedbackChannel.pushInt (initPathInt (index)); } else {   ASSERT (false); }
    public void connectGraph ()    {        // make sure that I have the minimal elements to construct this loop        ASSERT (joiner);        ASSERT (splitter);        ASSERT (body);        // okay, initialize the body and figure out the type of data        // passed around this loop        body.setupOperator();        Channel bodyInput = body.getIOField ("streamInput");        Channel bodyOutput = body.getIOField ("streamOutput");        ASSERT (bodyInput);        ASSERT (bodyOutput);        ASSERT (bodyOutput.getType ().getName ().equals (bodyInput.getType ().getName ()));        // if I don't have a feedback path, just give myself an identity body        // and initialize whatever the feedback path is        if (loop == null) loop = new Identity (bodyOutput.getType ());        loop.setupOperator ();        Channel loopInput = loop.getIOField ("streamInput");        Channel loopOutput = loop.getIOField ("streamOutput");        ASSERT (loopInput);        ASSERT (loopOutput);        ASSERT (loopOutput.getType ().getName ().equals (loopInput.getType ().getName ()));        // create some extra Identities and give them to the split        // and the join so they have a Filter for every input/output        // they have to deal with        {            // the joiner:            Channel channelIn = null;            if (joiner.isInputUsed (0))            {                Filter joinerIn = new Identity (bodyInput.getType ());                joinerIn.setupOperator ();                joiner.add (joinerIn);                channelIn = joinerIn.getIOField ("streamInput");            } else {                joiner.add (null);            }            joiner.add (loop);            joiner.setupOperator ();            {                ChannelConnectFilter connect = new ChannelConnectFilter ();                Channel in = joiner.getIOField ("streamOutput", 0);                Channel out = body.getIOField ("streamInput");                connect.useChannels (in, out);            }            // the splitter:            Channel channelOut = null;            if (splitter.isOutputUsed (0))            {                Filter splitterOut = new Identity (bodyOutput.getType ());                splitterOut.setupOperator ();                splitter.add (splitterOut);                channelOut = splitterOut.getIOField ("streamOutput");            } else {                splitter.add (null);            }            splitter.add (loop);            splitter.setupOperator ();            {                ChannelConnectFilter connect = new ChannelConnectFilter ();                Channel in = body.getIOField ("streamOutput");                Channel out = splitter.getIOField ("streamInput", 0);                connect.useChannels (in, out);            }            // copy the input/output from the identities to the input/output            // fields of the feedback loop            streamInput = channelIn;            streamOutput = channelOut;        }        // now fill up the feedback path with precomputed data:        {            Channel feedbackChannel = loop.getIOField ("streamOutput");            for (int index = 0; index < delay; index++)            {                initPath (index, feedbackChannel);            }        }    }