|
|
@ -1411,6 +1411,23 @@ static ImVector<ImGuiStorage::Pair>::iterator LowerBound(ImVector<ImGuiStorage:: |
|
|
|
return first; |
|
|
|
} |
|
|
|
|
|
|
|
// For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
|
|
|
|
void ImGuiStorage::BuildSortByKey() |
|
|
|
{ |
|
|
|
struct StaticFunc |
|
|
|
{ |
|
|
|
static int PairCompareByID(const void* lhs, const void* rhs) |
|
|
|
{ |
|
|
|
// We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that.
|
|
|
|
if (((const Pair*)lhs)->key > ((const Pair*)rhs)->key) return +1; |
|
|
|
if (((const Pair*)lhs)->key < ((const Pair*)rhs)->key) return -1; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
}; |
|
|
|
if (Data.Size > 1) |
|
|
|
qsort(Data.Data, (size_t)Data.Size, sizeof(Pair), StaticFunc::PairCompareByID); |
|
|
|
} |
|
|
|
|
|
|
|
int ImGuiStorage::GetInt(ImGuiID key, int default_val) const |
|
|
|
{ |
|
|
|
ImVector<Pair>::iterator it = LowerBound(const_cast<ImVector<ImGuiStorage::Pair>&>(Data), key); |
|
|
|