Editing infobar applies changes to buffer

This commit is contained in:
Krzosa Karol
2024-07-31 07:32:42 +02:00
parent 2ab1917b73
commit be99b0aabb
9 changed files with 164 additions and 38 deletions

View File

@@ -700,7 +700,6 @@ struct CircularArray {
T *data;
int16_t cap;
int16_t write;
int16_t buffer_is_full;
};
template <class T>
@@ -718,25 +717,23 @@ void Add(CircularArray<T> *arr, T item) {
arr->cap = 128;
arr->data = AllocArray(arr->allocator, T, arr->cap);
}
int idx = arr->write;
arr->write = (arr->write + 1) % arr->cap;
if (arr->write == 0) arr->buffer_is_full = 1;
arr->data[idx] = item;
int16_t i = arr->write;
arr->write = (arr->write + 1) % arr->cap;
arr->data[i] = item;
}
static int GetCircularIndex(int cap, int idx) {
int result = idx % cap;
if (result < 0) result = cap + result;
return result;
}
template <class T>
T Get(CircularArray<T> *arr, int idx, T default_value) {
if (idx >= arr->cap) return default_value;
int i = arr->write - 1 - idx;
if (i < 0 && arr->buffer_is_full) {
i = arr->cap + i;
}
if (i >= 0 && i < arr->cap) {
return arr->data[i];
} else {
return default_value;
}
int idx = circ->write - 1 - i;
idx = GetCircularIndex(circ->size, idx);
int result = circ->data[idx];
return result;
}
struct UTF32Result {