%module (directors="1") csharp_director_typemaps // This tests that the csout typemap is handled correctly in the director code. // The 'out' needs stripping in some parts of the generated director code. %feature("director") InStream; %apply void *VOID_INT_PTR { void * } %typemap(ctype) int* readLen, int* writeLen "/*ctype*/ int*" %typemap(imtype) int* readLen, int* writeLen "/*imtype*/ out int" %typemap(cstype) int* readLen "/*cstype*/ out int" // Note for below: 'out' used in typemap comment %typemap(cstype) int* writeLen "/*out cstype out*/ out int" %typemap(csin) int* readLen, int* writeLen "/*csin*/ out $csinput" %typemap(in) int* readLen, int* writeLen %{/*in*/ $1 = ($1_ltype)$input; %} %typemap(out) int* readLen, int* writeLen %{/*out*/ $result = (void *)$1; %} %typemap(csdirectorin) int* readLen, int* writeLen "/*csdirectorin*/ out $iminput" %typemap(csdirectorout) int* readLen, int* writeLen "/*csdirectorout*/ $cscall" %typemap(directorin) int* readLen, int* writeLen "/*directorin*/ $input = $1;" %typemap(directorout) int* readLen, int* writeLen %{/*directorout*/ $result = ($1_ltype)$input; %} %inline %{ class InStream { public: virtual int Read(void* buf, int len, int* readLen) = 0; virtual int Write(void* buf, int len, int* writeLen) = 0; virtual ~InStream() {} }; int callRead(InStream* stream, void* buf, int len, int* readLen) { return stream->Read(buf, len, readLen); } int callWrite(InStream* stream, void* buf, int len, int* writeLen) { return stream->Write(buf, len, writeLen); } %}