/**
* Copyright (C) 2015 MongoDB Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*
* As a special exception, the copyright holders give permission to link the
* code of portions of this program with the OpenSSL library under certain
* conditions as described in each individual source file and distribute
* linked combinations including the program with the OpenSSL library. You
* must comply with the GNU Affero General Public License in all respects for
* all of the code used other than as permitted herein. If you modify file(s)
* with this exception, you may extend this exception to your version of the
* file(s), but you are not obligated to do so. If you do not wish to do so,
* delete this exception statement from your version. If you delete this
* exception statement from all source files in the program, then also delete
* it in the license file.
*/
#include "mongo/platform/basic.h"
#include "mongo/util/assert_util.h"
#include "mongo/util/itoa.h"
namespace mongo {
namespace {
const char kIndexTable[] =
"0\0"
"1\0"
"2\0"
"3\0"
"4\0"
"5\0"
"6\0"
"7\0"
"8\0"
"9\0"
"10\0"
"11\0"
"12\0"
"13\0"
"14\0"
"15\0"
"16\0"
"17\0"
"18\0"
"19\0"
"20\0"
"21\0"
"22\0"
"23\0"
"24\0"
"25\0"
"26\0"
"27\0"
"28\0"
"29\0"
"30\0"
"31\0"
"32\0"
"33\0"
"34\0"
"35\0"
"36\0"
"37\0"
"38\0"
"39\0"
"40\0"
"41\0"
"42\0"
"43\0"
"44\0"
"45\0"
"46\0"
"47\0"
"48\0"
"49\0"
"50\0"
"51\0"
"52\0"
"53\0"
"54\0"
"55\0"
"56\0"
"57\0"
"58\0"
"59\0"
"60\0"
"61\0"
"62\0"
"63\0"
"64\0"
"65\0"
"66\0"
"67\0"
"68\0"
"69\0"
"70\0"
"71\0"
"72\0"
"73\0"
"74\0"
"75\0"
"76\0"
"77\0"
"78\0"
"79\0"
"80\0"
"81\0"
"82\0"
"83\0"
"84\0"
"85\0"
"86\0"
"87\0"
"88\0"
"89\0"
"90\0"
"91\0"
"92\0"
"93\0"
"94\0"
"95\0"
"96\0"
"97\0"
"98\0"
"99\0"
"100\0"
"101\0"
"102\0"
"103\0"
"104\0"
"105\0"
"106\0"
"107\0"
"108\0"
"109\0"
"110\0"
"111\0"
"112\0"
"113\0"
"114\0"
"115\0"
"116\0"
"117\0"
"118\0"
"119\0"
"120\0"
"121\0"
"122\0"
"123\0"
"124\0"
"125\0"
"126\0"
"127\0"
"128\0"
"129\0"
"130\0"
"131\0"
"132\0"
"133\0"
"134\0"
"135\0"
"136\0"
"137\0"
"138\0"
"139\0"
"140\0"
"141\0"
"142\0"
"143\0"
"144\0"
"145\0"
"146\0"
"147\0"
"148\0"
"149\0"
"150\0"
"151\0"
"152\0"
"153\0"
"154\0"
"155\0"
"156\0"
"157\0"
"158\0"
"159\0"
"160\0"
"161\0"
"162\0"
"163\0"
"164\0"
"165\0"
"166\0"
"167\0"
"168\0"
"169\0"
"170\0"
"171\0"
"172\0"
"173\0"
"174\0"
"175\0"
"176\0"
"177\0"
"178\0"
"179\0"
"180\0"
"181\0"
"182\0"
"183\0"
"184\0"
"185\0"
"186\0"
"187\0"
"188\0"
"189\0"
"190\0"
"191\0"
"192\0"
"193\0"
"194\0"
"195\0"
"196\0"
"197\0"
"198\0"
"199\0"
"200\0"
"201\0"
"202\0"
"203\0"
"204\0"
"205\0"
"206\0"
"207\0"
"208\0"
"209\0"
"210\0"
"211\0"
"212\0"
"213\0"
"214\0"
"215\0"
"216\0"
"217\0"
"218\0"
"219\0"
"220\0"
"221\0"
"222\0"
"223\0"
"224\0"
"225\0"
"226\0"
"227\0"
"228\0"
"229\0"
"230\0"
"231\0"
"232\0"
"233\0"
"234\0"
"235\0"
"236\0"
"237\0"
"238\0"
"239\0"
"240\0"
"241\0"
"242\0"
"243\0"
"244\0"
"245\0"
"246\0"
"247\0"
"248\0"
"249\0"
"250\0"
"251\0"
"252\0"
"253\0"
"254\0"
"255\0"
"256\0"
"257\0"
"258\0"
"259\0"
"260\0"
"261\0"
"262\0"
"263\0"
"264\0"
"265\0"
"266\0"
"267\0"
"268\0"
"269\0"
"270\0"
"271\0"
"272\0"
"273\0"
"274\0"
"275\0"
"276\0"
"277\0"
"278\0"
"279\0"
"280\0"
"281\0"
"282\0"
"283\0"
"284\0"
"285\0"
"286\0"
"287\0"
"288\0"
"289\0"
"290\0"
"291\0"
"292\0"
"293\0"
"294\0"
"295\0"
"296\0"
"297\0"
"298\0"
"299\0"
"300\0"
"301\0"
"302\0"
"303\0"
"304\0"
"305\0"
"306\0"
"307\0"
"308\0"
"309\0"
"310\0"
"311\0"
"312\0"
"313\0"
"314\0"
"315\0"
"316\0"
"317\0"
"318\0"
"319\0"
"320\0"
"321\0"
"322\0"
"323\0"
"324\0"
"325\0"
"326\0"
"327\0"
"328\0"
"329\0"
"330\0"
"331\0"
"332\0"
"333\0"
"334\0"
"335\0"
"336\0"
"337\0"
"338\0"
"339\0"
"340\0"
"341\0"
"342\0"
"343\0"
"344\0"
"345\0"
"346\0"
"347\0"
"348\0"
"349\0"
"350\0"
"351\0"
"352\0"
"353\0"
"354\0"
"355\0"
"356\0"
"357\0"
"358\0"
"359\0"
"360\0"
"361\0"
"362\0"
"363\0"
"364\0"
"365\0"
"366\0"
"367\0"
"368\0"
"369\0"
"370\0"
"371\0"
"372\0"
"373\0"
"374\0"
"375\0"
"376\0"
"377\0"
"378\0"
"379\0"
"380\0"
"381\0"
"382\0"
"383\0"
"384\0"
"385\0"
"386\0"
"387\0"
"388\0"
"389\0"
"390\0"
"391\0"
"392\0"
"393\0"
"394\0"
"395\0"
"396\0"
"397\0"
"398\0"
"399\0"
"400\0"
"401\0"
"402\0"
"403\0"
"404\0"
"405\0"
"406\0"
"407\0"
"408\0"
"409\0"
"410\0"
"411\0"
"412\0"
"413\0"
"414\0"
"415\0"
"416\0"
"417\0"
"418\0"
"419\0"
"420\0"
"421\0"
"422\0"
"423\0"
"424\0"
"425\0"
"426\0"
"427\0"
"428\0"
"429\0"
"430\0"
"431\0"
"432\0"
"433\0"
"434\0"
"435\0"
"436\0"
"437\0"
"438\0"
"439\0"
"440\0"
"441\0"
"442\0"
"443\0"
"444\0"
"445\0"
"446\0"
"447\0"
"448\0"
"449\0"
"450\0"
"451\0"
"452\0"
"453\0"
"454\0"
"455\0"
"456\0"
"457\0"
"458\0"
"459\0"
"460\0"
"461\0"
"462\0"
"463\0"
"464\0"
"465\0"
"466\0"
"467\0"
"468\0"
"469\0"
"470\0"
"471\0"
"472\0"
"473\0"
"474\0"
"475\0"
"476\0"
"477\0"
"478\0"
"479\0"
"480\0"
"481\0"
"482\0"
"483\0"
"484\0"
"485\0"
"486\0"
"487\0"
"488\0"
"489\0"
"490\0"
"491\0"
"492\0"
"493\0"
"494\0"
"495\0"
"496\0"
"497\0"
"498\0"
"499\0"
"500\0"
"501\0"
"502\0"
"503\0"
"504\0"
"505\0"
"506\0"
"507\0"
"508\0"
"509\0"
"510\0"
"511\0"
"512\0"
"513\0"
"514\0"
"515\0"
"516\0"
"517\0"
"518\0"
"519\0"
"520\0"
"521\0"
"522\0"
"523\0"
"524\0"
"525\0"
"526\0"
"527\0"
"528\0"
"529\0"
"530\0"
"531\0"
"532\0"
"533\0"
"534\0"
"535\0"
"536\0"
"537\0"
"538\0"
"539\0"
"540\0"
"541\0"
"542\0"
"543\0"
"544\0"
"545\0"
"546\0"
"547\0"
"548\0"
"549\0"
"550\0"
"551\0"
"552\0"
"553\0"
"554\0"
"555\0"
"556\0"
"557\0"
"558\0"
"559\0"
"560\0"
"561\0"
"562\0"
"563\0"
"564\0"
"565\0"
"566\0"
"567\0"
"568\0"
"569\0"
"570\0"
"571\0"
"572\0"
"573\0"
"574\0"
"575\0"
"576\0"
"577\0"
"578\0"
"579\0"
"580\0"
"581\0"
"582\0"
"583\0"
"584\0"
"585\0"
"586\0"
"587\0"
"588\0"
"589\0"
"590\0"
"591\0"
"592\0"
"593\0"
"594\0"
"595\0"
"596\0"
"597\0"
"598\0"
"599\0"
"600\0"
"601\0"
"602\0"
"603\0"
"604\0"
"605\0"
"606\0"
"607\0"
"608\0"
"609\0"
"610\0"
"611\0"
"612\0"
"613\0"
"614\0"
"615\0"
"616\0"
"617\0"
"618\0"
"619\0"
"620\0"
"621\0"
"622\0"
"623\0"
"624\0"
"625\0"
"626\0"
"627\0"
"628\0"
"629\0"
"630\0"
"631\0"
"632\0"
"633\0"
"634\0"
"635\0"
"636\0"
"637\0"
"638\0"
"639\0"
"640\0"
"641\0"
"642\0"
"643\0"
"644\0"
"645\0"
"646\0"
"647\0"
"648\0"
"649\0"
"650\0"
"651\0"
"652\0"
"653\0"
"654\0"
"655\0"
"656\0"
"657\0"
"658\0"
"659\0"
"660\0"
"661\0"
"662\0"
"663\0"
"664\0"
"665\0"
"666\0"
"667\0"
"668\0"
"669\0"
"670\0"
"671\0"
"672\0"
"673\0"
"674\0"
"675\0"
"676\0"
"677\0"
"678\0"
"679\0"
"680\0"
"681\0"
"682\0"
"683\0"
"684\0"
"685\0"
"686\0"
"687\0"
"688\0"
"689\0"
"690\0"
"691\0"
"692\0"
"693\0"
"694\0"
"695\0"
"696\0"
"697\0"
"698\0"
"699\0"
"700\0"
"701\0"
"702\0"
"703\0"
"704\0"
"705\0"
"706\0"
"707\0"
"708\0"
"709\0"
"710\0"
"711\0"
"712\0"
"713\0"
"714\0"
"715\0"
"716\0"
"717\0"
"718\0"
"719\0"
"720\0"
"721\0"
"722\0"
"723\0"
"724\0"
"725\0"
"726\0"
"727\0"
"728\0"
"729\0"
"730\0"
"731\0"
"732\0"
"733\0"
"734\0"
"735\0"
"736\0"
"737\0"
"738\0"
"739\0"
"740\0"
"741\0"
"742\0"
"743\0"
"744\0"
"745\0"
"746\0"
"747\0"
"748\0"
"749\0"
"750\0"
"751\0"
"752\0"
"753\0"
"754\0"
"755\0"
"756\0"
"757\0"
"758\0"
"759\0"
"760\0"
"761\0"
"762\0"
"763\0"
"764\0"
"765\0"
"766\0"
"767\0"
"768\0"
"769\0"
"770\0"
"771\0"
"772\0"
"773\0"
"774\0"
"775\0"
"776\0"
"777\0"
"778\0"
"779\0"
"780\0"
"781\0"
"782\0"
"783\0"
"784\0"
"785\0"
"786\0"
"787\0"
"788\0"
"789\0"
"790\0"
"791\0"
"792\0"
"793\0"
"794\0"
"795\0"
"796\0"
"797\0"
"798\0"
"799\0"
"800\0"
"801\0"
"802\0"
"803\0"
"804\0"
"805\0"
"806\0"
"807\0"
"808\0"
"809\0"
"810\0"
"811\0"
"812\0"
"813\0"
"814\0"
"815\0"
"816\0"
"817\0"
"818\0"
"819\0"
"820\0"
"821\0"
"822\0"
"823\0"
"824\0"
"825\0"
"826\0"
"827\0"
"828\0"
"829\0"
"830\0"
"831\0"
"832\0"
"833\0"
"834\0"
"835\0"
"836\0"
"837\0"
"838\0"
"839\0"
"840\0"
"841\0"
"842\0"
"843\0"
"844\0"
"845\0"
"846\0"
"847\0"
"848\0"
"849\0"
"850\0"
"851\0"
"852\0"
"853\0"
"854\0"
"855\0"
"856\0"
"857\0"
"858\0"
"859\0"
"860\0"
"861\0"
"862\0"
"863\0"
"864\0"
"865\0"
"866\0"
"867\0"
"868\0"
"869\0"
"870\0"
"871\0"
"872\0"
"873\0"
"874\0"
"875\0"
"876\0"
"877\0"
"878\0"
"879\0"
"880\0"
"881\0"
"882\0"
"883\0"
"884\0"
"885\0"
"886\0"
"887\0"
"888\0"
"889\0"
"890\0"
"891\0"
"892\0"
"893\0"
"894\0"
"895\0"
"896\0"
"897\0"
"898\0"
"899\0"
"900\0"
"901\0"
"902\0"
"903\0"
"904\0"
"905\0"
"906\0"
"907\0"
"908\0"
"909\0"
"910\0"
"911\0"
"912\0"
"913\0"
"914\0"
"915\0"
"916\0"
"917\0"
"918\0"
"919\0"
"920\0"
"921\0"
"922\0"
"923\0"
"924\0"
"925\0"
"926\0"
"927\0"
"928\0"
"929\0"
"930\0"
"931\0"
"932\0"
"933\0"
"934\0"
"935\0"
"936\0"
"937\0"
"938\0"
"939\0"
"940\0"
"941\0"
"942\0"
"943\0"
"944\0"
"945\0"
"946\0"
"947\0"
"948\0"
"949\0"
"950\0"
"951\0"
"952\0"
"953\0"
"954\0"
"955\0"
"956\0"
"957\0"
"958\0"
"959\0"
"960\0"
"961\0"
"962\0"
"963\0"
"964\0"
"965\0"
"966\0"
"967\0"
"968\0"
"969\0"
"970\0"
"971\0"
"972\0"
"973\0"
"974\0"
"975\0"
"976\0"
"977\0"
"978\0"
"979\0"
"980\0"
"981\0"
"982\0"
"983\0"
"984\0"
"985\0"
"986\0"
"987\0"
"988\0"
"989\0"
"990\0"
"991\0"
"992\0"
"993\0"
"994\0"
"995\0"
"996\0"
"997\0"
"998\0"
"999\0";
} // namespace
constexpr size_t ItoA::kBufSize;
ItoA::ItoA(std::uint64_t val) {
if (val < 10u) {
_str = kIndexTable + (2 * val);
_len = 1;
} else if (val < 100u) {
_str = kIndexTable + (2 * 10) + (3 * (val - 10));
_len = 2;
} else if (val < 1000u) {
_str = kIndexTable + (2 * 10) + (3 * 90) + (4 * (val - 100));
_len = 3;
} else {
auto len = sizeof(_buf) - 1;
_buf[len] = '\0';
auto pos = len;
while (val > 0) {
dassert(pos > 0);
--pos;
_buf[pos] = static_cast((val % 10) + static_cast('0'));
val /= 10;
}
_str = _buf + pos;
_len = len - pos;
}
}
} // namespace mongo