- print ' for (%(c)s = 0; %(array)s && %(array)s[%(c)s]; %(c)s++) {' % {'c': count, 'array': instance}
- print ' switch (%(array)s[%(c)s]) {' % {'array': instance, 'c': count}
- for key, valueType in array.valueTypes:
- if valueType is not None:
- print ' case %s:' % key
- print ' %s++;' % count # only a null key marks the end; skip null values
- print ' break;'
- print ' }'
+ print ' for (%(c)s = 0; %(array)s && %(array)s[%(c)s] != %(terminator)s; %(c)s += 2) {' \
+ % {'c': count, 'array': instance, 'terminator': array.terminator}
+ if array.hasKeysWithoutValues:
+ print ' switch (int(%(array)s[%(c)s])) {' % {'array': instance, 'c': count}
+ for key, valueType in array.valueTypes:
+ if valueType is None:
+ print ' case %s:' % key
+ print ' %s--;' % count # the next value is a key again and checked if it's the terminator
+ print ' break;'
+ print ' }'