Ejemplo n.º 1
0
ambix_err_t
ambix_matrix_fill_data_transposed(ambix_matrix_t*mtx, const float32_t*data, int byteswap) {
  ambix_err_t err=AMBIX_ERR_SUCCESS;
  ambix_matrix_t*xtm=ambix_matrix_init(mtx->cols, mtx->rows, NULL);

  if(!xtm)
    return AMBIX_ERR_UNKNOWN;

  if(byteswap)
    err=_ambix_matrix_fill_data_byteswapped(xtm, (const number32_t*)data);
  else
    err=ambix_matrix_fill_data(xtm, data);

  if(AMBIX_ERR_SUCCESS==err) {
    ambix_matrix_t*resu=ambix_matrix_transpose(mtx, xtm);
    if(!resu)
      err=AMBIX_ERR_UNKNOWN;
  }

  ambix_matrix_destroy(xtm);
  return err;
}
Ejemplo n.º 2
0
ambix_matrix_t*
_ambix_uuid1_to_matrix(const void*vdata, uint64_t datasize, ambix_matrix_t*orgmtx, int swap) {
  const char*cdata=(const char*)vdata;
  ambix_matrix_t*mtx=orgmtx;
  uint32_t rows;
  uint32_t cols;
  uint64_t size;
  uint32_t index;

  if(datasize<(sizeof(rows)+sizeof(cols)))
    return NULL;

  index = 0;

  memcpy(&rows, cdata+index, sizeof(uint32_t));
  index += sizeof(uint32_t);
			
  memcpy(&cols, cdata+index, sizeof(uint32_t));
  index += sizeof(uint32_t);

  if(swap) {
    rows=swap4(rows);
    cols=swap4(cols);
  }

  size=rows*cols;

  if(rows<1 || cols<1 || size < 1)
    goto cleanup;

  if(size*sizeof(float32_t) > datasize) {
    goto cleanup;
  }

  if(!mtx) {
    mtx=(ambix_matrix_t*)calloc(1, sizeof(ambix_matrix_t));
    if(!mtx)
      goto cleanup;
  }

  if(!ambix_matrix_init(rows, cols, mtx))
      goto cleanup;

  if(swap) {
    if(_ambix_matrix_fill_data_byteswapped(mtx, (number32_t*)(cdata+index)) != AMBIX_ERR_SUCCESS)
      goto cleanup;
  } else {
    if(ambix_matrix_fill_data(mtx, (float32_t*)(cdata+index)) != AMBIX_ERR_SUCCESS)
      goto cleanup;
  }

  return mtx;

 cleanup:
  if(mtx && mtx!=orgmtx) {
    ambix_matrix_deinit(mtx);
    free(mtx);
    mtx=NULL;
  }
  return NULL;
}