I have a enum declaration as follows:
typedef enum mail_ {
Out = 0,
Int = 1,
Spam = 2
} mail;
Function:
mail status;
int fill_mail_data(int i, &status);
In the function above, status
gets filled up and will send.
When I am trying this through swig I am facing the following issues:
mail
. When I try to print mail.__doc__
or help(mail)
, it is throwing an error saying there is no such Attribute, though though i am able to use those values (Spam
, In
, and Out
).main
is, so it is not accepting any function arguments for that mail
.To SWIG, an enum
is just an integer. To use it as an output parameter as in your example, you also can declare the parameter as an output parameter like so:
%module x
// Declare "mail* status" as an output parameter.
// It will be returned along with the return value of a function
// as a tuple if necessary, and will not be required as a function
// parameter.
%include <typemaps.i>
%apply int *OUTPUT {mail* status};
%inline %{
typedef enum mail_ {
Out = 0,
Int = 1,
Spam = 2
} mail;
int fill_mail_data(int i, mail* status)
{
*status = Spam;
return i+1;
}
%}
Use:
>>> import x
>>> dir(x) # Note no "mail" object, just Int, Out, Spam which are ints.
['Int', 'Out', 'Spam', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '_newclass', '_object', '_swig_getattr', '_swig_property', '_swig_repr', '_swig_setattr', '_swig_setattr_nondynamic', '_x', 'fill_mail_data']
>>> x.fill_mail_data(5)
[6, 2]
>>> ret,mail = x.fill_mail_data(5)
>>> mail == x.Spam
True
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With