00001
00015 #if !defined(INC_OSKI_ERROR_H)
00016
00017 #define INC_OSKI_ERROR_H
00018
00024
00049 typedef void (*oski_errhandler_t) (int, const char *,
00050 const char *, unsigned long, const char *,
00051 ...);
00052
00059 oski_errhandler_t oski_GetErrorHandler (void);
00060
00066 oski_errhandler_t oski_SetErrorHandler (oski_errhandler_t new_handler);
00067
00073 void oski_HandleErrorDefault (int error_code, const char *message,
00074 const char *source_filename,
00075 unsigned long line_number,
00076 const char *format_string, ...);
00077
00081 const char *oski_GetErrorName (int error_code);
00082
00084 #define oski_HandleError (oski_GetErrorHandler())
00085
00096 #define IS_VAL_IN_RANGE(x, a, b) \
00097 ((((a) <= (b)) && ((x) >= (a)) && ((x) <= (b))) \
00098 || (((a) > (b)) && ((x) >= (b)) && ((x) <= (a))))
00099
00107 #define ERR_OUT_OF_MEMORY -1
00108 #define ERR_INIT_LIB -2
00109 #define ERR_INIT_SHAREDLIB -3
00110
00111 #define ERR_BAD_ID -4
00112 #define ERR_LOAD_MOD -5
00113 #define ERR_UNLOAD_MOD -6
00114 #define ERR_LOAD_MATTYPE -7
00115 #define ERR_UNLOAD_MATTYPE -8
00116 #define ERR_NOT_IMPLEMENTED -9
00117 #define ERR_BAD_ARG -10
00118 #define ERR_INMATPROP_CONFLICT -11
00119
00120 #define ERR_DIM_MISMATCH -12
00121
00122 #define ERR_FALSE_INMATPROP -13
00123
00124 #define ERR_BAD_LEADDIM -14
00125
00126 #define ERR_BAD_MAT -15
00127
00128 #define ERR_BAD_VECVIEW -16
00129
00130 #define ERR_WRONG_ANS -17
00131
00132 #define ERR_BAD_HINT_ARG -18
00133
00134 #define ERR_CANT_CONVERT -19
00135
00136 #define ERR_FILE_READ -20
00137
00138 #define ERR_BAD_SYNTAX -21
00139
00140 #define ERR_OLUA_NORET -22
00141
00142 #define ERR_OLUA_STARTUP -23
00143
00144 #define ERR_OLUA_TYPE_MISMATCH -24
00145
00146 #define ERR_BAD_PERM -25
00147
00148 #define ERR_BAD_ENTRY -26
00149
00150 #define ERR_ZERO_ENTRY -27
00151
00153
00162
00164 #define OSKI_ERR(method, err_code) \
00165 {if( (err_code) < 0 ) { \
00166 oski_HandleError( (err_code), "An error occurred", \
00167 __FILE__, __LINE__, "In call to '%s()': %s", \
00168 MACRO_TO_STRING(method), oski_GetErrorName(err_code) ); \
00169 }}
00170
00172 #define OSKI_ERR_NOT_IMPLEMENTED(method, desc) \
00173 oski_HandleError( ERR_NOT_IMPLEMENTED, \
00174 "Feature not yet implemented", __FILE__, __LINE__, \
00175 "%s, %s()", desc, MACRO_TO_STRING(method) \
00176 )
00177
00179 #define OSKI_ERR_MATTYPEID_MEMBER(method, id, member) \
00180 oski_HandleError( ERR_NOT_IMPLEMENTED, \
00181 "Can't find matrix type-specific method implementation", \
00182 __FILE__, __LINE__, \
00183 "In call to %s(): Could not load %s() for matrix type #%d\n", \
00184 MACRO_TO_STRING(method), "oski_" MACRO_TO_STRING(member), \
00185 (int)(id) \
00186 )
00187
00189 #define OSKI_ERR_MATTYPE_MEMBER(method, name, member) \
00190 oski_HandleError( ERR_NOT_IMPLEMENTED, \
00191 "Can't find matrix type-specific method implementation", \
00192 __FILE__, __LINE__, \
00193 "In call to %s(): Could not load %s() for matrix type" \
00194 " %s(ind=%s, val=%s)" \
00195 MACRO_TO_STRING(method), "oski_" MACRO_TO_STRING(member), \
00196 name, MACRO_TO_STRING(IND_T), MACRO_TO_STRING(VAL_T) \
00197 )
00198
00200 #define OSKI_ERR_BAD_INMATPROP(method, val) \
00201 oski_HandleError( ERR_BAD_ARG, \
00202 "Unrecognized input matrix property specified", __FILE__, __LINE__, \
00203 "Got '%d' in call to %s()", (int)(val), MACRO_TO_STRING(method) \
00204 )
00205
00215 #define OSKI_ERR_INMATPROP_CONFLICT(method, arg_num) \
00216 oski_HandleError( ERR_INMATPROP_CONFLICT, \
00217 "Conflicting input matrix properties were specified", \
00218 __FILE__, __LINE__, \
00219 "Please check property #%d specified in the call to %s()", \
00220 (int)((arg_num)+1), MACRO_TO_STRING(method) \
00221 )
00222
00228 #define OSKI_ERR_BAD_DIMS(method, m, n) \
00229 oski_HandleError( ERR_BAD_ARG, \
00230 "Matrix dimensions must be non-negative", \
00231 __FILE__, __LINE__, \
00232 "Dimensions specified in call to %s(): %d x %d\n", \
00233 MACRO_TO_STRING(method), (int)m, (int)n \
00234 )
00235
00239 #define OSKI_ERR_BAD_COPYMODE(method, mode) \
00240 oski_HandleError( ERR_BAD_ARG, \
00241 "Unrecognized copy mode specified", \
00242 __FILE__, __LINE__, "Mode specified to %s(): %d", \
00243 MACRO_TO_STRING(method), (int)(mode) \
00244 )
00245
00249 #define OSKI_ERR_BAD_STORAGE( method, mode ) \
00250 oski_HandleError( ERR_BAD_ARG, \
00251 "Unrecognized dense vector/multivector data layout specified", \
00252 __FILE__, __LINE__, "Layout specified to %s(): %d", \
00253 MACRO_TO_STRING(method), (int)(mode) \
00254 )
00255
00259 #define OSKI_ERR_BAD_MATOP_MS( method, argnum, opA ) \
00260 oski_HandleError( ERR_BAD_ARG, \
00261 "Unrecognized matrix transpose operation", __FILE__, __LINE__, \
00262 "Please check parameter #%d passed to %s() which equals %d", \
00263 (int)(argnum), (method), (int)(opA) \
00264 )
00265
00269 #define OSKI_ERR_BAD_MATOP( method, argnum, opA ) \
00270 OSKI_ERR_BAD_MATOP_MS( MACRO_TO_STRING(method), (argnum), (opA) )
00271
00275 #define OSKI_ERR_BAD_ATAOP_MS( method, argnum, op ) \
00276 oski_HandleError( ERR_BAD_ARG, \
00277 "Unrecognized A^T*A transpose operation", __FILE__, __LINE__, \
00278 "Please check parameter #%d passed to %s() which equals %d", \
00279 (int)(argnum), (method), (int)(op) \
00280 )
00281
00285 #define OSKI_ERR_BAD_ATAOP( method, argnum, op ) \
00286 OSKI_ERR_BAD_ATAOP_MS( MACRO_TO_STRING(method), argnum, op )
00287
00291 #define OSKI_ERR_DIM_MISMATCH_MS(method, m_A, n_A, m_B, n_B, m_C, n_C) \
00292 oski_HandleError( ERR_DIM_MISMATCH, \
00293 "Cannot multiply matrices with incompatible dimensions", \
00294 __FILE__, __LINE__, \
00295 "In %s(), for C = A*B, C is %d x %d, A is %d x %d, and B is %d x %d", \
00296 method, m_C, n_C, m_A, n_A, m_B, n_B \
00297 )
00298
00302 #define OSKI_ERR_DIM_MISMATCH(method, m_A, n_A, m_B, n_B, m_C, n_C) \
00303 OSKI_ERR_DIM_MISMATCH_MS( MACRO_TO_STRING(method), \
00304 m_A, n_A, m_B, n_B, m_C, n_C )
00305
00306 #define OSKI_ERR_DIM_UNEQUAL(method, m_A, n_A, m_B, n_B) \
00307 oski_HandleError( ERR_DIM_MISMATCH, \
00308 "The vector/matrix operands have incompatible dimensions", \
00309 __FILE__, __LINE__, \
00310 "In call to %s(), the operand dimensions are %dx%d and %dx%d", \
00311 (int)(m_A), (int)(n_A), (int)(m_B), (int)(n_B) \
00312 )
00313
00317 #define OSKI_ERR_DIM_MISMATCH_TRANS_MS(method, m_A, n_A, m_B, n_B, m_C, n_C) \
00318 oski_HandleError( ERR_DIM_MISMATCH, \
00319 "Cannot multiply matrices with incompatible dimensions", \
00320 __FILE__, __LINE__, \
00321 "In %s(), for C = op(A)*B, C is %d x %d," \
00322 "op(A) is %d x %d, and B is %d x %d", \
00323 method, m_C, n_C, n_A, m_A, m_B, n_B \
00324 )
00325
00329 #define OSKI_ERR_DIM_MISMATCH_TRANS(method, m_A, n_A, m_B, n_B, m_C, n_C) \
00330 OSKI_ERR_DIM_MISMATCH_TRANS_MS( MACRO_TO_STRING(method), \
00331 m_A, n_A, m_B, n_B, m_C, n_C )
00332
00345 #define OSKI_ERR_DIM_MISMATCH_OBJ_MS(method, A, B, C) \
00346 OSKI_ERR_DIM_MISMATCH_MS( method, (A)->num_rows, (A)->num_cols, \
00347 ((B) == INVALID_VEC) ? (A)->num_cols : (B)->num_rows, \
00348 ((B) == INVALID_VEC) ? (C)->num_cols : (B)->num_cols, \
00349 ((C) == INVALID_VEC) ? (A)->num_rows : (C)->num_rows, \
00350 ((C) == INVALID_VEC) ? (B)->num_cols : (C)->num_cols \
00351 )
00352
00365 #define OSKI_ERR_DIM_MISMATCH_OBJ(method, A, B, C) \
00366 OSKI_ERR_DIM_MISMATCH_OBJ_MS( MACRO_TO_STRING(method), A, B, C )
00367
00380 #define OSKI_ERR_DIM_MISMATCH_TRANS_OBJ_MS(method, A, B, C) \
00381 OSKI_ERR_DIM_MISMATCH_TRANS_MS(method, (A)->num_rows, (A)->num_cols, \
00382 ((B) == INVALID_VEC) ? (A)->num_rows : (B)->num_rows, \
00383 ((B) == INVALID_VEC) ? (C)->num_cols : (B)->num_cols, \
00384 ((C) == INVALID_VEC) ? (A)->num_cols : (C)->num_rows, \
00385 ((C) == INVALID_VEC) ? (B)->num_cols : (C)->num_cols \
00386 )
00387
00400 #define OSKI_ERR_DIM_MISMATCH_TRANS_OBJ(method, A, B, C) \
00401 OSKI_ERR_DIM_MISMATCH_TRANS_OBJ_MS( MACRO_TO_STRING(method), A, B, C )
00402
00410 #define OSKI_ERR_NULL_ARG_MS(method, argnum, argname) \
00411 oski_HandleError( ERR_BAD_ARG, \
00412 "Parameter should not equal NULL", __FILE__, __LINE__, \
00413 "Please check parameter #%d (%s) passed to %s()", \
00414 (int)(argnum), (const char *)((argname) ? (argname) : "?"), method \
00415 )
00416
00418 #define OSKI_ERR_NULL_ARG( method, argnum, argname ) \
00419 OSKI_ERR_NULL_ARG_MS( MACRO_TO_STRING(method), argnum, argname )
00420
00429 #define OSKI_ERR_SMALL_ARG_MS(method, argnum, argname, min_val) \
00430 oski_HandleError( ERR_BAD_ARG, \
00431 ((min_val) == 0 ? "Parameter must be non-negative" \
00432 : (min_val) == 1 ? "Parameter must be positive" \
00433 : "Parameter value too small"), \
00434 __FILE__, __LINE__, \
00435 "Please check parameter #%d (%s) passed to %s()", \
00436 (int)(argnum), (const char *)((argname) ? (argname) : "?"), method \
00437 )
00438
00440 #define OSKI_ERR_SMALL_ARG( method, argnum, argname, min_val ) \
00441 OSKI_ERR_SMALL_ARG_MS(MACRO_TO_STRING(method), argnum, argname, min_val)
00442
00451 #define OSKI_ERR_BAD_STRIDE( method, argnum, stride, min_val ) \
00452 oski_HandleError( ERR_BAD_LEADDIM, \
00453 "Illegal leading dimension (stride) specified", __FILE__, __LINE__, \
00454 "Stride passed to %s() equals %d, but should be at least %d", \
00455 MACRO_TO_STRING(method), (int)stride, (int)min_val \
00456 )
00457
00464 #define OSKI_ERR_BAD_MAT_MS( method, argnum ) \
00465 oski_HandleError( ERR_BAD_MAT, \
00466 "Invalid matrix handle", __FILE__, __LINE__, \
00467 "Please check matrix object, parameter #%d in call to %s()", \
00468 (int)(argnum), (method) \
00469 )
00470
00477 #define OSKI_ERR_BAD_MAT( method, argnum ) \
00478 OSKI_ERR_BAD_MAT_MS( MACRO_TO_STRING(method), argnum )
00479
00484 #define OSKI_ERR_NO_REPR( method, argnum ) \
00485 oski_HandleError( ERR_BAD_ARG, \
00486 "Matrix handle does not have any representations", __FILE__, __LINE__, \
00487 "Please check parameter #%d in call to %s()", \
00488 (int)(argnum), MACRO_TO_STRING(method) \
00489 )
00490
00497 #define OSKI_ERR_BAD_PERM( method, argnum ) \
00498 oski_HandleError( ERR_BAD_MAT, \
00499 "Invalid permutation matrix object", __FILE__, __LINE__, \
00500 "Please check permutation object, parameter #%d in call to %s()", \
00501 (int)(argnum), MACRO_TO_STRING(method) \
00502 )
00503
00510 #define OSKI_ERR_MAT_NOTSQUARE_MS( method, argnum ) \
00511 oski_HandleError( ERR_BAD_MAT, \
00512 "Expected a square input matrix object", __FILE__, __LINE__, \
00513 "Please check parameter #%d in call to %s()", \
00514 (int)(argnum), (method) \
00515 )
00516
00523 #define OSKI_ERR_MAT_NOTSQUARE( method, argnum ) \
00524 OSKI_ERR_MAT_NOTSQUARE_MS( MACRO_TO_STRING(method), argnum )
00525
00532 #define OSKI_ERR_BAD_VEC_MS( method, argnum ) \
00533 oski_HandleError( ERR_BAD_VECVIEW, \
00534 "Invalid vector view object", __FILE__, __LINE__, \
00535 "Please check vector view object, parameter #%d in call to %s()", \
00536 (int)(argnum), (method) \
00537 )
00538
00545 #define OSKI_ERR_BAD_VEC( method, argnum ) \
00546 OSKI_ERR_BAD_VEC_MS( MACRO_TO_STRING(method), argnum )
00547
00551 #define OSKI_ERR_WRONG_ANS_ELEM( method, x_true, x_calc, index ) \
00552 oski_HandleError( ERR_WRONG_ANS, \
00553 "Mistake detected in computation", __FILE__, __LINE__, \
00554 "Please check array element %d: " \
00555 "computed %g but expected %g.", index, x_calc, x_true \
00556 )
00557
00561 #define OSKI_ERR_WRONG_ANS_ELEM_COMPLEX( method, x_true, x_calc, index ) \
00562 oski_HandleError( ERR_WRONG_ANS, \
00563 "Mistake detected in computation", __FILE__, __LINE__, \
00564 "Please check array element %d: " \
00565 "computed %g+%gi but expected %g+%gi.", \
00566 index, _RE(x_calc), _IM(x_calc), _RE(x_true), _IM(x_true) \
00567 )
00568
00572 #define OSKI_ERR_BAD_HINT( method, argnum, hint ) \
00573 oski_HandleError( ERR_BAD_HINT_ARG, \
00574 "An unrecognized hint was specified", __FILE__, __LINE__, \
00575 "Please check the value (%d) of the hint " \
00576 "passed as argument %d in call to %s().", \
00577 (int)(hint), (int)(argnum), MACRO_TO_STRING(method) \
00578 )
00579
00583 #define OSKI_ERR_BAD_HINT_ARG( method, argnum, hint, int_val ) \
00584 oski_HandleError( ERR_BAD_HINT_ARG, \
00585 "An invalid hint parameter was specified", __FILE__, __LINE__, \
00586 "Please check the parameter value %d (=%d) passed to the" \
00587 " structural hint '%s' in call to %s().", \
00588 (int)(argnum), (int)(int_val), MACRO_TO_STRING(hint), \
00589 MACRO_TO_STRING(method) \
00590 )
00591
00596 #define OSKI_ERR_INCOMPAT_NUMVECS_MS( method, argnum_x, nv_x, argnum_y, nv_y ) \
00597 oski_HandleError( ERR_DIM_MISMATCH, \
00598 "Vector views have incompatible dimensions", __FILE__, __LINE__, \
00599 "In call to %s(), vector operands, parameters #%d and #%d," \
00600 " should have same number of vectors but don't" \
00601 " (%d and %d, respectively)", \
00602 (method), (int)(argnum_x), (int)(argnum_y), \
00603 (int)(nv_x), (int)(nv_y) \
00604 )
00605
00610 #define OSKI_ERR_INCOMPAT_NUMVECS( method, argnum_x, nv_x, argnum_y, nv_y ) \
00611 OSKI_ERR_INCOMPAT_NUMVECS_MS( MACRO_TO_STRING(method), \
00612 argnum_x, nv_x, argnum_y, nv_y )
00613
00617 #define OSKI_ERR_NO_APPLYHEUR( method, heur_desc ) \
00618 oski_HandleError( ERR_CANT_CONVERT, \
00619 "Can't convert to new data structure", __FILE__, __LINE__, \
00620 "In call to %s(), can't apply results of heuristic '%s'", \
00621 MACRO_TO_STRING(method), (heur_desc) \
00622 )
00623
00625 #define OSKI_ERR_FILE_READ( method, filename ) \
00626 oski_HandleError( ERR_FILE_READ, \
00627 "Can't read a file", __FILE__, __LINE__, \
00628 "In call to %s(): Please check that the requested file" \
00629 ", '%s', exists and is properly formatted.", \
00630 MACRO_TO_STRING(method), filename )
00631
00633 #define OSKI_ERR_BAD_ENTRY( method, argnum, i, j, m, n ) \
00634 oski_HandleError( ERR_BAD_ARG, \
00635 "Caller specified an invalid matrix entry", __FILE__, __LINE__, \
00636 "Parameter #%d in call to %s(): The entry (%d, %d) is invalid." \
00637 " (The row/column indices must be at least 1 and less than the" \
00638 " matrix dimensions, %d x %d.)", \
00639 (int)(argnum), MACRO_TO_STRING(method), (int)(i), (int)(j), \
00640 (int)(m), (int)(n) \
00641 )
00642
00644 #define OSKI_ERR_MOD_UNIT_DIAG_REAL( method, row, col, val ) \
00645 oski_HandleError( ERR_INMATPROP_CONFLICT, \
00646 "Attempt to change the unit diagonal", __FILE__, __LINE__, \
00647 "In %s(): Attempt to change the (%d, %d) entry to %g", \
00648 MACRO_TO_STRING(method), (int)(row), (int)(col), \
00649 (double)(val) \
00650 )
00651
00653 #define OSKI_ERR_MOD_UNIT_DIAG_COMPLEX( method, row, col, val ) \
00654 oski_HandleError( ERR_INMATPROP_CONFLICT, \
00655 "Attempt to change the unit diagonal", __FILE__, __LINE__, \
00656 "In %s(): Attempt to change the (%d, %d) entry to %g+%gi", \
00657 MACRO_TO_STRING(method), (int)(row), (int)(col), \
00658 (double)_RE(val), (double)_IM(val) \
00659 )
00660
00662 #define OSKI_ERR_MOD_TRI_REAL( method, is_upper, row, col, val ) \
00663 oski_HandleError( ERR_ZERO_ENTRY, \
00664 "Attempt to change zero part of triangular matrix", \
00665 __FILE__, __LINE__, \
00666 "In %s(): Tried to change (%d, %d) entry of a %s-triangular" \
00667 " matrix to %g", \
00668 MACRO_TO_STRING(method), (int)(row), (int)(col), \
00669 (is_upper) ? "upper" : "lower", (double)(val) \
00670 )
00671
00673 #define OSKI_ERR_MOD_TRI_COMPLEX( method, is_upper, row, col, val ) \
00674 oski_HandleError( ERR_ZERO_ENTRY, \
00675 "Attempt to change zero part of triangular matrix", \
00676 __FILE__, __LINE__, \
00677 "In %s(): Tried to change (%d, %d) entry of a %s-triangular" \
00678 " matrix to %g+%gi", \
00679 MACRO_TO_STRING(method), (int)(row), (int)(col), \
00680 (is_upper) ? "upper" : "lower", (double)_RE(val), (double)_IM(val) \
00681 )
00682
00684 #define OSKI_ERR_ZERO_ENTRY_REAL( method, row, col, val ) \
00685 oski_HandleError( ERR_ZERO_ENTRY, \
00686 "Attempt to change an implicit zero entry", __FILE__, __LINE__, \
00687 "In %s(): Tried to change implicit entry (%d, %d) to %g", \
00688 MACRO_TO_STRING(method), (int)(row), (int)(col), (double)(val) \
00689 )
00690
00692 #define OSKI_ERR_ZERO_ENTRY_COMPLEX( method, row, col, val ) \
00693 oski_HandleError( ERR_ZERO_ENTRY, \
00694 "Attempt to change an implicit zero entry", __FILE__, __LINE__, \
00695 "In %s(): Tried to change implicit entry (%d, %d) to %g+%gi", \
00696 MACRO_TO_STRING(method), (int)(row), (int)(col), \
00697 (double)_RE(val), (double)_IM(val) \
00698 )
00699
00701 #define OSKI_ERR_BAD_ROW_MS( method, argnum, row, min, max ) \
00702 oski_HandleError( ERR_BAD_ENTRY, \
00703 "Caller specified an invalid row index", __FILE__, __LINE__, \
00704 "In %s(): The row index %d, given in parameter %d, is out of" \
00705 " the range [%d, %d]", \
00706 method, (int)(row), (int)(argnum), (int)(min), (int)(max) \
00707 )
00708
00710 #define OSKI_ERR_BAD_ROW( method, argnum, row, min, max ) \
00711 OSKI_ERR_BAD_ROW_MS( MACRO_TO_STRING(method), argnum, row, min, max )
00712
00714 #define OSKI_ERR_BAD_COL_MS( method, argnum, col, min, max ) \
00715 oski_HandleError( ERR_BAD_ENTRY, \
00716 "Caller specified an invalid column index", __FILE__, __LINE__, \
00717 "In %s(): The column index %d, given in parameter %d, is out of" \
00718 " the range [%d, %d]", \
00719 method, (int)(col), (int)(argnum), (int)(min), (int)(max) \
00720 )
00721
00723 #define OSKI_ERR_BAD_COL( method, argnum, col, min, max ) \
00724 OSKI_ERR_BAD_COL_MS( MACRO_TO_STRING(method), argnum, col, min, max )
00725
00727 #define OSKI_ERR_CLIQUE_VALMAT_SMALL_MS( method, argnum, V, r, c ) \
00728 oski_HandleError( ERR_BAD_VECVIEW, \
00729 "The array holding clique values is too small", __FILE__, __LINE__, \
00730 "In %s(): The array holding clique values (parameter #%d)" \
00731 " is %d x %d, but should be at least %d x %d", \
00732 method, (int)(argnum), \
00733 (int)((V)->num_rows), (int)((V)->num_cols), (int)(r), (int)(c) \
00734 )
00735
00737 #define OSKI_ERR_CLIQUE_VALMAT_SMALL( method, argnum, V, r, c ) \
00738 OSKI_ERR_CLIQUE_VALMAT_SMALL( MACRO_TO_STRING(method), argnum, V, r, c )
00739
00741 #define OSKI_ERR_BAD_DIAG_MS( method, argnum, d, m, n ) \
00742 oski_HandleError( ERR_BAD_ARG, \
00743 "The specified diagonal does not exist", __FILE__, __LINE__, \
00744 "In %s(): The specified diagonal (parameter #%d), %d, is not" \
00745 " in the proper range of [%d, %d] for an %d x %d matrix", \
00746 method, (int)(argnum), (int)(d), \
00747 (int)(1-(m)), (int)((n)-1), (m), (n) \
00748 )
00749
00751 #define OSKI_ERR_BAD_DIAG( method, argnum, d, m, n ) \
00752 OSKI_ERR_BAD_DIAG_MS( MACRO_TO_STRING(method), (argnum), (d), (m), (n) )
00753
00755 #define OSKI_ERR_DIAG_VALMAT_SMALL_MS( method, argnum, V, r, c ) \
00756 oski_HandleError( ERR_BAD_VECVIEW, \
00757 "The array to hold the diagonal values is too small", \
00758 __FILE__, __LINE__, \
00759 "In %s(): The array to hold the diagonal values (parameter #%d)" \
00760 " is %d x %d, but should be at least %d x %d", \
00761 method, (int)(argnum), \
00762 (int)((V)->num_rows), (int)((V)->num_cols), (int)(r), (int)(c) \
00763 )
00764
00766 #define OSKI_ERR_DIAG_VALMAT_SMALL( method, argnum, V, r, c ) \
00767 OSKI_ERR_DIAG_VALMAT_SMALL( MACRO_TO_STRING(method), argnum, V, r, c )
00768
00770 #define OSKI_ERR_MAT_NOTTRI_MS( method, argnum ) \
00771 oski_HandleError( ERR_BAD_MAT, \
00772 "The matrix may not be triangular", __FILE__, __LINE__, \
00773 "Please check parameter #%d in the call to %s().", \
00774 (int)(argnum), (method) \
00775 )
00776
00778 #define OSKI_ERR_MAT_NOTTRI( method, argnum ) \
00779 OSKI_ERR_MAT_NOTTRI_MS( MACRO_TO_STRING(method), argnum )
00780
00782 #define OSKI_ERR_BAD_POWER_MS( method, argnum, power ) \
00783 oski_HandleError( ERR_BAD_ARG, \
00784 "Matrix power must be non-negative", __FILE__, __LINE__, \
00785 "Please check paramter #%d (power == %d) in the call to %s().", \
00786 (int)(argnum), (int)(power), (method) \
00787 )
00788
00790 #define OSKI_ERR_BAD_POWER( method, argnum, power ) \
00791 OSKI_ERR_BAD_POWER_MS( MACRO_TO_STRING(method), argnum, power )
00792
00794 #define OSKI_ERR_VEC1_ONLY( method, argnum, num_vecs ) \
00795 oski_HandleError( ERR_BAD_VECVIEW, \
00796 "Only single-vectors supported", \
00797 "Please check parameter #%d in call to %s(): " \
00798 "Caller passed in a multivector object (%d vectors) " \
00799 "where a single vector was expected.", \
00800 (int)(argnum), (method), (num_vecs) \
00801 )
00802
00804 #define OSKI_ERR_VEC1_ONLY_MS( method, argnum, num_vecs ) \
00805 OSKI_ERR_VEC1_ONLY( MACRO_TO_STRING(method), argnum, num_vecs )
00806
00808 #define OSKI_ERR_VEC_FEW_MS( method, argnum, num_vecs, num_needed ) \
00809 oski_HandleError( ERR_BAD_VECVIEW, \
00810 "Too few vectors provided", \
00811 "Please check parameter #%d in call to %s(): " \
00812 "Caller passed a %d-vector object, but at least %d required.", \
00813 (int)(argnum), (method), (int)(num_vecs), (int)(num_needed) \
00814 )
00815
00817 #define OSKI_ERR_VEC_FEW( method, argnum, num_vecs, num_needed ) \
00818 OSKI_ERR_VEC_FEW_MS( MACRO_TO_STRING(method), \
00819 argnum, num_vecs, num_needed )
00820
00823 #endif
00824
00825