]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/dimension-cache.cc
release: 1.3.28
[lilypond.git] / lily / dimension-cache.cc
index 005499624b6a1b3f0d743dec272a63ec5bc48526..69ff282b0a929ec1f3bb13a89795bc16e600e8c8 100644 (file)
@@ -90,16 +90,16 @@ Dimension_cache::get_offset () const
 Dimension_cache *
 Dimension_cache::common_refpoint (Dimension_cache const* s) const
 {
-  Link_array<Dimension_cache> my_groups;
-  for (Dimension_cache const *c = this; c ; c = c->parent_l_)
-    my_groups.push ((Dimension_cache*)c);
-  
-  Dimension_cache const *common=0;
-  
-  for (Dimension_cache const * d = s; !common && d; d = d->parent_l_)
-    common = (Dimension_cache const*)my_groups.find_l (d);
-
-  return (Dimension_cache*) common;
+  /*
+    I don't like the quadratic aspect of this code. Maybe this should
+    be rewritten some time, but the largest chain of parents might be
+    10 high or so, so it shouldn't be a real issue. */
+  for (Dimension_cache const *c = this; c; c = c->parent_l_)
+    for (Dimension_cache const * d = s; d; d = d->parent_l_)
+      if (d == c)
+       return (Dimension_cache*)d;
+
+  return 0;
 }
 
 Interval