comparison liboctave/lo-array-gripes.cc @ 11135:047b0e877a14

add files for previous change
author John W. Eaton <jwe@octave.org>
date Fri, 22 Oct 2010 00:29:31 -0400
parents
children fd0a3ac60b0e
comparison
equal deleted inserted replaced
11134:7c045d801702 11135:047b0e877a14
1 /*
2
3 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 John W. Eaton
4 Copyright (C) 2009 VZLU Prague
5
6 This file is part of Octave.
7
8 Octave is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, see
20 <http://www.gnu.org/licenses/>.
21
22 */
23
24 #ifdef HAVE_CONFIG_H
25 #include <config.h>
26 #endif
27
28 #include "lo-array-gripes.h"
29 #include "lo-error.h"
30
31 const char *error_id_nonconformant_args = "Octave:nonconformant-args";
32
33 const char *error_id_index_out_of_bounds = "Octave:index-out-of-bounds";
34
35 const char *error_id_invalid_index = "Octave:invalid-index";
36
37 void
38 gripe_nan_to_logical_conversion (void)
39 {
40 (*current_liboctave_error_handler)
41 ("invalid conversion from NaN to logical");
42 }
43
44 void
45 gripe_nan_to_character_conversion (void)
46 {
47 (*current_liboctave_error_handler)
48 ("invalid conversion from NaN to character");
49 }
50
51 void
52 gripe_nonconformant (const char *op, octave_idx_type op1_len,
53 octave_idx_type op2_len)
54 {
55 const char *err_id = error_id_nonconformant_args;
56
57 (*current_liboctave_error_with_id_handler)
58 (err_id, "%s: nonconformant arguments (op1 len: %d, op2 len: %d)",
59 op, op1_len, op2_len);
60 }
61
62 void
63 gripe_nonconformant (const char *op,
64 octave_idx_type op1_nr, octave_idx_type op1_nc,
65 octave_idx_type op2_nr, octave_idx_type op2_nc)
66 {
67 const char *err_id = error_id_nonconformant_args;
68
69 (*current_liboctave_error_with_id_handler)
70 (err_id, "%s: nonconformant arguments (op1 is %dx%d, op2 is %dx%d)",
71 op, op1_nr, op1_nc, op2_nr, op2_nc);
72 }
73
74 void
75 gripe_nonconformant (const char *op, const dim_vector& op1_dims,
76 const dim_vector& op2_dims)
77 {
78 const char *err_id = error_id_nonconformant_args;
79
80 std::string op1_dims_str = op1_dims.str ();
81 std::string op2_dims_str = op2_dims.str ();
82
83 (*current_liboctave_error_with_id_handler)
84 (err_id, "%s: nonconformant arguments (op1 is %s, op2 is %s)",
85 op, op1_dims_str.c_str (), op2_dims_str.c_str ());
86 }
87
88 void
89 gripe_index_out_of_range (int nd, int dim, octave_idx_type idx,
90 octave_idx_type ext)
91 {
92 const char *err_id = error_id_index_out_of_bounds;
93
94 switch (nd)
95 {
96 case 1:
97 (*current_liboctave_error_with_id_handler)
98 (err_id, "A(I): index out of bounds; value %d out of bound %d",
99 idx, ext);
100 break;
101
102 case 2:
103 (*current_liboctave_error_with_id_handler)
104 (err_id, "A(I,J): %s index out of bounds; value %d out of bound %d",
105 (dim == 1) ? "row" : "column", idx, ext);
106 break;
107
108 default:
109 (*current_liboctave_error_with_id_handler)
110 (err_id, "A(I,J,...): index to dimension %d out of bounds; value %d out of bound %d",
111 dim, idx, ext);
112 break;
113 }
114 }
115
116 void
117 gripe_del_index_out_of_range (bool is1d, octave_idx_type idx,
118 octave_idx_type ext)
119 {
120 const char *err_id = error_id_index_out_of_bounds;
121
122 (*current_liboctave_error_with_id_handler)
123 (err_id, "A(%s) = []: index out of bounds; value %d out of bound %d",
124 is1d ? "I" : "..,I,..", idx, ext);
125 }
126
127 void
128 gripe_invalid_index (void)
129 {
130 const char *err_id = error_id_invalid_index;
131
132 (*current_liboctave_error_with_id_handler)
133 (err_id, "subscript indices must be either positive integers or logicals.");
134 }
135
136 // FIXME -- the following is a common error message to resize,
137 // regardless of whether it's called from assign or elsewhere. It
138 // seems OK to me, but eventually the gripe can be specialized.
139 // Anyway, propagating various error messages into procedure is, IMHO,
140 // a nonsense. If anything, we should change error handling here (and
141 // throughout liboctave) to allow custom handling of errors
142
143 void
144 gripe_invalid_resize (void)
145 {
146 (*current_liboctave_error_with_id_handler)
147 ("Octave:invalid-resize",
148 "Invalid resizing operation or ambiguous assignment to an out-of-bounds array element.");
149 }
150
151 void
152 gripe_invalid_assignment_size (void)
153 {
154 (*current_liboctave_error_handler)
155 ("A(I) = X: X must have the same size as I");
156 }
157
158 void
159 gripe_assignment_dimension_mismatch (void)
160 {
161 (*current_liboctave_error_handler)
162 ("A(I,J,...) = X: dimensions mismatch");
163 }
164