int Data_Description_evaluateInteger (void *structAddress, Data_Description structDescription, const char32 *formula, long *result) { if (! formula) { // this was a VECTOR_FROM array *result = 1; return 1; } if (formula [0] >= U'a' && formula [0] <= U'z') { char32 buffer [100], *minus1, *psize; Data_Description sizeDescription; str32cpy (buffer, formula); if ((minus1 = str32str (buffer, U" - 1")) != nullptr) *minus1 = U'\0'; // strip trailing " - 1", but remember if ((psize = str32str (buffer, U" -> size")) != nullptr) *psize = U'\0'; // strip trailing " -> size" if (! (sizeDescription = Data_Description_findMatch (structDescription, buffer))) { *result = 0; return 0 /*Melder_error ("Cannot find member \"%ls\".", buffer)*/; } *result = Data_Description_integer (structAddress, sizeDescription); if (minus1) *result -= 1; } else { *result = Melder_atoi (formula); } return 1; }
int Data_Description_evaluateInteger (void *structAddress, Data_Description structDescription, const wchar_t *formula, long *result) { if (formula == NULL) { // this was a VECTOR_FROM array *result = 1; return 1; } if (formula [0] >= 'a' && formula [0] <= 'z') { wchar_t buffer [100], *minus1, *psize; Data_Description sizeDescription; wcscpy (buffer, formula); if ((minus1 = wcsstr (buffer, L" - 1")) != NULL) *minus1 = '\0'; // strip trailing " - 1", but remember if ((psize = wcsstr (buffer, L" -> size")) != NULL) *psize = '\0'; // strip trailing " -> size" if (! (sizeDescription = Data_Description_findMatch (structDescription, buffer))) { *result = 0; return 0 /*Melder_error ("Cannot find member \"%ls\".", buffer)*/; } *result = Data_Description_integer (structAddress, sizeDescription); if (minus1) *result -= 1; } else { *result = wcstol (formula, NULL, 10); } return 1; }