forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			756 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			756 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #ifndef HX_ANON_H
 | ||
|  | #define HX_ANON_H
 | ||
|  | 
 | ||
|  | 
 | ||
|  | namespace hx | ||
|  | { | ||
|  | 
 | ||
|  | typedef Dynamic FieldMap; | ||
|  | 
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | Dynamic FieldMapCreate(); | ||
|  | 
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | bool FieldMapGet(Dynamic *inMap, const ::String &inName, ::Dynamic &outValue); | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | bool FieldMapHas(Dynamic *inMap, const ::String &inName); | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | bool FieldMapGet(Dynamic *inMap, int inID, ::Dynamic &outValue); | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | #ifdef HXCPP_GC_GENERATIONAL
 | ||
|  | void FieldMapSet(hx::Object *inThis,Dynamic *inMap, const ::String &inName, const ::Dynamic &inValue); | ||
|  | #else
 | ||
|  | void FieldMapSet(Dynamic *inMap, const ::String &inName, const ::Dynamic &inValue); | ||
|  | #endif
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | void FieldMapAppendFields(Dynamic *inMap,::Array< ::String> &outFields); | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | void FieldMapMark(Dynamic *inMap,hx::MarkContext *__inCtx); | ||
|  | #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | void FieldMapVisit(Dynamic **inMap,hx::VisitContext *__inCtx); | ||
|  | #endif
 | ||
|  | 
 | ||
|  | } // end namespace hx
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | namespace hx | ||
|  | { | ||
|  | 
 | ||
|  | // --- hx::Anon_obj ----------------------------------------------
 | ||
|  | //
 | ||
|  | // The hx::Anon_obj contains an arbitrary string map of fields.
 | ||
|  | 
 | ||
|  | class HXCPP_EXTERN_CLASS_ATTRIBUTES Anon_obj : public hx::Object | ||
|  | { | ||
|  |    typedef hx::Anon_obj OBJ_; | ||
|  |    typedef hx::ObjectPtr<hx::Anon_obj> Anon; | ||
|  |    typedef hx::Object super; | ||
|  | 
 | ||
|  |    inline void *operator new( size_t inSize, int inExtra ) | ||
|  |    { | ||
|  |       return hx::Object::operator new(inSize+inExtra, true, 0); | ||
|  |    } | ||
|  | 
 | ||
|  |    struct VariantKey | ||
|  |    { | ||
|  |       int    hash; | ||
|  |       String key; | ||
|  |       cpp::Variant value; | ||
|  |    }; | ||
|  | 
 | ||
|  |    Dynamic mFields; | ||
|  |    int     mFixedFields; | ||
|  | 
 | ||
|  | public: | ||
|  |    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdDynamic }; | ||
|  | 
 | ||
|  |    inline void *operator new( size_t inSize ) | ||
|  |    { | ||
|  |       return hx::Object::operator new(inSize, true, 0); | ||
|  |    } | ||
|  |    inline void operator delete(void *, size_t inSize ) { } | ||
|  |    inline void operator delete(void *, size_t inSize, int inExtra ) { } | ||
|  | 
 | ||
|  |    inline Anon_obj *setFixed(int index, const String &inName, const ::cpp::Variant &inValue) | ||
|  |    { | ||
|  |       VariantKey *fixed = getFixed() + index; | ||
|  |       fixed->hash = inName.hash(); | ||
|  |       fixed->key = inName; | ||
|  |       fixed->value = inValue; | ||
|  |       if (inValue.type == ::cpp::Variant::typeObject) { | ||
|  |         HX_OBJ_WB_GET(this, inValue.valObject); | ||
|  |       } | ||
|  |       else if (inValue.type == ::cpp::Variant::typeString) { | ||
|  |         HX_OBJ_WB_GET(this, inValue.valStringPtr); | ||
|  |       } | ||
|  |       return this; | ||
|  |    } | ||
|  |    inline VariantKey *getFixed() | ||
|  |    { | ||
|  |       return (VariantKey *)(this + 1); | ||
|  |    } | ||
|  |    inline int findFixed(const ::String &inKey,bool inSkip5 = false); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |    Anon_obj(int inFixedFields = 0); | ||
|  | 
 | ||
|  |    static Anon Create(int inElements) | ||
|  |    { | ||
|  |       return Anon(new (inElements*sizeof(VariantKey) ) hx::Anon_obj(inElements) ); | ||
|  |    } | ||
|  | 
 | ||
|  |    static Anon Create() { return Anon(new (0) hx::Anon_obj); } | ||
|  |    static Anon Create(const Dynamic &inSrc) { return Anon(new (0) hx::Anon_obj); } | ||
|  | 
 | ||
|  |    static Dynamic __CreateEmpty() { return Anon(new (0) hx::Anon_obj); } | ||
|  |    static Dynamic __Create(DynamicArray inArgs); | ||
|  |    static void __boot(); | ||
|  | 
 | ||
|  |    void operator delete( void *, int) { } | ||
|  | 
 | ||
|  | 
 | ||
|  |    hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp); | ||
|  |    bool __HasField(const String &inString); | ||
|  |    hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp); | ||
|  |    virtual void __GetFields(Array<String> &outFields); | ||
|  |    Dynamic *__GetFieldMap() { return &mFields; } | ||
|  | 
 | ||
