A TextSegment can be stand-alone or part of a TextSegmentCollection{T}. If the segment is stored inside a TextSegmentCollection, its Offset and Length will be updated by that collection.
When the document changes, the offsets of all text segments in the TextSegmentCollection will be adjusted accordingly. Start offsets move like
If a document change causes a segment to be deleted completely, it will be reduced to length 0, but segments are never automatically removed from the collection. Segments with length 0 will never expand due to document changes, and they move as AfterInsertion
.
Thread-safety: a TextSegmentCollection that is connected to a TextDocument may only be used on that document's owner thread. A disconnected TextSegmentCollection is safe for concurrent reads, but concurrent access is not safe when there are writes. Keep in mind that reading the Offset properties of a text segment inside the collection is a read access on the collection; and setting an Offset property of a text segment is a write access on the collection.