festring& festring::Append(char Char) { if(OwnsData && !REFS(Data) && Size < Reserved) Data[Size++] = Char; else SlowAppend(&Char, 1); return *this; }
festring& festring::Append(const char* CStr, sizetype N) { sizetype OldSize = Size; sizetype NewSize = OldSize + N; char* OldPtr = Data; if(OwnsData && OldPtr && !REFS(OldPtr) && NewSize <= Reserved) { memcpy(OldPtr + OldSize, CStr, N); Size = NewSize; } else SlowAppend(CStr, N); return *this; }
festring& festring::Append(cchar* CStr, sizetype N) { if(!N) return *this; sizetype OldSize = Size; sizetype NewSize = OldSize + N; if(OwnsData && !REFS(Data) && NewSize <= Reserved) { memcpy(Data + OldSize, CStr, N); Size = NewSize; } else SlowAppend(CStr, N); return *this; }
festring& festring::Append(cfestring& Str) { if(!Str.Size) return *this; sizetype N = Str.Size; sizetype OldSize = Size; sizetype NewSize = OldSize + N; char* OldPtr = Data; char* OtherPtr = Str.Data; if(OwnsData && !REFS(Data) && NewSize <= Reserved) { memcpy(Data + OldSize, Str.Data, N); Size = NewSize; } else SlowAppend(Str.Data, N); return *this; }
void festring::SlowAppend(char Char) { SlowAppend(&Char, 1); }