1 /*
2 *   Matrix Market I/O library for ANSI C
3 *
4 *   See http://math.nist.gov/MatrixMarket for details.
5 *
6 *
7 */
8 
9 #ifndef MM_IO_H
10 #define MM_IO_H
11 
12 #define MM_MAX_LINE_LENGTH 1025
13 #define MatrixMarketBanner "%%MatrixMarket"
14 #define MM_MAX_TOKEN_LENGTH 64
15 
16 typedef char MM_typecode[4];
17 
18 int mm_read_banner(FILE *f, MM_typecode *matcode);
19 int mm_read_mtx_crd_size(FILE *f, long *M, long *N, long *nz);
20 
21 /********************* MM_typecode query fucntions ***************************/
22 
23 #define mm_is_matrix(typecode)	((typecode)[0]=='M')
24 
25 #define mm_is_sparse(typecode)	((typecode)[1]=='C')
26 #define mm_is_coordinate(typecode)((typecode)[1]=='C')
27 #define mm_is_dense(typecode)	((typecode)[1]=='A')
28 #define mm_is_array(typecode)	((typecode)[1]=='A')
29 
30 #define mm_is_complex(typecode)	((typecode)[2]=='C')
31 #define mm_is_real(typecode)		((typecode)[2]=='R')
32 #define mm_is_pattern(typecode)	((typecode)[2]=='P')
33 #define mm_is_integer(typecode) ((typecode)[2]=='I')
34 
35 #define mm_is_symmetric(typecode)((typecode)[3]=='S')
36 #define mm_is_general(typecode)	((typecode)[3]=='G')
37 #define mm_is_skew(typecode)	((typecode)[3]=='K')
38 #define mm_is_hermitian(typecode)((typecode)[3]=='H')
39 
40 /********************* MM_typecode modify fucntions ***************************/
41 
42 #define mm_set_matrix(typecode)	((*typecode)[0]='M')
43 #define mm_set_coordinate(typecode)	((*typecode)[1]='C')
44 #define mm_set_array(typecode)	((*typecode)[1]='A')
45 #define mm_set_dense(typecode)	mm_set_array(typecode)
46 #define mm_set_sparse(typecode)	mm_set_coordinate(typecode)
47 
48 #define mm_set_complex(typecode)((*typecode)[2]='C')
49 #define mm_set_real(typecode)	((*typecode)[2]='R')
50 #define mm_set_pattern(typecode)((*typecode)[2]='P')
51 #define mm_set_integer(typecode)((*typecode)[2]='I')
52 
53 
54 #define mm_set_symmetric(typecode)((*typecode)[3]='S')
55 #define mm_set_general(typecode)((*typecode)[3]='G')
56 #define mm_set_skew(typecode)	((*typecode)[3]='K')
57 #define mm_set_hermitian(typecode)((*typecode)[3]='H')
58 
59 #define mm_clear_typecode(typecode) ((*typecode)[0]=(*typecode)[1]= \
60 									(*typecode)[2]=' ',(*typecode)[3]='G')
61 
62 #define mm_initialize_typecode(typecode) mm_clear_typecode(typecode)
63 
64 
65 /********************* Matrix Market error codes ***************************/
66 
67 
68 #define MM_COULD_NOT_READ_FILE	11
69 #define MM_PREMATURE_EOF		12
70 #define MM_NOT_MTX				13
71 #define MM_NO_HEADER			14
72 #define MM_UNSUPPORTED_TYPE		15
73 #define MM_LINE_TOO_LONG		16
74 #define MM_COULD_NOT_WRITE_FILE	17
75 
76 
77 /******************** Matrix Market internal definitions ********************
78 
79    MM_matrix_typecode: 4-character sequence
80 
81 				    ojbect 		sparse/   	data        storage
82 						  		dense     	type        scheme
83 
84    string position:	 [0]        [1]			[2]         [3]
85 
86    Matrix typecode:  M(atrix)  C(oord)		R(eal)   	G(eneral)
87 						        A(array)	C(omplex)   H(ermitian)
88 											P(attern)   S(ymmetric)
89 								    		I(nteger)	K(kew)
90 
91  ***********************************************************************/
92 
93 #define MM_MTX_STR		"matrix"
94 #define MM_ARRAY_STR	"array"
95 #define MM_DENSE_STR	"array"
96 #define MM_COORDINATE_STR "coordinate"
97 #define MM_SPARSE_STR	"coordinate"
98 #define MM_COMPLEX_STR	"complex"
99 #define MM_REAL_STR		"real"
100 #define MM_INT_STR		"integer"
101 #define MM_GENERAL_STR  "general"
102 #define MM_SYMM_STR		"symmetric"
103 #define MM_HERM_STR		"hermitian"
104 #define MM_SKEW_STR		"skew-symmetric"
105 #define MM_PATTERN_STR  "pattern"
106 
107 
108 /*  high level routines */
109 
110 int mm_read_mtx_crd_data(FILE *f, long M, long N, long nz, long I[], long J[],
111 		double val[], MM_typecode matcode);
112 
113 
114 #endif
115