@@ -186,13 +186,19 @@ func (s *memoryStore[K, T]) AddEdge(sourceHash, targetHash K, edge Edge[K]) erro
186186}
187187
188188func (s * memoryStore [K , T ]) UpdateEdge (sourceHash , targetHash K , edge Edge [K ]) error {
189- if _ , err := s .Edge (sourceHash , targetHash ); err != nil {
190- return err
191- }
192-
193189 s .lock .Lock ()
194190 defer s .lock .Unlock ()
195191
192+ targetEdges , ok := s .outEdges [sourceHash ]
193+ if ! ok {
194+ return ErrEdgeNotFound
195+ }
196+
197+ _ , ok = targetEdges [targetHash ]
198+ if ! ok {
199+ return ErrEdgeNotFound
200+ }
201+
196202 s.outEdges [sourceHash ][targetHash ] = edge
197203 s.inEdges [targetHash ][sourceHash ] = edge
198204
@@ -254,12 +260,15 @@ func (s *memoryStore[K, T]) ListEdges() ([]Edge[K], error) {
254260// Because CreatesCycle doesn't need to modify the PredecessorMap, we can use
255261// inEdges instead to compute the same thing without creating any copies.
256262func (s * memoryStore [K , T ]) CreatesCycle (source , target K ) (bool , error ) {
257- if _ , _ , err := s .Vertex (source ); err != nil {
258- return false , fmt .Errorf ("could not get vertex with hash %v: %w" , source , err )
263+ s .lock .RLock ()
264+ defer s .lock .RUnlock ()
265+
266+ if _ , ok := s .vertices [source ]; ! ok {
267+ return false , fmt .Errorf ("could not get vertex with hash %v" , source )
259268 }
260269
261- if _ , _ , err := s .Vertex ( target ); err != nil {
262- return false , fmt .Errorf ("could not get vertex with hash %v: %w " , target , err )
270+ if _ , ok := s .vertices [ target ]; ! ok {
271+ return false , fmt .Errorf ("could not get vertex with hash %v" , target )
263272 }
264273
265274 if source == target {
0 commit comments