/** * Get data segment currently at the given position. Anchors are never returned. * * @param position * a position. * @return the non-anchor segment at the given position. */ public AbstractDataSegment getSegmentAt(final int position) { return getSegmentAt(position, false); }
prefix = getSegmentAt(pos); suffix = prefix.split(pos);
/** * 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; } }
final AbstractDataSegment segAtStart = getSegmentAt(start); final AbstractDataSegment segAtEnd = getSegmentAt(end - 1, end > 1);
final DataSegment startSeg = getSegmentAt(i.getStart(), true); final DataSegment endSeg = getSegmentAt( (i.getStart() != i.getEnd()) ? i.getEnd() - 1 : i.getEnd(), true);