Example #1
0
File: sdif.c Project: csound/csound
SDIFresult
SDIF_ReadMatrixData(void *putItHere, FILE *f, const SDIF_MatrixHeader *head)
{
    size_t datumSize = (size_t) SDIF_GetMatrixDataTypeSize(head->matrixDataType);
    size_t numItems = (size_t) (head->rowCount * head->columnCount);

#ifdef LITTLE_ENDIAN
    switch (datumSize) {
    case 1:
      return SDIF_Read1(putItHere, numItems, f);
    case 2:
      return SDIF_Read2(putItHere, numItems, f);
    case 4:
      return SDIF_Read4(putItHere, numItems, f);
    case 8:
      return SDIF_Read8(putItHere, numItems, f);
    default:
      return ESDIF_BAD_MATRIX_DATA_TYPE;
    }
    /* This is never reached */
    return ESDIF_SUCCESS;
#else
    if (fread(putItHere, datumSize, numItems, f) == numItems) {
      return ESDIF_SUCCESS;
    }
    else {
      return ESDIF_READ_FAILED;
    }
#endif
}
Example #2
0
File: sdif.c Project: csound/csound
int32_t SDIF_GetMatrixDataSize(const SDIF_MatrixHeader *m)
{
    int32_t size;
    size = SDIF_GetMatrixDataTypeSize(m->matrixDataType) *
           m->rowCount * m->columnCount;

    if ((size % 8) != 0) {
      size += (8 - (size % 8));
    }

    return size;
}
Example #3
0
File: sdif.c Project: csound/csound
int32_t SDIF_PaddingRequired(const SDIF_MatrixHeader *m)
{
    int32_t size;
    size = SDIF_GetMatrixDataTypeSize(m->matrixDataType) *
           m->rowCount * m->columnCount;

    if ((size % 8) != 0) {
      return (8 - (size % 8));
    }
    else {
      return 0;
    }
}
Example #4
0
SDIFresult SDIFmem_WriteMatrix(FILE *sdif_handle, SDIFmem_Matrix m)
{
    SDIFresult r;
    sdif_int32 sz, numElements;
    int paddingNeeded;

    if ((r = SDIF_WriteMatrixHeader(&(m->header), sdif_handle))!=ESDIF_SUCCESS) {
      return r;
    }

    sz = SDIF_GetMatrixDataTypeSize(m->header.matrixDataType);
    numElements = (m->header.rowCount * m->header.columnCount);

    switch (sz) {
    case 1:
      r = SDIF_Write1(m->data, numElements, sdif_handle);
      break;
    case 2:
      r = SDIF_Write2(m->data, numElements, sdif_handle);
      break;
    case 4:
      r = SDIF_Write4(m->data, numElements, sdif_handle);
      break;
    case 8:
      r = SDIF_Write8(m->data, numElements, sdif_handle);
      break;

    default:
      return ESDIF_BAD_MATRIX_DATA_TYPE;
    }

    if (r !=ESDIF_SUCCESS) return r;
    paddingNeeded = SDIF_PaddingRequired(&(m->header));
    if (paddingNeeded) {
      char pad[8] = "\0\0\0\0\0\0\0\0";
      if ((r = SDIF_Write1(pad, paddingNeeded, sdif_handle))!=ESDIF_SUCCESS)
        return r;
    }
    return ESDIF_SUCCESS;
}