|  |    virtual int __GetType() const { return vtObject; } | ||
|  | 
 | ||
|  |    hx::Anon_obj *Add(const String &inName,const Dynamic &inValue,bool inSetThisPointer=true); | ||
|  |    void __Mark(hx::MarkContext *__inCtx); | ||
|  |    #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  |    void __Visit(hx::VisitContext *__inCtx); | ||
|  |    #endif
 | ||
|  | 
 | ||
|  |    String __ToString() const; | ||
|  |    String toString(); | ||
|  | 
 | ||
|  |    static hx::ObjectPtr<hx::Class_obj> __mClass; \ | ||
|  |    static hx::ObjectPtr<hx::Class_obj> &__SGetClass() { return __mClass; } | ||
|  |    #if (HXCPP_API_LEVEL<331)
 | ||
|  |    bool __Is(hx::Object *inObj) const { return dynamic_cast<OBJ_ *>(inObj)!=0; } | ||
|  |    #endif
 | ||
|  |    hx::ObjectPtr<hx::Class_obj > __GetClass() const { return __mClass; } | ||
|  | 
 | ||
|  |    bool __Remove(String inKey); | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | typedef hx::ObjectPtr<hx::Anon_obj> Anon; | ||
|  | 
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | Anon SourceInfo(String inFile, int inLine, String inClass, String inMethod); | ||
|  | 
 | ||
|  | 
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES String StringFromAnonFields(hx::Object *inPtr); | ||
|  | 
 | ||
|  | 
 | ||
|  | template<typename _hx_T0> | ||
|  | class AnonStruct1_obj : public hx::Object | ||
|  | { | ||
|  | public: | ||
|  |    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdDynamic }; | ||
|  | 
 | ||
|  |    String name0; _hx_T0 t0; | ||
|  | 
 | ||
|  |    inline static hx::Object *Create(const String &inName0, _hx_T0 inT0) | ||
|  |    { | ||
|  |       AnonStruct1_obj *result = new AnonStruct1_obj; | ||
|  |       result->name0 = inName0; result->t0 = inT0; | ||
|  |       if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT0)); | ||
|  |       } | ||
|  |       return result; | ||
|  |    } | ||
|  |    hx::Val __Field(const String &inField, hx::PropertyAccess) | ||
|  |    { | ||
|  |       if (HX_QSTR_EQ(inField,name0)) return t0; | ||
|  |       return null(); | ||
|  |    } | ||
|  |    hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s || HX_QSTR_EQ(inField,name0)) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       hx::Throw(HX_CSTRING("Missing field ") + inField); | ||
|  |       return inValue; | ||
|  |    } | ||
|  | 
 | ||
|  |    void __Mark(hx::MarkContext *__inCtx) | ||
|  |    { | ||
|  |       HX_MARK_MEMBER(t0); | ||
|  |    } | ||
|  |    #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  |    void __Visit(hx::VisitContext *__inCtx) | ||
|  |    { | ||
|  |       HX_VISIT_MEMBER(t0); | ||
|  |    } | ||
|  |    #endif
 | ||
