/// <summary> /// Method called when current segment is full, to allocate new /// segment. /// </summary> private void expand(int minNewSegmentSize) { // First, let's move current segment to segment list: if (_segments == null) { _segments = new Sharpen.AList<char[]>(); } char[] curr = _currentSegment; _hasSegments = true; _segments.Add(curr); _segmentSize += curr.Length; _currentSize = 0; int oldLen = curr.Length; // Let's grow segments by 50% minimum int newLen = oldLen + (oldLen >> 1); if (newLen < MIN_SEGMENT_LEN) { newLen = MIN_SEGMENT_LEN; } else { if (newLen > MAX_SEGMENT_LEN) { newLen = MAX_SEGMENT_LEN; } } _currentSegment = carr(newLen); }
public char[] finishCurrentSegment() { if (_segments == null) { _segments = new Sharpen.AList<char[]>(); } _hasSegments = true; _segments.Add(_currentSegment); int oldLen = _currentSegment.Length; _segmentSize += oldLen; _currentSize = 0; // Let's grow segments by 50% int newLen = oldLen + (oldLen >> 1); if (newLen < MIN_SEGMENT_LEN) { newLen = MIN_SEGMENT_LEN; } else { if (newLen > MAX_SEGMENT_LEN) { newLen = MAX_SEGMENT_LEN; } } char[] curr = carr(newLen); _currentSegment = curr; return curr; }