Annotation of OpenXM_contrib/gmp/cxx/ismpz.cc, Revision 1.1
1.1 ! ohara 1: /* operator>> -- C++-style input of mpz_t.
! 2:
! 3: Copyright 2001, 2002 Free Software Foundation, Inc.
! 4:
! 5: This file is part of the GNU MP Library.
! 6:
! 7: The GNU MP Library is free software; you can redistribute it and/or modify
! 8: it under the terms of the GNU Lesser General Public License as published by
! 9: the Free Software Foundation; either version 2.1 of the License, or (at your
! 10: option) any later version.
! 11:
! 12: The GNU MP Library is distributed in the hope that it will be useful, but
! 13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 14: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
! 15: License for more details.
! 16:
! 17: You should have received a copy of the GNU Lesser General Public License
! 18: along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! 19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 20: MA 02111-1307, USA. */
! 21:
! 22: #include <cctype>
! 23: #include <iostream>
! 24: #include <string>
! 25: #include "gmp.h"
! 26: #include "gmp-impl.h"
! 27:
! 28: using namespace std;
! 29:
! 30:
! 31: istream &
! 32: operator>> (istream &i, mpz_ptr z)
! 33: {
! 34: int base;
! 35: char c = 0;
! 36: string s;
! 37: bool ok = false, zero, showbase;
! 38:
! 39: i.get(c); // start reading
! 40:
! 41: if (i.flags() & ios::skipws) // skip initial whitespace
! 42: while (isspace(c) && i.get(c))
! 43: ;
! 44:
! 45: if (c == '-' || c == '+') // sign
! 46: {
! 47: if (c == '-') // mpz_set_str doesn't accept '+'
! 48: s = "-";
! 49: i.get(c);
! 50:
! 51: while (isspace(c) && i.get(c)) // skip whitespace
! 52: ;
! 53: }
! 54:
! 55: base = __gmp_istream_set_base(i, c, zero, showbase); // select the base
! 56: __gmp_istream_set_digits(s, i, c, ok, base); // read the number
! 57:
! 58: if (i.good()) // last character read was non-numeric
! 59: i.putback(c);
! 60: else if (i.eof() && (ok || zero)) // stopped just before eof
! 61: i.clear();
! 62:
! 63: if (ok)
! 64: mpz_set_str(z, s.c_str(), base); // extract the number
! 65: else if (zero)
! 66: mpz_set_ui(z, 0);
! 67: else
! 68: i.setstate(ios::failbit); // read failed
! 69:
! 70: return i;
! 71: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>