00001
00007 #if !defined(INC_OSKI_TRISOLVE_H) && !defined(OSKI_UNBIND)
00008
00009 #define INC_OSKI_TRISOLVE_H
00010
00011 #include <oski/matmult.h>
00012
00013 #if defined(DO_NAME_MANGLING)
00014
00016 #define oski_MatReprTrisolve_funcpt \
00017 MANGLE_(oski_MatReprTrisolve_funcpt)
00018 #define oski_MatTrisolve MANGLE_(oski_MatTrisolve)
00019
00020 #define oski_CheckArgsMatTrisolve \
00021 MANGLE_(oski_CheckArgsMatTrisolve)
00022
00023 #define oski_traceargs_MatTrisolve_t \
00024 MANGLE_(oski_traceargs_MatTrisovle_t)
00025 #define oski_MakeArglistMatTrisolve \
00026 MANGLE_(oski_MakeArglistMatTrisolve)
00027
00028 #endif
00029
00037 int oski_MatTrisolve (const oski_matrix_t T_tunable, oski_matop_t opT,
00038 oski_value_t alpha, oski_vecview_t x_view);
00039
00043 int oski_CheckArgsMatTrisolve (const oski_matrix_t T_tunable,
00044 oski_matop_t opT, oski_value_t alpha,
00045 oski_vecview_t x_view, const char *caller);
00046
00051 typedef int (*oski_MatReprTrisolve_funcpt) (const void *T,
00052 const oski_matcommon_t * props,
00053 oski_matop_t opT,
00054 oski_value_t alpha,
00055 oski_vecview_t x_view);
00056
00061 typedef struct
00062 {
00064
00065 oski_matop_t opT;
00066 oski_index_t num_vecs;
00067 oski_value_t alpha;
00068 oski_storage_t x_orient;
00070 }
00071 oski_traceargs_MatTrisolve_t;
00072
00077 void oski_MakeArglistMatTrisolve (oski_matop_t op,
00078 oski_value_t alpha,
00079 const oski_vecview_t x_view,
00080 oski_traceargs_MatTrisolve_t * args);
00081
00083 #define GET_XFLOP_MatTrisolve( args ) \
00084 (2.0*((const oski_traceargs_MatTrisolve_t *)(args))->num_vecs)
00085
00087 #endif
00088
00089 #if defined(OSKI_UNBIND)
00090 # include <oski/matrix.h>
00091 # undef INC_OSKI_TRISOLVE_H
00092 # undef oski_MatReprTrisolve_funcpt
00093 # undef oski_MatTrisolve
00094 # undef oski_CheckArgsMatTrisolve
00095 # undef oski_traceargs_MatTrisolve_t
00096 # undef oski_MakeArglistMatTrisolve
00097 # undef GET_XFLOP_MatTrisolve
00098 #endif
00099
00100