Cleanup / optimizations

This commit is contained in:
2026-02-12 01:01:52 +00:00
parent e9d164d769
commit c683754d49
8 changed files with 141 additions and 78 deletions

View File

@@ -6,7 +6,7 @@
#include "pch.h"
#include "syntax/trie.h"
#define MAX_LINES_LOOKBEHIND 80
#define MAX_LINES_LOOKAROUND 512
struct Highlight {
uint32_t fg{0xFFFFFF};

View File

@@ -59,15 +59,8 @@ struct LineMap {
}
void apply_edit(uint32_t start, int64_t delta) {
if (delta < 0) {
int64_t count = -delta;
for (int64_t i = 0; i < count; i++) {
auto key = resolve_line(start + i);
if (!key)
continue;
lines.erase(*key);
}
}
if (delta < 0)
batch_remove(start, -delta);
current_version++;
edit_log.push_back({start, delta});
}
@@ -79,6 +72,45 @@ private:
uint32_t current_version;
void batch_remove(uint32_t line, uint32_t count) {
std::vector<uint32_t> lines_t;
lines_t.reserve(count);
for (uint32_t i = 0; i < count; i++)
lines_t.push_back(line + i);
for (int64_t v = current_version; v >= 0; v--) {
for (auto &l : lines_t) {
if (l == UINT32_MAX)
continue;
LineKey key = {l, (uint32_t)v};
if (lines.find(key) != lines.end()) {
lines.erase(key);
l = UINT32_MAX;
}
}
bool all_removed = true;
const auto &edit = edit_log[v];
for (auto &l : lines_t) {
if (l == UINT32_MAX)
continue;
all_removed = false;
if (edit.delta > 0) {
if (l >= edit.start_line) {
if (l < edit.start_line + edit.delta)
l = UINT32_MAX;
else
l -= edit.delta;
}
} else {
if (l >= edit.start_line)
l -= edit.delta;
}
}
if (all_removed)
break;
}
return;
}
std::optional<LineKey> resolve_line(uint32_t line) {
uint32_t current_line = line;
for (int64_t v = current_version; v >= 0; v--) {