|
@@ -1366,25 +1366,27 @@ struct ImGuiTextFilter
|
|
|
int CountGrep;
|
|
|
};
|
|
|
|
|
|
-// Helper: Text buffer for logging/accumulating text
|
|
|
+// Helper: Growable text buffer for logging/accumulating text
|
|
|
+// (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder')
|
|
|
struct ImGuiTextBuffer
|
|
|
{
|
|
|
ImVector<char> Buf;
|
|
|
-
|
|
|
- ImGuiTextBuffer() { Buf.push_back(0); }
|
|
|
- inline char operator[](int i) { return Buf.Data[i]; }
|
|
|
- const char* begin() const { return &Buf.front(); }
|
|
|
- const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator
|
|
|
- int size() const { return Buf.Size - 1; }
|
|
|
- bool empty() { return Buf.Size <= 1; }
|
|
|
- void clear() { Buf.clear(); Buf.push_back(0); }
|
|
|
- void reserve(int capacity) { Buf.reserve(capacity); }
|
|
|
- const char* c_str() const { return Buf.Data; }
|
|
|
+ static char EmptyString[1];
|
|
|
+
|
|
|
+ ImGuiTextBuffer() { }
|
|
|
+ inline char operator[](int i) { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; }
|
|
|
+ const char* begin() const { return Buf.Data ? &Buf.front() : EmptyString; }
|
|
|
+ const char* end() const { return Buf.Data ? &Buf.back() : EmptyString; } // Buf is zero-terminated, so end() will point on the zero-terminator
|
|
|
+ int size() const { return Buf.Data ? Buf.Size - 1 : 0; }
|
|
|
+ bool empty() { return Buf.Size <= 1; }
|
|
|
+ void clear() { Buf.clear(); }
|
|
|
+ void reserve(int capacity) { Buf.reserve(capacity); }
|
|
|
+ const char* c_str() const { return Buf.Data ? Buf.Data : EmptyString; }
|
|
|
IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2);
|
|
|
IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
|
|
|
};
|
|
|
|
|
|
-// Helper: key->value storage
|
|
|
+// Helper: Key->Value storage
|
|
|
// Typically you don't have to worry about this since a storage is held within each Window.
|
|
|
// We use it to e.g. store collapse state for a tree (Int 0/1)
|
|
|
// This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame)
|