Files
bed/include/internal/marks/marks.h
T
syedm bea8ff18c0 Add marks and regex addressing systems
- Hook up parser to buffer edits.
- Other minor fixes.
2026-08-22 15:01:48 +01:00

58 lines
1.2 KiB
C++

#pragma once
#include "pch.h"
namespace bed::internal::marks {
struct MarksEngine {
uint64_t marks[1 << UINT8_WIDTH]{UINT64_MAX};
MarksEngine() {
for (auto &m : marks)
m = UINT64_MAX;
}
uint64_t get(uint8_t m) {
return marks[m];
}
void set(uint8_t m, uint64_t line) {
marks[m] = line;
}
void insert(uint64_t start, uint64_t count) {
for (uint16_t i = 0; i <= UINT8_MAX; ++i) {
if (marks[i] == UINT64_MAX)
continue;
if (marks[i] >= start)
marks[i] += count;
}
}
void erase(uint64_t start, uint64_t count) {
for (uint16_t i = 0; i <= UINT8_MAX; ++i) {
if (marks[i] == UINT64_MAX)
continue;
if (marks[i] >= start) {
if (marks[i] < start + count)
marks[i] = UINT64_MAX;
else
marks[i] -= count;
}
}
}
void collapse(uint64_t start, uint64_t count) {
for (uint16_t i = 0; i <= UINT8_MAX; ++i) {
if (marks[i] == UINT64_MAX)
continue;
if (marks[i] >= start) {
if (marks[i] < start + count)
marks[i] = start;
else
marks[i] -= count;
}
}
}
};
} // namespace bed::internal::marks