X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2Ffeatures%2FNCList.java;h=ae58a69768184cc87f02453eac2c02c6980d3dc8;hb=bb620cae1e4c44ae9efaf975c7bbbc63b0558db3;hp=afa31e897072099bd89cc821abeb85ae3ea277e6;hpb=452f34ba2e3d65c29390df2b9d3637c4444ecbe2;p=jalview.git
diff --git a/src/jalview/datamodel/features/NCList.java b/src/jalview/datamodel/features/NCList.java
index afa31e8..ae58a69 100644
--- a/src/jalview/datamodel/features/NCList.java
+++ b/src/jalview/datamodel/features/NCList.java
@@ -1,8 +1,30 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.datamodel.features;
+import jalview.datamodel.ContiguousI;
+import jalview.datamodel.Range;
+
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
/**
@@ -28,12 +50,6 @@ public class NCList
*/
private List> subranges;
- /*
- * a comparator to sort intervals by start position ascending, with
- * longer (enclosing) intervals preceding those they enclose
- */
- Comparator intervalSorter = new RangeComparator(true);
-
/**
* Constructor given a list of things that are each located on a contiguous
* interval. Note that the constructor may reorder the list.
@@ -61,18 +77,18 @@ public class NCList
* sort by start ascending so that contained intervals
* follow their containing interval
*/
- Collections.sort(ranges, intervalSorter);
+ Collections.sort(ranges, RangeComparator.BY_START_POSITION);
- List sublists = buildSubranges(ranges);
+ List sublists = buildSubranges(ranges);
/*
* convert each subrange to an NCNode consisting of a range and
* (possibly) its contained NCList
*/
- for (SubList sublist : sublists)
+ for (Range sublist : sublists)
{
- subranges.add(new NCNode(ranges.subList(sublist.startIndex,
- sublist.endIndex + 1)));
+ subranges.add(new NCNode(ranges.subList(sublist.start,
+ sublist.end + 1)));
}
size = ranges.size();
@@ -81,7 +97,7 @@ public class NCList
public NCList(T entry)
{
this();
- subranges.add(new NCNode(entry));
+ subranges.add(new NCNode<>(entry));
size = 1;
}
@@ -97,9 +113,9 @@ public class NCList
* @param ranges
* @return
*/
- protected List buildSubranges(List ranges)
+ protected List buildSubranges(List ranges)
{
- List sublists = new ArrayList();
+ List sublists = new ArrayList<>();
if (ranges.isEmpty())
{
@@ -120,13 +136,13 @@ public class NCList
* this interval is not contained in the preceding one
* close off the last sublist
*/
- sublists.add(new SubList(listStartIndex, i - 1));
+ sublists.add(new Range(listStartIndex, i - 1));
listStartIndex = i;
}
lastEndPos = nextEnd;
}
- sublists.add(new SubList(listStartIndex, ranges.size() - 1));
+ sublists.add(new Range(listStartIndex, ranges.size() - 1));
return sublists;
}
@@ -178,7 +194,7 @@ public class NCList
/*
* all subranges precede this one - add it on the end
*/
- subranges.add(new NCNode(entry));
+ subranges.add(new NCNode<>(entry));
return true;
}
@@ -200,7 +216,7 @@ public class NCList
/*
* new entry lies between subranges j-1 j
*/
- subranges.add(j, new NCNode(entry));
+ subranges.add(j, new NCNode<>(entry));
return true;
}
@@ -248,7 +264,7 @@ public class NCList
* entry spans two subranges but doesn't enclose any
* so just add it
*/
- subranges.add(j, new NCNode(entry));
+ subranges.add(j, new NCNode<>(entry));
return true;
}
}
@@ -269,7 +285,7 @@ public class NCList
}
else
{
- subranges.add(new NCNode(entry));
+ subranges.add(new NCNode<>(entry));
}
return true;
@@ -327,9 +343,9 @@ public class NCList
protected synchronized void addEnclosingRange(T entry, final int i,
final int j)
{
- NCList newNCList = new NCList();
+ NCList newNCList = new NCList<>();
newNCList.addNodes(subranges.subList(i, j + 1));
- NCNode newNode = new NCNode(entry, newNCList);
+ NCNode newNode = new NCNode<>(entry, newNCList);
for (int k = j; k >= i; k--)
{
subranges.remove(k);
@@ -358,7 +374,7 @@ public class NCList
*/
public List findOverlaps(long from, long to)
{
- List result = new ArrayList();
+ List result = new ArrayList<>();
findOverlaps(from, to, result);
@@ -412,8 +428,12 @@ public class NCList
*/
protected int findFirstOverlap(long from)
{
- // TODO binary search
- // for now quick cheat linear search
+ /*
+ * The NCList paper describes binary search for this step,
+ * but this not implemented here as (a) I haven't understood it yet
+ * and (b) it seems to imply complications for adding to an NCList
+ */
+
int i = 0;
if (subranges != null)
{
@@ -554,7 +574,7 @@ public class NCList
*/
public List getEntries()
{
- List result = new ArrayList();
+ List result = new ArrayList<>();
getEntries(result);
return result;
}
@@ -606,7 +626,7 @@ public class NCList
if (subRegions != null)
{
subranges.addAll(subRegions.subranges);
- Collections.sort(subranges, intervalSorter);
+ Collections.sort(subranges, RangeComparator.BY_START_POSITION);
}
size--;
return true;