/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 1 9 , ĠSer gio ĠVe ga Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* Ġ 3 . ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ċ Ġ* Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . s ve ga . mon er outil s . crypto . slow hash Ċ Ċ @ Experimental Unsigned Types Ċ open Ġclass ĠPointer < T >( protected Ġval Ġscratch pad : ĠScr atch pad , Ġvar Ġoffset : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is ize Ġ!= Ġ- 1 ) Ġis ize Ġelse Ġscratch pad . size Ġ- Ġoffset ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġis ize Ġ= Ġ- 1 ĊĊĠĠĠ Ġconstructor ( scratch pad : ĠScr atch pad , Ġoffset : ĠInt , Ġsize : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( scratch pad , Ġoffset ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is ize Ġ= Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġval ĠSTR IDE Ġ= Ġ 1 ĊĠĠĠ Ġoperator Ġfun Ġplus ( i : ĠInt ) Ġ= ĠPointer < T >( scratch pad , Ġoffset Ġ+ Ġ( i Ġ* ĠSTR IDE ), Ġsize () Ġ- Ġ( i Ġ* ĠSTR IDE )) ĊĠĠĠ Ġoperator Ġfun Ġtimes ( i : ĠInt ) Ġ= ĠPointer < T >( scratch pad , Ġoffset Ġ* Ġ( i Ġ* ĠSTR IDE ), Ġsize () Ġ- Ġ( i Ġ* ĠSTR IDE )) ĊĠĠĠ Ġoperator Ġfun Ġminus ( i : ĠInt ) Ġ= ĠPointer < T >( scratch pad , Ġoffset Ġ- Ġ( i Ġ* ĠSTR IDE ), Ġsize () Ġ- Ġ( i Ġ* ĠSTR IDE )) ĊĊĠĠĠ Ġfun Ġto U Byte Pointer () Ġ= ĠU Byte Pointer ( scratch pad , Ġoffset ) ĊĠĠĠ Ġfun Ġto UInt Pointer () Ġ= ĠUInt Pointer ( scratch pad , Ġoffset ) ĊĠĠĠ Ġfun Ġto UL ong Pointer () Ġ= ĠU Long Pointer ( scratch pad , Ġoffset ) ĊĊĠĠĠ Ġopen Ġfun Ġsize (): ĠInt Ġ= Ġsize ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠNULL _ POINTER Ġ= ĠU ByteArray Scratch pad ( 0 ). get Pointer ( 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ class ĠU Byte Pointer ( scratch pad : ĠScr atch pad , Ġoffset : ĠInt , Ġsize : ĠInt Ġ= Ġ- 1 ) Ġ: ĠPointer < U Byte >( scratch pad , Ġoffset , Ġsize ) Ġ{ ĊĠĠĠ Ġoverride Ġval ĠSTR IDE Ġ= Ġ 1 ĊĠĠĠ Ġoperator Ġfun Ġget ( off : ĠInt ): ĠU Byte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscratch pad [ offset Ġ+ Ġoff ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( c : ĠInt , Ġvalue : ĠU Byte ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscratch pad [ offset Ġ+ Ġc ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( off : ĠInt , Ġsize : ĠInt ): ĠU ByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscratch pad [ offset Ġ+ Ġoff , Ġsize ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( off : ĠInt , Ġarr : ĠU ByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscratch pad [ offset Ġ+ Ġoff ] Ġ= Ġarr ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ class ĠUInt Pointer ( scratch pad : ĠScr atch pad , Ġoffset : ĠInt ) Ġ: ĠPointer < UInt >( scratch pad , Ġoffset ) Ġ{ ĊĠĠĠ Ġoverride Ġval ĠSTR IDE Ġ= Ġ 4 ĊĠĠĠ Ġoperator Ġfun Ġget ( off : ĠInt ): ĠUInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscratch pad . get Sw apped UInt ( offset Ġ+ Ġ( off Ġ* ĠSTR IDE )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( c : ĠInt , Ġvalue : ĠUInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscratch pad . set Sw apped UInt ( offset Ġ+ Ġ( c Ġ* ĠSTR IDE ), Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( off : ĠInt , Ġsize : ĠInt ): ĠUInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscratch pad . get Sw apped UInt ( offset Ġ+ Ġ( off Ġ* ĠSTR IDE ), Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( off : ĠInt , Ġarr : ĠUInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscratch pad . set Sw apped UInt ( offset Ġ+ Ġ( off Ġ* ĠSTR IDE ), Ġarr ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ class ĠU Long Pointer ( scratch pad : ĠScr atch pad , Ġoffset : ĠInt ) Ġ: ĠPointer < UL ong >( scratch pad , Ġoffset ) Ġ{ ĊĠĠĠ Ġoverride Ġval ĠSTR IDE Ġ= Ġ 8 ĊĠĠĠ Ġoperator Ġfun Ġget ( off : ĠInt ): ĠU Long Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġscratch pad . get Sw apped UL ong ( offset Ġ+ Ġ( off Ġ* ĠSTR IDE )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( c : ĠInt , Ġvalue : ĠU Long ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscratch pad . set Sw apped UL ong ( offset Ġ+ Ġ( c Ġ* ĠSTR IDE ), Ġvalue ) ĊĠĠĠ Ġ} Ċ }