annotate liboctave/util/lo-utils.cc @ 20651:e54ecb33727e

lo-array-gripes.cc: Remove FIXME's related to buffer size. * lo-array-gripes.cc: Remove FIXME's related to buffer size. Shorten sprintf buffers from 100 to 64 characters (still well more than 19 required). Use 'const' decorator on constant value for clarity. Remove extra space between variable and array bracket.
author Rik <rik@octave.org>
date Mon, 12 Oct 2015 21:13:47 -0700
parents 4a41b7d426b6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1993
1b57120c997b [project @ 1996-03-03 01:16:15 by jwe]
jwe
parents: 1967
diff changeset
1 // utils.cc
1967
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
2 /*
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
3
19731
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 18084
diff changeset
4 Copyright (C) 1996-2015 John W. Eaton
1967
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
5
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
7
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6907
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6907
diff changeset
11 option) any later version.
1967
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
12
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
16 for more details.
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
17
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6907
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6907
diff changeset
20 <http://www.gnu.org/licenses/>.
1967
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
21
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
22 */
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
23
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
25 #include <config.h>
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
26 #endif
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
27
6907
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
28 #include <cctype>
10463
bbe99b2a5ba7 undo recent gnulib-related changes
John W. Eaton <jwe@octave.org>
parents: 10447
diff changeset
29 #include <cstdlib>
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
30 #include <cstdio>
7048
845ca0affec0 [project @ 2007-10-22 16:55:41 by jwe]
jwe
parents: 7017
diff changeset
31 #include <cstring>
11010
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
32 #include <cfloat>
1967
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
33
6490
0ad7655cf2bc [project @ 2007-04-05 02:44:34 by jwe]
jwe
parents: 6202
diff changeset
34 #include <limits>
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
35 #include <string>
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
36
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
37 #include <sys/types.h>
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
38 #include <unistd.h>
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
39
10068
ca93f583573d handle interrupts octave_fgets
Jaroslav Hajek <highegg@gmail.com>
parents: 9469
diff changeset
40 #include "quit.h"
ca93f583573d handle interrupts octave_fgets
Jaroslav Hajek <highegg@gmail.com>
parents: 9469
diff changeset
41
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
42 #include "lo-error.h"
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
43 #include "lo-ieee.h"
1967
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
44 #include "lo-mappers.h"
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
45 #include "lo-utils.h"
4cb6aaa0f2c7 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents:
diff changeset
46
11010
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
47 bool xis_int_or_inf_or_nan (double x)
11013
63f79f798a14 fix small typos in new tests
Jaroslav Hajek <highegg@gmail.com>
parents: 11010
diff changeset
48 { return xisnan (x) || D_NINT (x) == x; }
11010
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
49
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
50 bool xis_one_or_zero (double x)
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
51 { return x == 0 || x == 1; }
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
52
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
53 bool xis_zero (double x)
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
54 { return x == 0; }
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
55
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
56 bool xtoo_large_for_float (double x)
15213
336f42406671 use numeric_limits functions instead of DBL_MIN, DBL_MAX, etc.
John W. Eaton <jwe@octave.org>
parents: 15212
diff changeset
57 {
16971
259c1f295a1e Use xfinite to replace some (isinf || isnan) instances in C++ code.
Rik <rik@octave.org>
parents: 15454
diff changeset
58 return (xfinite (x) && fabs (x) > std::numeric_limits<float>::max ());
15213
336f42406671 use numeric_limits functions instead of DBL_MIN, DBL_MAX, etc.
John W. Eaton <jwe@octave.org>
parents: 15212
diff changeset
59 }
11010
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
60
15212
4bbd3bbb8912 reduce code duplication in too_large_for_float array functions
John W. Eaton <jwe@octave.org>
parents: 14811
diff changeset
61 bool xtoo_large_for_float (const Complex& x)
4bbd3bbb8912 reduce code duplication in too_large_for_float array functions
John W. Eaton <jwe@octave.org>
parents: 14811
diff changeset
62 {
4bbd3bbb8912 reduce code duplication in too_large_for_float array functions
John W. Eaton <jwe@octave.org>
parents: 14811
diff changeset
63 return (xtoo_large_for_float (x.real ())
4bbd3bbb8912 reduce code duplication in too_large_for_float array functions
John W. Eaton <jwe@octave.org>
parents: 14811
diff changeset
64 || xtoo_large_for_float (x.imag ()));
4bbd3bbb8912 reduce code duplication in too_large_for_float array functions
John W. Eaton <jwe@octave.org>
parents: 14811
diff changeset
65 }
4bbd3bbb8912 reduce code duplication in too_large_for_float array functions
John W. Eaton <jwe@octave.org>
parents: 14811
diff changeset
66
11010
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
67 bool xis_int_or_inf_or_nan (float x)
11013
63f79f798a14 fix small typos in new tests
Jaroslav Hajek <highegg@gmail.com>
parents: 11010
diff changeset
68 { return xisnan (x) || D_NINT (x) == x; }
11010
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
69
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
70 bool xis_one_or_zero (float x)
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
71 { return x == 0 || x == 1; }
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
72
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
73 bool xis_zero (float x)
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
74 { return x == 0; }
9478b216752e simplify more array tests
Jaroslav Hajek <highegg@gmail.com>
parents: 10463
diff changeset
75
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
76 // Save a string.
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
77
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
78 char *
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
79 strsave (const char *s)
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
80 {
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
81 if (! s)
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
82 return 0;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
83
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
84 int len = strlen (s);
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
85 char *tmp = new char [len+1];
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
86 tmp = strcpy (tmp, s);
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
87 return tmp;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
88 }
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
89
17788
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
90 // This function was adapted from xputenv from Karl Berry's kpathsearch
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
91 // library.
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
92
17861
870f3e12e163 maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents: 17788
diff changeset
93 // FIXME: make this do the right thing if we don't have a SMART_PUTENV.
17788
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
94
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
95 void
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 2926
diff changeset
96 octave_putenv (const std::string& name, const std::string& value)
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
97 {
17788
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
98 int new_len = name.length () + value.length () + 2;
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
99
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
100 char *new_item = static_cast<char*> (gnulib::malloc (new_len));
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
101
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
102 sprintf (new_item, "%s=%s", name.c_str (), value.c_str ());
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
103
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
104 // As far as I can see there's no way to distinguish between the
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
105 // various errors; putenv doesn't have errno values.
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
106
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
107 if (gnulib::putenv (new_item) < 0)
415583856971 undo 7b305b36b87e to avoid Windows putenv/setenv failure (bug #40381)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
108 (*current_liboctave_error_handler) ("putenv (%s) failed", new_item);
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
109 }
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
110
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 2926
diff changeset
111 std::string
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
112 octave_fgets (FILE *f)
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
113 {
4527
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
114 bool eof;
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
115 return octave_fgets (f, eof);
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
116 }
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
117
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
118 std::string
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
119 octave_fgets (FILE *f, bool& eof)
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
120 {
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
121 eof = false;
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
122
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 2926
diff changeset
123 std::string retval;
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
124
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
125 int grow_size = 1024;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
126 int max_size = grow_size;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
127
10411
479cc8a0a846 use gnulib namespace
John W. Eaton <jwe@octave.org>
parents: 10314
diff changeset
128 char *buf = static_cast<char *> (gnulib::malloc (max_size));
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
129 char *bufptr = buf;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
130 int len = 0;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
131
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
132 do
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
133 {
12918
f3a8d1efe2c1 use gnulib:: qualifiers for more stdio functions
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
134 if (gnulib::fgets (bufptr, grow_size, f))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
135 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
136 len = strlen (bufptr);
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
137
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
138 if (len == grow_size - 1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
139 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
140 int tmp = bufptr - buf + grow_size - 1;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
141 grow_size *= 2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
142 max_size += grow_size;
10411
479cc8a0a846 use gnulib namespace
John W. Eaton <jwe@octave.org>
parents: 10314
diff changeset
143 buf = static_cast<char *> (gnulib::realloc (buf, max_size));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
144 bufptr = buf + tmp;
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
145
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
146 if (*(bufptr-1) == '\n')
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
147 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
148 *bufptr = '\0';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
149 retval = buf;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
150 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
151 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
152 else if (bufptr[len-1] != '\n')
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
153 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
154 bufptr[len++] = '\n';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
155 bufptr[len] = '\0';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
156 retval = buf;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
157 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
158 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
159 retval = buf;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
160 }
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
161 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
162 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
163 if (len == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
164 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
165 eof = true;
4527
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
166
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
167 free (buf);
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
168
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
169 buf = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
170 }
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
171
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
172 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
173 }
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
174 }
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
175 while (retval.empty ());
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
176
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
177 if (buf)
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
178 free (buf);
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
179
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10068
diff changeset
180 octave_quit ();
10068
ca93f583573d handle interrupts octave_fgets
Jaroslav Hajek <highegg@gmail.com>
parents: 9469
diff changeset
181
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
182 return retval;
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
183 }
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2847
diff changeset
184
3970
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
185 std::string
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
186 octave_fgetl (FILE *f)
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
187 {
4527
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
188 bool eof;
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
189 return octave_fgetl (f, eof);
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
190 }
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
191
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
192 std::string
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
193 octave_fgetl (FILE *f, bool& eof)
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
194 {
c0a23a13eea2 [project @ 2003-10-03 02:52:46 by jwe]
jwe
parents: 4130
diff changeset
195 std::string retval = octave_fgets (f, eof);
3970
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
196
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
197 size_t len = retval.length ();
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
198
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
199 if (retval[len-1] == '\n')
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
200 retval.resize (len-1);
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
201
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
202 return retval;
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
203 }
4f884e25aab9 [project @ 2002-07-02 04:14:35 by jwe]
jwe
parents: 3504
diff changeset
204
17928
079da800451b Fix loading complex values with 'NA' saved in text format (bug #40575).
Rik <rik@octave.org>
parents: 17861
diff changeset
205 // Note that the caller is responsible for repositioning the stream on failure.
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
206
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
207 template <typename T>
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
208 T
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
209 read_inf_nan_na (std::istream& is, char c0)
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
210 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
211 T val = 0.0;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
212
12995
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
213 switch (c0)
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
214 {
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
215 case 'i': case 'I':
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
216 {
12995
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
217 char c1 = is.get ();
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
218 if (c1 == 'n' || c1 == 'N')
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
219 {
12995
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
220 char c2 = is.get ();
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
221 if (c2 == 'f' || c2 == 'F')
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
222 val = std::numeric_limits<T>::infinity ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
223 else
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
224 is.setstate (std::ios::failbit);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
225 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
226 else
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
227 is.setstate (std::ios::failbit);
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
228 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
229 break;
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
230
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
231 case 'n': case 'N':
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
232 {
12995
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
233 char c1 = is.get ();
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
234 if (c1 == 'a' || c1 == 'A')
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
235 {
12995
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
236 char c2 = is.get ();
7872afb42fab fix scanf problem with reading I (bug #33722)
John W. Eaton <jwe@octave.org>
parents: 12936
diff changeset
237 if (c2 == 'n' || c2 == 'N')
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
238 val = std::numeric_limits<T>::quiet_NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
239 else
17928
079da800451b Fix loading complex values with 'NA' saved in text format (bug #40575).
Rik <rik@octave.org>
parents: 17861
diff changeset
240 {
079da800451b Fix loading complex values with 'NA' saved in text format (bug #40575).
Rik <rik@octave.org>
parents: 17861
diff changeset
241 val = octave_numeric_limits<T>::NA ();
20183
4a41b7d426b6 Fix loading of ASCII files with NA values in final column (bug #44967).
Rik <rik@octave.org>
parents: 19731
diff changeset
242 if (c2 != EOF)
4a41b7d426b6 Fix loading of ASCII files with NA values in final column (bug #44967).
Rik <rik@octave.org>
parents: 19731
diff changeset
243 is.putback (c2);
17928
079da800451b Fix loading complex values with 'NA' saved in text format (bug #40575).
Rik <rik@octave.org>
parents: 17861
diff changeset
244 }
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
245 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
246 else
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
247 is.setstate (std::ios::failbit);
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
248 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
249 break;
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
250
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
251 default:
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
252 abort ();
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
253 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
254
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
255 return val;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
256 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
257
12936
b74cb659e757 accept but discard sign when reading NA and NaN values
John W. Eaton <jwe@octave.org>
parents: 12918
diff changeset
258 // Read a double value. Discard any sign on NaN and NA.
b74cb659e757 accept but discard sign when reading NA and NaN values
John W. Eaton <jwe@octave.org>
parents: 12918
diff changeset
259
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
260 template <typename T>
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
261 double
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
262 octave_read_fp_value (std::istream& is)
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
263 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
264 T val = 0.0;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
265
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
266 // FIXME: resetting stream position is likely to fail unless we are
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
267 // reading from a file.
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
268 std::ios::streampos pos = is.tellg ();
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
269
6907
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
270 char c1 = ' ';
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
271
6907
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
272 while (isspace (c1))
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
273 c1 = is.get ();
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
274
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
275 bool neg = false;
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
276
6194
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
277 switch (c1)
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
278 {
6194
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
279 case '-':
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
280 neg = true;
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
281 // fall through...
6194
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
282
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
283 case '+':
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
284 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
285 char c2 = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
286 c2 = is.get ();
12936
b74cb659e757 accept but discard sign when reading NA and NaN values
John W. Eaton <jwe@octave.org>
parents: 12918
diff changeset
287 if (c2 == 'i' || c2 == 'I' || c2 == 'n' || c2 == 'N')
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
288 val = read_inf_nan_na<T> (is, c2);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
289 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
290 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
291 is.putback (c2);
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
292 is >> val;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
293 }
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
294
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
295 if (neg && ! is.fail ())
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
296 val = -val;
6194
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
297 }
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
298 break;
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
299
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
300 case 'i': case 'I':
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
301 case 'n': case 'N':
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
302 val = read_inf_nan_na<T> (is, c1);
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
303 break;
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
304
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
305 default:
6194
0d2ff0dfb159 [project @ 2006-12-01 05:25:38 by jwe]
jwe
parents: 5775
diff changeset
306 is.putback (c1);
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
307 is >> val;
14806
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
308 break;
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
309 }
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
310
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
311 std::ios::iostate status = is.rdstate ();
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
312 if (status & std::ios::failbit)
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
313 {
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
314 is.clear ();
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
315 is.seekg (pos);
980e2d5c83f7 avoid calling putback more than once between reads
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
316 is.setstate (status);
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
317 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
318
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
319 return val;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
320 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
321
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
322 template <typename T>
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
323 std::complex<T>
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
324 octave_read_cx_fp_value (std::istream& is)
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
325 {
18084
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 17928
diff changeset
326 T re = 0.0;
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 17928
diff changeset
327 T im = 0.0;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
328
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
329 std::complex<T> cx = 0.0;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
330
6907
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
331 char ch = ' ';
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
332
6907
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
333 while (isspace (ch))
c8081f4c094f [project @ 2007-09-17 17:31:10 by jwe]
jwe
parents: 6897
diff changeset
334 ch = is.get ();
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
335
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
336 if (ch == '(')
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
337 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
338 re = octave_read_value<T> (is);
6897
935d23e16951 [project @ 2007-09-13 19:13:56 by jwe]
jwe
parents: 6490
diff changeset
339 ch = is.get ();
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
340
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
341 if (ch == ',')
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
342 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
343 im = octave_read_value<T> (is);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
344 ch = is.get ();
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
345
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
346 if (ch == ')')
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
347 cx = std::complex<T> (re, im);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
348 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
349 is.setstate (std::ios::failbit);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
350 }
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
351 else if (ch == ')')
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
352 cx = re;
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
353 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10182
diff changeset
354 is.setstate (std::ios::failbit);
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
355 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
356 else
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
357 {
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
358 is.putback (ch);
9469
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
359 cx = octave_read_value<double> (is);
4130
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
360 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
361
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
362 return cx;
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
363 }
7d9bda865012 [project @ 2002-10-28 21:05:30 by jwe]
jwe
parents: 3970
diff changeset
364
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
365 template <> OCTAVE_API double octave_read_value (std::istream& is)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
366 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
367 return octave_read_fp_value<double> (is);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
368 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
369
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
370 template <> OCTAVE_API Complex octave_read_value (std::istream& is)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
371 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
372 return octave_read_cx_fp_value<double> (is);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
373 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
374
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
375 template <> OCTAVE_API float octave_read_value (std::istream& is)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
376 {
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
377 return octave_read_fp_value<float> (is);
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
378 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
379
14811
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
380 template <> OCTAVE_API FloatComplex octave_read_value (std::istream& is)
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
381 {
52cb71787cd1 use templates to avoid code duplication in octave_read_value functions
John W. Eaton <jwe@octave.org>
parents: 14806
diff changeset
382 return octave_read_cx_fp_value<float> (is);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
383 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
384
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
385 void
9469
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
386 octave_write_double (std::ostream& os, double d)
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
387 {
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
388 if (lo_ieee_is_NA (d))
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
389 os << "NA";
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
390 else if (lo_ieee_isnan (d))
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
391 os << "NaN";
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
392 else if (lo_ieee_isinf (d))
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
393 os << (d < 0 ? "-Inf" : "Inf");
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
394 else
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
395 os << d;
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
396 }
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
397
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
398 void
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
399 octave_write_complex (std::ostream& os, const Complex& c)
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
400 {
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
401 os << "(";
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
402 octave_write_double (os, real (c));
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
403 os << ",";
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
404 octave_write_double (os, imag (c));
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
405 os << ")";
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
406 }
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
407
c6edba80dfae sanity checks for loading sparse matrices
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
408 void
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
409 octave_write_float (std::ostream& os, float d)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
410 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
411 if (lo_ieee_is_NA (d))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
412 os << "NA";
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
413 else if (lo_ieee_isnan (d))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
414 os << "NaN";
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
415 else if (lo_ieee_isinf (d))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
416 os << (d < 0 ? "-Inf" : "Inf");
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
417 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
418 os << d;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
419 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
420
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
421 void
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
422 octave_write_float_complex (std::ostream& os, const FloatComplex& c)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
423 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
424 os << "(";
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
425 octave_write_float (os, real (c));
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
426 os << ",";
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
427 octave_write_float (os, imag (c));
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
428 os << ")";
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7048
diff changeset
429 }