diff --git a/m-array.h b/m-array.h index e87bdba9..bbfafd1b 100644 --- a/m-array.h +++ b/m-array.h @@ -1012,28 +1012,24 @@ M_ARRA4_CONTRACT(array); \ M_ASSERT (str != NULL); \ M_F(name,_reset)(array); \ - bool success = false; \ int c = *str++; \ - if (M_UNLIKELY (c != '[')) goto exit; \ - c = *str++; \ - if (M_UNLIKELY (c == ']')) { success = true; goto exit; } \ - if (M_UNLIKELY (c == 0)) goto exit; \ + if (M_UNLIKELY (c != '[')) { c = 0; goto exit; } \ + c = m_core_str_nospace(&str); \ + if (M_UNLIKELY (c == ']')) { goto exit; } \ + if (M_UNLIKELY (c == 0)) { goto exit; } \ str--; \ - type item; \ - M_CALL_INIT(oplist, item); \ - do { \ - bool b = M_CALL_PARSE_STR(oplist, item, str, &str); \ - do { c = *str++; } while (isspace(c)); \ - if (b == false || c == 0) { goto exit_clear; } \ - M_F(name, _push_back)(array, item); \ - } while (c == M_GET_SEPARATOR oplist); \ - M_ARRA4_CONTRACT(array); \ - success = (c == ']'); \ - exit_clear: \ - M_CALL_CLEAR(oplist, item); \ + M_QLET(item, type, oplist) { \ + do { \ + bool b = M_CALL_PARSE_STR(oplist, item, str, &str); \ + c = m_core_str_nospace(&str); \ + if (b == false || c == 0) { c = 0; break; } \ + M_F(name, _push_back)(array, item); \ + } while (c == M_GET_SEPARATOR oplist); \ + } \ exit: \ + M_ARRA4_CONTRACT(array); \ if (endp) *endp = str; \ - return success; \ + return c == ']'; \ } \ , /* no PARSE_STR & INIT */ ) \ \ @@ -1050,15 +1046,14 @@ if (M_UNLIKELY (c == ']')) return true; \ if (M_UNLIKELY (c == EOF)) return false; \ ungetc(c, file); \ - type item; \ - M_CALL_INIT(oplist, item); \ - do { \ - bool b = M_CALL_IN_STR(oplist, item, file); \ - do { c = fgetc(file); } while (isspace(c)); \ - if (b == false || c == EOF) { break; } \ - M_F(name, _push_back)(array, item); \ - } while (c == M_GET_SEPARATOR oplist); \ - M_CALL_CLEAR(oplist, item); \ + M_QLET(item, type, oplist) { \ + do { \ + bool b = M_CALL_IN_STR(oplist, item, file); \ + c = m_core_fgetc_nospace(file); \ + if (b == false || c == EOF) { c = 0; break; } \ + M_F(name, _push_back)(array, item); \ + } while (c == M_GET_SEPARATOR oplist); \ + } \ M_ARRA4_CONTRACT(array); \ return c == ']'; \ } \ @@ -1099,19 +1094,15 @@ if (M_UNLIKELY (ret != M_SERIAL_OK_CONTINUE)) { \ return ret; \ } \ - if (estimated_size != 0) { \ - /* The format has given an estimation of the array size */ \ - M_F(name, _reserve)(array, estimated_size); \ + M_F(name, _reserve)(array, estimated_size); \ + M_QLET(item, type, oplist) { \ + do { \ + ret = M_CALL_IN_SERIAL(oplist, item, f); \ + if (ret != M_SERIAL_OK_DONE) { break; } \ + M_F(name, _push_back)(array, item); \ + ret = f->m_interface->read_array_next(local, f); \ + } while (ret == M_SERIAL_OK_CONTINUE); \ } \ - type item; \ - M_CALL_INIT(oplist, item); \ - do { \ - ret = M_CALL_IN_SERIAL(oplist, item, f); \ - if (ret != M_SERIAL_OK_DONE) { break; } \ - M_F(name, _push_back)(array, item); \ - ret = f->m_interface->read_array_next(local, f); \ - } while (ret == M_SERIAL_OK_CONTINUE); \ - M_CALL_CLEAR(oplist, item); \ M_ARRA4_CONTRACT(array); \ return ret; \ } \