JAL-1191 cache isA (great-)grandparents as well for fast isA testing
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 12 Jan 2016 08:58:01 +0000 (08:58 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 12 Jan 2016 08:58:01 +0000 (08:58 +0000)
src/jalview/io/gff/SequenceOntology.java

index 7f714ae..36ffaf8 100644 (file)
@@ -40,10 +40,16 @@ public class SequenceOntology
 
   /*
    * Map where key is a Term and value is a (possibly empty) list of 
-   * all Terms to which the key has a direct 'isA' relationship
+   * all Terms to which the key has an 'isA' relationship, either
+   * directly or indirectly (A isA B isA C)
    */
   private Map<Term, List<Term>> termIsA;
 
+  /**
+   * Returns singleton instance
+   * 
+   * @return
+   */
   public synchronized static SequenceOntology getInstance()
   {
     if (instance == null)
@@ -296,6 +302,14 @@ public class SequenceOntology
     {
       if (termIsA(parent, parentTerm))
       {
+        /*
+         * add (great-)grandparents to parents list as they are discovered,
+         * for faster lookup next time
+         */
+        if (!parents.contains(parentTerm))
+        {
+          parents.add(parentTerm);
+        }
         return true;
       }
     }