Object * Object::Parse(Context * ctx){ Object * ret = NULL; Header hdr; hdr.Read(ctx); if(hdr.GetFlag() == FLAG_ARRAY){ NativeType type = hdr.GetType(); if(type!=0){ int64_t count = hdr.GetLength() / Native::SizeForNative(type); Array * array = Array::WithType(type,(uint32_t)count); dynamic_cast<Object*>(array)->Read(hdr, ctx); ret = array; }else{ Array * array = Array::WithCapacity(); dynamic_cast<Object*>(array)->Read(hdr, ctx); ret = array; } }else if(hdr.GetFlag() == FLAG_MAP){ Map * obj = new Map(); dynamic_cast<Object*>(obj)->Read(hdr, ctx); ret = obj; }else if(hdr.GetFlag() == FLAG_OBJECT){ Native * obj = new Native(); dynamic_cast<Object*>(obj)->Read(hdr, ctx); ret = obj; } return ret; }