package haxe.ds;
import haxe.root.*;
@SuppressWarnings(value={"rawtypes", "unchecked"})
public class StringMap<T> extends haxe.lang.HxObject implements haxe.root.IMap<java.lang.String, T>
{
public StringMap(haxe.lang.EmptyObject empty)
{
{
}
}
public StringMap()
{
haxe.ds.StringMap.__hx_ctor_haxe_ds_StringMap(this);
}
public static <T_c> void __hx_ctor_haxe_ds_StringMap(haxe.ds.StringMap<T_c> __temp_me28)
{
__temp_me28.cachedIndex = -1;
}
public static java.lang.Object __hx_createEmpty()
{
return new haxe.ds.StringMap<java.lang.Object>(((haxe.lang.EmptyObject) (haxe.lang.EmptyObject.EMPTY) ));
}
public static java.lang.Object __hx_create(haxe.root.Array arr)
{
return new haxe.ds.StringMap<java.lang.Object>();
}
public int[] hashes;
public java.lang.String[] _keys;
public T[] vals;
public int nBuckets;
public int size;
public int nOccupied;
public int upperBound;
public java.lang.String cachedKey;
public int cachedIndex;
public void set(java.lang.String key, T value)
{
int x = 0;
int k = 0;
if (( this.nOccupied >= this.upperBound ))
{
if (( this.nBuckets > ( this.size << 1 ) ))
{
this.resize(( this.nBuckets - 1 ));
}
else
{
this.resize(( this.nBuckets + 2 ));
}
}
int[] hashes = this.hashes;
java.lang.String[] keys = this._keys;
int[] hashes1 = hashes;
{
int mask = 0;
if (( this.nBuckets == 0 ))
{
mask = 0;
}
else
{
mask = ( this.nBuckets - 1 );
}
int site = x = this.nBuckets;
{
int k1 = key.hashCode();
k1 = ( ( k1 + 2127912214 ) + (( k1 << 12 )) );
k1 = ( ( k1 ^ -949894596 ) ^ ( k1 >> 19 ) );
k1 = ( ( k1 + 374761393 ) + (( k1 << 5 )) );
k1 = ( ( k1 + -744332180 ) ^ ( k1 << 9 ) );
k1 = ( ( k1 + -42973499 ) + (( k1 << 3 )) );
k1 = ( ( k1 ^ -1252372727 ) ^ ( k1 >> 16 ) );
int ret = k1;
if (( (( ret & -2 )) == 0 ))
{
if (( ret == 0 ))
{
ret = 2;
}
else
{
ret = -1;
}
}
k = ret;
}
int i = ( k & mask );
int nProbes = 0;
if (( (( hashes1[i] & -2 )) == 0 ))
{
x = i;
}
else
{
int last = i;
int flag = 0;
do
{
boolean __temp_stmt163 = false;
{
int v = flag = hashes1[i];
__temp_stmt163 = ( (( v & -2 )) == 0 );
}
boolean __temp_boolv164 = false;
if ( ! (__temp_stmt163) )
{
__temp_boolv164 = ( ( flag == k ) && haxe.lang.Runtime.valEq(this._keys[i], key) );
}
boolean __temp_stmt162 = ( __temp_stmt163 || __temp_boolv164 );
if ( ! ((__temp_stmt162)) )
{
i = ( ( i + ++ nProbes ) & mask );
}
else
{
break;
}
}
while (true);
x = i;
}
}
int flag = hashes1[x];
if (( flag == 0 ))
{
keys[x] = key;
this.vals[x] = value;
hashes1[x] = k;
this.size++;
this.nOccupied++;
}
else
{
if (( flag == 1 ))
{
keys[x] = key;
this.vals[x] = value;
hashes1[x] = k;
this.size++;
}
else
{
this.vals[x] = value;
}
}
this.cachedIndex = x;
this.cachedKey = key;
}
public int lookup(java.lang.String key)
{
if (( this.nBuckets != 0 ))
{
int[] hashes = this.hashes;
java.lang.String[] keys = this._keys;
int mask = ( this.nBuckets - 1 );
int hash = 0;
{
int k = key.hashCode();
k = ( ( k + 2127912214 ) + (( k << 12 )) );
k = ( ( k ^ -949894596 ) ^ ( k >> 19 ) );
k = ( ( k + 374761393 ) + (( k << 5 )) );
k = ( ( k + -744332180 ) ^ ( k << 9 ) );
k = ( ( k + -42973499 ) + (( k << 3 )) );
k = ( ( k ^ -1252372727 ) ^ ( k >> 16 ) );
int ret = k;
if (( (( ret & -2 )) == 0 ))
{
if (( ret == 0 ))
{
ret = 2;
}
else
{
ret = -1;
}
}
hash = ret;
}
int k = hash;
int nProbes = 0;
int i = ( k & mask );
int last = i;
int flag = 0;
do
{
boolean __temp_stmt168 = false;
{
int v = flag = hashes[i];
__temp_stmt168 = ( v == 0 );
}
boolean __temp_boolv167 = ! (__temp_stmt168) ;
boolean __temp_boolv166 = false;
if (__temp_boolv167)
{
__temp_boolv166 = (( ( ( flag == 1 ) || ( flag != k ) ) || ! (haxe.lang.Runtime.valEq(keys[i], key)) ));
}
boolean __temp_stmt165 = ( __temp_boolv167 && __temp_boolv166 );
if (__temp_stmt165)
{
i = ( ( i + ++ nProbes ) & mask );
}
else
{
break;
}
}
while (true);
if (( (( flag & -2 )) == 0 ))
{
return -1;
}
else
{
return i;
}
}
return -1;
}
public void resize(int newNBuckets)
{
int[] newHash = null;
int j = 1;
{
{
int x = newNBuckets;
-- x;
x |= ( x >>> 1 );
x |= ( x >>> 2 );
x |= ( x >>> 4 );
x |= ( x >>> 8 );
x |= ( x >>> 16 );
newNBuckets = ++ x;
}
if (( newNBuckets < 4 ))
{
newNBuckets = 4;
}
if (( this.size >= ( ( newNBuckets * 0.77 ) + 0.5 ) ))
{
j = 0;
}
else
{
int nfSize = newNBuckets;
newHash = new int[((int) (nfSize) )];
if (( this.nBuckets < newNBuckets ))
{
java.lang.String[] k = new java.lang.String[((int) (newNBuckets) )];
if (( this._keys != null ))
{
java.lang.System.arraycopy(((java.lang.Object) (this._keys) ), ((int) (0) ), ((java.lang.Object) (k) ), ((int) (0) ), ((int) (this.nBuckets) ));
}
this._keys = k;
T[] v = ((T[]) (((java.lang.Object) (new java.lang.Object[((int) (newNBuckets) )]) )) );
if (( this.vals != null ))
{
java.lang.System.arraycopy(((java.lang.Object) (this.vals) ), ((int) (0) ), ((java.lang.Object) (v) ), ((int) (0) ), ((int) (this.nBuckets) ));
}
this.vals = v;
}
}
}
if (( j != 0 ))
{
this.cachedKey = null;
this.cachedIndex = -1;
j = -1;
int nBuckets = this.nBuckets;
java.lang.String[] _keys = this._keys;
T[] vals = this.vals;
int[] hashes = this.hashes;
int newMask = ( newNBuckets - 1 );
while (( ++ j < nBuckets ))
{
int k = 0;
boolean __temp_stmt169 = false;
{
int v = k = hashes[j];
__temp_stmt169 = ( (( v & -2 )) == 0 );
}
if ( ! (__temp_stmt169) )
{
java.lang.String key = _keys[j];
T val = vals[j];
hashes[j] = 1;
while (true)
{
int nProbes = 0;
int i = ( k & newMask );
while ( ! ((( newHash[i] == 0 ))) )
{
i = ( ( i + ++ nProbes ) & newMask );
}
newHash[i] = k;
boolean __temp_boolv172 = ( i < nBuckets );
boolean __temp_boolv171 = false;
if (__temp_boolv172)
{
boolean __temp_stmt173 = false;
{
int v = k = hashes[i];
__temp_stmt173 = ( (( v & -2 )) == 0 );
}
__temp_boolv171 = ! (__temp_stmt173) ;
}
boolean __temp_stmt170 = ( __temp_boolv172 && __temp_boolv171 );
if (__temp_stmt170)
{
{
java.lang.String tmp = _keys[i];
_keys[i] = key;
key = tmp;
}
{
T tmp = vals[i];
vals[i] = val;
val = tmp;
}
hashes[i] = 1;
}
else
{
_keys[i] = key;
vals[i] = val;
break;
}
}
}
}
if (( nBuckets > newNBuckets ))
{
{
java.lang.String[] k = new java.lang.String[((int) (newNBuckets) )];
java.lang.System.arraycopy(((java.lang.Object) (_keys) ), ((int) (0) ), ((java.lang.Object) (k) ), ((int) (0) ), ((int) (newNBuckets) ));
this._keys = k;
}
{
T[] v = ((T[]) (((java.lang.Object) (new java.lang.Object[((int) (newNBuckets) )]) )) );
java.lang.System.arraycopy(((java.lang.Object) (vals) ), ((int) (0) ), ((java.lang.Object) (v) ), ((int) (0) ), ((int) (newNBuckets) ));
this.vals = v;
}
}
this.hashes = newHash;
this.nBuckets = newNBuckets;
this.nOccupied = this.size;
this.upperBound = ((int) (( ( newNBuckets * 0.77 ) + .5 )) );
}
}
public T get(java.lang.String key)
{
int idx = -1;
if (( haxe.lang.Runtime.valEq(this.cachedKey, key) && ( (idx = this.cachedIndex) != -1 ) ))
{
return this.vals[idx];
}
idx = this.lookup(key);
if (( idx != -1 ))
{
this.cachedKey = key;
this.cachedIndex = idx;
return this.vals[idx];
}
return null;
}
public java.lang.Object keys()
{
haxe.root.Array<haxe.ds.StringMap> _g1 = new haxe.root.Array<haxe.ds.StringMap>(new haxe.ds.StringMap[]{((haxe.ds.StringMap) (this) )});
haxe.root.Array<java.lang.Object> i = new haxe.root.Array<java.lang.Object>(new java.lang.Object[]{0});
haxe.root.Array<java.lang.Object> len = new haxe.root.Array<java.lang.Object>(new java.lang.Object[]{this.nBuckets});
{
haxe.lang.Function __temp_odecl174 = new haxe.ds.StringMap_keys_356__Fun<T>(((haxe.root.Array<java.lang.Object>) (i) ), ((haxe.root.Array<haxe.ds.StringMap>) (_g1) ), ((haxe.root.Array<java.lang.Object>) (len) ));
haxe.lang.Function __temp_odecl175 = new haxe.ds.StringMap_keys_367__Fun<T>(((haxe.root.Array<java.lang.Object>) (i) ), ((haxe.root.Array<haxe.ds.StringMap>) (_g1) ));
return new haxe.lang.DynamicObject(new haxe.root.Array<java.lang.String>(new java.lang.String[]{"hasNext", "next"}), new haxe.root.Array<java.lang.Object>(new java.lang.Object[]{__temp_odecl174, __temp_odecl175}), new haxe.root.Array<java.lang.String>(new java.lang.String[]{}), new haxe.root.Array<java.lang.Object>(new java.lang.Object[]{}));
}
}
@Override public double __hx_setField_f(java.lang.String field, double value, boolean handleProperties)
{
{
boolean __temp_executeDef176 = true;
switch (field.hashCode())
{
case 1005083856:
{
if (field.equals("cachedIndex"))
{
__temp_executeDef176 = false;
this.cachedIndex = ((int) (value) );
return value;
}
break;
}
case 325636987:
{
if (field.equals("nBuckets"))
{
__temp_executeDef176 = false;
this.nBuckets = ((int) (value) );
return value;
}
break;
}
case -1690761732:
{
if (field.equals("upperBound"))
{
__temp_executeDef176 = false;
this.upperBound = ((int) (value) );
return value;
}
break;
}
case 3530753:
{
if (field.equals("size"))
{
__temp_executeDef176 = false;
this.size = ((int) (value) );
return value;
}
break;
}
case -394102484:
{
if (field.equals("nOccupied"))
{
__temp_executeDef176 = false;
this.nOccupied = ((int) (value) );
return value;
}
break;
}
}
if (__temp_executeDef176)
{
return super.__hx_setField_f(field, value, handleProperties);
}
else
{
throw null;
}
}
}
@Override public java.lang.Object __hx_setField(java.lang.String field, java.lang.Object value, boolean handleProperties)
{
{
boolean __temp_executeDef177 = true;
switch (field.hashCode())
{
case 1005083856:
{
if (field.equals("cachedIndex"))
{
__temp_executeDef177 = false;
this.cachedIndex = ((int) (haxe.lang.Runtime.toInt(value)) );
return value;
}
break;
}
case -1224424900:
{
if (field.equals("hashes"))
{
__temp_executeDef177 = false;
this.hashes = ((int[]) (value) );
return value;
}
break;
}
case -553141795:
{
if (field.equals("cachedKey"))
{
__temp_executeDef177 = false;
this.cachedKey = haxe.lang.Runtime.toString(value);
return value;
}
break;
}
case 91023059:
{
if (field.equals("_keys"))
{
__temp_executeDef177 = false;
this._keys = ((java.lang.String[]) (value) );
return value;
}
break;
}
case -1690761732:
{
if (field.equals("upperBound"))
{
__temp_executeDef177 = false;
this.upperBound = ((int) (haxe.lang.Runtime.toInt(value)) );
return value;
}
break;
}
case 3612018:
{
if (field.equals("vals"))
{
__temp_executeDef177 = false;
this.vals = ((T[]) (value) );
return value;
}
break;
}
case -394102484:
{
if (field.equals("nOccupied"))
{
__temp_executeDef177 = false;
this.nOccupied = ((int) (haxe.lang.Runtime.toInt(value)) );
return value;
}
break;
}
case 325636987:
{
if (field.equals("nBuckets"))
{
__temp_executeDef177 = false;
this.nBuckets = ((int) (haxe.lang.Runtime.toInt(value)) );
return value;
}
break;
}
case 3530753:
{
if (field.equals("size"))
{
__temp_executeDef177 = false;
this.size = ((int) (haxe.lang.Runtime.toInt(value)) );
return value;
}
break;
}
}
if (__temp_executeDef177)
{
return super.__hx_setField(field, value, handleProperties);
}
else
{
throw null;
}
}
}
@Override public java.lang.Object __hx_getField(java.lang.String field, boolean throwErrors, boolean isCheck, boolean handleProperties)
{
{
boolean __temp_executeDef178 = true;
switch (field.hashCode())
{
case 3288564:
{
if (field.equals("keys"))
{
__temp_executeDef178 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("keys"))) );
}
break;
}
case -1224424900:
{
if (field.equals("hashes"))
{
__temp_executeDef178 = false;
return this.hashes;
}
break;
}
case 102230:
{
if (field.equals("get"))
{
__temp_executeDef178 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("get"))) );
}
break;
}
case 91023059:
{
if (field.equals("_keys"))
{
__temp_executeDef178 = false;
return this._keys;
}
break;
}
case -934437708:
{
if (field.equals("resize"))
{
__temp_executeDef178 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("resize"))) );
}
break;
}
case 3612018:
{
if (field.equals("vals"))
{
__temp_executeDef178 = false;
return this.vals;
}
break;
}
case -1097094790:
{
if (field.equals("lookup"))
{
__temp_executeDef178 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("lookup"))) );
}
break;
}
case 325636987:
{
if (field.equals("nBuckets"))
{
__temp_executeDef178 = false;
return this.nBuckets;
}
break;
}
case 113762:
{
if (field.equals("set"))
{
__temp_executeDef178 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("set"))) );
}
break;
}
case 3530753:
{
if (field.equals("size"))
{
__temp_executeDef178 = false;
return this.size;
}
break;
}
case 1005083856:
{
if (field.equals("cachedIndex"))
{
__temp_executeDef178 = false;
return this.cachedIndex;
}
break;
}
case -394102484:
{
if (field.equals("nOccupied"))
{
__temp_executeDef178 = false;
return this.nOccupied;
}
break;
}
case -553141795:
{
if (field.equals("cachedKey"))
{
__temp_executeDef178 = false;
return this.cachedKey;
}
break;
}
case -1690761732:
{
if (field.equals("upperBound"))
{
__temp_executeDef178 = false;
return this.upperBound;
}
break;
}
}
if (__temp_executeDef178)
{
return super.__hx_getField(field, throwErrors, isCheck, handleProperties);
}
else
{
throw null;
}
}
}
@Override public double __hx_getField_f(java.lang.String field, boolean throwErrors, boolean handleProperties)
{
{
boolean __temp_executeDef179 = true;
switch (field.hashCode())
{
case 1005083856:
{
if (field.equals("cachedIndex"))
{
__temp_executeDef179 = false;
return ((double) (this.cachedIndex) );
}
break;
}
case 325636987:
{
if (field.equals("nBuckets"))
{
__temp_executeDef179 = false;
return ((double) (this.nBuckets) );
}
break;
}
case -1690761732:
{
if (field.equals("upperBound"))
{
__temp_executeDef179 = false;
return ((double) (this.upperBound) );
}
break;
}
case 3530753:
{
if (field.equals("size"))
{
__temp_executeDef179 = false;
return ((double) (this.size) );
}
break;
}
case -394102484:
{
if (field.equals("nOccupied"))
{
__temp_executeDef179 = false;
return ((double) (this.nOccupied) );
}
break;
}
}
if (__temp_executeDef179)
{
return super.__hx_getField_f(field, throwErrors, handleProperties);
}
else
{
throw null;
}
}
}
@Override public java.lang.Object __hx_invokeField(java.lang.String field, haxe.root.Array dynargs)
{
{
boolean __temp_executeDef180 = true;
switch (field.hashCode())
{
case 3288564:
{
if (field.equals("keys"))
{
__temp_executeDef180 = false;
return this.keys();
}
break;
}
case 113762:
{
if (field.equals("set"))
{
__temp_executeDef180 = false;
this.set(haxe.lang.Runtime.toString(dynargs.__get(0)), ((T) (dynargs.__get(1)) ));
}
break;
}
case 102230:
{
if (field.equals("get"))
{
__temp_executeDef180 = false;
return this.get(haxe.lang.Runtime.toString(dynargs.__get(0)));
}
break;
}
case -1097094790:
{
if (field.equals("lookup"))
{
__temp_executeDef180 = false;
return this.lookup(haxe.lang.Runtime.toString(dynargs.__get(0)));
}
break;
}
case -934437708:
{
if (field.equals("resize"))
{
__temp_executeDef180 = false;
this.resize(((int) (haxe.lang.Runtime.toInt(dynargs.__get(0))) ));
}
break;
}
}
if (__temp_executeDef180)
{
return super.__hx_invokeField(field, dynargs);
}
}
return null;
}
@Override public void __hx_getFields(haxe.root.Array<java.lang.String> baseArr)
{
baseArr.push("cachedIndex");
baseArr.push("cachedKey");
baseArr.push("upperBound");
baseArr.push("nOccupied");
baseArr.push("size");
baseArr.push("nBuckets");
baseArr.push("vals");
baseArr.push("_keys");
baseArr.push("hashes");
{
super.__hx_getFields(baseArr);
}
}
}