|  | 
 | ||
|  |     void __GetFields(Array<String> &outFields) | ||
|  |     { | ||
|  |        outFields->push(name0); | ||
|  |     } | ||
|  | 
 | ||
|  |    String toString() { return StringFromAnonFields(this); } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | template<typename _hx_T0, typename _hx_T1> | ||
|  | class AnonStruct2_obj : public hx::Object | ||
|  | { | ||
|  | public: | ||
|  |    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdDynamic }; | ||
|  | 
 | ||
|  |    String name0; _hx_T0 t0; | ||
|  |    String name1; _hx_T1 t1; | ||
|  | 
 | ||
|  |    inline static hx::Object *Create(const String &inName0, _hx_T0 inT0, | ||
|  |                              const String &inName1, _hx_T1 inT1) | ||
|  |    { | ||
|  |       AnonStruct2_obj *result = new AnonStruct2_obj; | ||
|  |       result->name0 = inName0; result->t0 = inT0; | ||
|  |       if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT0)); | ||
|  |       } | ||
|  |       result->name1 = inName1; result->t1 = inT1; | ||
|  |       if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT1)); | ||
|  |       } | ||
|  |       return result; | ||
|  |    } | ||
|  |    hx::Val __Field(const String &inField, hx::PropertyAccess) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) return t0; | ||
|  |       if (inField.__s==name1.__s) return t1; | ||
|  | 
 | ||
|  |       #ifdef HX_SMART_STRINGS
 | ||
|  |       if (!inField.isAsciiEncodedQ()) | ||
|  |          return null(); | ||
|  |       #endif
 | ||
|  | 
 | ||
|  |       if (HX_QSTR_EQ_AE(inField,name0)) return t0; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name1)) return t1; | ||
|  |       return null(); | ||
|  |    } | ||
|  |    hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name1.__s) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  | 
 | ||
|  |       if (HX_QSTR_EQ(inField,name0)) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name1)) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       hx::Throw(HX_CSTRING("Missing field ") + inField); | ||
|  |       return inValue; | ||
|  |    } | ||
|  | 
 | ||
|  |    void __Mark(hx::MarkContext *__inCtx) | ||
|  |    { | ||
|  |       HX_MARK_MEMBER(t0); | ||
|  |       HX_MARK_MEMBER(t1); | ||
|  |    } | ||
|  |    #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  |    void __Visit(hx::VisitContext *__inCtx) | ||
|  |    { | ||
|  |       HX_VISIT_MEMBER(t0); | ||
|  |       HX_VISIT_MEMBER(t1); | ||
|  |    } | ||
|  |    #endif
 | ||
|  | 
 | ||
|  |     void __GetFields(Array<String> &outFields) | ||
|  |     { | ||
|  |        outFields->push(name0); | ||
|  |        outFields->push(name1); | ||
|  |     } | ||
|  | 
 | ||
|  |    String toString() { return StringFromAnonFields(this); } | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | template<typename _hx_T0, typename _hx_T1, typename _hx_T2> | ||
|  | class AnonStruct3_obj : public hx::Object | ||
|  | { | ||
|  | public: | ||
|  |    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdDynamic }; | ||
|  | 
 | ||
|  |    String name0; _hx_T0 t0; | ||
|  |    String name1; _hx_T1 t1; | ||
|  |    String name2; _hx_T2 t2; | ||
|  | 
 | ||
|  |    inline static hx::Object *Create(const String &inName0, _hx_T0 inT0, | ||
|  |                              const String &inName1, _hx_T1 inT1, | ||
|  |                              const String &inName2, _hx_T2 inT2) | ||
|  |    { | ||
|  |       AnonStruct3_obj *result = new AnonStruct3_obj; | ||
|  |       result->name0 = inName0; result->t0 = inT0; | ||
|  |       if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT0)); | ||
|  |       } | ||
|  |       result->name1 = inName1; result->t1 = inT1; | ||
|  |       if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT1)); | ||
|  |       } | ||
|  |       result->name2 = inName2; result->t2 = inT2; | ||
|  |       if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT2)); | ||
|  |       } | ||
|  |       return result; | ||
|  |    } | ||
|  |    hx::Val __Field(const String &inField, hx::PropertyAccess) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) return t0; | ||
|  |       if (inField.__s==name1.__s) return t1; | ||
|  |       if (inField.__s==name2.__s) return t2; | ||
|  |       #ifdef HX_SMART_STRINGS
 | ||
