|  | // Copyright 2014 PDFium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Original code by Matt McCutchen, see the LICENSE file. | 
|  |  | 
|  | #include <ostream> | 
|  |  | 
|  | #include "BigIntegerUtils.hh" | 
|  | #include "BigUnsignedInABase.hh" | 
|  |  | 
|  | std::string bigUnsignedToString(const BigUnsigned &x) { | 
|  | return std::string(BigUnsignedInABase(x, 10)); | 
|  | } | 
|  |  | 
|  | std::string bigIntegerToString(const BigInteger &x) { | 
|  | return (x.getSign() == BigInteger::negative) | 
|  | ? (std::string("-") + bigUnsignedToString(x.getMagnitude())) | 
|  | : (bigUnsignedToString(x.getMagnitude())); | 
|  | } | 
|  |  | 
|  | BigUnsigned stringToBigUnsigned(const std::string &s) { | 
|  | return BigUnsigned(BigUnsignedInABase(s, 10)); | 
|  | } | 
|  |  | 
|  | BigInteger stringToBigInteger(const std::string &s) { | 
|  | // Recognize a sign followed by a BigUnsigned. | 
|  | return (s[0] == '-') ? BigInteger(stringToBigUnsigned(s.substr(1, s.length() - 1)), BigInteger::negative) | 
|  | : (s[0] == '+') ? BigInteger(stringToBigUnsigned(s.substr(1, s.length() - 1))) | 
|  | : BigInteger(stringToBigUnsigned(s)); | 
|  | } | 
|  |  | 
|  | std::ostream &operator <<(std::ostream &os, const BigUnsigned &x) { | 
|  | BigUnsignedInABase::Base base; | 
|  | long osFlags = os.flags(); | 
|  | if (osFlags & os.dec) | 
|  | base = 10; | 
|  | else if (osFlags & os.hex) { | 
|  | base = 16; | 
|  | if (osFlags & os.showbase) | 
|  | os << "0x"; | 
|  | } else if (osFlags & os.oct) { | 
|  | base = 8; | 
|  | if (osFlags & os.showbase) | 
|  | os << '0'; | 
|  | } else | 
|  | abort(); | 
|  |  | 
|  | std::string s = std::string(BigUnsignedInABase(x, base)); | 
|  | os << s; | 
|  | return os; | 
|  | } | 
|  |  | 
|  | std::ostream &operator <<(std::ostream &os, const BigInteger &x) { | 
|  | if (x.getSign() == BigInteger::negative) | 
|  | os << '-'; | 
|  | os << x.getMagnitude(); | 
|  | return os; | 
|  | } |