Make append buffer contiguous and update iterators

This commit is contained in:
2026-08-06 19:39:59 +01:00
parent 5722731c6a
commit 189b9ab6ca
19 changed files with 463 additions and 506 deletions
+9
View File
@@ -0,0 +1,9 @@
#pragma once
#include "../shard.h"
#include "pch.h"
enum struct Direction : uint8_t {
Forward,
Backward
};
+7 -9
View File
@@ -1,22 +1,20 @@
#pragma once
#include "../shard.h"
#include "chunk.h"
#include "pch.h"
#include "petal.h"
struct LineIterator {
ChunkIterator it;
Direction dir;
PetalIterator it;
const char *chunk;
uint64_t len;
uint64_t offset = 0;
uint64_t chunk_offset = 0;
bool at_end = false;
Direction dir;
uint64_t current_offset = 0;
uint64_t last_line_offset = 0;
LineIterator(Shard *r, uint64_t start_line, Direction dir);
LineIterator(Shard *root, uint64_t line_num, Direction dir);
~LineIterator() = default;
bool next(std::string &line);
bool next(std::string *line);
uint64_t byte_offset();
};
@@ -1,30 +1,27 @@
#pragma once
#include "../shard.h"
#include "iter.h"
#include "pch.h"
enum struct Direction : uint8_t {
Forward,
Backward
};
struct ChunkIterator {
struct PetalIterator {
Direction dir;
Shard *root = nullptr;
std::vector<Shard *> stack;
Petal *petal = nullptr;
uint64_t petal_offset = 0;
uint64_t global_offset = 0;
uint64_t last_offset = 0;
uint64_t petal_offset = 0;
uint64_t global_line = 0;
bool at_end = false;
ChunkIterator(Shard *r, Direction dir);
~ChunkIterator();
PetalIterator(Shard *r, Direction dir);
~PetalIterator() = default;
void seek_offset(uint64_t offset);
void seek_line(uint64_t offset);
bool next(const char **data, uint64_t *out_len);
uint64_t byte_offset();
uint64_t line_offset();
private:
Petal *_next(uint64_t *offset);
};