package haxe;
import haxe.root.*;
@SuppressWarnings(value={"rawtypes", "unchecked"})
public class Serializer extends haxe.lang.HxObject
{
static
{
haxe.Serializer.USE_CACHE = false;
haxe.Serializer.USE_ENUM_INDEX = false;
haxe.Serializer.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:";
}
public Serializer(haxe.lang.EmptyObject empty)
{
{
}
}
public Serializer()
{
haxe.Serializer.__hx_ctor_haxe_Serializer(this);
}
public static void __hx_ctor_haxe_Serializer(haxe.Serializer __temp_me24)
{
__temp_me24.buf = new haxe.root.StringBuf();
__temp_me24.cache = new haxe.root.Array();
__temp_me24.useCache = haxe.Serializer.USE_CACHE;
__temp_me24.useEnumIndex = haxe.Serializer.USE_ENUM_INDEX;
__temp_me24.shash = new haxe.ds.StringMap<java.lang.Object>();
__temp_me24.scount = 0;
}
public static boolean USE_CACHE;
public static boolean USE_ENUM_INDEX;
public static java.lang.String BASE64;
public static java.lang.String run(java.lang.Object v)
{
haxe.Serializer s = new haxe.Serializer();
s.serialize(v);
return s.toString();
}
public static java.lang.Object __hx_createEmpty()
{
return new haxe.Serializer(((haxe.lang.EmptyObject) (haxe.lang.EmptyObject.EMPTY) ));
}
public static java.lang.Object __hx_create(haxe.root.Array arr)
{
return new haxe.Serializer();
}
public haxe.root.StringBuf buf;
public haxe.root.Array cache;
public haxe.ds.StringMap<java.lang.Object> shash;
public int scount;
public boolean useCache;
public boolean useEnumIndex;
@Override public java.lang.String toString()
{
return this.buf.toString();
}
public void serializeString(java.lang.String s)
{
java.lang.Object x = this.shash.get(s);
if (( ! (( x == null )) ))
{
this.buf.add("R");
this.buf.add(x);
return ;
}
this.shash.set(s, this.scount++);
this.buf.add("y");
s = haxe.root.StringTools.urlEncode(s);
this.buf.add(s.length());
this.buf.add(":");
this.buf.add(s);
}
public boolean serializeRef(java.lang.Object v)
{
{
int _g1 = 0;
int _g = this.cache.length;
while (( _g1 < _g ))
{
int i = _g1++;
if (haxe.lang.Runtime.eq(this.cache.__get(i), v))
{
this.buf.add("r");
this.buf.add(i);
return true;
}
}
}
this.cache.push(v);
return false;
}
public void serializeFields(java.lang.Object v)
{
{
int _g = 0;
haxe.root.Array<java.lang.String> _g1 = haxe.root.Reflect.fields(v);
while (( _g < _g1.length ))
{
java.lang.String f = _g1.__get(_g);
++ _g;
this.serializeString(f);
this.serialize(haxe.root.Reflect.field(v, f));
}
}
this.buf.add("g");
}
public void serialize(java.lang.Object v)
{
{
haxe.root.ValueType _g = haxe.root.Type.typeof(v);
switch (haxe.root.Type.enumIndex(_g))
{
case 0:
{
this.buf.add("n");
break;
}
case 1:
{
if (haxe.lang.Runtime.eq(v, 0))
{
this.buf.add("z");
return ;
}
this.buf.add("i");
this.buf.add(v);
break;
}
case 2:
{
if (java.lang.Double.isNaN(((double) (haxe.lang.Runtime.toDouble(v)) )))
{
this.buf.add("k");
}
else
{
if ( ! (haxe.lang.Runtime.isFinite(((double) (haxe.lang.Runtime.toDouble(v)) ))) )
{
this.buf.add(( (( haxe.lang.Runtime.compare(v, 0) < 0 )) ? ("m") : ("p") ));
}
else
{
this.buf.add("d");
this.buf.add(v);
}
}
break;
}
case 3:
{
this.buf.add(( (haxe.lang.Runtime.toBool((v))) ? ("t") : ("f") ));
break;
}
case 6:
{
java.lang.Class c = ((java.lang.Class) (_g.params.__get(0)) );
{
if (( ((java.lang.Object) (c) ) == ((java.lang.Object) (java.lang.String.class) ) ))
{
this.serializeString(haxe.lang.Runtime.toString(v));
return ;
}
if (( this.useCache && this.serializeRef(v) ))
{
return ;
}
{
java.lang.Class __temp_switch94 = (c);
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.root.Array.class))
{
int ucount = 0;
this.buf.add("a");
int l = ((int) (haxe.lang.Runtime.toInt(haxe.lang.Runtime.getField(v, "length", true))) );
{
int _g1 = 0;
while (( _g1 < ((int) (l) ) ))
{
int i = _g1++;
if (( ((java.lang.Object) (haxe.lang.Runtime.callField(v, "__get", new haxe.root.Array(new java.lang.Object[]{i}))) ) == null ))
{
ucount++;
}
else
{
if (( ucount > 0 ))
{
if (( ucount == 1 ))
{
this.buf.add("n");
}
else
{
this.buf.add("u");
this.buf.add(ucount);
}
ucount = 0;
}
this.serialize(((java.lang.Object) (haxe.lang.Runtime.callField(v, "__get", new haxe.root.Array(new java.lang.Object[]{i}))) ));
}
}
}
if (( ucount > 0 ))
{
if (( ucount == 1 ))
{
this.buf.add("n");
}
else
{
this.buf.add("u");
this.buf.add(ucount);
}
}
this.buf.add("h");
}
else
{
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.root.List.class))
{
this.buf.add("l");
haxe.root.List v1 = ((haxe.root.List) (v) );
{
java.lang.Object __temp_iterator41 = v1.iterator();
while (haxe.lang.Runtime.toBool(haxe.lang.Runtime.callField(__temp_iterator41, "hasNext", null)))
{
java.lang.Object i = ((java.lang.Object) (haxe.lang.Runtime.callField(__temp_iterator41, "next", null)) );
this.serialize(i);
}
}
this.buf.add("h");
}
else
{
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.root.Date.class))
{
haxe.root.Date d = ((haxe.root.Date) (v) );
this.buf.add("v");
this.buf.add(d.toString());
}
else
{
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.ds.StringMap.class))
{
this.buf.add("b");
haxe.ds.StringMap v1 = ((haxe.ds.StringMap) (v) );
{
java.lang.Object __temp_iterator42 = v1.keys();
while (haxe.lang.Runtime.toBool(haxe.lang.Runtime.callField(__temp_iterator42, "hasNext", null)))
{
java.lang.String k = haxe.lang.Runtime.toString(haxe.lang.Runtime.callField(__temp_iterator42, "next", null));
this.serializeString(k);
this.serialize(v1.get(k));
}
}
this.buf.add("h");
}
else
{
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.ds.IntMap.class))
{
this.buf.add("q");
haxe.ds.IntMap v1 = ((haxe.ds.IntMap) (v) );
{
java.lang.Object __temp_iterator43 = v1.keys();
while (haxe.lang.Runtime.toBool(haxe.lang.Runtime.callField(__temp_iterator43, "hasNext", null)))
{
int k = ((int) (haxe.lang.Runtime.toInt(haxe.lang.Runtime.callField(__temp_iterator43, "next", null))) );
this.buf.add(":");
this.buf.add(k);
this.serialize(v1.get(k));
}
}
this.buf.add("h");
}
else
{
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.ds.ObjectMap.class))
{
this.buf.add("M");
haxe.ds.ObjectMap v1 = ((haxe.ds.ObjectMap) (v) );
{
java.lang.Object __temp_iterator44 = v1.keys();
while (haxe.lang.Runtime.toBool(haxe.lang.Runtime.callField(__temp_iterator44, "hasNext", null)))
{
java.lang.Object k = ((java.lang.Object) (haxe.lang.Runtime.callField(__temp_iterator44, "next", null)) );
this.serialize(k);
this.serialize(v1.get(k));
}
}
this.buf.add("h");
}
else
{
if (haxe.lang.Runtime.eq(__temp_switch94, haxe.io.Bytes.class))
{
haxe.io.Bytes v1 = ((haxe.io.Bytes) (v) );
int i = 0;
int max = ( v1.length - 2 );
haxe.root.StringBuf charsBuf = new haxe.root.StringBuf();
java.lang.String b64 = haxe.Serializer.BASE64;
while (( i < max ))
{
int b1 = 0;
{
int pos = i++;
b1 = ( v1.b[pos] & 255 );
}
int b2 = 0;
{
int pos = i++;
b2 = ( v1.b[pos] & 255 );
}
int b3 = 0;
{
int pos = i++;
b3 = ( v1.b[pos] & 255 );
}
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( b1 >> 2 )));
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( (( ( b1 << 4 ) | ( b2 >> 4 ) )) & 63 )));
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( (( ( b2 << 2 ) | ( b3 >> 6 ) )) & 63 )));
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( b3 & 63 )));
}
if (( i == max ))
{
int b1 = 0;
{
int pos = i++;
b1 = ( v1.b[pos] & 255 );
}
int b2 = 0;
{
int pos = i++;
b2 = ( v1.b[pos] & 255 );
}
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( b1 >> 2 )));
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( (( ( b1 << 4 ) | ( b2 >> 4 ) )) & 63 )));
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( ( b2 << 2 ) & 63 )));
}
else
{
if (( i == ( max + 1 ) ))
{
int b1 = 0;
{
int pos = i++;
b1 = ( v1.b[pos] & 255 );
}
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( b1 >> 2 )));
charsBuf.add(haxe.lang.StringExt.charAt(b64, ( ( b1 << 4 ) & 63 )));
}
}
java.lang.String chars = charsBuf.toString();
this.buf.add("s");
this.buf.add(chars.length());
this.buf.add(":");
this.buf.add(chars);
}
else
{
this.cache.pop();
if (haxe.root.Reflect.hasField(v, "hxSerialize"))
{
this.buf.add("C");
this.serializeString(haxe.root.Type.getClassName(c));
this.cache.push(v);
haxe.lang.Runtime.callField(v, "hxSerialize", new haxe.root.Array(new java.lang.Object[]{this}));
this.buf.add("g");
}
else
{
this.buf.add("c");
this.serializeString(haxe.root.Type.getClassName(c));
this.cache.push(v);
this.serializeFields(v);
}
}
}
}
}
}
}
}
}
}
break;
}
case 4:
{
if (( this.useCache && this.serializeRef(v) ))
{
return ;
}
this.buf.add("o");
this.serializeFields(v);
break;
}
case 7:
{
java.lang.Class e = ((java.lang.Class) (_g.params.__get(0)) );
{
if (( this.useCache && this.serializeRef(v) ))
{
return ;
}
this.cache.pop();
this.buf.add(( (this.useEnumIndex) ? ("j") : ("w") ));
this.serializeString(haxe.root.Type.getEnumName(e));
if (this.useEnumIndex)
{
this.buf.add(":");
this.buf.add(haxe.root.Type.enumIndex(v));
}
else
{
this.serializeString(haxe.root.Type.enumConstructor(v));
}
this.buf.add(":");
haxe.root.Array arr = haxe.root.Type.enumParameters(v);
if (( arr != null ))
{
this.buf.add(arr.length);
{
int _g1 = 0;
while (( _g1 < arr.length ))
{
java.lang.Object v1 = arr.__get(_g1);
++ _g1;
this.serialize(v1);
}
}
}
else
{
this.buf.add("0");
}
this.cache.push(v);
}
break;
}
case 5:
{
throw haxe.lang.HaxeException.wrap("Cannot serialize function");
}
default:
{
throw haxe.lang.HaxeException.wrap(( "Cannot serialize " + haxe.root.Std.string(v) ));
}
}
}
}
@Override public double __hx_setField_f(java.lang.String field, double value, boolean handleProperties)
{
{
boolean __temp_executeDef95 = true;
switch (field.hashCode())
{
case -907763588:
{
if (field.equals("scount"))
{
__temp_executeDef95 = false;
this.scount = ((int) (value) );
return value;
}
break;
}
}
if (__temp_executeDef95)
{
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_executeDef96 = true;
switch (field.hashCode())
{
case 1284193930:
{
if (field.equals("useEnumIndex"))
{
__temp_executeDef96 = false;
this.useEnumIndex = haxe.lang.Runtime.toBool(value);
return value;
}
break;
}
case 97907:
{
if (field.equals("buf"))
{
__temp_executeDef96 = false;
this.buf = ((haxe.root.StringBuf) (value) );
return value;
}
break;
}
case -309504453:
{
if (field.equals("useCache"))
{
__temp_executeDef96 = false;
this.useCache = haxe.lang.Runtime.toBool(value);
return value;
}
break;
}
case 94416770:
{
if (field.equals("cache"))
{
__temp_executeDef96 = false;
this.cache = ((haxe.root.Array) (value) );
return value;
}
break;
}
case -907763588:
{
if (field.equals("scount"))
{
__temp_executeDef96 = false;
this.scount = ((int) (haxe.lang.Runtime.toInt(value)) );
return value;
}
break;
}
case 109400065:
{
if (field.equals("shash"))
{
__temp_executeDef96 = false;
this.shash = ((haxe.ds.StringMap<java.lang.Object>) (value) );
return value;
}
break;
}
}
if (__temp_executeDef96)
{
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_executeDef97 = true;
switch (field.hashCode())
{
case -573479200:
{
if (field.equals("serialize"))
{
__temp_executeDef97 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("serialize"))) );
}
break;
}
case 97907:
{
if (field.equals("buf"))
{
__temp_executeDef97 = false;
return this.buf;
}
break;
}
case -7657031:
{
if (field.equals("serializeFields"))
{
__temp_executeDef97 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("serializeFields"))) );
}
break;
}
case 94416770:
{
if (field.equals("cache"))
{
__temp_executeDef97 = false;
return this.cache;
}
break;
}
case 861138323:
{
if (field.equals("serializeRef"))
{
__temp_executeDef97 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("serializeRef"))) );
}
break;
}
case 109400065:
{
if (field.equals("shash"))
{
__temp_executeDef97 = false;
return this.shash;
}
break;
}
case 375065361:
{
if (field.equals("serializeString"))
{
__temp_executeDef97 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("serializeString"))) );
}
break;
}
case -907763588:
{
if (field.equals("scount"))
{
__temp_executeDef97 = false;
return this.scount;
}
break;
}
case -1776922004:
{
if (field.equals("toString"))
{
__temp_executeDef97 = false;
return ((haxe.lang.Function) (new haxe.lang.Closure(((java.lang.Object) (this) ), haxe.lang.Runtime.toString("toString"))) );
}
break;
}
case -309504453:
{
if (field.equals("useCache"))
{
__temp_executeDef97 = false;
return this.useCache;
}
break;
}
case 1284193930:
{
if (field.equals("useEnumIndex"))
{
__temp_executeDef97 = false;
return this.useEnumIndex;
}
break;
}
}
if (__temp_executeDef97)
{
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_executeDef98 = true;
switch (field.hashCode())
{
case -907763588:
{
if (field.equals("scount"))
{
__temp_executeDef98 = false;
return ((double) (this.scount) );
}
break;
}
}
if (__temp_executeDef98)
{
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_executeDef99 = true;
switch (field.hashCode())
{
case -573479200:
{
if (field.equals("serialize"))
{
__temp_executeDef99 = false;
this.serialize(dynargs.__get(0));
}
break;
}
case -1776922004:
{
if (field.equals("toString"))
{
__temp_executeDef99 = false;
return this.toString();
}
break;
}
case -7657031:
{
if (field.equals("serializeFields"))
{
__temp_executeDef99 = false;
this.serializeFields(dynargs.__get(0));
}
break;
}
case 375065361:
{
if (field.equals("serializeString"))
{
__temp_executeDef99 = false;
this.serializeString(haxe.lang.Runtime.toString(dynargs.__get(0)));
}
break;
}
case 861138323:
{
if (field.equals("serializeRef"))
{
__temp_executeDef99 = false;
return this.serializeRef(dynargs.__get(0));
}
break;
}
}
if (__temp_executeDef99)
{
return super.__hx_invokeField(field, dynargs);
}
}
return null;
}
@Override public void __hx_getFields(haxe.root.Array<java.lang.String> baseArr)
{
baseArr.push("useEnumIndex");
baseArr.push("useCache");
baseArr.push("scount");
baseArr.push("shash");
baseArr.push("cache");
baseArr.push("buf");
{
super.__hx_getFields(baseArr);
}
}
}