Ich habe eine Datenstruktur, die als unidirektionales Diagramm zwischen einigen Strukturen dargestellt werden kann, die mit Verknüpfungsobjekten verknüpft sind, weil Verknüpfungen Metadaten enthalten.Implementieren einer graphenähnlichen Datenstruktur in Rust
Es sieht ungefähr so aus:
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,
}
Die gesamte Struktur wandelbar sein muss, weil ich brauche zur Laufzeit Links und Ressourcen zu können, hinzufügen und entfernen. Aus diesem Grund kann ich das normale Lebensdauermodell nicht verwenden und die Ressourcen an die Lebensdauer der übergeordneten Struktur binden.
Ich verstehe, dass ich to "choose my own guarantee" durch Auswahl des entsprechenden Typs, aber ich bin mir nicht sicher, was der beste Weg, um dieses Problem zu lösen ist.
Ich hinzufügen und entfernen viele Knoten und die Anwendung ist ein Server-Prozess, so Speicherlecks sind ein Problem. Kennen Sie eine andere Lösung? In der Zwischenzeit schaue ich mir die andere Antwort an. – Lorenz
@ Aragon0: Ich habe eine andere Design-Idee hinzugefügt, wo die Ressource und die Referenzen zu anderen entkoppeln (nicht mit einem direkten Zeiger), es erfordert mehr Buchhaltung, aber ist sicher. –
Das sieht nach einer guten Idee aus! Ich kann mit mehr Buchhaltung umgehen, solange das Ganze sicher und einigermaßen schnell ist. – Lorenz