| // 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 "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; | |
| } |