Ho una struttura dati che può essere rappresentata come un grafo unidirezionale tra alcune strutture collegate con oggetti di collegamento perché i collegamenti contengono metadati.Implementare una struttura dati simile a un grafico in Rust
Sembra qualcosa di simile a questo:
struct StateMachine {
resources: Vec<Resource>,
links: Vec<Link>,
}
struct Resource {
kind: ResourceType,
// ...
}
enum LinkTarget {
ResourceList(Vec<&Resource>),
LabelSelector(HashMap<String, String>),
}
struct Link {
from: LinkTarget,
to: LinkTarget,
metadata: SomeMetadataStruct,
}
Tutta la struttura ha bisogno di essere mutevole perché ho bisogno di essere in grado di aggiungere e rimuovere i link e le risorse in fase di esecuzione. Per questo motivo, non posso usare il normale modello di durata e legare le risorse al tempo di vita della struttura genitrice.
Capisco che ho bisogno di to "choose my own guarantee" selezionando il tipo appropriato, ma non sono sicuro di quale sia il modo migliore per risolvere questo problema.
Aggiungo e rimuovo molti nodi e l'applicazione è un processo server, quindi le perdite di memoria sono un problema. Conosci un'altra soluzione? Nel frattempo darò un'occhiata all'altra risposta. – Lorenz
@ Aragon0: ho aggiunto un'altra idea di design in cui disaccoppiare la risorsa e i riferimenti agli altri (non utilizzando un puntatore diretto), richiede più contabilità ma è sicura. –
Questa sembra una buona idea! Posso occuparmi di più contabilità, purché l'intera faccenda sia sicura e ragionevolmente veloce. – Lorenz