File Coverage

bson/bson-keys.c
Criterion Covered Total %
statement 0 10 0.0
branch 0 6 0.0
condition n/a
subroutine n/a
pod n/a
total 0 16 0.0


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