00001
00006 #if !defined(INC_OSKI_MATRIX_H) && !defined(OSKI_UNBIND)
00007
00008 #define INC_OSKI_MATRIX_H
00009
00010 #include <oski/common.h>
00011 #include <oski/matcommon.h>
00012 #include <oski/structhint.h>
00013 #include <oski/trace.h>
00014
00015 #if defined(DO_NAME_MANGLING)
00016
00018 #define oski_matstruct_t MANGLE_(oski_matstruct_t)
00019 #define oski_matrix_t MANGLE_(oski_matrix_t)
00020 #define const_oski_matrix_t MANGLE_(const_oski_matrix_t)
00021
00022 #define oski_CreateMatStruct MANGLE_(oski_CreateMatStruct)
00023 #define oski_DestroyMatStruct MANGLE_(oski_DestroyMatStruct)
00024
00025 #endif
00026
00044 typedef struct
00045 {
00046 oski_matcommon_t props;
00047 oski_matspecific_t input_mat;
00048 int is_shared;
00050 double time_stream;
00052 oski_structhint_t structhints;
00053 oski_trace_t workhints;
00055 oski_trace_t trace;
00056 oski_timer_t timer;
00058 oski_matspecific_t tuned_mat;
00059 char *tuned_xforms;
00060 }
00061 oski_matstruct_t;
00062
00066 typedef oski_matstruct_t *oski_matrix_t;
00067
00072 typedef const oski_matstruct_t *const_oski_matrix_t;
00073
00077 oski_matstruct_t *oski_CreateMatStruct (void);
00078
00082 void oski_DestroyMatStruct (oski_matstruct_t * A);
00083
00084
00085
00086
00087
00089 #define OSKI_CHECK_MAT_DIMS( m, n ) (((m) >= 0) && ((n) >= 0))
00090
00092 #define OSKI_IS_SQUARE_MAT( m, n ) ((m) == (n))
00093
00094
00095
00096
00097
00098 #include <oski/CSR/format.h>
00099
00100 #if defined(DO_NAME_MANGLING)
00101
00103 #define oski_DestroyMatRepr_funcpt \
00104 MANGLE_(oski_DestroyMatRepr_funcpt)
00105 #define oski_CreateMatReprFromCSR_funcpt \
00106 MANGLE_(oski_CreateMatReprFromCSR_funcpt)
00107 #define oski_CreateSubmatReprFromCSR_funcpt \
00108 MANGLE_(oski_CreateSubmatReprFromCSR_funcpt)
00109 #define oski_CopyMatRepr_funcpt \
00110 MANGLE_(oski_CopyMatRepr_funcpt)
00111 #define oski_CalcMatRepr1Norm_funcpt \
00112 MANGLE_(oski_CalcMatRepr1Norm_funcpt)
00113 #define oski_ConvertMatReprToCSR_funcpt \
00114 MANGLE_(oski_ConvertMatReprToCSR_funcpt)
00115
00116 #define tagOski_submat_t MANGLE_(tagOski_submat_t)
00117 #define oski_submat_t MANGLE_(oski_submat_t)
00118
00119 #endif
00120
00126 typedef struct tagOski_submat_t
00127 {
00128 oski_index_t i0;
00129 oski_index_t j0;
00130 oski_index_t num_rows;
00131 oski_index_t num_cols;
00132 }
00133 oski_submat_t;
00134
00138 typedef void (*oski_DestroyMatRepr_funcpt) (void *mat);
00139
00143 #if 1
00144 typedef void *(*oski_CreateMatReprFromCSR_funcpt) (const oski_matCSR_t * mat,
00145 const oski_matcommon_t *
00146 props, ...);
00147 #endif
00148
00155 typedef void *(*oski_CreateSubmatReprFromCSR_funcpt) (const oski_matCSR_t *
00156 mat,
00157 const oski_matcommon_t *
00158 props,
00159 const oski_submat_t *
00160 sub, ...);
00161
00165 typedef oski_matCSR_t *(*oski_ConvertMatReprToCSR_funcpt) (const void *,
00166 const
00167 oski_matcommon_t *
00168 props);
00169
00173 typedef void *(*oski_CopyMatRepr_funcpt) (const void *,
00174 const oski_matcommon_t * props);
00175
00179 typedef double (*oski_CalcMatRepr1Norm_funcpt) (const void *mat,
00180 const oski_matcommon_t *
00181 props);
00182
00183
00184
00190 #include <oski/matmult.h>
00191 #include <oski/ata.h>
00192 #include <oski/trisolve.h>
00193 #include <oski/a_and_at.h>
00194 #include <oski/matpow.h>
00195
00198 #endif
00199
00200 #if defined(OSKI_UNBIND)
00201 # include <oski/matcommon.h>
00202 # include <oski/trace.h>
00203 # include <oski/CSR/format.h>
00204 # undef INC_OSKI_MATRIX_H
00205 # undef oski_matstruct_t
00206 # undef oski_matrix_t
00207 # undef const_oski_matrix_t
00208 # undef oski_CreateMatStruct
00209 # undef oski_DestroyMatStruct
00210 # undef OSKI_CHECK_MAT_DIMS
00211 # undef OSKI_IS_SQUARE_MAT
00212 # undef oski_DestroyMatRepr_funcpt
00213 # undef oski_CreateMatReprFromCSR_funcpt
00214 # undef oski_CreateSubmatReprFromCSR_funcpt
00215 # undef oski_CopyMatRepr_funcpt
00216 # undef oski_CalcMatRepr1Norm_funcpt
00217 # undef tagOski_submat_t
00218 # undef oski_submat_t
00219 #endif
00220
00221