File: insertinto.cc

package info (click to toggle)
bobcat 6.11.00-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,292 kB
  • sloc: cpp: 21,370; fortran: 6,507; makefile: 2,787; sh: 724; perl: 401; ansic: 26
file content (37 lines) | stat: -rw-r--r-- 903 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "bigint.ih"

#include <iostream>

ostream &BigInt::insertInto(ostream &out) const
{
    int flags = out.flags();

    char *cp =                              // call function to use
        (
            flags & ios::hex ? BN_bn2hex :
            flags & ios::oct ? bn2oct    :
                               BN_bn2dec
        )(d_bn);

    bool isNegative = (*cp == '-');

    char *skipZeroes = cp + isNegative;

    while (*skipZeroes == '0')              // cut off leading zeros
        ++skipZeroes;

    if ((flags & ios::oct) || *skipZeroes == 0) // if just 1 char or oct:
        --skipZeroes;                           // keep 1 '0'

    if (isNegative)
        *--skipZeroes = '-';                // restore the '-'

    out << skipZeroes;                      // insert the value

    if (flags & ios::oct)
        delete[] cp;
    else
        OPENSSL_free(cp);

    return out;
}