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); } }
void Data_writeToBinaryFile (Daata me, MelderFile file) { try { if (! Data_canWriteBinary (me)) Melder_throw (U"Objects of class ", my classInfo -> className, U" cannot be written to a generic binary file."); autoMelderFile mfile = MelderFile_create (file); if (fprintf (file -> filePointer, "ooBinaryFile") < 0) Melder_throw (U"Cannot write first bytes of file."); binputw1 ( my classInfo -> version > 0 ? Melder_cat (my classInfo -> className, U" ", my classInfo -> version) : my classInfo -> className, file -> filePointer); Data_writeBinary (me, file -> filePointer); mfile.close (); } catch (MelderError) { Melder_throw (me, U": not written to binary file ", file, U"."); } }