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
 | 
						|
 |