Утверждать одномерный двойной массив неограниченной длины (кодер 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

Другие вопросы по тегам