Sfondo:
Sto scrivendo un piccolo / parziale IDE . Il codice viene convertito / analizzato internamente in una struttura di dati del grafico (per la navigazione veloce, il controllo della sintassi, ecc.). Funzionalità per annullare / ripristinare (anche tra sessioni) e ripristinare da crash è implementato scrivendo e leggendo dal journal. Il journal registra modifiche al grafico (non alla fonte).
Domanda:
Spero di ricevere consigli su una decisione sulle strutture dei dati e il formato del diario.
Per il grafico vedo due possibili versioni:
ga I bordi del grafico sono implementati nel modo in cui un nodo memorizza i riferimenti ad altri nodi tramite l'indirizzo di memoria
gb Ogni nodo ha un ID. C'è una mappa di ID-to-memory-address. Il grafico utilizza ID (anziché indirizzi) per connettere i nodi. Spostarsi lungo un bordo da un nodo all'altro ogni volta richiede una ricerca nella mappa ID-indirizzo.
E anche per il journal:
j-a Esiste un nodo corrente (come la directory di lavoro corrente in una shell + l'impostazione del file system). Il journal contiene voci come "crea nuovo nodo e connetti a corrente", "collega primo figlio del nodo corrente" (ID relativo)
j-b Il journal utilizza ID assoluti, ad es. "delete edge 7 - > 5", "elimina il nodo 5"
Potrei ad es. combinare g-a con j-a o combinare g-b con j-b . In linea di principio anche g-b e j-a dovrebbero essere possibili.
[Il mio primo / originale tentativo è stato ga e una versione di jb che utilizza indirizzi, ma questo ha causato gravi restrizioni: i nodi non possono cambiare i loro indirizzi (o journal dovrebbe tenerne traccia), e usare journal tra due sessioni è un casino (o anche impossibile)]
Mi chiedo se la variante a o la variante b o una combinazione sarebbe una buona idea, quali vantaggi e svantaggi avrebbero e soprattutto se alcune varianti potrebbero causare problemi più tardi.