package Ġio . nac ular . do od le . utils Ċ Ċ import Ġjava . util . concurrent . Copy On Write Array Set Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠN ich olas ĠE ddy Ġon Ġ 7 / 2 2 / 2 1 . Ċ Ġ*/ Ċ public Ġactual Ġopen Ġclass ĠSet Pool < T > Ġactual Ġconstructor ( protected Ġactual Ġval Ġdelegate : ĠMutable Set < T >): ĠPool < T >, ĠSet < T > Ġby Ġdelegate Ġ{ ĊĠĠĠ Ġpublic Ġactual Ġconstructor (): Ġthis ( Copy On Write Array Set ()) ĊĊĠĠĠ Ġoverride Ġfun Ġplus Assign Ġ( item : ĠT ) Ġ{ Ġdelegate Ġ+= Ġitem Ġ} ĊĠĠĠ Ġoverride Ġfun Ġminus Assign ( item : ĠT ) Ġ{ Ġdelegate Ġ-= Ġitem Ġ} Ċ } Ċ Ċ public Ġactual Ġclass ĠChange Observer s Impl < S > Ġactual Ġconstructor ( private Ġval Ġsource : ĠS , Ġmutable Set : ĠMutable Set < Change Observer < S >> ): ĠSet Pool < Change Observer < S >>( mutable Set ) Ġ{ ĊĠĠĠ Ġpublic Ġactual Ġconstructor ( source : ĠS ): Ġthis ( source , ĠCopy On Write Array Set ()) ĊĊĠĠĠ Ġpublic Ġactual Ġoperator Ġfun Ġinvoke (): ĠUnit Ġ= Ġdelegate . forEach Ġ{ Ġit ( source ) Ġ} Ċ } Ċ Ċ public Ġactual Ġclass ĠProperty Observer s Impl < S , ĠT > Ġactual Ġconstructor ( private Ġval Ġsource : ĠS , Ġmutable Set : ĠMutable Set < Property Observer < S , ĠT >> ): ĠSet Pool < Property Observer < S , ĠT >>( mutable Set ) Ġ{ ĊĠĠĠ Ġpublic Ġactual Ġconstructor ( source : ĠS ): Ġthis ( source , ĠCopy On Write Array Set ()) ĊĊĠĠĠ Ġpublic Ġactual Ġoperator Ġfun Ġinvoke ( old : ĠT , Ġnew : ĠT ): ĠUnit Ġ= Ġdelegate . forEach Ġ{ Ġit ( source , Ġold , Ġnew ) Ġ} Ċ }