00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FM_VECTOR_H
00022 # define FM_VECTOR_H
00023
00024 # include <fm/common.h>
00025 # include <fm/rational.h>
00026
00027 BEGIN_C_DECLS
00028
00029 struct s_fm_vector
00030 {
00031 size_t size;
00032 s_fm_rational_t* vector;
00033 z_type_t key;
00034 };
00035
00036 typedef struct s_fm_vector s_fm_vector_t;
00037
00038
00039 extern
00040 void
00041 fm_vector_compute_key(z_type_t* key, s_fm_vector_t* v);
00042
00043 extern
00044 inline
00045 s_fm_vector_t*
00046 fm_vector_alloc (size_t size);
00047
00048 extern
00049 inline
00050 s_fm_vector_t*
00051 fm_vector_dup (s_fm_vector_t* v1);
00052
00053 extern
00054 inline
00055 int
00056 fm_vector_init (s_fm_vector_t* v, size_t size);
00057
00058 extern
00059 inline
00060 void
00061 fm_vector_free (s_fm_vector_t* v);
00062
00063 extern
00064 inline
00065 void
00066 fm_vector_read (FILE* stream, s_fm_vector_t* v, unsigned size);
00067
00068 extern
00069 inline
00070 void
00071 fm_vector_print (FILE* stream, s_fm_vector_t* v);
00072
00073 extern
00074 inline
00075 void
00076 fm_vector_set_ineq (s_fm_vector_t* v);
00077
00078 extern
00079 inline
00080 void
00081 fm_vector_set_eq (s_fm_vector_t* v);
00082
00083 extern
00084 inline
00085 int
00086 fm_vector_assign (s_fm_vector_t* v, s_fm_vector_t* v1);
00087
00088 extern
00089 inline
00090 int
00091 fm_vector_assign_at (s_fm_vector_t* v, s_fm_vector_t* v1, unsigned idx);
00092
00093 extern
00094 inline
00095 int
00096 fm_vector_assign_idx (s_fm_vector_t* v, s_fm_rational_t* r, unsigned idx);
00097
00098 extern
00099 inline
00100 int
00101 fm_vector_expand (s_fm_vector_t* v, s_fm_vector_t* v1);
00102
00103 extern
00104 inline
00105 int
00106 fm_vector_expand_at (s_fm_vector_t* v, s_fm_vector_t* v1, unsigned idx);
00107
00108 extern
00109 inline
00110 int
00111 fm_vector_shrink (s_fm_vector_t* v, s_fm_vector_t* v1, unsigned idx);
00112
00113 extern
00114 inline
00115 int
00116 fm_vector_assign_int_idx (s_fm_vector_t* v, z_type_t i, unsigned idx);
00117
00118 extern
00119 inline
00120 int
00121 fm_vector_is_null (s_fm_vector_t* v);
00122
00123 extern
00124 inline
00125 int
00126 fm_vector_is_empty (s_fm_vector_t* v);
00127
00128 extern
00129 inline
00130 int
00131 fm_vector_is_valid (s_fm_vector_t* v);
00132
00133 extern
00134 inline
00135 int
00136 fm_vector_is_scalar_cst (s_fm_vector_t* v);
00137
00138 extern
00139 inline
00140 int
00141 fm_vector_opp (s_fm_vector_t* v, s_fm_vector_t* v1);
00142
00143 extern
00144 inline
00145 int
00146 fm_vector_add (s_fm_vector_t* v, s_fm_vector_t* v1, s_fm_vector_t* v2);
00147
00148 extern
00149 inline
00150 int
00151 fm_vector_sub (s_fm_vector_t* v, s_fm_vector_t* v1, s_fm_vector_t* v2);
00152
00153 extern
00154 inline
00155 int
00156 fm_vector_normalize_idx (s_fm_vector_t* v, s_fm_vector_t* v1, unsigned idx);
00157
00158 extern
00159 inline
00160 int
00161 fm_vector_to_z (s_fm_vector_t* v, s_fm_vector_t* v1);
00162
00163 extern
00164 inline
00165 int
00166 fm_vector_resize (s_fm_vector_t* v, s_fm_vector_t* v1);
00167
00168 extern
00169 inline
00170 int
00171 fm_vector_equal (s_fm_vector_t* v1, s_fm_vector_t* v2);
00172
00173 extern
00174 inline
00175 int
00176 fm_vector_do_subsume (s_fm_vector_t* v1, s_fm_vector_t* v2);
00177
00178
00179 extern
00180 s_fm_vector_t*
00181 fm_vector_read_str (char* stream);
00182
00183
00184 END_C_DECLS
00185
00186
00187 #endif // FM_VECTOR_H