/* Ċ Bullet ĠContinuous ĠCollision ĠDetection Ġand ĠPhysics ĠLibrary Ċ Copyright Ġ( c ) Ġ 2 0 0 3 - 2 0 0 9 ĠEr win ĠCo um ans Ġ Ġhttp :// bul le tp h ysics . org Ċ Ċ This Ġsoftware Ġis Ġprovided Ġ' as - is ', Ġwithout Ġany Ġexpress Ġor Ġimplied Ġwarranty . Ċ In Ġno Ġevent Ġwill Ġthe Ġauthors Ġbe Ġheld Ġli able Ġfor Ġany Ġdamage s Ġar ising Ġfrom Ġthe Ġuse Ġof Ġthis Ġsoftware . Ċ Permission Ġis Ġgranted Ġto Ġanyone Ġto Ġuse Ġthis Ġsoftware Ġfor Ġany Ġpurpose , Ċ including Ġcommercial Ġapplications , Ġand Ġto Ġalter Ġit Ġand Ġredistribute Ġit Ġfreely , Ċ subject Ġto Ġthe Ġfollowing Ġrestrictions : ĊĊ 1 . ĠThe Ġorigin Ġof Ġthis Ġsoftware Ġmust Ġnot Ġbe Ġmis represent ed ; Ġyou Ġmust Ġnot Ġclaim Ġthat Ġyou Ġwrote Ġthe Ġoriginal Ġsoftware . ĠIf Ġyou Ġuse Ġthis Ġsoftware Ġin Ġa Ġproduct , Ġan Ġacknowled gment Ġin Ġthe Ġproduct Ġdocumentation Ġwould Ġbe Ġappreciated Ġbut Ġis Ġnot Ġrequired . Ċ 2 . ĠAlter ed Ġsource Ġversions Ġmust Ġbe Ġplain ly Ġmarked Ġas Ġsuch , Ġand Ġmust Ġnot Ġbe Ġmis represent ed Ġas Ġbeing Ġthe Ġoriginal Ġsoftware . Ċ 3 . ĠThis Ġnotice Ġmay Ġnot Ġbe Ġremoved Ġor Ġaltered Ġfrom Ġany Ġsource Ġdistribution . Ċ */ Ċ Ċ package Ġbullet . linear Math Ċ Ċ import Ġbullet . i Ċ Ċ /** Ġvery Ġbasic Ġhash able Ġstring Ġimplementation , Ġcompatible Ġwith ĠHashMap Ġ*/ Ċ class ĠHash String ( val Ġstring : ĠString ) Ġ{ ĊĊĠĠĠ Ġval Ġhash Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠF ow ler Ġ/ ĠN oll Ġ/ ĠVo Ġ( F NV ) ĠHash Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġhash Ġ= Ġinitial F NV ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġstring . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġxor Ġ( string [ i ]. i Ġand Ġ 0 xff ) Ġ/* Ġxor Ġ Ġthe Ġlow Ġ 8 Ġbits Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ*= Ġfn v Multiple Ġ Ġ/* Ġmultiply Ġby Ġthe Ġmagic Ġnumber Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhash ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġother Ġis ĠHash String Ġ&& Ġstring Ġ== Ġother . string ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġ 3 1 Ġ* Ġstring . hashCode () Ġ+ Ġhash ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* Ġmagic Ġnumbers Ġfrom Ġhttp :// www . ist he . com / ch ongo / tech / comp / fn v / Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġinitial F NV Ġ= Ġ 2 1 6 6 1 3 6 2 6 1 . i ĊĠĠĠĠĠĠĠ Ġval Ġfn v Multiple Ġ= Ġ 1 6 7 7 7 6 1 9 ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠHASH _ NULL Ġ= Ġ 0 xffffffff . i Ċ Ċ data Ġclass ĠHash Int ( var Ġuid : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠ Ġ// to Ġour Ġsuccess ĊĠĠĠ Ġval Ġhash : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= Ġuid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThomas ĠWang 's Ġhash ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ+= Ġ( key Ġshl Ġ 1 5 ). inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġkey Ġxor Ġ( key Ġ ush r Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ+= Ġkey Ġshl Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġkey Ġxor Ġ( key Ġ ush r Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ+= Ġ( key Ġshl Ġ 1 1 ). inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkey Ġxor Ġ( key Ġ ush r Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }