66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef HX_INTERFACE_H
 | |
| #define HX_INTERFACE_H
 | |
| 
 | |
| namespace hx
 | |
| {
 | |
| 
 | |
| HXCPP_EXTERN_CLASS_ATTRIBUTES void InvalidInterface();
 | |
| 
 | |
| template<typename T>
 | |
| inline T interface_cast(void *ptr)
 | |
| {
 | |
|    #if defined(HXCPP_GC_CHECK_POINTER) || defined(HXCPP_DEBUG)
 | |
|    if (!ptr) hx::InvalidInterface();
 | |
|    #endif
 | |
|    return static_cast<T>(ptr);
 | |
| }
 | |
| 
 | |
| #if (HXCPP_API_LEVEL >= 330)
 | |
| template<typename T>
 | |
| inline T interface_check(T inObj,int interfaceId)
 | |
| {
 | |
|    Dynamic d(inObj);
 | |
|    if ( !d.mPtr || !d->_hx_getInterface(interfaceId))
 | |
|       hx::BadCast();
 | |
|    return inObj;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #if (HXCPP_API_LEVEL < 330)
 | |
| class HXCPP_EXTERN_CLASS_ATTRIBUTES Interface : public hx::Object
 | |
| {
 | |
| public:
 | |
|    // The following functions make use of : hx::Object *__GetRealObject();
 | |
| 
 | |
| 	void __Mark(hx::MarkContext *__inCtx);
 | |
|    hx::Object *__ToInterface(const hx::type_info &);
 | |
| 	int __GetType() const;
 | |
| 	void *__GetHandle() const;
 | |
| 	hx::FieldRef __FieldRef(const ::String &);
 | |
| 	::String __ToString() const;
 | |
| 	int __ToInt() const;
 | |
| 	double __ToDouble() const;
 | |
| 	const char * __CStr() const;
 | |
| 	::String toString();
 | |
| 	bool __HasField(const ::String &);
 | |
|    hx::Val __Field(const ::String &, hx::PropertyAccess inCallProp);
 | |
| 	Dynamic __IField(int);
 | |
|    hx::Val __SetField(const ::String &,const hx::Val &, hx::PropertyAccess inCallProp);
 | |
| 	void __SetThis(Dynamic);
 | |
| 	void __GetFields(Array< ::String> &);
 | |
| 	hx::Class __GetClass() const;
 | |
| 	int __Compare(const hx::Object *) const;
 | |
| 
 | |
|    /* No need for enum options - not in interfaces */
 | |
|    /* No need for array options - not in interfaces */
 | |
|    /* No need for function options - not in interfaces */
 | |
| };
 | |
| #endif
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| #endif
 | |
| 
 |