|  |       if (!inField.isAsciiEncodedQ()) | ||
|  |          return null(); | ||
|  |       #endif
 | ||
|  |       if (HX_QSTR_EQ_AE(inField,name0)) return t0; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name1)) return t1; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name2)) return t2; | ||
|  |       return null(); | ||
|  |    } | ||
|  |    hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name1.__s) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name2.__s) { | ||
|  |         t2 = inValue.Cast< _hx_T2 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t2)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  | 
 | ||
|  | 
 | ||
|  |       if (HX_QSTR_EQ(inField,name0)) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name1)) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name2)) { | ||
|  |         t2 = inValue.Cast< _hx_T2 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t2)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       hx::Throw(HX_CSTRING("Missing field ") + inField); | ||
|  |       return inValue; | ||
|  |    } | ||
|  | 
 | ||
|  |    void __Mark(hx::MarkContext *__inCtx) | ||
|  |    { | ||
|  |       HX_MARK_MEMBER(t0); | ||
|  |       HX_MARK_MEMBER(t1); | ||
|  |       HX_MARK_MEMBER(t2); | ||
|  |    } | ||
|  |    #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  |    void __Visit(hx::VisitContext *__inCtx) | ||
|  |    { | ||
|  |       HX_VISIT_MEMBER(t0); | ||
|  |       HX_VISIT_MEMBER(t1); | ||
|  |       HX_VISIT_MEMBER(t2); | ||
|  |    } | ||
|  |    #endif
 | ||
|  | 
 | ||
|  |     void __GetFields(Array<String> &outFields) | ||
|  |     { | ||
|  |        outFields->push(name0); | ||
|  |        outFields->push(name1); | ||
|  |        outFields->push(name2); | ||
|  |     } | ||
|  | 
 | ||
|  |    String toString() { return StringFromAnonFields(this); } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | template<typename _hx_T0, typename _hx_T1, typename _hx_T2, typename _hx_T3> | ||
|  | class AnonStruct4_obj : public hx::Object | ||
|  | { | ||
|  | public: | ||
|  |    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdDynamic }; | ||
|  | 
 | ||
|  |    String name0; _hx_T0 t0; | ||
|  |    String name1; _hx_T1 t1; | ||
|  |    String name2; _hx_T2 t2; | ||
|  |    String name3; _hx_T3 t3; | ||
|  | 
 | ||
|  |    inline static hx::Object *Create(const String &inName0, _hx_T0 inT0, | ||
|  |                              const String &inName1, _hx_T1 inT1, | ||
|  |                              const String &inName2, _hx_T2 inT2, | ||
|  |                              const String &inName3, _hx_T3 inT3 | ||
|  |                              ) | ||
|  |    { | ||
|  |       AnonStruct4_obj *result = new AnonStruct4_obj; | ||
|  |       result->name0 = inName0; result->t0 = inT0; | ||
|  |       if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT0)); | ||
|  |       } | ||
|  |       result->name1 = inName1; result->t1 = inT1; | ||
|  |       if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT1)); | ||
|  |       } | ||
|  |       result->name2 = inName2; result->t2 = inT2; | ||
|  |       if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT2)); | ||
|  |       } | ||
|  |       result->name3 = inName3; result->t3 = inT3; | ||
|  |       if (hx::ContainsPointers<_hx_T3>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT3)); | ||
|  |       } | ||
|  |       return result; | ||
|  |    } | ||
|  |    hx::Val __Field(const String &inField, hx::PropertyAccess) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) return t0; | ||
|  |       if (inField.__s==name1.__s) return t1; | ||
|  |       if (inField.__s==name2.__s) return t2; | ||
|  |       if (inField.__s==name3.__s) return t3; | ||
|  |       #ifdef HX_SMART_STRINGS
 | ||
