| 855 | } |
| 856 | |
| 857 | bool CodeGen_lk::Input(ssc_data_t p_data, const char *name, const wxString &folder, const int &array_matrix_threshold) |
| 858 | { |
| 859 | |
| 860 | |
| 861 | ssc_number_t value; |
| 862 | ssc_number_t *p; |
| 863 | int len, nr, nc; |
| 864 | wxString str_value; |
| 865 | double dbl_value; |
| 866 | int type = ::ssc_data_query(p_data, name); |
| 867 | switch (type) |
| 868 | { |
| 869 | case SSC_STRING: |
| 870 | // str_value = wxString::FromUTF8(::ssc_data_get_string(p_data, name)); |
| 871 | str_value = wxString(::ssc_data_get_string(p_data, name)); |
| 872 | str_value.Replace("\\", "/"); |
| 873 | // fprintf(m_fp, "var( '%s', '%s' );\n", name, (const char*)str_value.c_str()); |
| 874 | wxFprintf(m_fp, "var( '%s', '%s' );\n", name, (const char*)str_value.c_str()); |
| 875 | break; |
| 876 | case SSC_NUMBER: |
| 877 | ::ssc_data_get_number(p_data, name, &value); |
| 878 | dbl_value = (double)value; |
| 879 | if (dbl_value > 1e38) dbl_value = 1e38; |
| 880 | fprintf(m_fp, "var( '%s', %.17g );\n", name, dbl_value); |
| 881 | break; |
| 882 | case SSC_ARRAY: |
| 883 | p = ::ssc_data_get_array(p_data, name, &len); |
| 884 | if (len > array_matrix_threshold) |
| 885 | { // separate csv file (var_name.csv in folder) for each variable |
| 886 | wxCSVData csv; |
| 887 | wxString fn = folder + "/" + TableElementFileNames(name) + ".csv"; |
| 888 | // write out as single column data for compatibility with csvread in SDKTool |
| 889 | for (int i = 0; i < len; i++) |
| 890 | { |
| 891 | dbl_value = (double)p[i]; |
| 892 | if (dbl_value > 1e38) dbl_value = 1e38; |
| 893 | csv.Set(i, 0, wxString::Format("%.17g", dbl_value)); |
| 894 | } |
| 895 | csv.WriteFile(fn); |
| 896 | fprintf(m_fp, "var( '%s', real_array(read_text_file('%s')));\n", name, (const char*)fn.c_str()); |
| 897 | } |
| 898 | else |
| 899 | { |
| 900 | wxString localname = TableElementFileNames(name); |
| 901 | fprintf(m_fp, "var( '%s', [", (const char*)localname.c_str()); |
| 902 | for (int i = 0; i < (len - 1); i++) |
| 903 | { |
| 904 | dbl_value = (double)p[i]; |
| 905 | if (dbl_value > 1e38) dbl_value = 1e38; |
| 906 | fprintf(m_fp, " %.17g,", dbl_value); |
| 907 | } |
| 908 | dbl_value = (double)p[len - 1]; |
| 909 | if (dbl_value > 1e38) dbl_value = 1e38; |
| 910 | fprintf(m_fp, " %.17g ] );\n", dbl_value); |
| 911 | } |
| 912 | break; |
| 913 | case SSC_MATRIX: |
| 914 | p = ::ssc_data_get_matrix(p_data, name, &nr, &nc); |
no test coverage detected