package Ġorg . k lips . dsl Ċ Ċ import Ġorg . k lips . dsl . Facet . Facet Ref Ċ import Ġorg . k lips . engine . Binding Ċ import Ġorg . k lips . engine . Modification Ċ import Ġorg . k lips . engine . re te . builder . Ag enda Manager Ċ import Ġorg . k lips . engine . re te . builder . Priority Ag enda Manager Ċ import Ġorg . k lips . engine . util . Log Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ fun Ġrules ( log : ĠLog , Ġag enda Manager : ĠAg enda Manager Ġ= ĠPriority Ag enda Manager (), Ġinit : ĠRule Set . () Ġ-> ĠUnit ): ĠRule Set Ġ{ ĊĠĠĠ Ġval Ġrs Ġ= Ġobject Ġ: ĠRule Set ( log , agenda Manager ) Ġ{} ĊĠĠĠ Ġrs . init () ĊĠĠĠ Ġreturn Ġrs Ċ } Ċ Ċ operator Ġfun Ġ< T : Comparable < T >> ĠMod ification < Binding >. get ( f : ĠFac et < T >) Ġ= Ġarg . fetch Value 2 ( f ) Ċ Ċ val Ġ< T : Comparable < T >> ĠT . facet : Facet . Const Facet < T > ĊĠĠĠ Ġget () Ġ= ĠFac et . Const Facet ( this ) Ċ Ċ val Ġ< T : Comparable < T >> ĠFac et < T >. value : T ĊĠĠĠ Ġget () Ġ= Ġ( this Ġas ĠFac et . Const Facet < T >). value Ċ Ċ private Ġval Ġref Cnt Ġ= ĠAtomicInteger ( 0 ) Ċ Ċ fun Ġ< T : Comparable < T >> Ġref ( name : String ? Ġ= Ġnull ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFac et Ref < T >(" _${ ref Cnt . and Increment }") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFac et Ref < T >( name ) Ċ Ċ fun Ġ< T Ġ: ĠFact > ĠIterable < T >. substitute ( data : Binding ) ĠĠĠĠ Ġ= Ġthis . map Ġ{ Ġit . substitute ( data ) Ġ} Ċ fun Ġ< T Ġ: ĠFact > ĠT . substitute ( data : Modification < Binding >) Ġ= Ġthis . substitute ( data . arg ) Ċ fun Ġ< T Ġ: ĠFact > ĠBinding . substitute ( var arg Ġfacts Ġ: ĠT ) Ġ: ĠList < T > Ġ= ĊĠĠĠĠĠĠĠ Ġfacts . map Ġ{ Ġit . substitute ( this ) Ġ} Ċ fun Ġ< T Ġ: ĠFact > ĠMod ification < Binding >. substitute ( var arg Ġfacts Ġ: ĠT ) Ġ: ĠList < T > Ġ= ĊĠĠĠĠĠĠĠ Ġfacts . map Ġ{ Ġit . substitute ( this ) Ġ} Ċ Ċ //////////////////////////////////////////////////////////////// //////////////////////////////// ĊĊ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġfact Ġinstance Ġform Ġthis Ġone Ġbut Ġwith Ċ Ġ* Ġsome Ġfacet Ġreplaced Ġby Ġother Ġusing Ġa Ġreplacement Ġpair . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFact > ĠT . substitute ( what : Facet <* >, Ġwith : Facet <* >) Ġ: ĠT Ġ= Ġthis . substitute Ġ{ ĊĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhat Ġ-> Ġwith ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġfact Ġinstance Ġform Ġthis Ġone Ġbut Ġwith Ċ Ġ* Ġsome Ġfac ets Ġreplaced Ġby Ġothers Ġusing Ġa Ġbinding . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFact > ĠT . substitute ( data : Binding ) Ġ: ĠT Ġ= Ġthis . substitute Ġ{ ĊĠĠĠ Ġdata [ it ] Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġfact Ġinstance Ġform Ġthis Ġone Ġbut Ġwith Ċ Ġ* Ġsome Ġfacet Ġreplaced Ġby Ġother Ġusing Ġa Ġreplacement Ġpairs . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠFact > ĠT . substitute ( var arg Ġsubst s Ġ: ĠPair < Facet <* >, ĠFac et <* >>) Ġ: ĠT Ġ{ ĊĠĠĠ Ġval Ġdata Ġ= Ġmap Of (* subst s ) ĊĠĠĠ Ġreturn Ġthis . substitute { Ġdata [ it ] Ġ} Ċ }