SWIG struct pointer as output parameter












0














I have a struct:



struct some_struct_s {
int arg1;
int arg2;
};


I have a C function:



int func(some_struct_s *output);


Both are %included into my SWIG file.



I want some_struct_s *output to be treated like an output parameter. Python example:



int_val, some_struct_output = func()


"Output parameters" is covered in the manual for POD-types (sec 10.1.3), but not for non-POD types.



How do I tell SWIG I want some_struct_s *output to be an output parameter?










share|improve this question



























    0














    I have a struct:



    struct some_struct_s {
    int arg1;
    int arg2;
    };


    I have a C function:



    int func(some_struct_s *output);


    Both are %included into my SWIG file.



    I want some_struct_s *output to be treated like an output parameter. Python example:



    int_val, some_struct_output = func()


    "Output parameters" is covered in the manual for POD-types (sec 10.1.3), but not for non-POD types.



    How do I tell SWIG I want some_struct_s *output to be an output parameter?










    share|improve this question

























      0












      0








      0







      I have a struct:



      struct some_struct_s {
      int arg1;
      int arg2;
      };


      I have a C function:



      int func(some_struct_s *output);


      Both are %included into my SWIG file.



      I want some_struct_s *output to be treated like an output parameter. Python example:



      int_val, some_struct_output = func()


      "Output parameters" is covered in the manual for POD-types (sec 10.1.3), but not for non-POD types.



      How do I tell SWIG I want some_struct_s *output to be an output parameter?










      share|improve this question













      I have a struct:



      struct some_struct_s {
      int arg1;
      int arg2;
      };


      I have a C function:



      int func(some_struct_s *output);


      Both are %included into my SWIG file.



      I want some_struct_s *output to be treated like an output parameter. Python example:



      int_val, some_struct_output = func()


      "Output parameters" is covered in the manual for POD-types (sec 10.1.3), but not for non-POD types.



      How do I tell SWIG I want some_struct_s *output to be an output parameter?







      python c swig






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 at 6:39









      Michael Labbé

      7,71832131




      7,71832131
























          1 Answer
          1






          active

          oldest

          votes


















          1














          From the documentation:




          11.5.7 "argout" typemap



          The "argout" typemap is used to return values from arguments. This is most commonly used to write wrappers for C/C++ functions that need to return multiple values. The "argout" typemap is almost always combined with an "in" typemap---possibly to ignore the input value....




          Here's a complete example for your code (no error checking for brevity):



          %module test

          // Declare an input typemap that suppresses requiring any input and
          // declare a temporary stack variable to hold the return data.
          %typemap(in,numinputs=0) some_struct_s* (some_struct_s tmp) %{
          $1 = &tmp;
          %}

          // Declare an output argument typemap. In this case, we'll use
          // a tuple to hold the structure data (no error checking).
          %typemap(argout) some_struct_s* (PyObject* o) %{
          o = PyTuple_New(2);
          PyTuple_SET_ITEM(o,0,PyLong_FromLong($1->arg1));
          PyTuple_SET_ITEM(o,1,PyLong_FromLong($1->arg2));
          $result = SWIG_Python_AppendOutput($result,o);
          %}

          // Instead of a header file, we'll just declare this code inline.
          // This includes the code in the wrapper, as well as telling SWIG
          // to create wrappers in the target language.
          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo below. Note that the int return value of zero as well as the output parameter as a tuple are returned as a list.



          >>> import test
          >>> test.func()
          [0, (1, 2)]


          If you don't want typemaps, you can also inject code to create the object and return it to hide it from the user:



          %module test

          %rename(_func) func; // Give the wrapper a different name

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}

          // Declare your interface
          %pythoncode %{
          def func():
          s = some_struct_s()
          r = _func(s)
          return r,s
          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001511D70A880> >
          >>> s.arg1
          1
          >>> s.arg2
          2


          You can make the typemap language agnostic if you carefully select SWIG macros:



          %module test

          %typemap(in,numinputs=0) struct some_struct_s *output %{
          $1 = malloc(sizeof(struct some_struct_s));
          %}

          %typemap(argout) struct some_struct_s* output {
          %append_output(SWIG_NewPointerObj($1,$1_descriptor,1));
          }

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001DD0425A700> >
          >>> s.arg1
          1
          >>> s.arg2
          2





          share|improve this answer























          • Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
            – Michael Labbé
            Nov 20 at 18:25












          • @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
            – Mark Tolonen
            Nov 20 at 20:40











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387538%2fswig-struct-pointer-as-output-parameter%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          From the documentation:




          11.5.7 "argout" typemap



          The "argout" typemap is used to return values from arguments. This is most commonly used to write wrappers for C/C++ functions that need to return multiple values. The "argout" typemap is almost always combined with an "in" typemap---possibly to ignore the input value....




          Here's a complete example for your code (no error checking for brevity):



          %module test

          // Declare an input typemap that suppresses requiring any input and
          // declare a temporary stack variable to hold the return data.
          %typemap(in,numinputs=0) some_struct_s* (some_struct_s tmp) %{
          $1 = &tmp;
          %}

          // Declare an output argument typemap. In this case, we'll use
          // a tuple to hold the structure data (no error checking).
          %typemap(argout) some_struct_s* (PyObject* o) %{
          o = PyTuple_New(2);
          PyTuple_SET_ITEM(o,0,PyLong_FromLong($1->arg1));
          PyTuple_SET_ITEM(o,1,PyLong_FromLong($1->arg2));
          $result = SWIG_Python_AppendOutput($result,o);
          %}

          // Instead of a header file, we'll just declare this code inline.
          // This includes the code in the wrapper, as well as telling SWIG
          // to create wrappers in the target language.
          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo below. Note that the int return value of zero as well as the output parameter as a tuple are returned as a list.



          >>> import test
          >>> test.func()
          [0, (1, 2)]


          If you don't want typemaps, you can also inject code to create the object and return it to hide it from the user:



          %module test

          %rename(_func) func; // Give the wrapper a different name

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}

          // Declare your interface
          %pythoncode %{
          def func():
          s = some_struct_s()
          r = _func(s)
          return r,s
          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001511D70A880> >
          >>> s.arg1
          1
          >>> s.arg2
          2


          You can make the typemap language agnostic if you carefully select SWIG macros:



          %module test

          %typemap(in,numinputs=0) struct some_struct_s *output %{
          $1 = malloc(sizeof(struct some_struct_s));
          %}

          %typemap(argout) struct some_struct_s* output {
          %append_output(SWIG_NewPointerObj($1,$1_descriptor,1));
          }

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001DD0425A700> >
          >>> s.arg1
          1
          >>> s.arg2
          2





          share|improve this answer























          • Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
            – Michael Labbé
            Nov 20 at 18:25












          • @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
            – Mark Tolonen
            Nov 20 at 20:40
















          1














          From the documentation:




          11.5.7 "argout" typemap



          The "argout" typemap is used to return values from arguments. This is most commonly used to write wrappers for C/C++ functions that need to return multiple values. The "argout" typemap is almost always combined with an "in" typemap---possibly to ignore the input value....




          Here's a complete example for your code (no error checking for brevity):



          %module test

          // Declare an input typemap that suppresses requiring any input and
          // declare a temporary stack variable to hold the return data.
          %typemap(in,numinputs=0) some_struct_s* (some_struct_s tmp) %{
          $1 = &tmp;
          %}

          // Declare an output argument typemap. In this case, we'll use
          // a tuple to hold the structure data (no error checking).
          %typemap(argout) some_struct_s* (PyObject* o) %{
          o = PyTuple_New(2);
          PyTuple_SET_ITEM(o,0,PyLong_FromLong($1->arg1));
          PyTuple_SET_ITEM(o,1,PyLong_FromLong($1->arg2));
          $result = SWIG_Python_AppendOutput($result,o);
          %}

          // Instead of a header file, we'll just declare this code inline.
          // This includes the code in the wrapper, as well as telling SWIG
          // to create wrappers in the target language.
          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo below. Note that the int return value of zero as well as the output parameter as a tuple are returned as a list.



          >>> import test
          >>> test.func()
          [0, (1, 2)]


          If you don't want typemaps, you can also inject code to create the object and return it to hide it from the user:



          %module test

          %rename(_func) func; // Give the wrapper a different name

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}

          // Declare your interface
          %pythoncode %{
          def func():
          s = some_struct_s()
          r = _func(s)
          return r,s
          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001511D70A880> >
          >>> s.arg1
          1
          >>> s.arg2
          2


          You can make the typemap language agnostic if you carefully select SWIG macros:



          %module test

          %typemap(in,numinputs=0) struct some_struct_s *output %{
          $1 = malloc(sizeof(struct some_struct_s));
          %}

          %typemap(argout) struct some_struct_s* output {
          %append_output(SWIG_NewPointerObj($1,$1_descriptor,1));
          }

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001DD0425A700> >
          >>> s.arg1
          1
          >>> s.arg2
          2





          share|improve this answer























          • Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
            – Michael Labbé
            Nov 20 at 18:25












          • @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
            – Mark Tolonen
            Nov 20 at 20:40














          1












          1








          1






          From the documentation:




          11.5.7 "argout" typemap



          The "argout" typemap is used to return values from arguments. This is most commonly used to write wrappers for C/C++ functions that need to return multiple values. The "argout" typemap is almost always combined with an "in" typemap---possibly to ignore the input value....




          Here's a complete example for your code (no error checking for brevity):



          %module test

          // Declare an input typemap that suppresses requiring any input and
          // declare a temporary stack variable to hold the return data.
          %typemap(in,numinputs=0) some_struct_s* (some_struct_s tmp) %{
          $1 = &tmp;
          %}

          // Declare an output argument typemap. In this case, we'll use
          // a tuple to hold the structure data (no error checking).
          %typemap(argout) some_struct_s* (PyObject* o) %{
          o = PyTuple_New(2);
          PyTuple_SET_ITEM(o,0,PyLong_FromLong($1->arg1));
          PyTuple_SET_ITEM(o,1,PyLong_FromLong($1->arg2));
          $result = SWIG_Python_AppendOutput($result,o);
          %}

          // Instead of a header file, we'll just declare this code inline.
          // This includes the code in the wrapper, as well as telling SWIG
          // to create wrappers in the target language.
          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo below. Note that the int return value of zero as well as the output parameter as a tuple are returned as a list.



          >>> import test
          >>> test.func()
          [0, (1, 2)]


          If you don't want typemaps, you can also inject code to create the object and return it to hide it from the user:



          %module test

          %rename(_func) func; // Give the wrapper a different name

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}

          // Declare your interface
          %pythoncode %{
          def func():
          s = some_struct_s()
          r = _func(s)
          return r,s
          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001511D70A880> >
          >>> s.arg1
          1
          >>> s.arg2
          2


          You can make the typemap language agnostic if you carefully select SWIG macros:



          %module test

          %typemap(in,numinputs=0) struct some_struct_s *output %{
          $1 = malloc(sizeof(struct some_struct_s));
          %}

          %typemap(argout) struct some_struct_s* output {
          %append_output(SWIG_NewPointerObj($1,$1_descriptor,1));
          }

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001DD0425A700> >
          >>> s.arg1
          1
          >>> s.arg2
          2





          share|improve this answer














          From the documentation:




          11.5.7 "argout" typemap



          The "argout" typemap is used to return values from arguments. This is most commonly used to write wrappers for C/C++ functions that need to return multiple values. The "argout" typemap is almost always combined with an "in" typemap---possibly to ignore the input value....




          Here's a complete example for your code (no error checking for brevity):



          %module test

          // Declare an input typemap that suppresses requiring any input and
          // declare a temporary stack variable to hold the return data.
          %typemap(in,numinputs=0) some_struct_s* (some_struct_s tmp) %{
          $1 = &tmp;
          %}

          // Declare an output argument typemap. In this case, we'll use
          // a tuple to hold the structure data (no error checking).
          %typemap(argout) some_struct_s* (PyObject* o) %{
          o = PyTuple_New(2);
          PyTuple_SET_ITEM(o,0,PyLong_FromLong($1->arg1));
          PyTuple_SET_ITEM(o,1,PyLong_FromLong($1->arg2));
          $result = SWIG_Python_AppendOutput($result,o);
          %}

          // Instead of a header file, we'll just declare this code inline.
          // This includes the code in the wrapper, as well as telling SWIG
          // to create wrappers in the target language.
          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo below. Note that the int return value of zero as well as the output parameter as a tuple are returned as a list.



          >>> import test
          >>> test.func()
          [0, (1, 2)]


          If you don't want typemaps, you can also inject code to create the object and return it to hide it from the user:



          %module test

          %rename(_func) func; // Give the wrapper a different name

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}

          // Declare your interface
          %pythoncode %{
          def func():
          s = some_struct_s()
          r = _func(s)
          return r,s
          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001511D70A880> >
          >>> s.arg1
          1
          >>> s.arg2
          2


          You can make the typemap language agnostic if you carefully select SWIG macros:



          %module test

          %typemap(in,numinputs=0) struct some_struct_s *output %{
          $1 = malloc(sizeof(struct some_struct_s));
          %}

          %typemap(argout) struct some_struct_s* output {
          %append_output(SWIG_NewPointerObj($1,$1_descriptor,1));
          }

          %inline %{

          struct some_struct_s {
          int arg1;
          int arg2;
          };

          int func(struct some_struct_s *output)
          {
          output->arg1 = 1;
          output->arg2 = 2;
          return 0;
          }

          %}


          Demo:



          >>> import test
          >>> r,s=test.func()
          >>> r
          0
          >>> s
          <test.some_struct_s; proxy of <Swig Object of type 'some_struct_s *' at 0x000001DD0425A700> >
          >>> s.arg1
          1
          >>> s.arg2
          2






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 20 at 21:04

























          answered Nov 20 at 7:40









          Mark Tolonen

          90.8k12109175




          90.8k12109175












          • Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
            – Michael Labbé
            Nov 20 at 18:25












          • @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
            – Mark Tolonen
            Nov 20 at 20:40


















          • Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
            – Michael Labbé
            Nov 20 at 18:25












          • @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
            – Mark Tolonen
            Nov 20 at 20:40
















          Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
          – Michael Labbé
          Nov 20 at 18:25






          Thanks for this. Without this, I have noticed that I can instantiate an empty some_struct_s on one line of code and pass it in. When the function returns, the contents are non-opaque. This has the benefit of me not having to write a language-specific typemap. I was hoping there was a way to signify the parameter should be at the end without having to write output language-specific api code for each element in an argout typemap. Should I give up hope?
          – Michael Labbé
          Nov 20 at 18:25














          @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
          – Mark Tolonen
          Nov 20 at 20:40




          @MichaelLabbé haven't found a way without writing a typemap, but you can avoid language specifics by using some SWIG macros. I'll update with an example.
          – Mark Tolonen
          Nov 20 at 20:40


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387538%2fswig-struct-pointer-as-output-parameter%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          If I really need a card on my start hand, how many mulligans make sense? [duplicate]

          Alcedinidae

          Can an atomic nucleus contain both particles and antiparticles? [duplicate]