/** * Add distribution set 'newSet' to state s (which must exist). Distribution set is only actually * added if it does not already exists for state s. (Assuming 'allowDupes' flag is not enabled.) * Returns the index of the (existing or newly added) set. Returns -1 in case of error. */ public int addDistributionSet(int s, DistributionSet newSet) { ArrayList<DistributionSet> set; // Check state exists if (s >= numStates || s < 0) return -1; // Add distribution set (if new) set = trans.get(s); if (!allowDupes) { int i = set.indexOf(newSet); if (i != -1) return i; } set.add(newSet); // Update stats numDistrSets++; maxNumDistrSets = Math.max(maxNumDistrSets, set.size()); numDistrs += newSet.size(); maxNumDistrs = Math.max(maxNumDistrs, newSet.size()); for (Distribution distr : newSet) numTransitions += distr.size(); return set.size() - 1; }
@Override public void clearState(int i) { // Do nothing if state does not exist if (i >= numStates || i < 0) return; // Clear data structures and update stats List<DistributionSet> list = trans.get(i); numDistrSets -= list.size(); for (DistributionSet set : list) { numDistrs -= set.size(); for (Distribution distr : set) numTransitions -= distr.size(); } // TODO: recompute maxNumDistrSets // TODO: recompute maxNumDistrs // Remove all distribution sets trans.set(i, new ArrayList<DistributionSet>(0)); }