/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 , ĠSa alf eld ĠLab , ĠHH MI ĠJ anel ia Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ 1 . ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ 2 . ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE Ċ Ġ* ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL Ċ Ġ* ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER Ċ Ġ* ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , Ċ Ġ* ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġnet . img lib 2 . im k lib Ċ Ċ import Ġnet . img lib 2 . type . numeric . Integer Type Ċ import Ġnet . img lib 2 . type . numeric . integer .* Ċ Ċ // Ġcreate WithValue Ċ fun Ġ< T : ĠInteger Type < T >> ĠT . create WithValue ( value : ĠByte ) Ġ= Ġcreate Variable (). also Ġ{ Ġit . set To ( value ) Ġ} Ċ fun Ġ< T : ĠInteger Type < T >> ĠT . create WithValue ( value : ĠShort ) Ġ= Ġcreate Variable (). also Ġ{ Ġit . set To ( value ) Ġ} Ċ fun Ġ< T : ĠInteger Type < T >> ĠT . create WithValue ( value : ĠInt ) Ġ= Ġcreate Variable (). also Ġ{ Ġit . set To ( value ) Ġ} Ċ fun Ġ< T : ĠInteger Type < T >> ĠT . create WithValue ( value : ĠLong ) Ġ= Ġcreate Variable (). also Ġ{ Ġit . set To ( value ) Ġ} Ċ Ċ fun Ġ< T : ĠInteger Type < T >> ĠByte . as Type ( type : ĠT ) Ġ= Ġtype . create WithValue ( this ) Ċ fun Ġ< T : ĠInteger Type < T >> ĠShort . as Type ( type : ĠT ) Ġ= Ġtype . create WithValue ( this ) Ċ fun Ġ< T : ĠInteger Type < T >> ĠInt . as Type ( type : ĠT ) Ġ= Ġtype . create WithValue ( this ) Ċ fun Ġ< T : ĠInteger Type < T >> ĠLong . as Type ( type : ĠT ) Ġ= Ġtype . create WithValue ( this ) Ċ Ċ fun ĠByte . as Type () Ġ= Ġas Type ( Byte Type ()) Ċ fun ĠShort . as Type () Ġ= Ġas Type ( Short Type ()) Ċ fun ĠInt . as Type () Ġ= Ġas Type ( Int Type ()) Ċ fun ĠLong . as Type () Ġ= Ġas Type ( Long Type ()) Ċ Ċ fun ĠByte . as Unsigned Type () Ġ= Ġas Type ( Unsigned Byte Type ()) Ċ fun ĠShort . as Unsigned Type () Ġ= Ġas Type ( Unsigned Short Type ()) Ċ fun ĠInt . as Unsigned Type () Ġ= Ġas Type ( Unsigned Int Type ()) Ċ fun ĠLong . as Unsigned Type () Ġ= Ġas Type ( Unsigned Long Type ()) Ċ Ċ // Ġconversion Ċ val Ġ< T : ĠInteger Type < T >> ĠT . byte Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠByte Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠByte Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . unsigned Byte Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠUnsigned Byte Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠUnsigned Byte Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . short Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠShort Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠShort Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . unsigned Short Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠUnsigned Short Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠUnsigned Short Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . int Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠInt Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠInt Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . unsigned Int Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠUnsigned Int Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠUnsigned Int Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . long Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠLong Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠLong Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ val Ġ< T : ĠInteger Type < T >> ĠT . unsigned Long Type Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ Ġis ĠUnsigned Long Type Ġ-> Ġcopy () ĊĠĠĠ Ġelse Ġ-> ĠUnsigned Long Type (). also Ġ{ Ġit . set Integer ( integer Long ) Ġ} Ċ } Ċ Ċ // Ġadd Ċ // ĠT Ġ+ Ġprimitive Ġtype Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus Assign ( value : ĠByte ) Ġ= Ġset Integer ( integer Long Ġ+ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus ( value : ĠByte ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ+= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus Assign ( value : ĠShort ) Ġ= Ġset Integer ( integer Long Ġ+ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus ( value : ĠShort ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ+= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus Assign ( value : ĠInt ) Ġ= Ġset Integer ( integer Long Ġ+ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus ( value : ĠInt ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ+= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus Assign ( value : ĠLong ) Ġ= Ġset Integer ( integer Long Ġ+ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . plus ( value : ĠLong ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ+= Ġvalue Ġ} Ċ // Ġprimitive Ġtype Ġ+ ĠT Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠByte . plus ( value : ĠT ) Ġ= Ġvalue Ġ+ Ġthis Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠShort . plus ( value : ĠT ) Ġ= Ġvalue Ġ+ Ġthis Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠInt . plus ( value : ĠT ) Ġ= Ġvalue Ġ+ Ġthis Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠLong . plus ( value : ĠT ) Ġ= Ġvalue Ġ+ Ġthis Ċ Ċ // Ġsubtract Ċ // ĠT Ġ- Ġprimitive Ġtype Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus Assign ( value : ĠByte ) Ġ= Ġset Integer ( integer Long Ġ- Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus ( value : ĠByte ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ-= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus Assign ( value : ĠShort ) Ġ= Ġset Integer ( integer Long Ġ- Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus ( value : ĠShort ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ-= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus Assign ( value : ĠInt ) Ġ= Ġset Integer ( integer Long Ġ- Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus ( value : ĠInt ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ-= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus Assign ( value : ĠLong ) Ġ= Ġset Integer ( integer Long Ġ- Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . minus ( value : ĠLong ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ-= Ġvalue Ġ} Ċ // Ġprimitive Ġtype Ġ- ĠT Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠByte . minus ( value : ĠT ) Ġ= Ġas Type ( value ) Ġ- Ġvalue Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠShort . minus ( value : ĠT ) Ġ= Ġas Type ( value ) Ġ- Ġvalue Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠInt . minus ( value : ĠT ) Ġ= Ġas Type ( value ) Ġ- Ġvalue Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠLong . minus ( value : ĠT ) Ġ= Ġas Type ( value ) Ġ- Ġvalue Ċ Ċ // Ġmultiply Ċ // ĠT Ġ* Ġprimitive Ġtype Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times Assign ( value : ĠByte ) Ġ= Ġset Integer ( integer Long Ġ* Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times ( value : ĠByte ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ*= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times Assign ( value : ĠShort ) Ġ= Ġset Integer ( integer Long Ġ* Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times ( value : ĠShort ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ*= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times Assign ( value : ĠInt ) Ġ= Ġset Integer ( integer Long Ġ* Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times ( value : ĠInt ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ*= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times Assign ( value : ĠLong ) Ġ= Ġset Integer ( integer Long Ġ* Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . times ( value : ĠLong ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ*= Ġvalue Ġ} Ċ // Ġprimitive Ġtype Ġ* ĠT Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠByte . times ( value : ĠT ) Ġ= Ġvalue Ġ* Ġthis Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠShort . times ( value : ĠT ) Ġ= Ġvalue Ġ* Ġthis Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠInt . times ( value : ĠT ) Ġ= Ġvalue Ġ* Ġthis Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠLong . times ( value : ĠT ) Ġ= Ġvalue Ġ* Ġthis Ċ Ċ // Ġdivide Ċ // ĠT Ġ/ Ġpri mt ive Ġtype Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div Assign ( value : ĠByte ) Ġ= Ġset Integer ( integer Long Ġ/ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div ( value : ĠByte ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div Assign ( value : ĠShort ) Ġ= Ġset Integer ( integer Long Ġ/ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div ( value : ĠShort ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div Assign ( value : ĠInt ) Ġ= Ġset Integer ( integer Long Ġ/ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div ( value : ĠInt ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div Assign ( value : ĠLong ) Ġ= Ġset Integer ( integer Long Ġ/ Ġvalue ) Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠT . div ( value : ĠLong ) Ġ= Ġcopy (). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ // Ġprimitive Ġtype Ġ/ ĠT Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠByte . div ( value : ĠT ) Ġ= Ġas Type ( value ). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠShort . div ( value : ĠT ) Ġ= Ġas Type ( value ). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠInt . div ( value : ĠT ) Ġ= Ġas Type ( value ). also Ġ{ Ġit Ġ/= Ġvalue Ġ} Ċ operator Ġfun Ġ< T : ĠInteger Type < T >> ĠLong . div ( value : ĠT ) Ġ= Ġas Type ( value ). also Ġ{ Ġit Ġ/= Ġvalue Ġ}