]> git.eshelyaron.com Git - emacs.git/commitdiff
(update_interval): New function.
authorRichard M. Stallman <rms@gnu.org>
Tue, 15 Apr 1997 04:45:26 +0000 (04:45 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 15 Apr 1997 04:45:26 +0000 (04:45 +0000)
src/intervals.c

index cff718d1f8e1b48c86bba2cffac6eaf50b351b43..744128b84dca8b43cad12663d4c215415dbee01a 100644 (file)
@@ -670,6 +670,45 @@ previous_interval (interval)
 
   return NULL_INTERVAL;
 }
+
+/* Find the interval containing POS given some non-NULL INTERVAL
+   in the same tree. */
+INTERVAL
+update_interval (i, pos)
+     register INTERVAL i;
+     int pos;
+{
+  if (NULL_INTERVAL_P (i))
+    return NULL_INTERVAL;
+
+  while (1) 
+    {
+      if (pos < i->position) 
+       {
+         /* Move left. */
+         if (pos >= i->position - TOTAL_LENGTH (i->left))
+           i = i->left;                /* Move to the left child */
+         else if (NULL_PARENT (i)) 
+           error ("Point before start of properties");
+         else  i = i->parent;
+         continue;
+       }
+      else if (pos >= INTERVAL_LAST_POS (i))
+       {
+         /* Move right. */
+         if (pos < INTERVAL_LAST_POS (i) + TOTAL_LENGTH (i->right))
+           i = i->right;               /* Move to the right child */
+         else if (NULL_PARENT (i)) 
+           error ("Point after end of properties");
+         else 
+           i = i->parent;
+         continue;
+       }
+      else 
+       return i;
+    }
+}
+
 \f
 #if 0
 /* Traverse a path down the interval tree TREE to the interval