/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ @ file : kotlin . jvm . Jvm Name (" Unsigned Kt ") Ċ @ file : Use Experimental ( Experimental Unsigned Types :: class ) Ċ package Ġkotlin Ċ Ċ @ Published Api Ċ internal Ġfun Ġuint Compare ( v 1 : ĠInt , Ġv 2 : ĠInt ): ĠInt Ġ= Ġ( v 1 Ġxor ĠInt . MIN _ VALUE ). compareTo ( v 2 Ġxor ĠInt . MIN _ VALUE ) Ċ @ Published Api Ċ internal Ġfun Ġulong Compare ( v 1 : ĠLong , Ġv 2 : ĠLong ): ĠInt Ġ= Ġ( v 1 Ġxor ĠLong . MIN _ VALUE ). compareTo ( v 2 Ġxor ĠLong . MIN _ VALUE ) Ċ Ċ @ Published Api Ċ internal Ġfun Ġuint Divide ( v 1 : ĠUInt , Ġv 2 : ĠUInt ): ĠUInt Ġ= Ġ( v 1 . to Long () Ġ/ Ġv 2 . to Long ()). to UInt () Ċ @ Published Api Ċ internal Ġfun Ġuint Remain der ( v 1 : ĠUInt , Ġv 2 : ĠUInt ): ĠUInt Ġ= Ġ( v 1 . to Long () Ġ% Ġv 2 . to Long ()). to UInt () Ċ Ċ // ĠDiv ision Ġand Ġremainder Ġare Ġbased Ġon ĠGu ava 's ĠUnsigned Long s Ġimplementation Ċ // ĠCopyright Ġ 2 0 1 1 ĠThe ĠGu ava ĠAuthors Ċ Ċ @ Published Api Ċ internal Ġfun Ġulong Divide ( v 1 : ĠU Long , Ġv 2 : ĠU Long ): ĠU Long Ġ{ ĊĠĠĠ Ġval Ġdiv id end Ġ= Ġv 1 . to Long () ĊĠĠĠ Ġval Ġdivisor Ġ= Ġv 2 . to Long () ĊĠĠĠ Ġif Ġ( div isor Ġ< Ġ 0 ) Ġ{ Ġ// Ġi . e ., Ġdivisor Ġ>= Ġ 2 ^ 6 3 : ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( v 1 Ġ< Ġv 2 ) ĠU Long ( 0 ) Ġelse ĠU Long ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOptimization Ġ- Ġuse Ġsigned Ġdivision Ġif Ġboth Ġdiv id end Ġand Ġdivisor Ġ< Ġ 2 ^ 6 3 ĊĠĠĠ Ġif Ġ( divid end Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠU Long ( divid end Ġ/ Ġdivisor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOtherwise , Ġapproximate Ġthe Ġquot ient , Ġcheck , Ġand Ġcorrect Ġif Ġnecessary . ĊĠĠĠ Ġval Ġquot ient Ġ= Ġ(( divid end Ġ ush r Ġ 1 ) Ġ/ Ġdivisor ) Ġshl Ġ 1 ĊĠĠĠ Ġval Ġrem Ġ= Ġdiv id end Ġ- Ġquot ient Ġ* Ġdivisor ĊĠĠĠ Ġreturn ĠU Long ( quot ient Ġ+ Ġif Ġ( UL ong ( rem ) Ġ>= ĠU Long ( div isor )) Ġ 1 Ġelse Ġ 0 ) Ċ Ċ } Ċ Ċ @ Published Api Ċ internal Ġfun Ġulong Remain der ( v 1 : ĠU Long , Ġv 2 : ĠU Long ): ĠU Long Ġ{ ĊĠĠĠ Ġval Ġdiv id end Ġ= Ġv 1 . to Long () ĊĠĠĠ Ġval Ġdivisor Ġ= Ġv 2 . to Long () ĊĠĠĠ Ġif Ġ( div isor Ġ< Ġ 0 ) Ġ{ Ġ// Ġi . e ., Ġdivisor Ġ>= Ġ 2 ^ 6 3 : ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( v 1 Ġ< Ġv 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 Ġ// Ġdiv id end Ġ< Ġdivisor ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 Ġ- Ġv 2 Ġ// Ġdiv id end Ġ>= Ġdivisor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOptimization Ġ- Ġuse Ġsigned Ġmod ulus Ġif Ġboth Ġdiv id end Ġand Ġdivisor Ġ< Ġ 2 ^ 6 3 ĊĠĠĠ Ġif Ġ( divid end Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠU Long ( divid end Ġ% Ġdivisor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOtherwise , Ġapproximate Ġthe Ġquot ient , Ġcheck , Ġand Ġcorrect Ġif Ġnecessary . ĊĠĠĠ Ġval Ġquot ient Ġ= Ġ(( divid end Ġ ush r Ġ 1 ) Ġ/ Ġdivisor ) Ġshl Ġ 1 ĊĠĠĠ Ġval Ġrem Ġ= Ġdiv id end Ġ- Ġquot ient Ġ* Ġdivisor ĊĠĠĠ Ġreturn ĠU Long ( rem Ġ- Ġif Ġ( UL ong ( rem ) Ġ>= ĠU Long ( div isor )) Ġdivisor Ġelse Ġ 0 ) Ċ } ĊĊ Ċ @ Published Api Ċ internal Ġfun Ġdouble ToU Byte ( v : ĠDouble ): ĠU Byte Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġv . isNaN () Ġ-> Ġ 0 u ĊĠĠĠ Ġv Ġ<= ĠU Byte . MIN _ VALUE . toDouble () Ġ-> ĠU Byte . MIN _ VALUE ĊĠĠĠ Ġv Ġ>= ĠU Byte . MAX _ VALUE . toDouble () Ġ-> ĠU Byte . MAX _ VALUE ĊĠĠĠ Ġelse Ġ-> Ġv . toInt (). to U Byte () Ċ } Ċ Ċ @ Published Api Ċ internal Ġfun Ġdouble ToU Short ( v : ĠDouble ): ĠU Short Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġv . isNaN () Ġ-> Ġ 0 u ĊĠĠĠ Ġv Ġ<= ĠU Short . MIN _ VALUE . toDouble () Ġ-> ĠU Short . MIN _ VALUE ĊĠĠĠ Ġv Ġ>= ĠU Short . MAX _ VALUE . toDouble () Ġ-> ĠU Short . MAX _ VALUE ĊĠĠĠ Ġelse Ġ-> Ġv . toInt (). to U Short () Ċ } Ċ Ċ @ Published Api Ċ internal Ġfun Ġdouble To UInt ( v : ĠDouble ): ĠUInt Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġv . isNaN () Ġ-> Ġ 0 u ĊĠĠĠ Ġv Ġ<= ĠUInt . MIN _ VALUE . toDouble () Ġ-> ĠUInt . MIN _ VALUE ĊĠĠĠ Ġv Ġ>= ĠUInt . MAX _ VALUE . toDouble () Ġ-> ĠUInt . MAX _ VALUE ĊĠĠĠ Ġv Ġ<= ĠInt . MAX _ VALUE Ġ-> Ġv . toInt (). to UInt () ĊĠĠĠ Ġelse Ġ-> Ġ( v Ġ- ĠInt . MAX _ VALUE ). toInt (). to UInt () Ġ+ ĠInt . MAX _ VALUE . to UInt () ĠĠĠĠĠ Ġ// ĠInt . MAX _ VALUE Ġ< Ġv Ġ< ĠUInt . MAX _ VALUE Ċ } Ċ Ċ @ Published Api Ċ internal Ġfun Ġdouble To UL ong ( v : ĠDouble ): ĠU Long Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġv . isNaN () Ġ-> Ġ 0 u ĊĠĠĠ Ġv Ġ<= ĠU Long . MIN _ VALUE . toDouble () Ġ-> ĠU Long . MIN _ VALUE ĊĠĠĠ Ġv Ġ>= ĠU Long . MAX _ VALUE . toDouble () Ġ-> ĠU Long . MAX _ VALUE ĊĠĠĠ Ġv Ġ< ĠLong . MAX _ VALUE Ġ-> Ġv . to Long (). to UL ong () ĊĊĠĠĠ Ġ// ĠReal Ġvalues Ġfrom ĠLong . MAX _ VALUE Ġto Ġ( Long . MAX _ VALUE Ġ+ Ġ 1 ) Ġare Ġnot Ġrepresent able Ġin ĠDouble , Ġso Ġdon 't Ġhandle Ġthem . ĊĠĠĠ Ġelse Ġ-> Ġ( v Ġ- Ġ 9 2 2 3 3 7 2 0 3 6 8 5 4 7 7 5 8 0 8 . 0 ). to Long (). to UL ong () Ġ+ Ġ 9 2 2 3 3 7 2 0 3 6 8 5 4 7 7 5 8 0 8 u L ĠĠĠĠĠ Ġ// ĠLong . MAX _ VALUE Ġ+ Ġ 1 Ġ< Ġv Ġ< ĠU Long . MAX _ VALUE Ċ } ĊĊ Ċ @ Published Api Ċ internal Ġfun Ġuint ToDouble ( v : ĠInt ): ĠDouble Ġ= Ġ( v Ġand ĠInt . MAX _ VALUE ). toDouble () Ġ+ Ġ( v Ġ ush r Ġ 3 1 Ġshl Ġ 3 0 ). toDouble () Ġ* Ġ 2 Ċ Ċ @ Published Api Ċ internal Ġfun Ġulong ToDouble ( v : ĠLong ): ĠDouble Ġ= Ġ( v Ġ ush r Ġ 1 1 ). toDouble () Ġ* Ġ 2 0 4 8 Ġ+ Ġ( v Ġand Ġ 2 0 4 7 ) ĊĊ Ċ internal Ġfun Ġulong ToString ( v : ĠLong ): ĠString Ġ= Ġulong ToString ( v , Ġ 1 0 ) Ċ Ċ internal Ġfun Ġulong ToString ( v : ĠLong , Ġbase : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( v Ġ>= Ġ 0 ) Ġreturn Ġv . toString ( base ) ĊĊĠĠĠ Ġvar Ġquot ient Ġ= Ġ(( v Ġ ush r Ġ 1 ) Ġ/ Ġbase ) Ġshl Ġ 1 ĊĠĠĠ Ġvar Ġrem Ġ= Ġv Ġ- Ġquot ient Ġ* Ġbase ĊĠĠĠ Ġif Ġ( rem Ġ>= Ġbase ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrem Ġ-= Ġbase ĊĠĠĠĠĠĠĠ Ġquot ient Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġquot ient . toString ( base ) Ġ+ Ġrem . toString ( base ) Ċ } ĊĊ