package Ġorg . jetbrains . research . k the l per . algorithm . impl Ċ Ċ import Ġorg . jetbrains . research . k the l per . algorithm . Graph Ċ import Ġorg . jetbrains . research . k the l per . algorithm . Pre decessor Graph Ċ Ċ data Ġclass ĠVertex Impl ( val Ġname : ĠString ) Ġ: ĊĠĠĠ ĠPre decessor Graph . Pre decessor Vertex < Vertex Impl > Ġ{ ĊĠĠĠ Ġinternal Ġval Ġmutable Pre decess ors Ġ= Ġlinked Set Of < Vertex Impl >() ĊĠĠĠ Ġinternal Ġval Ġmutable Success ors Ġ= Ġlinked Set Of < Vertex Impl >() ĊĊĊĠĠĠ Ġoverride Ġval Ġpre decess ors : ĠSet < Vertex Impl > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmutable Pre decess ors ĊĠĠĠ Ġoverride Ġval Ġsuccess ors : ĠSet < Vertex Impl > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmutable Success ors Ċ } Ċ Ċ class ĠGraph Impl ( var arg Ġelements : ĠString ) Ġ: ĊĠĠĠ ĠPre decessor Graph < Vertex Impl > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmutable Nodes Ġ= Ġlinked Set Of < Vertex Impl >() ĊĠĠĠ Ġprivate Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠVertex Impl >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġelements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertex Ġ= ĠVertex Impl ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ element ] Ġ= Ġvertex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Nodes . add ( vertex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġentry : ĠVertex Impl ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmutable Nodes . first () ĊĠĠĠ Ġoverride Ġval Ġnodes : ĠSet < Vertex Impl > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmutable Nodes ĊĊĠĠĠ Ġoperator Ġfun Ġget ( name : ĠString ) Ġ= Ġmap . getValue ( name ) ĊĊĠĠĠ Ġfun Ġadd Vertex ( name : ĠString ): ĠVertex Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( name Ġ! in Ġmap ) ĊĠĠĠĠĠĠĠ Ġval Ġvertex Ġ= ĠVertex Impl ( name ) ĊĠĠĠĠĠĠĠ Ġmap [ name ] Ġ= Ġvertex ĊĠĠĠĠĠĠĠ Ġmutable Nodes . add ( vertex ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvertex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Edge ( from : ĠString , Ġto : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfrom Vertex Ġ= Ġmap . getValue ( from ) ĊĠĠĠĠĠĠĠ Ġval Ġto Vertex Ġ= Ġmap . getValue ( to ) ĊĊĠĠĠĠĠĠĠ Ġadd Edge ( from Vertex , Ġto Vertex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Edge ( from : ĠVertex Impl , Ġto : ĠVertex Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom . mutable Success ors . add ( to ) ĊĠĠĠĠĠĠĠ Ġto . mutable Pre decess ors . add ( from ) ĊĠĠĠ Ġ} Ċ } Ċ