mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-01 08:07:10 -04:00
5ac886855d
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6437 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
84 lines
2.1 KiB
C
Executable File
84 lines
2.1 KiB
C
Executable File
/* MOD2CONVERT.C - Routines converting between sparse and dense mod2 matrices.*/
|
|
|
|
/* Copyright (c) 1995-2012 by Radford M. Neal.
|
|
*
|
|
* Permission is granted for anyone to copy, use, modify, and distribute
|
|
* these programs and accompanying documents for any purpose, provided
|
|
* this copyright notice is retained and prominently displayed, and note
|
|
* is made of any changes made to these programs. These programs and
|
|
* documents are distributed without any warranty, express or implied.
|
|
* As the programs were written for research purposes only, they have not
|
|
* been tested to the degree that would be advisable in any important
|
|
* application. All use of these programs is entirely at the user's own
|
|
* risk.
|
|
*/
|
|
|
|
|
|
/* NOTE: See mod2convert.html for documentation on these procedures. */
|
|
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
|
|
#include "mod2dense.h"
|
|
#include "mod2sparse.h"
|
|
#include "mod2convert.h"
|
|
|
|
|
|
/* CONVERT A MOD2 MATRIX FROM SPARSE TO DENSE FORM. */
|
|
|
|
void mod2sparse_to_dense
|
|
( mod2sparse *m, /* Sparse matrix to convert */
|
|
mod2dense *r /* Place to store result */
|
|
)
|
|
{
|
|
mod2entry *e;
|
|
int i;
|
|
|
|
if (mod2sparse_rows(m)>mod2dense_rows(r)
|
|
|| mod2sparse_cols(m)>mod2dense_cols(r))
|
|
{ fprintf(stderr,
|
|
"mod2sparse_to_dense: Dimension of result matrix is less than source\n");
|
|
exit(1);
|
|
}
|
|
|
|
mod2dense_clear(r);
|
|
|
|
for (i = 0; i<mod2sparse_rows(m); i++)
|
|
{ e = mod2sparse_first_in_row(m,i);
|
|
while (!mod2sparse_at_end(e))
|
|
{ mod2dense_set(r,i,mod2sparse_col(e),1);
|
|
e = mod2sparse_next_in_row(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/* CONVERT A MOD2 MATRIX FROM DENSE TO SPARSE FORM. */
|
|
|
|
void mod2dense_to_sparse
|
|
( mod2dense *m, /* Dense matrix to convert */
|
|
mod2sparse *r /* Place to store result */
|
|
)
|
|
{
|
|
int i, j;
|
|
|
|
if (mod2dense_rows(m)>mod2sparse_rows(r)
|
|
|| mod2dense_cols(m)>mod2sparse_cols(r))
|
|
{ fprintf(stderr,
|
|
"mod2dense_to_sparse: Dimension of result matrix is less than source\n");
|
|
exit(1);
|
|
}
|
|
|
|
mod2sparse_clear(r);
|
|
|
|
for (i = 0; i<mod2dense_rows(m); i++)
|
|
{ for (j = 0; j<mod2dense_cols(m); j++)
|
|
{ if (mod2dense_get(m,i,j))
|
|
{ mod2sparse_insert(r,i,j);
|
|
}
|
|
}
|
|
}
|
|
}
|