00001
00006 #if !defined(INC_OSKI_MATCOMMON_H) && !defined(OSKI_UNBIND)
00007
00008 #define INC_OSKI_MATCOMMON_H
00009
00010 #include <oski/common.h>
00011 #include <oski/mangle.h>
00012
00013 #if defined(DO_NAME_MANGLING)
00014
00016 #define oski_matcommon_t MANGLE_(oski_matcommon_t)
00017 #define oski_matspecific_t MANGLE_(oski_matspecific_t)
00018
00019 #define oski_TransposePatternProp MANGLE_(oski_TransposePatternProp)
00020 #define oski_TransposeProps MANGLE_(oski_TransposeProps)
00021
00022 #endif
00023
00030 typedef struct
00031 {
00032 oski_index_t num_rows;
00033 oski_index_t num_cols;
00034 oski_index_t num_nonzeros;
00036 int has_unit_diag;
00039 struct
00040 {
00041 int is_symm;
00042 int is_herm;
00043 int is_tri_upper;
00045 int is_tri_lower;
00047 } pattern;
00048 }
00049 oski_matcommon_t;
00050
00055 #define OSKI_MATPROP_IS_SQUARE(props) ((props)->num_rows == (props)->num_cols)
00056
00061 #define OSKI_MATPROP_IS_TRI(props) \
00062 ((props)->pattern.is_tri_upper || (props)->pattern.is_tri_lower)
00063
00070 oski_inmatprop_t oski_TransposePatternProp (oski_inmatprop_t pattern);
00071
00073 void oski_TransposeProps (oski_matcommon_t * props);
00074
00075
00076
00083 typedef struct
00084 {
00085 oski_id_t type_id;
00086 void *repr;
00087 }
00088 oski_matspecific_t;
00089
00090 #endif
00091
00092 #if defined(OSKI_UNBIND)
00093 # include <oski/common.h>
00094 # include <oski/mangle.h>
00095 # undef INC_OSKI_MATCOMMON_H
00096 # undef oski_matcommon_t
00097 # undef oski_matspecific_t
00098 # undef oski_TransposePatternProp
00099 # undef oski_TransposeProps
00100 # undef OSKI_MATPROP_IS_SQUARE
00101 # undef OSKI_MATPROP_IS_TRI
00102 #endif
00103
00104