|  |       if (!inField.isAsciiEncodedQ()) | ||
|  |          return null(); | ||
|  |       #endif
 | ||
|  |       if (HX_QSTR_EQ_AE(inField,name0)) return t0; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name1)) return t1; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name2)) return t2; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name3)) return t3; | ||
|  |       return null(); | ||
|  |    } | ||
|  |    hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name1.__s) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name2.__s) { | ||
|  |         t2 = inValue.Cast< _hx_T2 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t2)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name3.__s) { | ||
|  |         t3 = inValue.Cast< _hx_T3 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T3>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t3)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       if (HX_QSTR_EQ(inField,name0)) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name1)) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         }   | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name2)) { | ||
|  |         t2 = inValue.Cast< _hx_T2 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t2)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name3)) { | ||
|  |         t3 = inValue.Cast< _hx_T3 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T3>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t3)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       hx::Throw(HX_CSTRING("Missing field ") + inField); | ||
|  |       return inValue; | ||
|  |    } | ||
|  | 
 | ||
|  |    void __Mark(hx::MarkContext *__inCtx) | ||
|  |    { | ||
|  |       HX_MARK_MEMBER(t0); | ||
|  |       HX_MARK_MEMBER(t1); | ||
|  |       HX_MARK_MEMBER(t2); | ||
|  |       HX_MARK_MEMBER(t3); | ||
|  |    } | ||
|  |    #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  |    void __Visit(hx::VisitContext *__inCtx) | ||
|  |    { | ||
|  |       HX_VISIT_MEMBER(t0); | ||
|  |       HX_VISIT_MEMBER(t1); | ||
|  |       HX_VISIT_MEMBER(t2); | ||
|  |       HX_VISIT_MEMBER(t3); | ||
|  |    } | ||
|  |    #endif
 | ||
|  | 
 | ||
|  |     void __GetFields(Array<String> &outFields) | ||
|  |     { | ||
|  |        outFields->push(name0); | ||
|  |        outFields->push(name1); | ||
|  |        outFields->push(name2); | ||
|  |        outFields->push(name3); | ||
|  |     } | ||
|  | 
 | ||
|  |    String toString() { return StringFromAnonFields(this); } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | template<typename _hx_T0, typename _hx_T1, typename _hx_T2, typename _hx_T3, typename _hx_T4> | ||
|  | class AnonStruct5_obj : public hx::Object | ||
|  | { | ||
|  | public: | ||
|  |    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdDynamic }; | ||
|  | 
 | ||
|  |    String name0; _hx_T0 t0; | ||
|  |    String name1; _hx_T1 t1; | ||
|  |    String name2; _hx_T2 t2; | ||
|  |    String name3; _hx_T3 t3; | ||
|  |    String name4; _hx_T4 t4; | ||
|  | 
 | ||
|  |    inline static hx::Object *Create(const String &inName0, _hx_T0 inT0, | ||
|  |                              const String &inName1, _hx_T1 inT1, | ||
|  |                              const String &inName2, _hx_T2 inT2, | ||
|  |                              const String &inName3, _hx_T3 inT3, | ||
|  |                              const String &inName4, _hx_T4 inT4 | ||
|  |                              ) | ||
|  |    { | ||
|  |       AnonStruct5_obj *result = new AnonStruct5_obj; | ||
|  |       result->name0 = inName0; result->t0 = inT0; | ||
|  |       if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT0)); | ||
|  |       } | ||
|  |       result->name1 = inName1; result->t1 = inT1; | ||
|  |       if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT1)); | ||
|  |       } | ||
|  |       result->name2 = inName2; result->t2 = inT2; | ||
|  |       if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT2)); | ||
|  |       } | ||
|  |       result->name3 = inName3; result->t3 = inT3; | ||
|  |       if (hx::ContainsPointers<_hx_T3>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT3)); | ||
|  |       } | ||
|  |       result->name4 = inName4; result->t4 = inT4; | ||
|  |       if (hx::ContainsPointers<_hx_T4>()) { | ||
|  |         HX_OBJ_WB_GET(result, hx::PointerOf(inT4)); | ||
|  |       } | ||
|  |       return result; | ||
|  |    } | ||
|  |    hx::Val __Field(const String &inField, hx::PropertyAccess) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) return t0; | ||
|  |       if (inField.__s==name1.__s) return t1; | ||
|  |       if (inField.__s==name2.__s) return t2; | ||
|  |       if (inField.__s==name3.__s) return t3; | ||
|  |       if (inField.__s==name4.__s) return t4; | ||
|  |       #ifdef HX_SMART_STRINGS
 | ||
