1 |
/* $Id$ */ |
2 |
|
3 |
/* |
4 |
* Matrix Market I/O library for ANSI C |
5 |
* |
6 |
* See http://math.nist.gov/MatrixMarket for details. |
7 |
* |
8 |
*/ |
9 |
|
10 |
#ifndef MM_IO_H |
11 |
#define MM_IO_H |
12 |
|
13 |
#ifdef __cplusplus |
14 |
extern "C" { |
15 |
#endif |
16 |
|
17 |
#define MM_MAX_LINE_LENGTH 1025 |
18 |
#define MatrixMarketBanner "%%MatrixMarket" |
19 |
#define MM_MAX_TOKEN_LENGTH 64 |
20 |
|
21 |
typedef char MM_typecode[4]; |
22 |
|
23 |
char *mm_typecode_to_str(MM_typecode matcode); |
24 |
|
25 |
int mm_read_banner(FILE *f, MM_typecode *matcode); |
26 |
int mm_read_mtx_crd_size(FILE *f, int *M, int *N, int *nz); |
27 |
int mm_read_mtx_array_size(FILE *f, int *M, int *N); |
28 |
|
29 |
int mm_write_banner(FILE *f, MM_typecode matcode); |
30 |
int mm_write_mtx_crd_size(FILE *f, int M, int N, int nz); |
31 |
int mm_write_mtx_array_size(FILE *f, int M, int N); |
32 |
|
33 |
|
34 |
/********************* MM_typecode query fucntions ***************************/ |
35 |
|
36 |
#define mm_is_matrix(typecode) ((typecode)[0]=='M') |
37 |
|
38 |
#define mm_is_sparse(typecode) ((typecode)[1]=='C') |
39 |
#define mm_is_coordinate(typecode)((typecode)[1]=='C') |
40 |
#define mm_is_dense(typecode) ((typecode)[1]=='A') |
41 |
#define mm_is_array(typecode) ((typecode)[1]=='A') |
42 |
|
43 |
#define mm_is_complex(typecode) ((typecode)[2]=='C') |
44 |
#define mm_is_real(typecode) ((typecode)[2]=='R') |
45 |
#define mm_is_pattern(typecode) ((typecode)[2]=='P') |
46 |
#define mm_is_integer(typecode) ((typecode)[2]=='I') |
47 |
|
48 |
#define mm_is_symmetric(typecode)((typecode)[3]=='S') |
49 |
#define mm_is_general(typecode) ((typecode)[3]=='G') |
50 |
#define mm_is_skew(typecode) ((typecode)[3]=='K') |
51 |
#define mm_is_hermitian(typecode)((typecode)[3]=='H') |
52 |
|
53 |
int mm_is_valid(MM_typecode matcode); /* too complex for a macro */ |
54 |
|
55 |
|
56 |
/********************* MM_typecode modify fucntions ***************************/ |
57 |
|
58 |
#define mm_set_matrix(typecode) ((*typecode)[0]='M') |
59 |
#define mm_set_coordinate(typecode) ((*typecode)[1]='C') |
60 |
#define mm_set_array(typecode) ((*typecode)[1]='A') |
61 |
#define mm_set_dense(typecode) mm_set_array(typecode) |
62 |
#define mm_set_sparse(typecode) mm_set_coordinate(typecode) |
63 |
|
64 |
#define mm_set_complex(typecode)((*typecode)[2]='C') |
65 |
#define mm_set_real(typecode) ((*typecode)[2]='R') |
66 |
#define mm_set_pattern(typecode)((*typecode)[2]='P') |
67 |
#define mm_set_integer(typecode)((*typecode)[2]='I') |
68 |
|
69 |
|
70 |
#define mm_set_symmetric(typecode)((*typecode)[3]='S') |
71 |
#define mm_set_general(typecode)((*typecode)[3]='G') |
72 |
#define mm_set_skew(typecode) ((*typecode)[3]='K') |
73 |
#define mm_set_hermitian(typecode)((*typecode)[3]='H') |
74 |
|
75 |
#define mm_clear_typecode(typecode) ((*typecode)[0]=(*typecode)[1]= \ |
76 |
(*typecode)[2]=' ',(*typecode)[3]='G') |
77 |
|
78 |
#define mm_initialize_typecode(typecode) mm_clear_typecode(typecode) |
79 |
|
80 |
|
81 |
/********************* Matrix Market error codes ***************************/ |
82 |
|
83 |
|
84 |
#define MM_COULD_NOT_READ_FILE 11 |
85 |
#define MM_PREMATURE_EOF 12 |
86 |
#define MM_NOT_MTX 13 |
87 |
#define MM_NO_HEADER 14 |
88 |
#define MM_UNSUPPORTED_TYPE 15 |
89 |
#define MM_LINE_TOO_LONG 16 |
90 |
#define MM_COULD_NOT_WRITE_FILE 17 |
91 |
|
92 |
|
93 |
/******************** Matrix Market internal definitions ******************** |
94 |
|
95 |
MM_matrix_typecode: 4-character sequence |
96 |
|
97 |
ojbect sparse/ data storage |
98 |
dense type scheme |
99 |
|
100 |
string position: [0] [1] [2] [3] |
101 |
|
102 |
Matrix typecode: M(atrix) C(oord) R(eal) G(eneral) |
103 |
A(array) C(omplex) H(ermitian) |
104 |
P(attern) S(ymmetric) |
105 |
I(nteger) K(kew) |
106 |
|
107 |
***********************************************************************/ |
108 |
|
109 |
#define MM_MTX_STR "matrix" |
110 |
#define MM_ARRAY_STR "array" |
111 |
#define MM_DENSE_STR "array" |
112 |
#define MM_COORDINATE_STR "coordinate" |
113 |
#define MM_SPARSE_STR "coordinate" |
114 |
#define MM_COMPLEX_STR "complex" |
115 |
#define MM_REAL_STR "real" |
116 |
#define MM_INT_STR "integer" |
117 |
#define MM_GENERAL_STR "general" |
118 |
#define MM_SYMM_STR "symmetric" |
119 |
#define MM_HERM_STR "hermitian" |
120 |
#define MM_SKEW_STR "skew-symmetric" |
121 |
#define MM_PATTERN_STR "pattern" |
122 |
|
123 |
|
124 |
/* high level routines */ |
125 |
|
126 |
int mm_write_mtx_crd(char fname[], int M, int N, int nz, int I[], int J[], |
127 |
double val[], MM_typecode matcode); |
128 |
int mm_read_mtx_crd_data(FILE *f, int M, int N, int nz, int I[], int J[], |
129 |
double val[], MM_typecode matcode); |
130 |
int mm_read_mtx_crd_entry(FILE *f, int *I, int *J, double *real, double *img, |
131 |
MM_typecode matcode); |
132 |
|
133 |
int mm_read_unsymmetric_sparse(const char *fname, int *M_, int *N_, int *nz_, |
134 |
double **val_, int **I_, int **J_); |
135 |
|
136 |
#ifdef __cplusplus |
137 |
} |
138 |
#endif |
139 |
|
140 |
#endif |
141 |
|
142 |
/* |
143 |
* $Log$ |
144 |
* Revision 1.1 2004/10/26 06:53:59 jgs |
145 |
* Initial revision |
146 |
* |
147 |
* Revision 1.1 2004/07/02 00:48:35 gross |
148 |
* matrix market io function added |
149 |
* |
150 |
* |
151 |
*/ |