scroller work, everything improv
This commit is contained in:
@@ -367,6 +367,7 @@ fn r2f32_t r2f32_get_bottom(const r2f32_t *r, f32 value) { /* Y is down */
|
||||
}
|
||||
|
||||
|
||||
fn_inline r2f32_t r2f32_expand(r2f32_t rect, v2f32_t value) { return (r2f32_t){ v2f32_sub(rect.min, value), v2f32_add(rect.max, value) }; }
|
||||
fn_inline r2f32_t r2f32_shrink(r2f32_t rect, v2f32_t value) { return (r2f32_t){ v2f32_add(rect.min, value), v2f32_sub(rect.max, value) }; }
|
||||
fn_inline r2f32_t r2f32_shrinks(r2f32_t rect, f32 value) { return (r2f32_t){ v2f32_adds(rect.min, value), v2f32_subs(rect.max, value) }; }
|
||||
fn_inline v2f32_t r2f32_get_size(r2f32_t r) { return (v2f32_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
||||
@@ -390,6 +391,14 @@ fn v2f32_t v2f32_clamp(v2f32_t v, v2f32_t min, v2f32_t max) {
|
||||
v2f32_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
|
||||
return result;
|
||||
}
|
||||
|
||||
fn r2f32_t r2f32_fix(r2f32_t n) {
|
||||
r2f32_t result = {
|
||||
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
|
||||
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
fn r2f64_t r2f64_cut_left(r2f64_t *r, f64 value) {
|
||||
@@ -503,6 +512,7 @@ fn r2f64_t r2f64_get_bottom(const r2f64_t *r, f64 value) { /* Y is down */
|
||||
}
|
||||
|
||||
|
||||
fn_inline r2f64_t r2f64_expand(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_sub(rect.min, value), v2f64_add(rect.max, value) }; }
|
||||
fn_inline r2f64_t r2f64_shrink(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_add(rect.min, value), v2f64_sub(rect.max, value) }; }
|
||||
fn_inline r2f64_t r2f64_shrinks(r2f64_t rect, f64 value) { return (r2f64_t){ v2f64_adds(rect.min, value), v2f64_subs(rect.max, value) }; }
|
||||
fn_inline v2f64_t r2f64_get_size(r2f64_t r) { return (v2f64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
||||
@@ -526,6 +536,14 @@ fn v2f64_t v2f64_clamp(v2f64_t v, v2f64_t min, v2f64_t max) {
|
||||
v2f64_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
|
||||
return result;
|
||||
}
|
||||
|
||||
fn r2f64_t r2f64_fix(r2f64_t n) {
|
||||
r2f64_t result = {
|
||||
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
|
||||
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
fn r2i32_t r2i32_cut_left(r2i32_t *r, i32 value) {
|
||||
@@ -639,6 +657,7 @@ fn r2i32_t r2i32_get_bottom(const r2i32_t *r, i32 value) { /* Y is down */
|
||||
}
|
||||
|
||||
|
||||
fn_inline r2i32_t r2i32_expand(r2i32_t rect, v2i32_t value) { return (r2i32_t){ v2i32_sub(rect.min, value), v2i32_add(rect.max, value) }; }
|
||||
fn_inline r2i32_t r2i32_shrink(r2i32_t rect, v2i32_t value) { return (r2i32_t){ v2i32_add(rect.min, value), v2i32_sub(rect.max, value) }; }
|
||||
fn_inline r2i32_t r2i32_shrinks(r2i32_t rect, i32 value) { return (r2i32_t){ v2i32_adds(rect.min, value), v2i32_subs(rect.max, value) }; }
|
||||
fn_inline v2i32_t r2i32_get_size(r2i32_t r) { return (v2i32_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
||||
@@ -662,6 +681,14 @@ fn v2i32_t v2i32_clamp(v2i32_t v, v2i32_t min, v2i32_t max) {
|
||||
v2i32_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
|
||||
return result;
|
||||
}
|
||||
|
||||
fn r2i32_t r2i32_fix(r2i32_t n) {
|
||||
r2i32_t result = {
|
||||
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
|
||||
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
fn r2i64_t r2i64_cut_left(r2i64_t *r, i64 value) {
|
||||
@@ -775,6 +802,7 @@ fn r2i64_t r2i64_get_bottom(const r2i64_t *r, i64 value) { /* Y is down */
|
||||
}
|
||||
|
||||
|
||||
fn_inline r2i64_t r2i64_expand(r2i64_t rect, v2i64_t value) { return (r2i64_t){ v2i64_sub(rect.min, value), v2i64_add(rect.max, value) }; }
|
||||
fn_inline r2i64_t r2i64_shrink(r2i64_t rect, v2i64_t value) { return (r2i64_t){ v2i64_add(rect.min, value), v2i64_sub(rect.max, value) }; }
|
||||
fn_inline r2i64_t r2i64_shrinks(r2i64_t rect, i64 value) { return (r2i64_t){ v2i64_adds(rect.min, value), v2i64_subs(rect.max, value) }; }
|
||||
fn_inline v2i64_t r2i64_get_size(r2i64_t r) { return (v2i64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
||||
@@ -798,6 +826,14 @@ fn v2i64_t v2i64_clamp(v2i64_t v, v2i64_t min, v2i64_t max) {
|
||||
v2i64_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
|
||||
return result;
|
||||
}
|
||||
|
||||
fn r2i64_t r2i64_fix(r2i64_t n) {
|
||||
r2i64_t result = {
|
||||
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
|
||||
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
fn_inline v2f64_t v2f32_to_v2f64(v2f32_t v) { return (v2f64_t){ (f64)v.x, (f64)v.y }; }
|
||||
fn_inline v3f64_t v3f32_to_v3f64(v3f32_t v) { return (v3f64_t){ (f64)v.x, (f64)v.y, (f64)v.z }; }
|
||||
|
||||
@@ -315,6 +315,7 @@ fn r2f64_t r2f64_get_bottom(const r2f64_t *r, f64 value) { /* Y is down */
|
||||
}
|
||||
|
||||
|
||||
fn_inline r2f64_t r2f64_expand(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_sub(rect.min, value), v2f64_add(rect.max, value) }; }
|
||||
fn_inline r2f64_t r2f64_shrink(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_add(rect.min, value), v2f64_sub(rect.max, value) }; }
|
||||
fn_inline r2f64_t r2f64_shrinks(r2f64_t rect, f64 value) { return (r2f64_t){ v2f64_adds(rect.min, value), v2f64_subs(rect.max, value) }; }
|
||||
fn_inline v2f64_t r2f64_get_size(r2f64_t r) { return (v2f64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
||||
@@ -338,6 +339,14 @@ fn v2f64_t v2f64_clamp(v2f64_t v, v2f64_t min, v2f64_t max) {
|
||||
v2f64_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
|
||||
return result;
|
||||
}
|
||||
|
||||
fn r2f64_t r2f64_fix(r2f64_t n) {
|
||||
r2f64_t result = {
|
||||
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
|
||||
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
|
||||
};
|
||||
return result;
|
||||
}
|
||||
"""
|
||||
s = s.replace("f64", basic_type)
|
||||
print(s)
|
||||
|
||||
@@ -486,4 +486,48 @@ fn f64 f64_from_s8(s8_t string) {
|
||||
f64 result = os_parse_float(num_string.str);
|
||||
ma_end_scratch(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
gb_read_only i64 fuzzy_closer_word_begin = 5;
|
||||
gb_read_only i64 fuzzy_consecutive_multiplier = 3;
|
||||
fn i64 fuzzy_rate_string(s8_t string, s8_t with) {
|
||||
if (with.len == 0) return 0;
|
||||
|
||||
i64 points = 0;
|
||||
i64 consecutive = 0;
|
||||
i64 with_i = 0;
|
||||
for (i64 i = 0; i < string.len; i++) {
|
||||
if (string.str[i] == with.str[with_i]) {
|
||||
i64 closer_begin = CLAMP_BOT((i64)0, fuzzy_closer_word_begin - i);
|
||||
points += closer_begin;
|
||||
consecutive++;
|
||||
with_i += 1;
|
||||
} else {
|
||||
points += consecutive * fuzzy_consecutive_multiplier;
|
||||
consecutive = 0;
|
||||
with_i = 0;
|
||||
}
|
||||
|
||||
if (with_i >= with.len) with_i = 0;
|
||||
}
|
||||
points += consecutive * fuzzy_consecutive_multiplier;
|
||||
return points;
|
||||
}
|
||||
|
||||
fn fuzzy_pair_t *fuzzy_rate_array(ma_arena_t *arena, s8_t needle, s8_t *array, i32 len) {
|
||||
fuzzy_pair_t *pairs = ma_push_array(arena, fuzzy_pair_t, len);
|
||||
for (i32 i = 0; i < len; i += 1) {
|
||||
pairs[i].rating = fuzzy_rate_string(array[i], needle);
|
||||
pairs[i].index = i;
|
||||
}
|
||||
|
||||
for (i32 i = 0; i < len - 1; i++) {
|
||||
for (i32 j = 0; j < len - 1; j++) {
|
||||
if (pairs[j].rating < pairs[j + 1].rating) {
|
||||
SWAP(fuzzy_pair_t, pairs[j], pairs[j + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pairs;
|
||||
}
|
||||
@@ -175,3 +175,9 @@ void *sbin_read_data(stream_t *stream, i64 size);
|
||||
va_start(args1, str); \
|
||||
i32 len = stbsp_vsnprintf(buff, sizeof(buff), str, args1); \
|
||||
va_end(args1)
|
||||
|
||||
typedef struct fuzzy_pair_t fuzzy_pair_t;
|
||||
struct fuzzy_pair_t {
|
||||
i64 index;
|
||||
i64 rating;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user