#ifndef INCLUDED_snow_utils_IMemoryRange
#define INCLUDED_snow_utils_IMemoryRange

#ifndef HXCPP_H
#include <hxcpp.h>
#endif

HX_DECLARE_CLASS2(haxe,io,Bytes)
HX_DECLARE_CLASS4(snow,platform,native,utils,ByteArray)
HX_DECLARE_CLASS2(snow,utils,IDataInput)
HX_DECLARE_CLASS2(snow,utils,IMemoryRange)
namespace snow{
namespace utils{


class HXCPP_CLASS_ATTRIBUTES  IMemoryRange_obj : public hx::Interface{
	public:
		typedef hx::Interface super;
		typedef IMemoryRange_obj OBJ_;
		HX_DO_INTERFACE_RTTI;
		static void __boot();
virtual ::snow::platform::native::utils::ByteArray getByteBuffer( )=0;
		Dynamic getByteBuffer_dyn();
virtual int getStart( )=0;
		Dynamic getStart_dyn();
virtual int getLength( )=0;
		Dynamic getLength_dyn();
};

#define DELEGATE_snow_utils_IMemoryRange \
virtual ::snow::platform::native::utils::ByteArray getByteBuffer( ) { return mDelegate->getByteBuffer();}  \
virtual Dynamic getByteBuffer_dyn() { return mDelegate->getByteBuffer_dyn();}  \
virtual int getStart( ) { return mDelegate->getStart();}  \
virtual Dynamic getStart_dyn() { return mDelegate->getStart_dyn();}  \
virtual int getLength( ) { return mDelegate->getLength();}  \
virtual Dynamic getLength_dyn() { return mDelegate->getLength_dyn();}  \


template<typename IMPL>
class IMemoryRange_delegate_ : public IMemoryRange_obj
{
	protected:
		IMPL *mDelegate;
	public:
		IMemoryRange_delegate_(IMPL *inDelegate) : mDelegate(inDelegate) {}
		hx::Object *__GetRealObject() { return mDelegate; }
		void __Visit(HX_VISIT_PARAMS) { HX_VISIT_OBJECT(mDelegate); }
		DELEGATE_snow_utils_IMemoryRange
};

} // end namespace snow
} // end namespace utils

#endif /* INCLUDED_snow_utils_IMemoryRange */ 
