2

I have a struct as shown below defined in my header file (myheader.h)

typedef struct
{
    MyMemberStruct* member;
    int32_t n_members;
} MyMember;

MyMember* MyMemberCreate(...)

The SWIG interface file

%module members

%{
#define SWIG_FILE_WITH_INIT
#include "myheader.h"
%}

%include "myheader.h"

In the function MyMemberCreate() a list of n_membersmembers are created and stored in member.

In Python I would to access these members like:

pyMember = members.member[0]

But this gives the following error:

'MyMemberStruct' object does not support indexing

I have learnt that I can add the following to the interface file

%extend MyMember {
    MyMemberStruct __getitem__(int32_t index) {
        if (index < $self->n_members) {
            return $self->member[index];
        }
    }
}

Then from Python I can access the members as

pyMember = members[0]

which should me give me the first index in MyMemberStruct

Can anyone point me in the right direction of how I can achieve the first approach, i.e. pyMember = members.member[0] instead?

Jon Helt-Hansen
  • 383
  • 1
  • 5
  • 19

0 Answers0