Пользовательские структуры с функцией MATLAB mex

Я пытаюсь связать свой код C с MATLAB с помощью функции mex, и, боюсь, я сильно запутался. В частности, я хочу знать, могу ли я использовать свои собственные пользовательские данные. типы (например, структура Person в приведенном ниже примере). Я не встречал ничего в документация, чтобы предположить, что я могу, но было бы жаль, если бы это не было разрешено! Вот что у меня есть в виде функции шлюза:

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])  
{   

 int *inA;   
 int *inB;   
 const mxArray *people;   
 const char *fieldnames[5];  
 int numFields, i;  

 inA = (int *) mxGetPr(prhs[0]);  
 inB = (int *) mxGetPr(prhs[1]);  

 numFields = 5;  
 fieldnames[0] = "home";  
 fieldnames[1] = "work";  
 fieldnames[2] = "mode";  
 fieldnames[3] = "loc1";  
 fieldnames[4] = "loc2";  

 people = mxCreateStructMatrix(1000, 1, numFields, fieldnames);  
 for (i = 0; i < numFields; i++)  
 {  
    mxSetField(people,i,fieldnames[i],mxDuplicateArray(prhs[2]));  
 }  

 makePeople(inA, inB, people);  

}

Моя функция makePeople определена ниже:

void makePeople(int* A, int* B, Person* people)  
{  

 int MANHATTAN, BRONX, BROOKLYN, QUEENS, STATEN;  

 int i, j, k, p, q, n;  
 int count, home, work, mode;  
 double* loc1;  
 double* loc2;  
 Person oPerson;  

 n = 5;  
 count = 0;  

 MANHATTAN = 1;  
 BRONX = 2;  
 BROOKLYN = 3;  
 QUEENS = 4;  
 STATEN = 5;  

 for (i = 1; i <= n; i++)  
 {  
     for (j = 1; j <= n; j++)  
     {  
          for (k = 1; k <= 2; k++)  
          {  
               if (k == 1)  
                    q = A[n*i+j];  
               else  
                    q = B[n*i+j];  
               for (p = 1; p < q; p++)  
               {  
                    home = i;  
                    work = j;  
                    mode = k;  
                    if (home == MANHATTAN)  
                    {
                          loc1[0] = 2.4;  
                          loc1[1] = 2.4;  
                          loc2[0] = 3.7;  
                          loc2[1] = 3.4;  
                    }  
                    else
                    {  
                          loc1[0] = 3.4;  
                          loc1[1] = 4.4;
                          loc2[0] = 3.7;  
                          loc2[1] = 3.4;  
                    }
                    oPerson = Person_new(home, work, mode, loc1, loc2);  
                    people[count] = oPerson;  
                    count++;  
                    }  
              }  
        }  
  }  
  return;  

}

Наконец, вот файл person.h:

 #ifndef PERSON_INCLUDED  
 #define PERSON_INCLUDED  

 typedef struct Person_str *Person;  

 Person Person_new(int home, int work, int mode, double* loc1, double* loc2);  

 #endif  

Любая помощь будет очень полезна оценил!

5
задан Amro 9 June 2012 в 21:33
поделиться