void structWordList :: v_writeBinary (FILE *f) { long currentLength, previousLength; if (! length) length = wcslen (string); binputi4 (length, f); if (length > 0) { wchar *current = string, *kar = current; for (kar = current; *kar != '\n'; kar ++) { } currentLength = kar - current; for (long i = 0; i < currentLength; i ++) fputc (current [i], f); // TODO: check for (;;) { wchar *previous = current, *kar1, *kar2; int numberOfSame; previousLength = currentLength; current = previous + previousLength + 1; if (*current == '\0') break; kar1 = previous, kar2 = current; while (*kar2 != '\n' && *kar2 == *kar1) { kar1 ++, kar2 ++; } numberOfSame = kar2 - current; if (numberOfSame > 127) numberOfSame = 127; // clip fputc (128 + numberOfSame, f); while (*kar2 != '\n') kar2 ++; currentLength = kar2 - current; for (long i = 0; i < currentLength - numberOfSame; i ++) fputc (current [numberOfSame + i], f); // TODO: check } } }
void _CollectionOfDaata_v_writeBinary (_CollectionOfDaata* me, FILE *f) { binputi4 (my size, f); for (long i = 1; i <= my size; i ++) { Daata thing = my at [i]; ClassInfo classInfo = thing -> classInfo; if (! Thing_isa (thing, classDaata) || ! Data_canWriteBinary (thing)) Melder_throw (U"Objects of class ", classInfo -> className, U" cannot be written."); binputw1 (classInfo -> version > 0 ? Melder_cat (classInfo -> className, U" ", classInfo -> version) : classInfo -> className, f); binputw2 (thing -> name, f); Data_writeBinary ((Daata) thing, f); } }