public void storeState(){
  if (intervalsKnown) {
    if (storedIntervals == null) {
      storedIntervals=new double[intervals.length];
    }
    if (storedLineageCounts == null) {
      storedLineageCounts=new int[lineageCounts.length];
    }
    if (superStore) {
      if (storedIndices == null) {
        storedIndices=new int[indices.length];
      }
      if (storedTimes == null) {
        storedTimes=new double[times.length];
      }
    }
    System.arraycopy(intervals,0,storedIntervals,0,intervals.length);
    System.arraycopy(lineageCounts,0,storedLineageCounts,0,lineageCounts.length);
    if (superStore) {
      System.arraycopy(indices,0,storedIndices,0,indices.length);
      System.arraycopy(times,0,storedTimes,0,times.length);
    }
  }
  storedIntervalsKnown=intervalsKnown;
}

public void storeState ( ) { if ( intervalsKnown ) { if ( storedIntervals == null ) { storedIntervals = new double [ intervals . length ] ; } if ( storedLineageCounts == null ) { storedLineageCounts = new int [ lineageCounts . length ] ; } if ( superStore ) { if ( storedIndices == null ) { storedIndices = new int [ indices . length ] ; } if ( storedTimes == null ) { storedTimes = new double [ times . length ] ; } } System . arraycopy ( intervals , 0 , storedIntervals , 0 , intervals . length ) ; System . arraycopy ( lineageCounts , 0 , storedLineageCounts , 0 , lineageCounts . length ) ; if ( superStore ) { System . arraycopy ( indices , 0 , storedIndices , 0 , indices . length ) ; System . arraycopy ( times , 0 , storedTimes , 0 , times . length ) ; } } storedIntervalsKnown = intervalsKnown ; }
extra functionality to store and restore values for caching
