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