SVMetadata* SV_ConcatDatas (SVMetadata* metadata, SVData** items, size_t length) { for (size_t i = 0; i < length; i++) { SV_AppendData(metadata, items[i]); } return metadata; }
SVMetadata* SV_BufferRemoveMetadata (CDBuffer* self) { SVMetadata* metadata = SV_CreateMetadata(); SVData* current = NULL; SVByte type = 0; // Format strings of the different metadata types static char* formats[] = { "b", "s", "i", "f", "S" }; while (!CD_BufferEmpty(self)) { type = SV_BufferRemoveByte(self); if (type == 127) { break; } current = SV_CreateData(); current->type = type >> 5; if (current->type == SVTypeShortByteShort) { SV_BufferRemoveFormat(self, "sbs", ¤t->data.sbs.first, ¤t->data.sbs.second, ¤t->data.sbs.third ); } else { SV_BufferRemoveFormat(self, formats[current->type], ¤t->data); } SV_AppendData(metadata, current); } return metadata; }