| Index: tools/immic/lib/src/resources/java/immi/ListPatch.java
 | 
| diff --git a/tools/immic/lib/src/resources/java/immi/ListPatch.java b/tools/immic/lib/src/resources/java/immi/ListPatch.java
 | 
| deleted file mode 100644
 | 
| index 67504a0eb73cf6eab0f1ec40bdbba185ed4a17b4..0000000000000000000000000000000000000000
 | 
| --- a/tools/immic/lib/src/resources/java/immi/ListPatch.java
 | 
| +++ /dev/null
 | 
| @@ -1,214 +0,0 @@
 | 
| -// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file
 | 
| -// for details. All rights reserved. Use of this source code is governed by a
 | 
| -// BSD-style license that can be found in the LICENSE.md file.
 | 
| -
 | 
| -// Generated file. Do not edit.
 | 
| -
 | 
| -package immi;
 | 
| -
 | 
| -import java.util.ArrayList;
 | 
| -import java.util.Collections;
 | 
| -import java.util.List;
 | 
| -
 | 
| -import dartino.ListPatchData;
 | 
| -import dartino.ListRegionData;
 | 
| -import dartino.ListRegionDataList;
 | 
| -import dartino.NodeDataList;
 | 
| -import dartino.NodePatchDataList;
 | 
| -
 | 
