mirror of https://github.com/swig/swig
61 lines
1.4 KiB
OpenEdge ABL
61 lines
1.4 KiB
OpenEdge ABL
%module(directors="1") director_binary_string;
|
|
|
|
%feature("director") Callback;
|
|
|
|
#if !defined(SWIGC)
|
|
/* There is no concept of a higher level binary string in C */
|
|
%apply (char *STRING, size_t LENGTH) { (char *dataBufferAA, int sizeAA) };
|
|
%apply (char *STRING, size_t LENGTH) { (char *dataBufferBB, int sizeBB) };
|
|
%apply (const char *STRING, size_t LENGTH) { (const char *data, size_t datalen) };
|
|
#endif
|
|
|
|
%inline %{
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define BUFFER_SIZE_AA 8
|
|
#define BUFFER_SIZE_BB 5
|
|
|
|
class Callback {
|
|
public:
|
|
virtual ~Callback() {}
|
|
virtual int run(char* dataBufferAA, int sizeAA, char* dataBufferBB, int sizeBB) {
|
|
return 0;
|
|
}
|
|
virtual int writeData(const char* data, size_t datalen) = 0;
|
|
};
|
|
|
|
class Caller {
|
|
private:
|
|
Callback *_callback;
|
|
public:
|
|
Caller(): _callback(NULL) {}
|
|
void delCallback() { _callback = NULL; }
|
|
void setCallback(Callback *cb) { _callback = cb; }
|
|
int call() {
|
|
if (_callback) {
|
|
char aa[BUFFER_SIZE_AA];
|
|
memset(aa, 9, BUFFER_SIZE_AA);
|
|
char bb[BUFFER_SIZE_BB];
|
|
memset(bb, 13, BUFFER_SIZE_BB);
|
|
return _callback->run(aa, BUFFER_SIZE_AA, bb, BUFFER_SIZE_BB);
|
|
}
|
|
return 0;
|
|
}
|
|
void call_null() {
|
|
if (_callback) {
|
|
_callback->run(NULL, 0, NULL, 0);
|
|
}
|
|
}
|
|
int callWriteData() {
|
|
if (_callback) {
|
|
char aa[BUFFER_SIZE_AA];
|
|
memset(aa, 9, BUFFER_SIZE_AA);
|
|
return _callback->writeData(aa, BUFFER_SIZE_AA);
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
%}
|