package Ġnet . most ly original . pickle perfect . internal Ċ Ċ import Ġnet . most ly original . pickle perfect . Component Ċ import Ġnet . most ly original . pickle perfect . common . Bits Ċ import Ġnet . most ly original . pickle perfect . common . Entity Pattern Ċ import Ġnet . most ly original . pickle perfect . predicate .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠComp iles ĠEntity Pattern Ġto Ġpredicate . Ċ Ġ* Ġ@ author ĠDa an Ġvan ĠY per en Ċ Ġ*/ Ċ class ĠEntity Pattern Compiler ( val Ġcomponent Bit Lookup : Ġ( K Class < out ĠComponent >) Ġ-> ĠInt , Ġval Ġdefault Predicate : Ġ(() Ġ-> ĠBit Predicate )? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠ Ġ/** ĠConvert Ġpattern Ġinto ĠBit Predicate . Ġ*/ ĊĠĠĠ Ġfun Ġcompile ( pattern : ĠEntity Pattern ): ĠBit Predicate Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Bit Predicate >( 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġappend Ġa Ġdefault Ġpredicate , Ġfor ĠFramework Ġcomponents . ĊĠĠĠĠĠĠĠ Ġif Ġ( default Predicate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( default Predicate . invoke ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pattern . all . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Contains All Bit Predicate ( to Bits ( pattern . all ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pattern . any . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Contains Any Bit Predicate ( to Bits ( pattern . any ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pattern . none . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Contains None Bit Predicate ( to Bits ( pattern . none ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠComposite Bit Predicate ( list . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Bits ( types : ĠArray < out ĠK Class < out ĠComponent >> ): ĠBits Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBits () ĊĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ component Bit Lookup ( entry )] Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