@@ -624,7 +624,15 @@ object Graph {
624624 }
625625 }
626626
627- case class Vertex (features : Features [NodeFeature ], incomingEdges : Map [ChannelDesc , GraphEdge ])
627+ case class Vertex (features : Features [NodeFeature ], incomingEdges : Map [ChannelDesc , GraphEdge ]) {
628+ def update (desc : ChannelDesc , newShortChannelId : RealShortChannelId , newCapacity : Satoshi ): Vertex =
629+ incomingEdges.get(desc) match {
630+ case None => this
631+ case Some (edge) =>
632+ val updatedEdge = edge.copy(desc = desc.copy(shortChannelId = newShortChannelId), capacity = newCapacity)
633+ copy(incomingEdges = incomingEdges - desc + (desc.copy(shortChannelId = newShortChannelId) -> updatedEdge))
634+ }
635+ }
628636
629637 /** A graph data structure that uses an adjacency list, stores the incoming edges of the neighbors */
630638 case class DirectedGraph (private val vertices : Map [PublicKey , Vertex ]) {
@@ -688,14 +696,10 @@ object Graph {
688696 * @return a new graph with updated vertexes
689697 */
690698 def updateChannel (desc : ChannelDesc , newShortChannelId : RealShortChannelId , newCapacity : Satoshi ): DirectedGraph = {
691- val newDesc = desc.copy(shortChannelId = newShortChannelId)
692- val updatedVertices =
693- vertices
694- .updatedWith(desc.b)(_.map(vertexB => vertexB.copy(incomingEdges = vertexB.incomingEdges - desc +
695- (newDesc -> vertexB.incomingEdges(desc).copy(desc = newDesc, capacity = newCapacity)))))
696- .updatedWith(desc.a)(_.map(vertexA => vertexA.copy(incomingEdges = vertexA.incomingEdges - desc.reversed +
697- (newDesc.reversed -> vertexA.incomingEdges(desc.reversed).copy(desc = newDesc.reversed, capacity = newCapacity)))))
698- DirectedGraph (updatedVertices)
699+ DirectedGraph (vertices
700+ .updatedWith(desc.b)(_.map(_.update(desc, newShortChannelId, newCapacity)))
701+ .updatedWith(desc.a)(_.map(_.update(desc.reversed, newShortChannelId, newCapacity)))
702+ )
699703 }
700704
701705 /**
0 commit comments