X-Git-Url: https://ginac.de/CLN/cln.git//cln.git?a=blobdiff_plain;f=src%2Finteger%2Finput%2Fcl_I_read_stream.cc;h=227d845be9e70ff3961079fee504fc67fc033be6;hb=a44675683118ffef070b44768da5f058ea0004b8;hp=dcb9176bba09f2473d2ad5175ed97e703dc15a65;hpb=850abfde7f0d985ba01526c346bcd0d733562943;p=cln.git diff --git a/src/integer/input/cl_I_read_stream.cc b/src/integer/input/cl_I_read_stream.cc index dcb9176..227d845 100644 --- a/src/integer/input/cl_I_read_stream.cc +++ b/src/integer/input/cl_I_read_stream.cc @@ -3,7 +3,7 @@ // It does not pull in all the rational number code. // General includes. -#include "cl_sysdep.h" +#include "base/cl_sysdep.h" // Specification. #include "cln/integer_io.h" @@ -13,7 +13,7 @@ #include "cln/input.h" #include "cln/io.h" -#include "cl_spushstring.h" +#include "base/string/cl_spushstring.h" namespace cln { @@ -26,21 +26,21 @@ public: char* end_pointer (void) { return buffer+index; } }; -static cl_boolean number_char_p (char c) +static bool number_char_p (char c) { if ((c >= '0') && (c <= '9')) - return cl_true; + return true; if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'))) - return cl_true; + return true; switch (c) { case '+': case '-': case '.': case '_': case '/': - return cl_true; + return true; default: - return cl_false; + return false; } } -const cl_I read_integer (cl_istream stream, const cl_read_flags& flags) +const cl_I read_integer (std::istream& stream, const cl_read_flags& flags) { // One pre-allocated buffer. This reduces the allocation/free cost. static pushstring_hack buffer; @@ -48,8 +48,8 @@ const cl_I read_integer (cl_istream stream, const cl_read_flags& flags) var int c; // Skip whitespace at the beginning. loop { - c = freadchar(stream); - if (c == cl_EOF) goto eof; + c = stream.get(); + if (stream.eof() || stream.fail()) goto eof; if ((c == ' ') || (c == '\t') || (c == '\n')) continue; else @@ -64,8 +64,8 @@ const cl_I read_integer (cl_istream stream, const cl_read_flags& flags) buffer.push(c); // Read some digits, then a letter, then a token. loop { - c = freadchar(stream); - if (c == cl_EOF) goto eof; + c = stream.get(); + if (stream.eof() || stream.fail()) goto eof; buffer.push(c); if ((c >= '0') && (c <= '9')) continue; @@ -74,20 +74,19 @@ const cl_I read_integer (cl_istream stream, const cl_read_flags& flags) } if (!(((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')))) goto syntax1; - buffer.push(c); - c = freadchar(stream); - if (c == cl_EOF) goto eof; + c = stream.get(); + if (stream.eof() || stream.fail()) goto eof; } // Read a number token. if (!number_char_p(c)) goto syntax1; loop { buffer.push(c); - c = freadchar(stream); - if (c == cl_EOF) + c = stream.get(); + if (stream.eof() || stream.fail()) break; if (!number_char_p(c)) { - funreadchar(stream,c); + stream.putback(c); break; } } @@ -99,10 +98,10 @@ const cl_I read_integer (cl_istream stream, const cl_read_flags& flags) // Handle syntax error. syntax1: buffer.push(c); - read_number_bad_syntax(buffer.start_pointer(),buffer.end_pointer()); + throw read_number_bad_syntax_exception(buffer.start_pointer(),buffer.end_pointer()); // Handle premature EOF. -eof: read_number_eof(); +eof: throw read_number_eof_exception(); } } // namespace cln