| -public final class ListPatch<N extends Node> implements Patch {
 | 
| -
 | 
| -  // Public interface.
 | 
| -
 | 
| -  @Override
 | 
| -  public boolean hasChanged() { return changed; }
 | 
| -
 | 
| -  public List<N> getCurrent() { return current; }
 | 
| -  public List<N> getPrevious() { return previous; }
 | 
| -
 | 
| -  public List<RegionPatch> getRegions() { return regions; }
 | 
| -
 | 
| -  public static abstract class RegionPatch {
 | 
| -    public int getIndex() { return index; }
 | 
| -    public abstract int getCount();
 | 
| -    public boolean isRemove() { return false; }
 | 
| -    public boolean isInsert() { return false; }
 | 
| -    public boolean isUpdate() { return false; }
 | 
| -
 | 
| -    RegionPatch(int index) {
 | 
| -      this.index = index;
 | 
| -    }
 | 
| -
 | 
| -    static RegionPatch fromData(
 | 
| -        ListRegionData data,
 | 
| -        Type type,
 | 
| -        List<Node> previous,
 | 
| -        ImmiRoot root) {
 | 
| -      if (data.isRemove()) return new RemovePatch(data);
 | 
| -      if (data.isInsert()) return new InsertPatch(data, type, root);
 | 
| -      assert data.isUpdate();
 | 
| -      return new UpdatePatch(data, type, previous, root);
 | 
| -    }
 | 
| -
 | 
| -    // Returns the change in size resulting from this region patch.
 | 
| -    abstract int delta();
 | 
| -
 | 
| -    // Applies a region patch to the output list and returns the index increment
 | 
| -    // of the input list.
 | 
| -    abstract int apply(List<Node> output);
 | 
| -
 | 
| -    private int index;
 | 
| -  }
 | 
| -
 | 
| -  public static class RemovePatch extends RegionPatch {
 | 
| -    @Override public int getCount() { return count; }
 | 
| -    @Override public boolean isRemove() { return false; }
 | 
| -
 | 
| -    int delta() { return -count; }
 | 
| -
 | 
| -    int apply(List<Node> output) { return count; }
 | 
| -
 | 
| -    private RemovePatch(ListRegionData data) {
 | 
| -      super(data.getIndex());
 | 
| -      count = data.getRemove();
 | 
| -    }
 | 
| -
 | 
| -    private int count;
 | 
| -  }
 | 
| -
 | 
| -  public static class InsertPatch extends RegionPatch {
 | 
| -    @Override public int getCount() { return nodes.size(); }
 | 
| -    @Override public boolean isInsert() { return true; }
 | 
| -
 | 
| -    public List<Node> getNodes() { return nodes; }
 | 
| -
 | 
| -    int delta() { return nodes.size(); }
 | 
| -
 | 
| -    int apply(List<Node> output) {
 | 
| -      output.addAll(nodes);
 | 
| -      return 0;
 | 
| -    }
 | 
| -
 | 
| -    private InsertPatch(ListRegionData data, Type type, ImmiRoot root) {
 | 
| -      super(data.getIndex());
 | 
| -      NodeDataList insertData = data.getInsert();
 | 
| -      int length = insertData.size();
 | 
| -      List<Node> mutableNodes = new ArrayList<Node>(length);
 | 
| -      if (type == Type.ANY_NODE) {
 | 
| -        for (int i = 0; i < length; ++i) {
 | 
| -          mutableNodes.add(new AnyNode(insertData.get(i), root));
 | 
| -        }
 | 
| -      } else {
 | 
| -        assert type == Type.SPECIFIC_NODE;
 | 
| -        for (int i = 0; i < length; ++i) {
 | 
| -          mutableNodes.add(AnyNode.fromData(insertData.get(i), root));
 | 
| -        }
 | 
| -      }
 | 
| -      nodes = Collections.unmodifiableList(mutableNodes);
 | 
| -    }
 | 
| -
 | 
| -    private List<Node> nodes;
 | 
| -  }
 | 
| -
 | 
| -  public static class UpdatePatch extends RegionPatch {
 | 
| -    @Override public int getCount() { return updates.size(); }
 | 
| -    @Override public boolean isUpdate() { return true; }
 | 
| -
 | 
| -    public List<NodePatch> getUpdates() { return updates; }
 | 
| -
 | 
| -    int delta() { return 0; }
 | 
| -
 | 
| -    int apply(List<Node> output) {
 | 
| -      int length = updates.size();
 | 
| -      for (int i = 0; i < length; ++i) {
 | 
| -        output.add(updates.get(i).getCurrent());
 | 
| -      }
 | 
| -      return length;
 | 
| -    }
 | 
| -
 | 
| -    private UpdatePatch(
 | 
| -        ListRegionData data,
 | 
| -        Type type,
 | 
| -        List<Node> previous,
 | 
| -        ImmiRoot root) {
 | 
| -      super(data.getIndex());
 | 
| -      NodePatchDataList updateData = data.getUpdate();
 | 
| -      int length = updateData.size();
 | 
| -      List<NodePatch> mutableUpdates = new ArrayList<NodePatch>(length);
 | 
| -      if (type == Type.ANY_NODE) {
 | 
| -        for (int i = 0; i < length; ++i) {
 | 
| -          mutableUpdates.add(new AnyNodePatch(
 | 
| -              updateData.get(i), (AnyNode)previous.get(getIndex() + i), root));
 | 
| -        }
 | 
| -      } else {
 | 
| -        assert type == Type.SPECIFIC_NODE;
 | 
| -        for (int i = 0; i < length; ++i) {
 | 
| -          mutableUpdates.add(AnyNodePatch.fromData(
 | 
| -              updateData.get(i), previous.get(getIndex() + i), root));
 | 
| -        }
 | 
| -      }
 | 
| -      updates = Collections.unmodifiableList(mutableUpdates);
 | 
| -    }
 | 
| -
 | 
| -    private List<NodePatch> updates;
 | 
| -  }
 | 
| -
 | 
| -  // Package private implementation.
 | 
| -
 | 
| -  ListPatch(List<N> previous) {
 | 
| -    changed = false;
 | 
| -    this.previous = previous;
 | 
| -    current = previous;
 | 
| -  }
 | 
| -
 | 
| -  ListPatch(ListPatchData data, List<N> previous, ImmiRoot root) {
 | 
| -    changed = true;
 | 
| -    this.previous = previous;
 | 
| -    Type type = Type.fromInt(data.getType());
 | 
| -    ListRegionDataList regions = data.getRegions();
 | 
| -    List<RegionPatch> patches = new ArrayList<RegionPatch>(regions.size());
 | 
| -    for (int i = 0; i < regions.size(); ++i) {
 | 
| -      // TODO(zerny): Separate ListPatch<AnyNode> from ListPatch<Node> and avoid
 | 
| -      // dynamic casts.
 | 
| -      patches.add(RegionPatch.fromData(
 | 
| -          regions.get(i), type, (List<Node>)previous, root));
 | 
| -    }
 | 
| -    this.regions = patches;
 | 
| -    this.current = applyWith(previous);
 | 
| -  }
 | 
| -
 | 
| -  List<N> applyWith(List<N> previous) {
 | 
| -    int newSize = previous.size();
 | 
| -    for (int i = 0; i < regions.size(); ++i) {
 | 
| -      newSize += regions.get(i).delta();
 | 
| -    }
 | 
| -    int sourceIndex = 0;
 | 
| -    List<N> newArray = new ArrayList<N>(newSize);
 | 
| -    for (int i = 0; i < regions.size(); ++i) {
 | 
| -      RegionPatch patch = regions.get(i);
 | 
| -      while (sourceIndex < patch.index) {
 | 
| -        newArray.add(previous.get(sourceIndex++));
 | 
| -      }
 | 
| -      // TODO(zerny): Separate ListPatch<AnyNode> from ListPatch<Node> and avoid
 | 
| -      // dynamic casts.
 | 
| -      sourceIndex += patch.apply((List<Node>)newArray);
 | 
| -    }
 | 
| -    while (sourceIndex < previous.size()) {
 | 
| -      newArray.add(previous.get(sourceIndex++));
 | 
| -    }
 | 
| -    return Collections.unmodifiableList(newArray);
 | 
| -  }
 | 
| -
 | 
| -  private enum Type {
 | 
| -    ANY_NODE, SPECIFIC_NODE;
 | 
| -
 | 
| -    public static Type fromInt(int tag) {
 | 
| -      return tag == 0 ? ANY_NODE : SPECIFIC_NODE;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  private boolean changed;
 | 
| -  private List<N> previous;
 | 
| -  private List<N> current;
 | 
| -  private List<RegionPatch> regions;
 | 
| -}
 | 
| 
 |