PhasingSchedule childPhase = getChildNextPhase(child);
PhasingSchedule childPhase = getChildPhase(child, nPhase);
        public PhasingSchedule createPhase(            int nSplitPhases,            int childrenPhases[],            int nJoinPhases,            int postSplitBuffers[],            int preJoinBuffers[])        {            // first advance all the appropriate buffers:            {                // first the splitter                for (int splitPhase = 0;                    splitPhase < nSplitPhases;                    splitPhase++)                {                    // get the appropriate flow                    SplitFlow flow = getSplitSteadyPhaseFlow(splitPhase);                    // update the buffers (add data)                    int nChild;                    for (nChild = 0; nChild < getNumChildren(); nChild++)                    {                        postSplitBuffers[nChild] += flow.getPushWeight(nChild);                    }                }                // now the children                for (int nChild = 0; nChild < getNumChildren(); nChild++)                {                    StreamInterface child = getHierarchicalChild(nChild);                    for (int nPhase = 0;                        nPhase < childrenPhases[nChild];                        nPhase++)                    {                        // get the phase and check that I've enough                         // peek data in the buffer to run it                        PhasingSchedule childPhase = getChildNextPhase(child);                        ASSERT(                            postSplitBuffers[nChild]                                >= childPhase.getOverallPeek());                        // update the buffers                        postSplitBuffers[nChild] -= childPhase.getOverallPop();                        preJoinBuffers[nChild] += childPhase.getOverallPush();                    }                }                // and finally run the joiner                for (int joinPhase = 0; joinPhase < nJoinPhases; joinPhase++)                {                    // get the appropriate flow                    JoinFlow flow = getJoinSteadyPhaseFlow(joinPhase);                    // update the buffers (add data)                    int nChild;                    for (nChild = 0; nChild < getNumChildren(); nChild++)                    {                        preJoinBuffers[nChild] -= flow.getPopWeight(nChild);                        ASSERT(preJoinBuffers[nChild] >= 0);                    }                }            }            // and now create the phase            PhasingSchedule phase = new PhasingSchedule(sj);            // add the splitter, children and joiner phases to this phase                        {                phase.appendPhase(sj.getSplitterPhases(nSplitPhases));                for (int nChild = 0; nChild < getNumChildren(); nChild++)                {                    StreamInterface child = sj.getHierarchicalChild(nChild);                    phase.appendPhase(                        sj.getChildPhases(child, childrenPhases[nChild]));                }                phase.appendPhase(sj.getJoinerPhases(nJoinPhases));            }            return phase;        }