1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// Include fundamental fragemt definitions
%include <typemaps/fragments.swg>
// Look for user fragments file.
%include <octfragments.swg>
// Octave fragments for primitive types
%include <octprimtypes.swg>
// Octave fragments for char* strings
//%include <octstrings.swg>
#ifndef SWIG_DIRECTOR_TYPEMAPS
#define SWIG_DIRECTOR_TYPEMAPS
#endif
// Octave types
#define SWIG_Object octave_value
#define VOID_Object octave_value()
/*
// Octave allows implicit conversion
#define %implicitconv_flag $implicitconv
*/
// append output
#define SWIG_AppendOutput(result, obj) SWIG_Octave_AppendOutput(result, obj)
// set constant
#define SWIG_SetConstant(name, obj) SWIG_Octave_SetConstant(module_ns,name,obj)
// raise
#define SWIG_Octave_Raise(OBJ, TYPE, DESC) error("C++ side threw an exception of type " TYPE)
#define SWIG_Raise(obj, type, desc) SWIG_Octave_Raise(obj, type, desc)
// Include the unified typemap library
%include <typemaps/swigtypemaps.swg>
%typecheck(SWIG_TYPECHECK_SWIGOBJECT) SWIG_Object "$1 = (*$input).is_defined();";
%typecheck(SWIG_TYPECHECK_SWIGOBJECT) octave_value_list "$1 = true;";
%typemap(in) (octave_value_list varargs,...) {
for (int j=$argnum-1;j<args.length();++j)
$1.append(args(j));
}
%typecheck(2000) (octave_value_list varargs,...) {
$1=1;
}
%typemap(in) (const octave_value_list& varargs,...) (octave_value_list tmp) {
for (int j=$argnum-1;j<args.length();++j)
tmp.append(args(j));
$1=&tmp;
}
%typecheck(2000) (const octave_value_list& varargs,...) {
$1=1;
}
%typemap(out) octave_value_list {
_outp->append($1);
}
%typemap(out,noblock=1) octave_map, Octave_map {
$result=$1;
}
%typemap(out,noblock=1) NDArray {
$result=$1;
}
%typemap(out,noblock=1) Cell {
$result=$1;
}
/*
// Smart Pointers
%typemap(out,noblock=1) const SWIGTYPE & SMARTPOINTER {
$result = SWIG_NewPointerObj(%new_copy(*$1, $*ltype), $descriptor, SWIG_POINTER_OWN | %newpointer_flags);
}
%typemap(ret) const SWIGTYPE & SMARTPOINTER, SWIGTYPE SMARTPOINTER {
octave_swig_type* lobj=Swig::swig_value_deref($result);
if (lobj) {
std::list<octave_value_list> idx;
idx.push_back(octave_value("__deref__"));
idx.push_back(octave_value_list());
octave_value_list ovl(lobj->subsref(".(",idx));
octave_swig_type* robj=ovl.length()>=1?Swig::swig_value_deref(ovl(0)):0;
if (robj && !error_state)
lobj->append(robj);
}
}
*/
|