/** * Get an anchor at the specified position. Breaks up the segment at the given point if * necessary. If there already is an anchor, it is reused. * * @param pos * a position. * @return an anchor. */ public Anchor getAnchor(final int pos) { if (pos == 0) { return _first; } // Split up segment final AbstractDataSegment prefix = getSegmentAt(pos, true); if (prefix.isAnchor()) { return (Anchor) prefix; } else { final AbstractDataSegment suffix = prefix.split(pos); // Insert segment final AnchorSegment seg = new AnchorSegment(prefix, suffix); prefix._next = seg; suffix._prev = seg; // Drop useless segments dropSuperflourous(prefix); dropSuperflourous(suffix); return seg; } }
dropSuperflourous(prefix); dropSuperflourous(suffix);