package Ġsil icons lo th . min ir uler . engine . matching Ċ Ċ import Ġsil icons lo th . min ir uler . engine .* Ċ import Ġsil icons lo th . min ir uler . engine . bindings . Binding Ċ import Ġsil icons lo th . min ir uler . engine . bindings . In verted Binding Ċ import Ġsil icons lo th . min ir uler . engine . stores . Fact Store Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠIn verted Match Set < T : ĠAny >( val Ġbinding : ĠIn verted Binding < T >, Ġval Ġnext Bindings : ĠList < Binding < *, * >>, Ġrule : ĠRule ): ĠMatch Node ( rule ) Ġ{ ĊĠĠĠ Ġval Ġmatches Ġ= Ġmutable Set Of < T >(). also Ġ{ Ġmatches Ġ-> ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( rule . engine . stores [ binding . type ] Ġas ĠFact Store < T > ?) ?. retrieve Matching ( binding . filter )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatches . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġnext Match : ĠMatch Node ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( matches . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Remaining () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmatch Remaining () Ġ{ ĊĠĠĠĠĠĠĠ Ġnext Match Ġ= Ġmake Match Tree ( next Bindings , Ġrule ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Updates ( updates : ĠMap < K Class <* >, ĠList < Rule Engine . Update <* >> >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġupdates [ binding . type ]?. forEach Ġ{ Ġ( it Ġas ĠRule Engine . Update < T >). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Insert ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . filter . predicate ( it . fact )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches . add ( it . fact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches . remove ( it . fact ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( matches . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Match ?. apply Updates ( updates ) Ġ?: Ġmatch Remaining () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Match ?. drop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Match Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrop () Ġ{ ĊĠĠĠĠĠĠĠ Ġnext Match ?. drop () ĊĠĠĠ Ġ} Ċ }