package Ġunsigned Ċ Ċ import Ġjava . math . BigInteger Ċ import Ġkotlin . experimental . and Ċ import Ġkotlin . experimental . inv Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠG Bar b ier i Ġon Ġ 2 0 . 0 3 . 2 0 1 7 . Ċ Ġ*/ Ċ Ċ class ĠU byte ( var Ġv : ĠByte ) Ġ: ĠNumber (), ĠComparable < U byte > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġconstant Ġholding Ġthe Ġminimum Ġvalue Ġan Ġ< code > unsigned Ġbyte </ code > Ġcan Ġhave , Ġ 0 . Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMIN _ VALUE : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġconstant Ġholding Ġthe Ġmaximum Ġvalue Ġan Ġ< code > unsigned Ġbyte </ code > Ġcan Ġhave , Ġ 2 < sup > 8 </ sup >- 1 . ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ VALUE : ĠInt Ġ= Ġ 0 xff ĊĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġconstant Ġholding Ġthe Ġminimum Ġvalue Ġan Ġ< code > unsigned Ġbyte </ code > Ġcan Ġhave , Ġ 0 . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠMIN Ġ= ĠU byte ( 0 ) ĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġconstant Ġholding Ġthe Ġmaximum Ġvalue Ġan Ġ< code > unsigned Ġbyte </ code > Ġcan Ġhave , Ġ 2 < sup > 8 </ sup >- 1 . ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠMAX Ġ= ĠU byte ( 0 xff ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġcheck Signed ( v : ĠNumber ) Ġ= Ġv . toInt () Ġin ĠMIN _ VALUE .. MAX _ VALUE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( number : ĠNumber ) Ġ: Ġthis ( number . to Byte ()) ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( string : ĠString , Ġbase : ĠInt Ġ= Ġ 1 0 ) Ġ: Ġthis ( string . filter Ġ{ Ġit Ġ!= Ġ'_' Ġ&& Ġit Ġ!= Ġ'\'' Ġ}. parse Unsigned Int ( base ). to Byte ()) ĊĊĠĠĠ Ġoverride Ġfun Ġto Byte () Ġ= Ġv ĊĠĠĠ Ġoverride Ġfun Ġto Short () Ġ= Ġv . to UInt (). to Short () ĊĠĠĠ Ġoverride Ġfun Ġto Int () Ġ= Ġv . to UInt () ĊĠĠĠ Ġoverride Ġfun Ġto Long () Ġ= Ġv . to UL ong () ĊĊĠĠĠ Ġfun Ġto BigInt (): ĠBigInteger Ġ= ĠBigInteger . valueOf ( to Long ()) ĊĊĠĠĠ Ġoverride Ġfun Ġto Double () Ġ= Ġto Int (). toDouble () ĊĠĠĠ Ġoverride Ġfun Ġto Float () Ġ= Ġto Int (). toFloat () ĊĊĠĠĠ Ġoverride Ġfun Ġto Char () Ġ= Ġto Int (). to Char () ĊĊĠĠĠ Ġfun Ġto U byte () Ġ= Ġthis ĊĠĠĠ Ġfun Ġto U short () Ġ= ĠU short ( toInt ()) ĊĠĠĠ Ġfun Ġto Uint () Ġ= ĠUint ( toInt ()) ĊĠĠĠ Ġfun Ġto U long () Ġ= ĠU long ( toInt ()) ĊĊĠĠĠ Ġoperator Ġfun Ġinc () Ġ= ĠU byte ( v Ġ+ Ġ 1 ) ĊĠĠĠ Ġoperator Ġfun Ġdec () Ġ= ĠU byte ( v Ġ- Ġ 1 ) ĊĊĠĠĠ Ġin fix Ġoperator Ġfun Ġplus ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġ+ Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġplus ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġ+ Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġplus ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġ+ Ġb ) ĊĊĠĠĠ Ġin fix Ġoperator Ġfun Ġminus ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġ- Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġminus ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġ- Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġminus ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġ- Ġb ) ĊĊĠĠĠ Ġin fix Ġoperator Ġfun Ġtimes ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġ* Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġtimes ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġ* Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġtimes ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġ* Ġb ) ĊĊĠĠĠ Ġin fix Ġoperator Ġfun Ġdiv ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġ/ Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġdiv ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġ/ Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġdiv ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġu div Ġb ) ĊĊĠĠĠ Ġin fix Ġoperator Ġfun Ġrem ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġ% Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġrem ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġ% Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġoperator Ġfun Ġrem ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġ ure m Ġb ) ĊĊĠĠĠ Ġ// ĠTODO Ġadd Ġcounter parts Ġwith Ġres ĊĊĠĠĠ Ġin fix Ġfun Ġand ( b : ĠU byte ) Ġ= ĠU byte ( v Ġand Ġb . v ) ĊĠĠĠ Ġin fix Ġfun Ġand ( b : ĠByte ) Ġ= ĠU byte ( v Ġand Ġb ) ĊĠĠĠ Ġin fix Ġfun Ġand ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġand Ġb ) ĊĊĠĠĠ Ġin fix Ġfun Ġor ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġor Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġfun Ġor ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġor Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġfun Ġor ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġor Ġb ) ĊĊĠĠĠ Ġin fix Ġfun Ġxor ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġxor Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġfun Ġxor ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġxor Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġfun Ġxor ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġxor Ġb ) ĊĊĠĠĠ Ġin fix Ġfun Ġshl ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġshl Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġfun Ġshl ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġshl Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġfun Ġshl ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġshl Ġb ) ĊĊĠĠĠ Ġin fix Ġfun Ġshr ( b : ĠU byte ) Ġ= ĠU byte ( toInt () Ġ ush r Ġb . toInt ()) ĊĠĠĠ Ġin fix Ġfun Ġshr ( b : ĠByte ) Ġ= ĠU byte ( toInt () Ġ ush r Ġb . to UInt ()) ĊĠĠĠ Ġin fix Ġfun Ġshr ( b : ĠInt ) Ġ= ĠU byte ( toInt () Ġ ush r Ġb ) ĊĊĠĠĠ Ġfun Ġinv () Ġ= ĠU byte ( v . inv ()) ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġcompare To ( other : ĠU byte ) Ġ= Ġto Int () Ġcompare Unsigned Ġother . toInt () ĊĠĠĠ Ġoperator Ġfun Ġcompare To ( other : ĠByte ) Ġ= Ġto Int () Ġcompare Unsigned Ġother . to UInt () ĊĠĠĠ Ġoperator Ġfun Ġcompare To ( other : ĠInt ) Ġ= Ġto Int () Ġcompare Unsigned Ġother ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġother Ġis ĠU byte Ġ&& Ġv Ġ== Ġother . v ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġv . hashCode () ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġto Int (). toString () ĊĠĠĠ Ġfun ĠtoString ( radix : ĠInt ) Ġ= Ġto Int (). toString ( radix ) ĊĠĠĠ Ġfun ĠtoString ( format : ĠString ) Ġ= Ġformat . format ( toInt ()) Ċ } Ċ