50 if (segment >= cord.m_NumSegments) {
55 if (index >= cord.m_Segments[segment].length) {
60 if (segment >= cord.m_NumSegments) {
61 segment = cord.m_NumSegments;
73 index = cord.m_Segments[segment].length - 1;
79 char operator*()
const {
80 return cord.m_Segments[segment].ptr[index];
84 return segment == other.segment && index == other.index;
88 return !(*
this == other);
94 segment = owner.m_NumSegments;
114 if (segment > cord.m_NumSegments) {
115 segment = cord.m_NumSegments;
129 const char* ptr()
const {
130 return cord.m_Segments[segment].ptr;
133 size_t length()
const {
134 return cord.m_Segments[segment].length;
138 return segment == other.segment;
142 return !(*
this == other);
148 segment = owner.m_NumSegments;
169 m_Length = other.m_Length;
170 m_NumSegments = other.m_NumSegments;
171 pedigree_std::copy(m_Segments, other.m_Segments, N);
179 size_t length()
const {
183 char operator[](
size_t index)
const {
185 for (
size_t i = 0; i < m_NumSegments; ++i) {
186 if ((index >= offset) && (index < (offset + m_Segments[i].length))) {
187 return m_Segments[i].ptr[index - offset];
190 offset += m_Segments[i].length;
197 char* buf =
new char[m_Length + 1];
199 for (
size_t i = 0; i < m_NumSegments; ++i) {
200 MemoryCopy(buf + offset, m_Segments[i].ptr, m_Segments[i].length);
201 offset += m_Segments[i].length;
206 String result(buf, m_Length);
211 void append(
const char* s,
size_t len = 0) {
212 assert(m_NumSegments < N);
215 len = StringLength(s);
221 m_Segments[m_NumSegments++] = CordSegment(s, len);
225 CordIterator begin()
const {
226 return CordIterator(*
this);
229 CordIterator end()
const {
230 return CordIterator(*
this,
true);
233 CordSegmentIterator segbegin()
const {
234 return CordSegmentIterator(*
this);
237 CordSegmentIterator segend()
const {
238 return CordSegmentIterator(*
this,
true);
244 CordSegment(
const char* s,
size_t len) : ptr(s), length(len) {}
246 const char* ptr =
nullptr;
252 size_t m_NumSegments = 0;
bool operator==(const Iterator< originalT, Struct, FunctionPrev, FunctionNext, T1 > &x1, const Iterator< originalT, Struct, FunctionPrev, FunctionNext, T2 > &x2)