/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠZ en Key , ĠLLC . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . x ci . zen key . sdk . internal . browser Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġdelimited Ġversion Ġnumber Ġfor Ġan Ġapplication . ĠThis Ġcan Ġparse Ġcommon Ġversion Ġnumber Ċ Ġ* Ġformats , Ġtre ating Ġany Ġsequence Ġof Ġnon - numeric Ġcharacters Ġas Ġa Ġdelimiter , Ġand Ġdis cards Ġthese Ċ Ġ* Ġto Ġretain Ġjust Ġthe Ġnumeric Ġcontent Ġfor Ġcomparison . ĠTr ailing Ġzero es Ġin Ġa Ġversion Ġnumber Ċ Ġ* Ġare Ġdiscarded Ġto Ġproduce Ġa Ġcompact , Ġcanonical Ġrepresentation . ĠEmpty Ġversions Ġare Ġequivalent Ġto Ċ Ġ* Ġ" 0 ". ĠEach Ġnumeric Ġpart Ġis Ġexpected Ġto Ġfit Ġwithin Ġa Ġ 6 4 - bit Ġinteger . Ċ Ġ*/ Ċ internal Ġclass ĠDel imit ed Version Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Numeric Parts : ĠLong Array Ċ ) Ġ: ĠComparable < Delimited Version > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Numeric Parts . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" 0 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġbuilder . append ( m Numeric Parts [ 0 ]) ĊĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġm Numeric Parts . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('.') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( m Numeric Parts [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( other Ġ== Ġnull Ġ|| Ġother Ġ! is ĠDel imit ed Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthis . compareTo (( other Ġas ĠDel imit ed Version ?) !! ) Ġ== Ġ 0 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( numeric Part Ġin Ġm Numeric Parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġ* ĠPR IME _ HASH _ FACTOR Ġ+ Ġ( numeric Part Ġand ĠBIT _ MASK _ 3 2 ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠDel imit ed Version ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġthis . m Numeric Parts . size Ġ&& Ġindex Ġ< Ġother . m Numeric Parts . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Part Order Ġ= Ġcompare Long s ( this . m Numeric Parts [ index ], Ġother . m Numeric Parts [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Part Order Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent Part Order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcompare Long s ( this . m Numeric Parts . size . to Long (), Ġother . m Numeric Parts . size . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Long s ( l 1 : ĠLong , Ġl 2 : ĠLong ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( l 1 Ġ< Ġl 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( l 1 Ġ> Ġl 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠSee : Ġhttp :// stackoverflow . com / a / 2 8 1 6 7 4 7 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPR IME _ HASH _ FACTOR Ġ= Ġ 9 2 8 2 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBIT _ MASK _ 3 2 : ĠLong Ġ= Ġ- 0 x 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠParses Ġa Ġdelimited Ġversion Ġnumber Ġfrom Ġthe Ġprovided Ġstring . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( version String : ĠString ?): ĠDel imit ed Version Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version String Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDel imit ed Version ( Long Array ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Parts Ġ= Ġversion String . split ("[ ^ 0 - 9 ]+ ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Parts Ġ= ĠLong Array ( string Parts . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( numeric Part Ġin Ġstring Parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numeric Part . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Parts [ index ] Ġ= Ġjava . lang . Long . parse Long ( numeric Part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdiscard Ġall Ġtrailing Ġzero es ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parsed Parts [ index ] Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġindex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġonly Parsed Parts Ġ= ĠLong Array ( length ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( parsed Parts , Ġ 0 , Ġonly Parsed Parts , Ġ 0 , Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDel imit ed Version ( only Parsed Parts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