Code generation only supports cell operations for varargin and varargout.

1 view (last 30 days)
I want to convert my matlab code to c code but the code readiness report is genrating some error.Everytime i am using a cell array it is saying that= Code generation only supports cell operations for varargin and varargout.
I tried to put normal brackets() instead of curly brackets but then also it was showing error in the following code below:
main_fn ={'algorithm'};
pm_fn = {'pm_tau','pm_window','pm_keypoints','pm_harris_prctile','pm_searchrange'};
I also tried this notation
main_fn(1).algorithm='algorithm';
but still was receiving an error of function not predefine So is there any alternative way of defining these functions/strucutures???
Also in the code below in the curly bracket portion i was receiving the same error as above
%check for unknown option
fn_unknown = setdiff(fn, [main_fn,pm_fn,m_fn]);
for i=1:length(fn_unknown),
warning('Unknown option "%s".',*fn_unknown{i});*
end

Answers (1)

Walter Roberson
Walter Roberson on 27 Jun 2015
As I explained before, C is totally lacking in dynamic structures. Every structure must have an exact type (but that type can include unions). For example you can have your options stored as a structure array with fields such as optionname, ndim, arraysize, arrayclass, data . When ndim and arrayclass are each restricted to a small number of possibilities, that leads to an enumerable number of C data types such as
union dataunion { double* double_1D; double **double_2D; short* int16_1D; short** int16_2D };
that can be used to access the data legally in C.
But since this is all option data you might find it a lot easier to convert all of the options to 2D double (that might happen to have a dimension of 1 if they are a vector) and then your structure has fields optionname, heightwidth, data . The names are now data and not fieldnames.
Convert your cell array of strings to a blank-padded char array and loop through the rows checking strcmp(optionname, strtrim(optiontable(K,:)))
I do not know for sure, but possibly if you code as
optiontable = char({'first'; 'second'; 'thirdoption'});
then it might be able to generate the table for you instead of requiring you to code like ['first '; 'second '; 'thirdoption']

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!