|  |       if (!inField.isAsciiEncodedQ()) | ||
|  |          return null(); | ||
|  |       #endif
 | ||
|  |       if (HX_QSTR_EQ_AE(inField,name0)) return t0; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name1)) return t1; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name2)) return t2; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name3)) return t3; | ||
|  |       if (HX_QSTR_EQ_AE(inField,name4)) return t4; | ||
|  |       return null(); | ||
|  |    } | ||
|  |    hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) | ||
|  |    { | ||
|  |       if (inField.__s==name0.__s) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name1.__s) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name2.__s) { | ||
|  |         t2 = inValue.Cast< _hx_T2 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t2)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name3.__s) { | ||
|  |         t3 = inValue.Cast< _hx_T3 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T3>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t3)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (inField.__s==name4.__s) { | ||
|  |         t4 = inValue.Cast< _hx_T4 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T4>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t4)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       if (HX_QSTR_EQ(inField,name0)) { | ||
|  |         t0 = inValue.Cast< _hx_T0 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T0>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t0)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name1)) { | ||
|  |         t1 = inValue.Cast< _hx_T1 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T1>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t1)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name2)) { | ||
|  |         t2 = inValue.Cast< _hx_T2 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T2>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t2)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name3)) { | ||
|  |         t3 = inValue.Cast< _hx_T3 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T3>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t3)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       if (HX_QSTR_EQ(inField,name4)) { | ||
|  |         t4 = inValue.Cast< _hx_T4 >(); | ||
|  |         if (hx::ContainsPointers<_hx_T4>()) { | ||
|  |           HX_OBJ_WB_GET(this, hx::PointerOf(t4)); | ||
|  |         } | ||
|  |         return inValue; | ||
|  |       } | ||
|  |       hx::Throw(HX_CSTRING("Missing field ") + inField); | ||
|  |       return inValue; | ||
|  |    } | ||
|  | 
 | ||
|  |    void __Mark(hx::MarkContext *__inCtx) | ||
|  |    { | ||
|  |       HX_MARK_MEMBER(t0); | ||
|  |       HX_MARK_MEMBER(t1); | ||
|  |       HX_MARK_MEMBER(t2); | ||
|  |       HX_MARK_MEMBER(t3); | ||
|  |       HX_MARK_MEMBER(t4); | ||
|  |    } | ||
|  |    #ifdef HXCPP_VISIT_ALLOCS
 | ||
|  |    void __Visit(hx::VisitContext *__inCtx) | ||
|  |    { | ||
|  |       HX_VISIT_MEMBER(t0); | ||
|  |       HX_VISIT_MEMBER(t1); | ||
|  |       HX_VISIT_MEMBER(t2); | ||
|  |       HX_VISIT_MEMBER(t3); | ||
|  |       HX_VISIT_MEMBER(t4); | ||
|  |    } | ||
|  |    #endif
 | ||
|  | 
 | ||
|  |     void __GetFields(Array<String> &outFields) | ||
|  |     { | ||
|  |        outFields->push(name0); | ||
|  |        outFields->push(name1); | ||
|  |        outFields->push(name2); | ||
|  |        outFields->push(name3); | ||
|  |        outFields->push(name4); | ||
|  |     } | ||
|  | 
 | ||
|  |    String toString() { return StringFromAnonFields(this); } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | } // end namespace hx
 | ||
|  | 
 | ||
|  | HXCPP_EXTERN_CLASS_ATTRIBUTES | ||
|  | bool __hxcpp_anon_remove(Dynamic inObj,::String inKey); | ||
|  | 
 | ||
|  | #endif
 |