feat: page_insert implemented in page.c

This commit is contained in:
paulhorn
2026-06-27 11:27:20 +02:00
parent b49c55880c
commit 88a1d9875b
+22 -4
View File
@@ -79,10 +79,28 @@ page_free(Page * p)
int
page_insert(Page * p, const void * data, size_t len)
{
(void) p;
(void) data;
(void) len;
return -1; /* noch nicht implementiert */
PageHeader * h = header(p);
/* Wo endet der letzte Slot? */
size_t slots_end = sizeof(PageHeader) + ((h->num_slots + 1) * sizeof(Slot));
/* Passt das neue Tuple noch rein? */
if (h->free_space_offset - len < slots_end) return -1; /* Page voll */
/* Tuple-Daten von hinten schreiben */
h->free_space_offset -= (uint16_t) len;
memcpy(p->raw + h->free_space_offset, data, len);
/* Neuen Slot anlegen */
Slot * s = (Slot *) (p->raw + sizeof(PageHeader)) + h->num_slots;
s->offset = h->free_space_offset;
s->length = (uint16_t) len;
/* Slot-ID zurueckgeben, dann Counter erhoehen */
uint16_t slot_id = h->num_slots;
h->num_slots++;
return (int) slot_id;
}
void *