@@ -32,52 +32,83 @@ mxArray* bsp_array_to_matlab(const bsp_array_t* array) {
32
32
33
33
switch (array -> type ) {
34
34
case BSP_FLOAT64 :
35
- mx_array = mxCreateDoubleMatrix (array -> size , 1 , mxREAL );
35
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxDOUBLE_CLASS , mxREAL );
36
36
memcpy (mxGetPr (mx_array ), array -> data , array -> size * sizeof (double ));
37
37
break ;
38
38
39
- case BSP_FLOAT32 : {
40
- mx_array = mxCreateDoubleMatrix (array -> size , 1 , mxREAL );
41
- double * out_data = mxGetPr (mx_array );
42
- float * in_data = (float * ) array -> data ;
43
- for (size_t i = 0 ; i < array -> size ; i ++ ) {
44
- out_data [i ] = (double ) in_data [i ];
45
- }
39
+ case BSP_FLOAT32 :
40
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxSINGLE_CLASS , mxREAL );
41
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (float ));
46
42
break ;
47
- }
48
43
49
- case BSP_UINT64 : {
44
+ case BSP_UINT64 :
50
45
mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT64_CLASS , mxREAL );
51
46
memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (uint64_t ));
52
47
break ;
53
- }
54
48
55
- case BSP_UINT32 : {
56
- mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT64_CLASS , mxREAL );
57
- uint64_t * out_data = (uint64_t * ) mxGetData (mx_array );
58
- uint32_t * in_data = (uint32_t * ) array -> data ;
59
- for (size_t i = 0 ; i < array -> size ; i ++ ) {
60
- out_data [i ] = (uint64_t ) in_data [i ];
61
- }
49
+ case BSP_UINT32 :
50
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT32_CLASS , mxREAL );
51
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (uint32_t ));
62
52
break ;
63
- }
64
53
65
- case BSP_UINT16 : {
66
- mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT64_CLASS , mxREAL );
67
- uint64_t * out_data = (uint64_t * ) mxGetData (mx_array );
68
- uint16_t * in_data = (uint16_t * ) array -> data ;
54
+ case BSP_UINT16 :
55
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT16_CLASS , mxREAL );
56
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (uint16_t ));
57
+ break ;
58
+
59
+ case BSP_UINT8 :
60
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT8_CLASS , mxREAL );
61
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (uint8_t ));
62
+ break ;
63
+
64
+ case BSP_INT64 :
65
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxINT64_CLASS , mxREAL );
66
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (int64_t ));
67
+ break ;
68
+
69
+ case BSP_INT32 :
70
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxINT32_CLASS , mxREAL );
71
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (int32_t ));
72
+ break ;
73
+
74
+ case BSP_INT16 :
75
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxINT16_CLASS , mxREAL );
76
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (int16_t ));
77
+ break ;
78
+
79
+ case BSP_INT8 :
80
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxINT8_CLASS , mxREAL );
81
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (int8_t ));
82
+ break ;
83
+
84
+ case BSP_BINT8 :
85
+ // Treat BSP_BINT8 as UINT8 as suggested
86
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT8_CLASS , mxREAL );
87
+ memcpy (mxGetData (mx_array ), array -> data , array -> size * sizeof (int8_t ));
88
+ break ;
89
+
90
+ case BSP_COMPLEX_FLOAT64 : {
91
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxDOUBLE_CLASS , mxCOMPLEX );
92
+ double * in_data =
93
+ (double * ) array -> data ; // Treat as array of adjacent real/imag pairs
94
+ double * real_data = mxGetPr (mx_array );
95
+ double * imag_data = mxGetPi (mx_array );
69
96
for (size_t i = 0 ; i < array -> size ; i ++ ) {
70
- out_data [i ] = (uint64_t ) in_data [i ];
97
+ real_data [i ] = in_data [2 * i ]; // Real part
98
+ imag_data [i ] = in_data [2 * i + 1 ]; // Imaginary part
71
99
}
72
100
break ;
73
101
}
74
102
75
- case BSP_UINT8 : {
76
- mx_array = mxCreateNumericMatrix (array -> size , 1 , mxUINT64_CLASS , mxREAL );
77
- uint64_t * out_data = (uint64_t * ) mxGetData (mx_array );
78
- uint8_t * in_data = (uint8_t * ) array -> data ;
103
+ case BSP_COMPLEX_FLOAT32 : {
104
+ mx_array = mxCreateNumericMatrix (array -> size , 1 , mxSINGLE_CLASS , mxCOMPLEX );
105
+ float * in_data =
106
+ (float * ) array -> data ; // Treat as array of adjacent real/imag pairs
107
+ float * real_data = (float * ) mxGetData (mx_array );
108
+ float * imag_data = (float * ) mxGetImagData (mx_array );
79
109
for (size_t i = 0 ; i < array -> size ; i ++ ) {
80
- out_data [i ] = (uint64_t ) in_data [i ];
110
+ real_data [i ] = in_data [2 * i ]; // Real part
111
+ imag_data [i ] = in_data [2 * i + 1 ]; // Imaginary part
81
112
}
82
113
break ;
83
114
}
0 commit comments