Утверждать одномерный двойной массив неограниченной длины (кодер Matlab)
Я в настоящее время использую этот код:
assert(isa(values,'double'));
assert(size(values, 1) <= 1000);
убедить кодировщик Matlab сделать значения одномерным массивом. Конечная цель - иметь возможность взаимодействовать с ним через C# и PInvoke. Это создает сигнатуру C, содержащую это:
const real_T values[1000], const int32_T values_size[1]
Кажется, я могу использовать это даже для одномерных массивов, где длина меньше 1000. Существуют ли более точные способы достижения вышеуказанного (т.е. утверждают, что значения - это одномерный массив неограниченной длины)?
PS:
Я также использовал:
assert(all(size(values) == [1 Inf]));
но пока отложил это, так как созданная структура кажется очень сложной (см. также здесь), и я не знаю, как ее заполнить из C#.
1 ответ
Кодер Matlab теперь, кажется, поддерживает динамическое распределение памяти (это было не так, когда я последний раз использовал его в 2008 году).
Полный пример: http://www.mathworks.de/products/matlab-coder/examples.html?file=/products/demos/shipping/coder/coderdemo_atoms.html
Обновление: для массивов динамического размера Matlab использует структуры данных EMX: http://www.mathworks.de/de/help/fixedpoint/ug/c-code-interface-for-unbounded-arrays-and-structure-fields.html