Any TablesOfReal_appendMany (Collection me) { try { if (my size == 0) Melder_throw ("Cannot add zero tables."); TableOfReal thee = static_cast <TableOfReal> (my item [1]); long totalNumberOfRows = thy numberOfRows; long numberOfColumns = thy numberOfColumns; for (long itab = 2; itab <= my size; itab ++) { thee = static_cast <TableOfReal> (my item [itab]); totalNumberOfRows += thy numberOfRows; if (thy numberOfColumns != numberOfColumns) Melder_throw ("Numbers of columns do not match."); } autoTableOfReal him = static_cast <TableOfReal> (_Thing_new (thy classInfo)); TableOfReal_init (him.peek(), totalNumberOfRows, numberOfColumns); /* Unsafe: new attributes not initialized. */ for (long icol = 1; icol <= numberOfColumns; icol ++) { TableOfReal_setColumnLabel (him.peek(), icol, thy columnLabels [icol]); } totalNumberOfRows = 0; for (long itab = 1; itab <= my size; itab ++) { thee = static_cast <TableOfReal> (my item [itab]); for (long irow = 1; irow <= thy numberOfRows; irow ++) { totalNumberOfRows ++; TableOfReal_setRowLabel (him.peek(), totalNumberOfRows, thy rowLabels [irow]); for (long icol = 1; icol <= numberOfColumns; icol ++) his data [totalNumberOfRows] [icol] = thy data [irow] [icol]; } } Melder_assert (totalNumberOfRows == his numberOfRows); return him.transfer(); } catch (MelderError) { Melder_throw ("TableOfReal objects not appended."); } }
Any TablesOfReal_append (TableOfReal me, TableOfReal thee) { try { if (thy numberOfColumns != my numberOfColumns) Melder_throw (L"Numbers of columns are ", my numberOfColumns, " and ", thy numberOfColumns, " but should be equal."); autoTableOfReal him = static_cast <TableOfReal> (_Thing_new (my classInfo)); TableOfReal_init (him.peek(), my numberOfRows + thy numberOfRows, my numberOfColumns); /* Unsafe: new attributes not initialized. */ for (long icol = 1; icol <= my numberOfColumns; icol ++) { TableOfReal_setColumnLabel (him.peek(), icol, my columnLabels [icol]); } for (long irow = 1; irow <= my numberOfRows; irow ++) { TableOfReal_setRowLabel (him.peek(), irow, my rowLabels [irow]); for (long icol = 1; icol <= my numberOfColumns; icol ++) his data [irow] [icol] = my data [irow] [icol]; } for (long irow = 1; irow <= thy numberOfRows; irow ++) { long hisRow = irow + my numberOfRows; TableOfReal_setRowLabel (him.peek(), hisRow, thy rowLabels [irow]); for (long icol = 1; icol <= my numberOfColumns; icol ++) his data [hisRow] [icol] = thy data [irow] [icol]; } return him.transfer(); } catch (MelderError) { Melder_throw ("TableOfReal objects not appended."); } }
Any _Data_copy (Data me) { try { if (me == NULL) return NULL; autoData thee = (Data) _Thing_new (my classInfo); my v_copy (thee.peek()); Thing_setName (thee.peek(), my name); return thee.transfer(); } catch (MelderError) { Melder_throw (me, ": not copied."); } }
Any Thing_newFromClassName (const wchar_t *className) { void *table = Thing_classFromClassName (className); if (! table) return Melder_errorp ("(Thing_newFromClassName:) Thing not created."); return _Thing_new (table); }
Any Thing_newFromClassNameA (const char *className) { void *table = Thing_classFromClassName (Melder_peekUtf8ToWcs (className)); if (! table) return Melder_errorp ("(Thing_newFromClassName:) Thing not created."); return _Thing_new (table); }