modelica_string modelica_boolean_to_modelica_string(modelica_boolean b, modelica_integer minLen, modelica_boolean leftJustified) { size_t sz = snprintf(NULL, 0, leftJustified ? "%-*s" : "%*s", (int) minLen, b ? "true" : "false"); void *res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), leftJustified ? "%-*s" : "%*s", (int) minLen, b ? "true" : "false"); return res; }
modelica_string modelica_integer_to_modelica_string(modelica_integer i, modelica_integer minLen, modelica_boolean leftJustified) { size_t sz = snprintf(NULL, 0, leftJustified ? "%-*ld" : "%*ld", (int) minLen, i); void *res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), leftJustified ? "%-*ld" : "%*ld", (int) minLen, i); return res; }
modelica_string modelica_real_to_modelica_string(modelica_real r,modelica_integer minLen,modelica_boolean leftJustified,modelica_integer signDigits) { size_t sz = snprintf(NULL, 0, leftJustified ? "%-*.*g" : "%*.*g", (int) minLen, (int) signDigits, r); void *res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), leftJustified ? "%-*.*g" : "%*.*g", (int) minLen, (int) signDigits, r); return res; }
modelica_string enum_to_modelica_string(modelica_integer nr, const char *e[],modelica_integer minLen, modelica_boolean leftJustified) { size_t sz = snprintf(NULL, 0, leftJustified ? "%-*s" : "%*s", (int) minLen, e[nr-1]); void *res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), leftJustified ? "%-*s" : "%*s", (int) minLen, e[nr-1]); return res; }
modelica_string_const copy_modelica_string(modelica_string_const source) { int len = strlen(source); modelica_string_t dest = alloc_modelica_string(len); memcpy(dest, source, len); return dest; }
modelica_string_const init_modelica_string(modelica_string_const str) { int length = strlen(str); modelica_string_t dest = alloc_modelica_string(length); memcpy(dest, str, length); return dest; }
modelica_string_const cat_modelica_string(modelica_string_const s1, modelica_string_const s2) { char *dest; int len1 = modelica_string_length(s1); int len2 = modelica_string_length(s2); dest = alloc_modelica_string(len1+len2); memcpy(dest, s1, len1); memcpy(dest + len1, s2, len2); return dest; }
/* Convert a modelica_integer to a modelica_string, used in String(integer, format="xxx") */ modelica_string modelica_integer_to_modelica_string_format(modelica_integer i,modelica_string format) { void *res; size_t sz; void *c_fmt = modelica_string_format_to_c_string_format(format); switch (MMC_STRINGDATA(c_fmt)[MMC_STRLEN(c_fmt)-1]) { case 'f': case 'e': case 'E': case 'g': case 'G': /* double */ sz = snprintf(NULL, 0, MMC_STRINGDATA(c_fmt), (double) i); res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), MMC_STRINGDATA(c_fmt), (double) i); break; case 'c': case 'd': case 'i': /* int */ sz = snprintf(NULL, 0, MMC_STRINGDATA(c_fmt), (long) i); res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), MMC_STRINGDATA(c_fmt), (long) i); break; case 'o': case 'x': case 'X': case 'u': /* uint */ sz = snprintf(NULL, 0, MMC_STRINGDATA(c_fmt), (unsigned long) i); res = alloc_modelica_string(sz); sprintf(MMC_STRINGDATA(res), MMC_STRINGDATA(c_fmt), (unsigned long) i); break; default: /* integer values, etc */ omc_assert(NULL, dummyFILE_INFO, "Invalid conversion specifier for Real: %c", MMC_STRINGDATA(c_fmt)[MMC_STRLEN(c_fmt)-1]); } return res; }