git repos / blockattack-game

blame: source/code/Libs/include/cereal/external/rapidjson/internal/itoa.h

normal view · raw

6c5f2c01 sago007 2017-03-15 17:56 1
// Tencent is pleased to support the open source community by making RapidJSON available.
6c5f2c01 sago007 2017-03-15 17:56 2
// 
6c5f2c01 sago007 2017-03-15 17:56 3
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
6c5f2c01 sago007 2017-03-15 17:56 4
//
6c5f2c01 sago007 2017-03-15 17:56 5
// Licensed under the MIT License (the "License"); you may not use this file except
6c5f2c01 sago007 2017-03-15 17:56 6
// in compliance with the License. You may obtain a copy of the License at
6c5f2c01 sago007 2017-03-15 17:56 7
//
6c5f2c01 sago007 2017-03-15 17:56 8
// http://opensource.org/licenses/MIT
6c5f2c01 sago007 2017-03-15 17:56 9
//
6c5f2c01 sago007 2017-03-15 17:56 10
// Unless required by applicable law or agreed to in writing, software distributed 
6c5f2c01 sago007 2017-03-15 17:56 11
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
6c5f2c01 sago007 2017-03-15 17:56 12
// CONDITIONS OF ANY KIND, either express or implied. See the License for the 
6c5f2c01 sago007 2017-03-15 17:56 13
// specific language governing permissions and limitations under the License.
6c5f2c01 sago007 2017-03-15 17:56 14
6c5f2c01 sago007 2017-03-15 17:56 15
#ifndef CEREAL_RAPIDJSON_ITOA_
6c5f2c01 sago007 2017-03-15 17:56 16
#define CEREAL_RAPIDJSON_ITOA_
6c5f2c01 sago007 2017-03-15 17:56 17
6c5f2c01 sago007 2017-03-15 17:56 18
#include "../rapidjson.h"
6c5f2c01 sago007 2017-03-15 17:56 19
6c5f2c01 sago007 2017-03-15 17:56 20
CEREAL_RAPIDJSON_NAMESPACE_BEGIN
6c5f2c01 sago007 2017-03-15 17:56 21
namespace internal {
6c5f2c01 sago007 2017-03-15 17:56 22
6c5f2c01 sago007 2017-03-15 17:56 23
inline const char* GetDigitsLut() {
6c5f2c01 sago007 2017-03-15 17:56 24
    static const char cDigitsLut[200] = {
6c5f2c01 sago007 2017-03-15 17:56 25
        '0','0','0','1','0','2','0','3','0','4','0','5','0','6','0','7','0','8','0','9',
6c5f2c01 sago007 2017-03-15 17:56 26
        '1','0','1','1','1','2','1','3','1','4','1','5','1','6','1','7','1','8','1','9',
6c5f2c01 sago007 2017-03-15 17:56 27
        '2','0','2','1','2','2','2','3','2','4','2','5','2','6','2','7','2','8','2','9',
6c5f2c01 sago007 2017-03-15 17:56 28
        '3','0','3','1','3','2','3','3','3','4','3','5','3','6','3','7','3','8','3','9',
6c5f2c01 sago007 2017-03-15 17:56 29
        '4','0','4','1','4','2','4','3','4','4','4','5','4','6','4','7','4','8','4','9',
6c5f2c01 sago007 2017-03-15 17:56 30
        '5','0','5','1','5','2','5','3','5','4','5','5','5','6','5','7','5','8','5','9',
6c5f2c01 sago007 2017-03-15 17:56 31
        '6','0','6','1','6','2','6','3','6','4','6','5','6','6','6','7','6','8','6','9',
6c5f2c01 sago007 2017-03-15 17:56 32
        '7','0','7','1','7','2','7','3','7','4','7','5','7','6','7','7','7','8','7','9',
6c5f2c01 sago007 2017-03-15 17:56 33
        '8','0','8','1','8','2','8','3','8','4','8','5','8','6','8','7','8','8','8','9',
6c5f2c01 sago007 2017-03-15 17:56 34
        '9','0','9','1','9','2','9','3','9','4','9','5','9','6','9','7','9','8','9','9'
6c5f2c01 sago007 2017-03-15 17:56 35
    };
6c5f2c01 sago007 2017-03-15 17:56 36
    return cDigitsLut;
6c5f2c01 sago007 2017-03-15 17:56 37
}
6c5f2c01 sago007 2017-03-15 17:56 38
6c5f2c01 sago007 2017-03-15 17:56 39
inline char* u32toa(uint32_t value, char* buffer) {
6c5f2c01 sago007 2017-03-15 17:56 40
    const char* cDigitsLut = GetDigitsLut();
6c5f2c01 sago007 2017-03-15 17:56 41
6c5f2c01 sago007 2017-03-15 17:56 42
    if (value < 10000) {
6c5f2c01 sago007 2017-03-15 17:56 43
        const uint32_t d1 = (value / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 44
        const uint32_t d2 = (value % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 45
        
6c5f2c01 sago007 2017-03-15 17:56 46
        if (value >= 1000)
6c5f2c01 sago007 2017-03-15 17:56 47
            *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 48
        if (value >= 100)
6c5f2c01 sago007 2017-03-15 17:56 49
            *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 50
        if (value >= 10)
6c5f2c01 sago007 2017-03-15 17:56 51
            *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 52
        *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 53
    }
6c5f2c01 sago007 2017-03-15 17:56 54
    else if (value < 100000000) {
6c5f2c01 sago007 2017-03-15 17:56 55
        // value = bbbbcccc
6c5f2c01 sago007 2017-03-15 17:56 56
        const uint32_t b = value / 10000;
6c5f2c01 sago007 2017-03-15 17:56 57
        const uint32_t c = value % 10000;
6c5f2c01 sago007 2017-03-15 17:56 58
        
6c5f2c01 sago007 2017-03-15 17:56 59
        const uint32_t d1 = (b / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 60
        const uint32_t d2 = (b % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 61
        
6c5f2c01 sago007 2017-03-15 17:56 62
        const uint32_t d3 = (c / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 63
        const uint32_t d4 = (c % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 64
        
6c5f2c01 sago007 2017-03-15 17:56 65
        if (value >= 10000000)
6c5f2c01 sago007 2017-03-15 17:56 66
            *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 67
        if (value >= 1000000)
6c5f2c01 sago007 2017-03-15 17:56 68
            *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 69
        if (value >= 100000)
6c5f2c01 sago007 2017-03-15 17:56 70
            *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 71
        *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 72
        
6c5f2c01 sago007 2017-03-15 17:56 73
        *buffer++ = cDigitsLut[d3];
6c5f2c01 sago007 2017-03-15 17:56 74
        *buffer++ = cDigitsLut[d3 + 1];
6c5f2c01 sago007 2017-03-15 17:56 75
        *buffer++ = cDigitsLut[d4];
6c5f2c01 sago007 2017-03-15 17:56 76
        *buffer++ = cDigitsLut[d4 + 1];
6c5f2c01 sago007 2017-03-15 17:56 77
    }
6c5f2c01 sago007 2017-03-15 17:56 78
    else {
6c5f2c01 sago007 2017-03-15 17:56 79
        // value = aabbbbcccc in decimal
6c5f2c01 sago007 2017-03-15 17:56 80
        
6c5f2c01 sago007 2017-03-15 17:56 81
        const uint32_t a = value / 100000000; // 1 to 42
6c5f2c01 sago007 2017-03-15 17:56 82
        value %= 100000000;
6c5f2c01 sago007 2017-03-15 17:56 83
        
6c5f2c01 sago007 2017-03-15 17:56 84
        if (a >= 10) {
6c5f2c01 sago007 2017-03-15 17:56 85
            const unsigned i = a << 1;
6c5f2c01 sago007 2017-03-15 17:56 86
            *buffer++ = cDigitsLut[i];
6c5f2c01 sago007 2017-03-15 17:56 87
            *buffer++ = cDigitsLut[i + 1];
6c5f2c01 sago007 2017-03-15 17:56 88
        }
6c5f2c01 sago007 2017-03-15 17:56 89
        else
6c5f2c01 sago007 2017-03-15 17:56 90
            *buffer++ = static_cast<char>('0' + static_cast<char>(a));
6c5f2c01 sago007 2017-03-15 17:56 91
6c5f2c01 sago007 2017-03-15 17:56 92
        const uint32_t b = value / 10000; // 0 to 9999
6c5f2c01 sago007 2017-03-15 17:56 93
        const uint32_t c = value % 10000; // 0 to 9999
6c5f2c01 sago007 2017-03-15 17:56 94
        
6c5f2c01 sago007 2017-03-15 17:56 95
        const uint32_t d1 = (b / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 96
        const uint32_t d2 = (b % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 97
        
6c5f2c01 sago007 2017-03-15 17:56 98
        const uint32_t d3 = (c / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 99
        const uint32_t d4 = (c % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 100
        
6c5f2c01 sago007 2017-03-15 17:56 101
        *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 102
        *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 103
        *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 104
        *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 105
        *buffer++ = cDigitsLut[d3];
6c5f2c01 sago007 2017-03-15 17:56 106
        *buffer++ = cDigitsLut[d3 + 1];
6c5f2c01 sago007 2017-03-15 17:56 107
        *buffer++ = cDigitsLut[d4];
6c5f2c01 sago007 2017-03-15 17:56 108
        *buffer++ = cDigitsLut[d4 + 1];
6c5f2c01 sago007 2017-03-15 17:56 109
    }
6c5f2c01 sago007 2017-03-15 17:56 110
    return buffer;
6c5f2c01 sago007 2017-03-15 17:56 111
}
6c5f2c01 sago007 2017-03-15 17:56 112
6c5f2c01 sago007 2017-03-15 17:56 113
inline char* i32toa(int32_t value, char* buffer) {
6c5f2c01 sago007 2017-03-15 17:56 114
    uint32_t u = static_cast<uint32_t>(value);
6c5f2c01 sago007 2017-03-15 17:56 115
    if (value < 0) {
6c5f2c01 sago007 2017-03-15 17:56 116
        *buffer++ = '-';
6c5f2c01 sago007 2017-03-15 17:56 117
        u = ~u + 1;
6c5f2c01 sago007 2017-03-15 17:56 118
    }
6c5f2c01 sago007 2017-03-15 17:56 119
6c5f2c01 sago007 2017-03-15 17:56 120
    return u32toa(u, buffer);
6c5f2c01 sago007 2017-03-15 17:56 121
}
6c5f2c01 sago007 2017-03-15 17:56 122
6c5f2c01 sago007 2017-03-15 17:56 123
inline char* u64toa(uint64_t value, char* buffer) {
6c5f2c01 sago007 2017-03-15 17:56 124
    const char* cDigitsLut = GetDigitsLut();
6c5f2c01 sago007 2017-03-15 17:56 125
    const uint64_t  kTen8 = 100000000;
6c5f2c01 sago007 2017-03-15 17:56 126
    const uint64_t  kTen9 = kTen8 * 10;
6c5f2c01 sago007 2017-03-15 17:56 127
    const uint64_t kTen10 = kTen8 * 100;
6c5f2c01 sago007 2017-03-15 17:56 128
    const uint64_t kTen11 = kTen8 * 1000;
6c5f2c01 sago007 2017-03-15 17:56 129
    const uint64_t kTen12 = kTen8 * 10000;
6c5f2c01 sago007 2017-03-15 17:56 130
    const uint64_t kTen13 = kTen8 * 100000;
6c5f2c01 sago007 2017-03-15 17:56 131
    const uint64_t kTen14 = kTen8 * 1000000;
6c5f2c01 sago007 2017-03-15 17:56 132
    const uint64_t kTen15 = kTen8 * 10000000;
6c5f2c01 sago007 2017-03-15 17:56 133
    const uint64_t kTen16 = kTen8 * kTen8;
6c5f2c01 sago007 2017-03-15 17:56 134
    
6c5f2c01 sago007 2017-03-15 17:56 135
    if (value < kTen8) {
6c5f2c01 sago007 2017-03-15 17:56 136
        uint32_t v = static_cast<uint32_t>(value);
6c5f2c01 sago007 2017-03-15 17:56 137
        if (v < 10000) {
6c5f2c01 sago007 2017-03-15 17:56 138
            const uint32_t d1 = (v / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 139
            const uint32_t d2 = (v % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 140
            
6c5f2c01 sago007 2017-03-15 17:56 141
            if (v >= 1000)
6c5f2c01 sago007 2017-03-15 17:56 142
                *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 143
            if (v >= 100)
6c5f2c01 sago007 2017-03-15 17:56 144
                *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 145
            if (v >= 10)
6c5f2c01 sago007 2017-03-15 17:56 146
                *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 147
            *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 148
        }
6c5f2c01 sago007 2017-03-15 17:56 149
        else {
6c5f2c01 sago007 2017-03-15 17:56 150
            // value = bbbbcccc
6c5f2c01 sago007 2017-03-15 17:56 151
            const uint32_t b = v / 10000;
6c5f2c01 sago007 2017-03-15 17:56 152
            const uint32_t c = v % 10000;
6c5f2c01 sago007 2017-03-15 17:56 153
            
6c5f2c01 sago007 2017-03-15 17:56 154
            const uint32_t d1 = (b / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 155
            const uint32_t d2 = (b % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 156
            
6c5f2c01 sago007 2017-03-15 17:56 157
            const uint32_t d3 = (c / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 158
            const uint32_t d4 = (c % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 159
            
6c5f2c01 sago007 2017-03-15 17:56 160
            if (value >= 10000000)
6c5f2c01 sago007 2017-03-15 17:56 161
                *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 162
            if (value >= 1000000)
6c5f2c01 sago007 2017-03-15 17:56 163
                *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 164
            if (value >= 100000)
6c5f2c01 sago007 2017-03-15 17:56 165
                *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 166
            *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 167
            
6c5f2c01 sago007 2017-03-15 17:56 168
            *buffer++ = cDigitsLut[d3];
6c5f2c01 sago007 2017-03-15 17:56 169
            *buffer++ = cDigitsLut[d3 + 1];
6c5f2c01 sago007 2017-03-15 17:56 170
            *buffer++ = cDigitsLut[d4];
6c5f2c01 sago007 2017-03-15 17:56 171
            *buffer++ = cDigitsLut[d4 + 1];
6c5f2c01 sago007 2017-03-15 17:56 172
        }
6c5f2c01 sago007 2017-03-15 17:56 173
    }
6c5f2c01 sago007 2017-03-15 17:56 174
    else if (value < kTen16) {
6c5f2c01 sago007 2017-03-15 17:56 175
        const uint32_t v0 = static_cast<uint32_t>(value / kTen8);
6c5f2c01 sago007 2017-03-15 17:56 176
        const uint32_t v1 = static_cast<uint32_t>(value % kTen8);
6c5f2c01 sago007 2017-03-15 17:56 177
        
6c5f2c01 sago007 2017-03-15 17:56 178
        const uint32_t b0 = v0 / 10000;
6c5f2c01 sago007 2017-03-15 17:56 179
        const uint32_t c0 = v0 % 10000;
6c5f2c01 sago007 2017-03-15 17:56 180
        
6c5f2c01 sago007 2017-03-15 17:56 181
        const uint32_t d1 = (b0 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 182
        const uint32_t d2 = (b0 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 183
        
6c5f2c01 sago007 2017-03-15 17:56 184
        const uint32_t d3 = (c0 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 185
        const uint32_t d4 = (c0 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 186
6c5f2c01 sago007 2017-03-15 17:56 187
        const uint32_t b1 = v1 / 10000;
6c5f2c01 sago007 2017-03-15 17:56 188
        const uint32_t c1 = v1 % 10000;
6c5f2c01 sago007 2017-03-15 17:56 189
        
6c5f2c01 sago007 2017-03-15 17:56 190
        const uint32_t d5 = (b1 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 191
        const uint32_t d6 = (b1 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 192
        
6c5f2c01 sago007 2017-03-15 17:56 193
        const uint32_t d7 = (c1 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 194
        const uint32_t d8 = (c1 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 195
6c5f2c01 sago007 2017-03-15 17:56 196
        if (value >= kTen15)
6c5f2c01 sago007 2017-03-15 17:56 197
            *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 198
        if (value >= kTen14)
6c5f2c01 sago007 2017-03-15 17:56 199
            *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 200
        if (value >= kTen13)
6c5f2c01 sago007 2017-03-15 17:56 201
            *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 202
        if (value >= kTen12)
6c5f2c01 sago007 2017-03-15 17:56 203
            *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 204
        if (value >= kTen11)
6c5f2c01 sago007 2017-03-15 17:56 205
            *buffer++ = cDigitsLut[d3];
6c5f2c01 sago007 2017-03-15 17:56 206
        if (value >= kTen10)
6c5f2c01 sago007 2017-03-15 17:56 207
            *buffer++ = cDigitsLut[d3 + 1];
6c5f2c01 sago007 2017-03-15 17:56 208
        if (value >= kTen9)
6c5f2c01 sago007 2017-03-15 17:56 209
            *buffer++ = cDigitsLut[d4];
6c5f2c01 sago007 2017-03-15 17:56 210
        if (value >= kTen8)
6c5f2c01 sago007 2017-03-15 17:56 211
            *buffer++ = cDigitsLut[d4 + 1];
6c5f2c01 sago007 2017-03-15 17:56 212
        
6c5f2c01 sago007 2017-03-15 17:56 213
        *buffer++ = cDigitsLut[d5];
6c5f2c01 sago007 2017-03-15 17:56 214
        *buffer++ = cDigitsLut[d5 + 1];
6c5f2c01 sago007 2017-03-15 17:56 215
        *buffer++ = cDigitsLut[d6];
6c5f2c01 sago007 2017-03-15 17:56 216
        *buffer++ = cDigitsLut[d6 + 1];
6c5f2c01 sago007 2017-03-15 17:56 217
        *buffer++ = cDigitsLut[d7];
6c5f2c01 sago007 2017-03-15 17:56 218
        *buffer++ = cDigitsLut[d7 + 1];
6c5f2c01 sago007 2017-03-15 17:56 219
        *buffer++ = cDigitsLut[d8];
6c5f2c01 sago007 2017-03-15 17:56 220
        *buffer++ = cDigitsLut[d8 + 1];
6c5f2c01 sago007 2017-03-15 17:56 221
    }
6c5f2c01 sago007 2017-03-15 17:56 222
    else {
6c5f2c01 sago007 2017-03-15 17:56 223
        const uint32_t a = static_cast<uint32_t>(value / kTen16); // 1 to 1844
6c5f2c01 sago007 2017-03-15 17:56 224
        value %= kTen16;
6c5f2c01 sago007 2017-03-15 17:56 225
        
6c5f2c01 sago007 2017-03-15 17:56 226
        if (a < 10)
6c5f2c01 sago007 2017-03-15 17:56 227
            *buffer++ = static_cast<char>('0' + static_cast<char>(a));
6c5f2c01 sago007 2017-03-15 17:56 228
        else if (a < 100) {
6c5f2c01 sago007 2017-03-15 17:56 229
            const uint32_t i = a << 1;
6c5f2c01 sago007 2017-03-15 17:56 230
            *buffer++ = cDigitsLut[i];
6c5f2c01 sago007 2017-03-15 17:56 231
            *buffer++ = cDigitsLut[i + 1];
6c5f2c01 sago007 2017-03-15 17:56 232
        }
6c5f2c01 sago007 2017-03-15 17:56 233
        else if (a < 1000) {
6c5f2c01 sago007 2017-03-15 17:56 234
            *buffer++ = static_cast<char>('0' + static_cast<char>(a / 100));
6c5f2c01 sago007 2017-03-15 17:56 235
            
6c5f2c01 sago007 2017-03-15 17:56 236
            const uint32_t i = (a % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 237
            *buffer++ = cDigitsLut[i];
6c5f2c01 sago007 2017-03-15 17:56 238
            *buffer++ = cDigitsLut[i + 1];
6c5f2c01 sago007 2017-03-15 17:56 239
        }
6c5f2c01 sago007 2017-03-15 17:56 240
        else {
6c5f2c01 sago007 2017-03-15 17:56 241
            const uint32_t i = (a / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 242
            const uint32_t j = (a % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 243
            *buffer++ = cDigitsLut[i];
6c5f2c01 sago007 2017-03-15 17:56 244
            *buffer++ = cDigitsLut[i + 1];
6c5f2c01 sago007 2017-03-15 17:56 245
            *buffer++ = cDigitsLut[j];
6c5f2c01 sago007 2017-03-15 17:56 246
            *buffer++ = cDigitsLut[j + 1];
6c5f2c01 sago007 2017-03-15 17:56 247
        }
6c5f2c01 sago007 2017-03-15 17:56 248
        
6c5f2c01 sago007 2017-03-15 17:56 249
        const uint32_t v0 = static_cast<uint32_t>(value / kTen8);
6c5f2c01 sago007 2017-03-15 17:56 250
        const uint32_t v1 = static_cast<uint32_t>(value % kTen8);
6c5f2c01 sago007 2017-03-15 17:56 251
        
6c5f2c01 sago007 2017-03-15 17:56 252
        const uint32_t b0 = v0 / 10000;
6c5f2c01 sago007 2017-03-15 17:56 253
        const uint32_t c0 = v0 % 10000;
6c5f2c01 sago007 2017-03-15 17:56 254
        
6c5f2c01 sago007 2017-03-15 17:56 255
        const uint32_t d1 = (b0 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 256
        const uint32_t d2 = (b0 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 257
        
6c5f2c01 sago007 2017-03-15 17:56 258
        const uint32_t d3 = (c0 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 259
        const uint32_t d4 = (c0 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 260
        
6c5f2c01 sago007 2017-03-15 17:56 261
        const uint32_t b1 = v1 / 10000;
6c5f2c01 sago007 2017-03-15 17:56 262
        const uint32_t c1 = v1 % 10000;
6c5f2c01 sago007 2017-03-15 17:56 263
        
6c5f2c01 sago007 2017-03-15 17:56 264
        const uint32_t d5 = (b1 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 265
        const uint32_t d6 = (b1 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 266
        
6c5f2c01 sago007 2017-03-15 17:56 267
        const uint32_t d7 = (c1 / 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 268
        const uint32_t d8 = (c1 % 100) << 1;
6c5f2c01 sago007 2017-03-15 17:56 269
        
6c5f2c01 sago007 2017-03-15 17:56 270
        *buffer++ = cDigitsLut[d1];
6c5f2c01 sago007 2017-03-15 17:56 271
        *buffer++ = cDigitsLut[d1 + 1];
6c5f2c01 sago007 2017-03-15 17:56 272
        *buffer++ = cDigitsLut[d2];
6c5f2c01 sago007 2017-03-15 17:56 273
        *buffer++ = cDigitsLut[d2 + 1];
6c5f2c01 sago007 2017-03-15 17:56 274
        *buffer++ = cDigitsLut[d3];
6c5f2c01 sago007 2017-03-15 17:56 275
        *buffer++ = cDigitsLut[d3 + 1];
6c5f2c01 sago007 2017-03-15 17:56 276
        *buffer++ = cDigitsLut[d4];
6c5f2c01 sago007 2017-03-15 17:56 277
        *buffer++ = cDigitsLut[d4 + 1];
6c5f2c01 sago007 2017-03-15 17:56 278
        *buffer++ = cDigitsLut[d5];
6c5f2c01 sago007 2017-03-15 17:56 279
        *buffer++ = cDigitsLut[d5 + 1];
6c5f2c01 sago007 2017-03-15 17:56 280
        *buffer++ = cDigitsLut[d6];
6c5f2c01 sago007 2017-03-15 17:56 281
        *buffer++ = cDigitsLut[d6 + 1];
6c5f2c01 sago007 2017-03-15 17:56 282
        *buffer++ = cDigitsLut[d7];
6c5f2c01 sago007 2017-03-15 17:56 283
        *buffer++ = cDigitsLut[d7 + 1];
6c5f2c01 sago007 2017-03-15 17:56 284
        *buffer++ = cDigitsLut[d8];
6c5f2c01 sago007 2017-03-15 17:56 285
        *buffer++ = cDigitsLut[d8 + 1];
6c5f2c01 sago007 2017-03-15 17:56 286
    }
6c5f2c01 sago007 2017-03-15 17:56 287
    
6c5f2c01 sago007 2017-03-15 17:56 288
    return buffer;
6c5f2c01 sago007 2017-03-15 17:56 289
}
6c5f2c01 sago007 2017-03-15 17:56 290
6c5f2c01 sago007 2017-03-15 17:56 291
inline char* i64toa(int64_t value, char* buffer) {
6c5f2c01 sago007 2017-03-15 17:56 292
    uint64_t u = static_cast<uint64_t>(value);
6c5f2c01 sago007 2017-03-15 17:56 293
    if (value < 0) {
6c5f2c01 sago007 2017-03-15 17:56 294
        *buffer++ = '-';
6c5f2c01 sago007 2017-03-15 17:56 295
        u = ~u + 1;
6c5f2c01 sago007 2017-03-15 17:56 296
    }
6c5f2c01 sago007 2017-03-15 17:56 297
6c5f2c01 sago007 2017-03-15 17:56 298
    return u64toa(u, buffer);
6c5f2c01 sago007 2017-03-15 17:56 299
}
6c5f2c01 sago007 2017-03-15 17:56 300
6c5f2c01 sago007 2017-03-15 17:56 301
} // namespace internal
6c5f2c01 sago007 2017-03-15 17:56 302
CEREAL_RAPIDJSON_NAMESPACE_END
6c5f2c01 sago007 2017-03-15 17:56 303
6c5f2c01 sago007 2017-03-15 17:56 304
#endif // CEREAL_RAPIDJSON_ITOA_
1970-01-01 00:00 305