Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arena Loader

Een C23-demo voor persistente arena-opslag. De arena bewaart data in een caller-owned buffer en gebruikt relatieve offsets in plaats van absolute adressen. Daardoor kunnen boom- en lijststructuren na het laden op een ander RAM-adres direct opnieuw worden gebruikt.

Functionaliteit

  • Arena-allocatie met vaste capaciteit en 8-byte alignment.
  • CRC32-validatie van gebruikte data.
  • CRC32-validatie van de persistente header.
  • Schema-versionering bij het laden.
  • Typed arena-slots voor algemene applicatiedata.
  • Entity-demo met een catalogus als binaire zoekboom.
  • Inventaris als gelinkte lijst met cross-references naar catalogus-items.
  • CLI-logniveaus via argtable3.

Entity Model

EntityGameRoot is de persistente root van de demo. De root verwijst naar:

  • EntityItemDefinition: catalogus-items met left- en right-offsets.
  • EntityInventoryItem: inventaris-items met een offset naar hun definitie en een next-offset naar het volgende item.

Alle offsets zijn relatief aan Arena.buffer. Ze blijven daardoor geldig nadat de arena opnieuw is geladen op een ander geheugenadres. De API in include/entity.h valideert offsets voordat deze worden gedereferenced.

Vereisten

  • CMake 3.10 of hoger.
  • Een C23-compatibele compiler, bijvoorbeeld GCC of Clang.
  • Make of een andere CMake-buildgenerator.
  • Geen externe dependencies: argtable3 is onderdeel van deze repository.

Bouwen

cmake -S . -B build
cmake --build build

Testen

ctest --test-dir build --output-on-failure

Voor Linux kan de test-build met AddressSanitizer en UndefinedBehaviorSanitizer worden uitgevoerd:

cmake -S . -B build-asan \
  -DCMAKE_C_FLAGS='-fsanitize=address,undefined -fno-omit-frame-pointer'
cmake --build build-asan
ctest --test-dir build-asan --output-on-failure

Demo Uitvoeren

./build/arena_loader
./build/arena_loader --log-level=debug

De executable voert drie stappen uit:

  1. Maakt een game-root, catalogusboom en inventarislijst aan.
  2. Slaat de arena op in validated_arena.bin, laadt deze opnieuw en toont de herstelde entity-structuren.
  3. Wijzigt de geladen arena en weigert daarna bewust dezelfde opslag met een afwijkende schema-versie.

Het bestand validated_arena.bin wordt aangemaakt in de huidige werkdirectory.

Projectstructuur

.
├── CMakeLists.txt
├── include/
│   ├── arena.h       # Arena en persistente opslag
│   ├── entity.h      # Entity-datamodel en API
│   ├── app_state.h   # Applicatiestate-helpers
│   ├── crc.h         # CRC32 API
│   ├── config.h      # Capaciteits- en bestandsconfiguratie
│   ├── logger.h      # Logging API
│   └── argtable3.h   # Lokale CLI-parser API
├── src/
│   ├── arena.c
│   ├── entity.c
│   ├── app_state.c
│   ├── crc.c
│   ├── logger.c
│   ├── main.c
│   └── argtable3.c
├── tests/test_arena_loader.c
└── README.md

De compiler wordt geconfigureerd met -Wall -Wextra -Werror -Wpedantic en -std=c23.

About

Loading and saving memory arena with crc32 checks, educational project, agent assisted

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages