asar coverage - build #238


src/asar/
File: src/asar/libstr.h
Date: 2025-02-21 02:52:03
Lines:
198/210
94.3%
Functions:
54/56
96.4%
Branches:
594/873
68.0%

Line Branch Exec Source
1 #pragma once
2
3 #include "std-includes.h"
4 #include "libmisc.h"
5 #include <cstdint>
6 #include <cstring>
7 #include <utility>
8 #include <string_view>
9
10 //ty alcaro
11 extern const unsigned char char_props[256];
12 6302643 static inline int to_lower(unsigned char c) { return c|(char_props[c]&0x20); }
13 static inline int to_upper(unsigned char c) { return c&~(char_props[c]&0x20); }
14
15
10/10
✓ Branch 0 taken 74847 times.
✓ Branch 1 taken 29064 times.
✓ Branch 2 taken 74757 times.
✓ Branch 3 taken 72 times.
✓ Branch 4 taken 288 times.
✓ Branch 5 taken 90 times.
✓ Branch 6 taken 2598 times.
✓ Branch 7 taken 6525 times.
✓ Branch 8 taken 2661 times.
✓ Branch 9 taken 2598 times.
786609 inline bool is_space(unsigned char c) { return char_props[c] & 0x80; } // C standard says \f \v are space, but this one disagrees
16 150514 inline bool is_digit(unsigned char c) { return char_props[c] & 0x40; }
17 inline bool is_alpha(unsigned char c) { return char_props[c] & 0x20; }
18 4200 inline bool is_lower(unsigned char c) { return char_props[c] & 0x04; }
19 5862 inline bool is_upper(unsigned char c) { return char_props[c] & 0x02; }
20 inline bool is_alnum(unsigned char c) { return char_props[c] & 0x60; }
21 41787 inline bool is_ualpha(unsigned char c) { return char_props[c] & 0x28; }
22 408432 inline bool is_ualnum(unsigned char c) { return char_props[c] & 0x68; }
23
4/4
✓ Branch 0 taken 9504 times.
✓ Branch 1 taken 10407 times.
✓ Branch 2 taken 756 times.
✓ Branch 3 taken 261 times.
41962 inline bool is_xdigit(unsigned char c) { return char_props[c] & 0x01; }
24
25 2417991 inline char *copy(const char *source, int copy_length, char *dest)
26 {
27 5334820 memcpy(dest, source, copy_length*sizeof(char));
28 2417991 return dest;
29 }
30
31 class string {
32 public:
33 5208514 const char *data() const
34 {
35
246/352
✓ Branch 0 taken 5276 times.
✓ Branch 1 taken 978136 times.
✓ Branch 2 taken 962964 times.
✓ Branch 3 taken 3177 times.
✓ Branch 4 taken 2016 times.
✓ Branch 5 taken 18187 times.
✓ Branch 6 taken 243 times.
✓ Branch 7 taken 4093 times.
✓ Branch 8 taken 870 times.
✓ Branch 9 taken 5280 times.
✓ Branch 10 taken 16995 times.
✓ Branch 11 taken 2547 times.
✓ Branch 12 taken 783 times.
✓ Branch 13 taken 16015 times.
✓ Branch 14 taken 387 times.
✓ Branch 15 taken 744 times.
✓ Branch 16 taken 16203 times.
✓ Branch 17 taken 684 times.
✓ Branch 18 taken 464 times.
✓ Branch 19 taken 11238 times.
✓ Branch 20 taken 288 times.
✓ Branch 21 taken 5113 times.
✓ Branch 22 taken 269 times.
✓ Branch 23 taken 381 times.
✓ Branch 24 taken 462 times.
✓ Branch 25 taken 948 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 2079 times.
✓ Branch 28 taken 890 times.
✓ Branch 29 taken 90 times.
✓ Branch 30 taken 211 times.
✓ Branch 31 taken 664 times.
✓ Branch 32 taken 216 times.
✓ Branch 33 taken 1116 times.
✓ Branch 34 taken 953 times.
✓ Branch 35 taken 1008 times.
✓ Branch 36 taken 1056 times.
✓ Branch 37 taken 254 times.
✓ Branch 38 taken 18 times.
✓ Branch 39 taken 6180 times.
✓ Branch 40 taken 126 times.
✓ Branch 41 taken 5679 times.
✓ Branch 42 taken 1496 times.
✓ Branch 43 taken 24 times.
✓ Branch 44 taken 27 times.
✓ Branch 45 taken 82155 times.
✓ Branch 46 taken 196 times.
✓ Branch 47 taken 18 times.
✓ Branch 48 taken 82104 times.
✓ Branch 49 taken 168 times.
✓ Branch 50 taken 60 times.
✓ Branch 51 taken 86901 times.
✓ Branch 52 taken 3 times.
✓ Branch 53 taken 855 times.
✓ Branch 54 taken 86118 times.
✓ Branch 55 taken 774 times.
✓ Branch 56 taken 18 times.
✓ Branch 57 taken 208 times.
✓ Branch 58 taken 252 times.
✓ Branch 59 taken 39 times.
✓ Branch 60 taken 12 times.
✓ Branch 61 taken 93 times.
✓ Branch 62 taken 42 times.
✓ Branch 63 taken 3 times.
✓ Branch 64 taken 90 times.
✓ Branch 65 taken 151 times.
✓ Branch 66 taken 3 times.
✓ Branch 67 taken 1239 times.
✓ Branch 68 taken 37 times.
✓ Branch 69 taken 3 times.
✓ Branch 70 taken 67041 times.
✓ Branch 71 taken 15166 times.
✓ Branch 72 taken 12 times.
✓ Branch 73 taken 45 times.
✓ Branch 74 taken 16338 times.
✓ Branch 75 taken 12 times.
✓ Branch 76 taken 45 times.
✓ Branch 77 taken 16269 times.
✓ Branch 78 taken 3 times.
✓ Branch 79 taken 45 times.
✓ Branch 80 taken 584 times.
✓ Branch 81 taken 90 times.
✗ Branch 82 not taken.
✓ Branch 83 taken 442 times.
✓ Branch 84 taken 154 times.
✗ Branch 85 not taken.
✓ Branch 86 taken 15833 times.
✓ Branch 87 taken 15 times.
✗ Branch 88 not taken.
✓ Branch 89 taken 61581 times.
✓ Branch 90 taken 15036 times.
✗ Branch 91 not taken.
✓ Branch 92 taken 36 times.
✓ Branch 93 taken 252 times.
✓ Branch 94 taken 15081 times.
✓ Branch 95 taken 84579 times.
✓ Branch 96 taken 435 times.
✓ Branch 97 taken 84656 times.
✓ Branch 98 taken 9 times.
✓ Branch 99 taken 438 times.
✓ Branch 100 taken 69246 times.
✓ Branch 101 taken 15414 times.
✓ Branch 102 taken 465 times.
✓ Branch 103 taken 162 times.
✓ Branch 104 taken 9 times.
✓ Branch 105 taken 41 times.
✓ Branch 106 taken 162 times.
✓ Branch 107 taken 9 times.
✓ Branch 108 taken 3923 times.
✗ Branch 109 not taken.
✓ Branch 110 taken 12 times.
✓ Branch 111 taken 20 times.
✓ Branch 112 taken 765 times.
✗ Branch 113 not taken.
✓ Branch 114 taken 105 times.
✓ Branch 115 taken 153 times.
✓ Branch 116 taken 57 times.
✓ Branch 117 taken 105 times.
✓ Branch 118 taken 54 times.
✓ Branch 119 taken 153 times.
✓ Branch 120 taken 150 times.
✓ Branch 121 taken 9 times.
✓ Branch 122 taken 156 times.
✓ Branch 123 taken 144 times.
✓ Branch 124 taken 9 times.
✓ Branch 125 taken 153 times.
✗ Branch 126 not taken.
✓ Branch 127 taken 93 times.
✓ Branch 128 taken 144 times.
✗ Branch 129 not taken.
✓ Branch 130 taken 2898 times.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✓ Branch 133 taken 2883 times.
✓ Branch 134 taken 9 times.
✗ Branch 135 not taken.
✓ Branch 136 taken 6 times.
✓ Branch 137 taken 9 times.
✗ Branch 138 not taken.
✓ Branch 139 taken 9 times.
✗ Branch 140 not taken.
✓ Branch 141 taken 9 times.
✓ Branch 142 taken 10828 times.
✓ Branch 143 taken 36 times.
✓ Branch 144 taken 9 times.
✓ Branch 145 taken 3 times.
✓ Branch 146 taken 10828 times.
✗ Branch 147 not taken.
✓ Branch 148 taken 9 times.
✓ Branch 149 taken 10828 times.
✗ Branch 150 not taken.
✓ Branch 151 taken 12 times.
✓ Branch 152 taken 15586 times.
✗ Branch 153 not taken.
✓ Branch 154 taken 51 times.
✓ Branch 155 taken 90 times.
✓ Branch 156 taken 15 times.
✓ Branch 157 taken 345 times.
✓ Branch 158 taken 90 times.
✓ Branch 159 taken 348 times.
✗ Branch 160 not taken.
✓ Branch 161 taken 60 times.
✓ Branch 162 taken 5048 times.
✗ Branch 163 not taken.
✓ Branch 164 taken 60 times.
✓ Branch 165 taken 5048 times.
✗ Branch 166 not taken.
✓ Branch 167 taken 2272 times.
✓ Branch 168 taken 15576 times.
✗ Branch 169 not taken.
✓ Branch 170 taken 2017 times.
✓ Branch 171 taken 15675 times.
✗ Branch 172 not taken.
✓ Branch 173 taken 48 times.
✗ Branch 174 not taken.
✓ Branch 175 taken 222 times.
✗ Branch 176 not taken.
✓ Branch 177 taken 180 times.
✓ Branch 178 taken 72 times.
✗ Branch 179 not taken.
✓ Branch 180 taken 72 times.
✓ Branch 181 taken 84 times.
✗ Branch 182 not taken.
✓ Branch 183 taken 180 times.
✓ Branch 184 taken 90 times.
✗ Branch 185 not taken.
✓ Branch 186 taken 276 times.
✓ Branch 187 taken 3 times.
✓ Branch 188 taken 84 times.
✗ Branch 189 not taken.
✓ Branch 190 taken 90 times.
✗ Branch 191 not taken.
✓ Branch 192 taken 99 times.
✗ Branch 193 not taken.
✓ Branch 194 taken 102 times.
✓ Branch 195 taken 3 times.
✓ Branch 196 taken 81 times.
✗ Branch 197 not taken.
✓ Branch 198 taken 1170 times.
✓ Branch 199 taken 35820 times.
✗ Branch 200 not taken.
✓ Branch 201 taken 37116 times.
✓ Branch 202 taken 27 times.
✗ Branch 203 not taken.
✓ Branch 204 taken 6057 times.
✓ Branch 205 taken 27 times.
✗ Branch 206 not taken.
✓ Branch 207 taken 24 times.
✓ Branch 208 taken 9 times.
✗ Branch 209 not taken.
✓ Branch 210 taken 9 times.
✗ Branch 211 not taken.
✓ Branch 212 taken 18 times.
✗ Branch 213 not taken.
✓ Branch 214 taken 27 times.
✗ Branch 215 not taken.
✓ Branch 216 taken 27 times.
✗ Branch 217 not taken.
✓ Branch 218 taken 18 times.
✗ Branch 219 not taken.
✓ Branch 220 taken 27 times.
✗ Branch 221 not taken.
✓ Branch 222 taken 27 times.
✗ Branch 223 not taken.
✓ Branch 224 taken 9 times.
✗ Branch 225 not taken.
✓ Branch 226 taken 9 times.
✗ Branch 227 not taken.
✓ Branch 228 taken 9 times.
✗ Branch 229 not taken.
✓ Branch 230 taken 18 times.
✗ Branch 231 not taken.
✓ Branch 232 taken 27 times.
✗ Branch 233 not taken.
✓ Branch 234 taken 27 times.
✗ Branch 235 not taken.
✓ Branch 236 taken 9 times.
✗ Branch 237 not taken.
✓ Branch 238 taken 18 times.
✗ Branch 239 not taken.
✓ Branch 240 taken 27 times.
✗ Branch 241 not taken.
✓ Branch 242 taken 27 times.
✗ Branch 243 not taken.
✓ Branch 244 taken 9 times.
✗ Branch 245 not taken.
✓ Branch 246 taken 9 times.
✗ Branch 247 not taken.
✓ Branch 248 taken 18 times.
✗ Branch 249 not taken.
✓ Branch 250 taken 27 times.
✗ Branch 251 not taken.
✓ Branch 252 taken 27 times.
✗ Branch 253 not taken.
✓ Branch 254 taken 9 times.
✗ Branch 255 not taken.
✓ Branch 256 taken 9 times.
✗ Branch 257 not taken.
✓ Branch 258 taken 18 times.
✗ Branch 259 not taken.
✓ Branch 260 taken 27 times.
✗ Branch 261 not taken.
✓ Branch 262 taken 27 times.
✗ Branch 263 not taken.
✓ Branch 264 taken 27 times.
✗ Branch 265 not taken.
✓ Branch 266 taken 27 times.
✗ Branch 267 not taken.
✓ Branch 268 taken 9 times.
✗ Branch 269 not taken.
✓ Branch 270 taken 9 times.
✗ Branch 271 not taken.
✓ Branch 272 taken 9 times.
✗ Branch 273 not taken.
✓ Branch 274 taken 18 times.
✗ Branch 275 not taken.
✓ Branch 276 taken 27 times.
✗ Branch 277 not taken.
✓ Branch 278 taken 27 times.
✗ Branch 279 not taken.
✓ Branch 280 taken 9 times.
✗ Branch 281 not taken.
✓ Branch 282 taken 18 times.
✗ Branch 283 not taken.
✓ Branch 284 taken 27 times.
✗ Branch 285 not taken.
✓ Branch 286 taken 27 times.
✗ Branch 287 not taken.
✓ Branch 288 taken 54 times.
✗ Branch 289 not taken.
✓ Branch 290 taken 54 times.
✗ Branch 291 not taken.
✓ Branch 292 taken 54 times.
✗ Branch 293 not taken.
✓ Branch 294 taken 108 times.
✗ Branch 295 not taken.
✓ Branch 296 taken 162 times.
✗ Branch 297 not taken.
✓ Branch 298 taken 162 times.
✗ Branch 299 not taken.
✓ Branch 300 taken 54 times.
✗ Branch 301 not taken.
✓ Branch 302 taken 108 times.
✗ Branch 303 not taken.
✓ Branch 304 taken 162 times.
✗ Branch 305 not taken.
✓ Branch 306 taken 162 times.
✗ Branch 307 not taken.
✓ Branch 308 taken 54 times.
✗ Branch 309 not taken.
✓ Branch 310 taken 54 times.
✗ Branch 311 not taken.
✓ Branch 312 taken 54 times.
✗ Branch 313 not taken.
✓ Branch 314 taken 54 times.
✗ Branch 315 not taken.
✓ Branch 316 taken 9 times.
✗ Branch 317 not taken.
✓ Branch 318 taken 9 times.
✗ Branch 319 not taken.
✓ Branch 320 taken 9 times.
✗ Branch 321 not taken.
✓ Branch 322 taken 9 times.
✗ Branch 323 not taken.
✓ Branch 324 taken 9 times.
✗ Branch 325 not taken.
✓ Branch 326 taken 9 times.
✗ Branch 327 not taken.
✓ Branch 328 taken 9 times.
✗ Branch 329 not taken.
✓ Branch 330 taken 9 times.
✗ Branch 331 not taken.
✓ Branch 332 taken 9 times.
✗ Branch 333 not taken.
✓ Branch 334 taken 9 times.
✗ Branch 335 not taken.
✓ Branch 336 taken 9 times.
✗ Branch 337 not taken.
✓ Branch 338 taken 9 times.
✗ Branch 339 not taken.
✓ Branch 340 taken 9 times.
✗ Branch 341 not taken.
✓ Branch 342 taken 9 times.
✗ Branch 343 not taken.
✓ Branch 344 taken 9 times.
✗ Branch 345 not taken.
✓ Branch 346 taken 9 times.
✗ Branch 347 not taken.
✓ Branch 348 taken 9 times.
✗ Branch 349 not taken.
✓ Branch 350 taken 9 times.
✗ Branch 351 not taken.
8446223 return data_ptr;
36 }
37
38 193984 char *temp_raw() const //things to cleanup and take a look at
39 {
40
3/6
✓ Branch 0 taken 166602 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7176 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 60 times.
✗ Branch 5 not taken.
407504 return data_ptr;
41 }
42
43 348286 char *raw() const
44 {
45
3/5
✓ Branch 0 taken 2118 times.
✓ Branch 1 taken 81126 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 36 times.
✗ Branch 4 not taken.
455967 return data_ptr;
46 }
47
48 6080148 int length() const
49 {
50
35/46
✓ Branch 0 taken 1021766 times.
✓ Branch 1 taken 84886 times.
✓ Branch 2 taken 963992 times.
✓ Branch 3 taken 92627 times.
✓ Branch 4 taken 20264 times.
✓ Branch 5 taken 1380 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 21 times.
✓ Branch 8 taken 108 times.
✓ Branch 9 taken 2233 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 132 times.
✓ Branch 12 taken 36 times.
✓ Branch 13 taken 72 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 36 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 36 times.
✓ Branch 18 taken 72 times.
✓ Branch 19 taken 72 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 72 times.
✓ Branch 22 taken 36 times.
✓ Branch 23 taken 72 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 36 times.
✓ Branch 26 taken 117 times.
✓ Branch 27 taken 1476 times.
✓ Branch 28 taken 1476 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 414 times.
✓ Branch 32 taken 36 times.
✓ Branch 33 taken 72 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 36 times.
✓ Branch 36 taken 18 times.
✓ Branch 37 taken 486 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 270 times.
✓ Branch 40 taken 378 times.
✓ Branch 41 taken 1917 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 72 times.
✓ Branch 44 taken 191913 times.
✓ Branch 45 taken 37116 times.
9720482 return len;
51 }
52
53 7751795 void resize(unsigned int new_length)
54 {
55
2/2
✓ Branch 0 taken 23727 times.
✓ Branch 1 taken 7728068 times.
7751795 if (new_length > capacity()) {
56 23727 reallocate_capacity(new_length);
57 }
58
59 7751795 len = new_length;
60 7751795 data_ptr[new_length] = 0; //always ensure null terminator
61 7751795 }
62
63 1188 void truncate(int newlen)
64 {
65
1/2
✓ Branch 0 taken 1188 times.
✗ Branch 1 not taken.
2376 resize(newlen);
66 2376 }
67
68 2552321 void assign(const char * newstr)
69 {
70
2/2
✓ Branch 0 taken 12379 times.
✓ Branch 1 taken 2539942 times.
2552321 if (!newstr) newstr = "";
71 2552321 assign(newstr, strlen(newstr));
72 2552321 }
73
74 1574519 void assign(const string &newstr)
75 {
76 1574519 assign(newstr.data(), newstr.length());
77 1574519 }
78
79 4390797 void assign(const char * newstr, int end)
80 {
81 4390797 resize(end);
82 4390797 copy(newstr, end, data_ptr);
83 4390797 }
84
85
86 377180 string& operator=(const char * newstr)
87 {
88
15/26
✓ Branch 0 taken 945 times.
✓ Branch 1 taken 1530 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 705 times.
✓ Branch 6 taken 248 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 315 times.
✓ Branch 9 taken 4797 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2530 times.
✓ Branch 12 taken 9 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 142 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 16183 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 30657 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 270180 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 42 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 84651 times.
✗ Branch 25 not taken.
826908 assign(newstr);
89 791746 return *this;
90 }
91
92 690870 string& operator=(const string &newstr)
93 {
94
58/96
✓ Branch 0 taken 34392 times.
✓ Branch 1 taken 712 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 49584 times.
✓ Branch 4 taken 288 times.
✓ Branch 5 taken 248 times.
✓ Branch 6 taken 15 times.
✓ Branch 7 taken 288 times.
✓ Branch 8 taken 744 times.
✓ Branch 9 taken 9 times.
✓ Branch 10 taken 45 times.
✓ Branch 11 taken 765 times.
✓ Branch 12 taken 18 times.
✓ Branch 13 taken 18 times.
✓ Branch 14 taken 153 times.
✓ Branch 15 taken 9 times.
✓ Branch 16 taken 18 times.
✓ Branch 17 taken 81 times.
✓ Branch 18 taken 9 times.
✓ Branch 19 taken 18 times.
✓ Branch 20 taken 6 times.
✓ Branch 21 taken 63 times.
✓ Branch 22 taken 18 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 9 times.
✓ Branch 25 taken 36 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 18 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 1047 times.
✓ Branch 30 taken 36 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 36 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 36 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 9 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 36 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 72 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 72 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 36 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 36 times.
✗ Branch 47 not taken.
✓ Branch 48 taken 36 times.
✗ Branch 49 not taken.
✓ Branch 50 taken 117 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 1476 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 405 times.
✗ Branch 55 not taken.
✓ Branch 56 taken 36 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 36 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 36 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 18 times.
✗ Branch 63 not taken.
✓ Branch 64 taken 216 times.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 54 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 216 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 378 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 72 times.
✗ Branch 75 not taken.
✓ Branch 76 taken 72 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 72 times.
✗ Branch 79 not taken.
✓ Branch 80 taken 72 times.
✗ Branch 81 not taken.
✓ Branch 82 taken 72 times.
✗ Branch 83 not taken.
✓ Branch 84 taken 450 times.
✗ Branch 85 not taken.
✓ Branch 86 taken 72 times.
✗ Branch 87 not taken.
✓ Branch 88 taken 72 times.
✗ Branch 89 not taken.
✓ Branch 90 taken 891 times.
✗ Branch 91 not taken.
✓ Branch 92 taken 45 times.
✗ Branch 93 not taken.
✓ Branch 94 taken 72 times.
✗ Branch 95 not taken.
1050796 assign(newstr);
95 1049088 return *this;
96 }
97
98 string& append(const string& other, int start, int end)
99 {
100 int current_end = length();
101 resize(length() + end - start);
102 copy(other.data() + start, end - start, data_ptr + current_end);
103 return *this;
104 }
105
106 9624 string& append(const char *other, int start, int end)
107 {
108 4818 int current_end = length();
109 9624 resize(length() + end - start);
110 9624 copy(other + start, end - start, data_ptr + current_end);
111 9624 return *this;
112 }
113
114 225029 string& operator+=(const string& other)
115 {
116 89917 int current_end = length();
117 225029 resize(length() + other.length());
118 225029 copy(other.data(), other.length(), data_ptr + current_end);
119 225029 return *this;
120 }
121
122 691303 string& operator+=(const char *other)
123 {
124 310190 int current_end = length();
125 691303 int otherlen=(int)strlen(other);
126 691303 resize(length() + otherlen);
127 691303 copy(other, otherlen, data_ptr + current_end);
128 691303 return *this;
129 }
130
131 2431174 string& operator+=(char c)
132 {
133 2431174 resize(length() + 1);
134 2431174 data_ptr[length() - 1] = c;
135 2431174 return *this;
136 }
137
138 string operator+(char right) const
139 {
140 string ret=*this;
141 ret+=right;
142 return ret;
143 }
144
145 149329 string operator+(const char * right) const
146 {
147 61009 string ret=*this;
148
1/2
✓ Branch 0 taken 149329 times.
✗ Branch 1 not taken.
149329 ret+=right;
149 149329 return ret;
150 }
151
152 3880911 operator const char*() const
153 {
154 3880911 return data();
155 }
156
157 15936 explicit operator bool() const
158 {
159 15936 return length();
160 }
161
162 2439446 string()
163 4869415 {
164 5064935 data_ptr = inlined.data;
165 5064935 len = 0;
166
32/37
✓ Branch 0 taken 31750 times.
✓ Branch 1 taken 1143 times.
✓ Branch 2 taken 73227 times.
✓ Branch 3 taken 9202 times.
✓ Branch 4 taken 2322 times.
✓ Branch 5 taken 18655 times.
✓ Branch 6 taken 20 times.
✓ Branch 7 taken 329 times.
✓ Branch 8 taken 3371 times.
✓ Branch 9 taken 5244 times.
✓ Branch 10 taken 82170 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 76968 times.
✓ Branch 13 taken 108 times.
✓ Branch 14 taken 594 times.
✓ Branch 15 taken 5658 times.
✓ Branch 16 taken 117 times.
✓ Branch 17 taken 15309 times.
✓ Branch 18 taken 9 times.
✓ Branch 19 taken 153 times.
✓ Branch 20 taken 2889 times.
✓ Branch 21 taken 177 times.
✓ Branch 22 taken 123 times.
✓ Branch 23 taken 190 times.
✓ Branch 24 taken 25 times.
✓ Branch 25 taken 3983 times.
✓ Branch 26 taken 15464 times.
✓ Branch 27 taken 78040 times.
✓ Branch 28 taken 10461 times.
✓ Branch 29 taken 89675 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 270189 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 108 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 90 times.
✗ Branch 36 not taken.
3883830 inlined.data[0] = '\0';
167 2441463 }
168 1517457 string(const char * newstr) : string()
169 {
170
1/2
✓ Branch 0 taken 1517457 times.
✗ Branch 1 not taken.
1517457 assign(newstr);
171
44/68
✓ Branch 0 taken 5166 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
✓ Branch 3 taken 18 times.
✓ Branch 4 taken 6181 times.
✓ Branch 5 taken 15535 times.
✓ Branch 6 taken 774 times.
✓ Branch 7 taken 124 times.
✓ Branch 8 taken 124 times.
✓ Branch 9 taken 81951 times.
✓ Branch 10 taken 496 times.
✓ Branch 11 taken 124 times.
✓ Branch 12 taken 166602 times.
✓ Branch 13 taken 496 times.
✓ Branch 14 taken 124 times.
✓ Branch 15 taken 84777 times.
✓ Branch 16 taken 124 times.
✓ Branch 17 taken 124 times.
✓ Branch 18 taken 51 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 124 times.
✓ Branch 21 taken 180 times.
✓ Branch 22 taken 5396 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 18 times.
✓ Branch 25 taken 18 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 36 times.
✓ Branch 28 taken 5414 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 9 times.
✓ Branch 31 taken 15332 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 63 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 45 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 9 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 45 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 18 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 9 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 81 times.
✗ Branch 47 not taken.
✓ Branch 48 taken 27 times.
✗ Branch 49 not taken.
✓ Branch 50 taken 117 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 45 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 54 times.
✗ Branch 55 not taken.
✓ Branch 56 taken 36 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 15 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 186 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 48 times.
✗ Branch 63 not taken.
✓ Branch 64 taken 12 times.
✗ Branch 65 not taken.
✓ Branch 66 taken 12 times.
✗ Branch 67 not taken.
2218566 }
172 231444 string(const char * newstr, int newlen) : string()
173 {
174
1/2
✓ Branch 0 taken 231444 times.
✗ Branch 1 not taken.
231444 assign(newstr, newlen);
175
6/9
✓ Branch 0 taken 865 times.
✓ Branch 1 taken 744 times.
✓ Branch 2 taken 45 times.
✓ Branch 3 taken 2133 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 54 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 60 times.
✗ Branch 8 not taken.
354699 }
176 207956 string(const string& old) : string()
177 {
178
1/2
✓ Branch 0 taken 207956 times.
✗ Branch 1 not taken.
207956 assign(old.data());
179
44/90
✓ Branch 0 taken 345 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 12280 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 36 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 150 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 24 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 12 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 69 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 36 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 60 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 42 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 39 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 36 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 9 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 36 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 72 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 72 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 36 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 36 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 36 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 117 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 1476 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 405 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 36 times.
✗ Branch 47 not taken.
✓ Branch 48 taken 36 times.
✗ Branch 49 not taken.
✓ Branch 50 taken 36 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 18 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 216 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 54 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 216 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 378 times.
✗ Branch 63 not taken.
✓ Branch 64 taken 72 times.
✗ Branch 65 not taken.
✓ Branch 66 taken 72 times.
✗ Branch 67 not taken.
✓ Branch 68 taken 72 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 72 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 72 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 72 times.
✗ Branch 75 not taken.
✓ Branch 76 taken 450 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 72 times.
✗ Branch 79 not taken.
✓ Branch 80 taken 72 times.
✗ Branch 81 not taken.
✓ Branch 82 taken 891 times.
✗ Branch 83 not taken.
✓ Branch 84 taken 45 times.
✗ Branch 85 not taken.
✓ Branch 86 taken 72 times.
✗ Branch 87 not taken.
✓ Branch 88 taken 6057 times.
✗ Branch 89 not taken.
320796 }
180
181 222917 string(string &&move) noexcept : string()
182 {
183 112405 *this = move;
184 222917 }
185
186 393297 string& operator=(string&& other) noexcept
187 {
188
2/2
✓ Branch 0 taken 143384 times.
✓ Branch 1 taken 168 times.
393297 if (other.is_inlined()) {
189 // No resources to steal so just do a normal assignment
190 143384 *this = other;
191 } else {
192
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 99 times.
307 if (is_inlined()) {
193 119 data_ptr = other.data_ptr;
194 119 other.data_ptr = 0;
195 } else {
196 // Give our old allocation back so other can free it for us
197 99 std::swap(data_ptr, other.data_ptr);
198 }
199 307 len = other.len;
200 307 allocated = other.allocated;
201 }
202 393297 return *this;
203 }
204
205 12773315 ~string()
206 {
207
2/2
✓ Branch 0 taken 11429 times.
✓ Branch 1 taken 2342482 times.
7563613 if(!is_inlined()){
208 34549 free(data_ptr);
209 }
210 12773315 }
211
212 //maybe these should return refs to chain. but also good not to encourage chaining
213 5228 void strip_prefix(char c)
214 {
215
2/2
✓ Branch 0 taken 1492 times.
✓ Branch 1 taken 3736 times.
5228 if(data()[0] == c){
216 1492 std::memmove(data_ptr, data_ptr + 1, length() - 1);
217 1492 resize(length() - 1);
218 }
219 5228 }
220
221 void strip_suffix(char c)
222 {
223 if (data()[length() - 1] == c) {
224 truncate(length() - 1);
225 }
226 }
227
228 string& qreplace(const char * instr, const char * outstr);
229 string& qnormalize();
230
231 // RPG Hacker: My hack shmeck to get around no longer supporting text mode.
232 // Symbol files are currently the only thing that use text mode, anyways, and I don't even know
233 // if the emulators that read them care about line endings.
234 string& convert_line_endings_to_native()
235 {
236 #if defined(windows)
237 // RPG Hacker: This is quite stinky, but doing the replacement directly will lead to a dead-lock.
238 // \x08 = backspace should never appear inside a string, so I'm abusing it here.
239 return qreplace("\n", "\x08").qreplace("\x08", "\r\n");
240 #else
241 return *this;
242 #endif
243 }
244
245 #ifdef SERIALIZER
246 void serialize(serializer & s)
247 {
248 s(str, allocated.bufferlen);
249 resize(strlen(str));
250 }
251 #endif
252 #define SERIALIZER_BANNED
253
254 private:
255 static const int scale_factor = 4; //scale sso
256 static const int inline_capacity = ((sizeof(char *) + sizeof(int) * 2) * scale_factor) - 2;
257
258 // Points to a malloc'd data block or to inlined.data
259 char *data_ptr;
260 unsigned int len;
261 union {
262 struct {
263 // Actual allocated capacity is +1 this value, to cover for the terminating NUL
264 unsigned int capacity;
265 } allocated;
266 struct {
267 char data[inline_capacity + 1];
268 } inlined;
269 };
270
271 void reallocate_capacity(unsigned int new_length);
272
273 3471087 unsigned capacity() const
274 {
275
2/2
✓ Branch 0 taken 3461079 times.
✓ Branch 1 taken 10008 times.
3481611 return is_inlined() ? inline_capacity : allocated.capacity;
276 }
277
278 5980550 bool is_inlined() const
279 {
280
8/10
✓ Branch 0 taken 23073 times.
✓ Branch 1 taken 2593673 times.
✓ Branch 2 taken 249606 times.
✓ Branch 3 taken 139 times.
✓ Branch 4 taken 50 times.
✓ Branch 5 taken 89 times.
✓ Branch 6 taken 10524 times.
✓ Branch 7 taken 4270184 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
13127749 return data_ptr == inlined.data;
281 }
282 };
283 #define STR (string)
284
285 #define ASAR_STRCMP_OPERATORS(op) \
286 inline bool operator op(const string& left, const string& right) { \
287 return strcmp(left, right) op 0; \
288 } \
289 inline bool operator op(const string& left, const char* right) { \
290 return strcmp(left, right) op 0; \
291 } \
292 inline bool operator op(const char* left, const string& right) { \
293 return strcmp(left, right) op 0; \
294 }
295
296 294399 ASAR_STRCMP_OPERATORS(==)
297 29118 ASAR_STRCMP_OPERATORS(!=)
298 ASAR_STRCMP_OPERATORS(<)
299 ASAR_STRCMP_OPERATORS(<=)
300 ASAR_STRCMP_OPERATORS(>)
301 ASAR_STRCMP_OPERATORS(>=)
302 #undef ASAR_STRCMP_OPERATORS
303
304 template<>
305 struct std::hash<string> {
306 493914 size_t operator()(const ::string& s) const {
307 493914 return std::hash<std::string_view>()(std::string_view(s.data(), s.length()));
308 }
309 };
310
311 char * readfile(const char * fname, const char * basepath);
312 char * readfilenative(const char * fname);
313 bool readfile(const char * fname, const char * basepath, char ** data, int * len);//if you want an uchar*, cast it
314 char ** split(char * str, char key, int * len= nullptr);
315 char ** qsplit(char * str, char key, int * len= nullptr);
316 char ** qpsplit(char * str, char key, int * len= nullptr);
317 char ** qsplitstr(char * str, const char * key, int * len= nullptr);
318 bool confirmquotes(const char * str);
319 bool confirmqpar(const char * str);
320 char* strqpchr(char* str, char key);
321 char* strqpstr(char* str, const char* key);
322
323 inline string hex(unsigned int value)
324 {
325 char buffer[64];
326 if(0);
327 else if (value<=0x000000FF) snprintf(buffer, sizeof(buffer), "%.2X", value);
328 else if (value<=0x0000FFFF) snprintf(buffer, sizeof(buffer), "%.4X", value);
329 else if (value<=0x00FFFFFF) snprintf(buffer, sizeof(buffer), "%.6X", value);
330 else snprintf(buffer, sizeof(buffer), "%.8X", value);
331 return buffer;
332 }
333
334 6 inline string hex(unsigned int value, int width)
335 {
336 char buffer[64];
337 6 snprintf(buffer, sizeof(buffer), "%.*X", width, value);
338
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
9 return buffer;
339 }
340
341 21001 inline string dec(int value)
342 {
343 char buffer[64];
344 21001 snprintf(buffer, sizeof(buffer), "%i", value);
345
1/2
✓ Branch 0 taken 8835 times.
✗ Branch 1 not taken.
29836 return buffer;
346 }
347
348 6498 inline string ftostr(double value)
349 {
350 // randomdude999: With 100 digits of precision, the buffer needs to be approx. 311+100,
351 // but let's be safe here https://stackoverflow.com/questions/7235456
352 char rval[512];
353 // RPG Hacker: Ridiculously high precision, I know, but we're working with doubles
354 // here and can afford it, so no need to waste any precision
355 6498 snprintf(rval, sizeof(rval), "%.100f", value);
356
1/2
✓ Branch 0 taken 6498 times.
✗ Branch 1 not taken.
6498 if (strchr(rval, '.'))//nuke useless zeroes
357 {
358 6498 char * end=strrchr(rval, '\0')-1;
359
2/2
✓ Branch 0 taken 648756 times.
✓ Branch 1 taken 6498 times.
655254 while (*end=='0')
360 {
361 648756 *end='\0';
362 648756 end--;
363 }
364
2/2
✓ Branch 0 taken 6480 times.
✓ Branch 1 taken 18 times.
6498 if (*end=='.') *end='\0';
365 }
366
1/2
✓ Branch 0 taken 3249 times.
✗ Branch 1 not taken.
9747 return rval;
367 }
368
369 // Same as above, but with variable precision
370 54 inline string ftostrvar(double value, int precision)
371 {
372 27 int clampedprecision = precision;
373
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 27 times.
27 if (clampedprecision < 0) clampedprecision = 0;
374
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 27 times.
54 if (clampedprecision > 100) clampedprecision = 100;
375
376 // see above
377 char rval[512];
378 54 snprintf(rval, sizeof(rval), "%.*f", clampedprecision, (double)value);
379
2/2
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 6 times.
54 if (strchr(rval, '.'))//nuke useless zeroes
380 {
381 48 char * end = strrchr(rval, '\0') - 1;
382
2/2
✓ Branch 0 taken 138 times.
✓ Branch 1 taken 48 times.
186 while (*end == '0')
383 {
384 138 *end = '\0';
385 138 end--;
386 }
387
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 30 times.
48 if (*end == '.') *end = '\0';
388 }
389
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
81 return rval;
390 }
391
392 269753 inline bool stribegin(const char * str, const char * key)
393 {
394
2/2
✓ Branch 0 taken 932467 times.
✓ Branch 1 taken 26248 times.
958715 for (int i=0;key[i];i++)
395 {
396
2/2
✓ Branch 0 taken 576599 times.
✓ Branch 1 taken 355868 times.
932467 if (to_lower(str[i])!=to_lower(key[i])) return false;
397 }
398 5638 return true;
399 }
400
401 inline bool striend(const char * str, const char * key)
402 {
403 const char * keyend=strrchr(key, '\0');
404 const char * strend=strrchr(str, '\0');
405 if(keyend-key > strend-str) return false;
406
407 while (key!=keyend)
408 {
409 keyend--;
410 strend--;
411 if (to_lower(*strend)!=to_lower(*keyend)) return false;
412 }
413 return true;
414 }
415
416 inline bool stricmpwithupper(const char *word1, const char *word2)
417 {
418 while(*word2)
419 {
420 if(to_upper(*word1++) != *word2++) return true;
421 }
422 return *word1;
423 }
424
425 2261903 inline bool stricmpwithlower(const char *word1, const char *word2)
426 {
427
2/2
✓ Branch 0 taken 3018974 times.
✓ Branch 1 taken 117710 times.
3136684 while(*word2)
428 {
429
2/2
✓ Branch 0 taken 1439415 times.
✓ Branch 1 taken 1579559 times.
3018974 if(to_lower(*word1++) != *word2++) return true;
430 }
431 117710 return *word1;
432 }
433
434 //function: return the string without quotes around it, if any exists
435 //if they don't exist, return it unaltered
436 //it is not guaranteed to return str
437 //it is not guaranteed to not edit str
438 //the input must be freed even though it's garbage, the output must not
439 29847 inline const char * dequote(char * str)
440 {
441
2/2
✓ Branch 0 taken 17517 times.
✓ Branch 1 taken 12330 times.
29847 if (*str!='"') return str;
442 27579 char *end = strrchr(str, '"');
443
1/2
✓ Branch 0 taken 27579 times.
✗ Branch 1 not taken.
27579 if (end)
444 {
445 27579 *end = 0;
446 27579 char *quote = str+1;
447
2/2
✓ Branch 0 taken 432 times.
✓ Branch 1 taken 27579 times.
28011 while((quote = strstr(quote, "\"\""))) memmove(quote, quote+1, strlen(quote));
448 11214 return str + 1;
449 }
450 return nullptr;
451 }
452
453 46048 inline char * strqchr(const char * str, char key)
454 {
455
2/2
✓ Branch 0 taken 407627 times.
✓ Branch 1 taken 34855 times.
442482 while (*str != '\0')
456 {
457
2/2
✓ Branch 0 taken 11187 times.
✓ Branch 1 taken 396440 times.
407627 if (*str == key) { return const_cast<char*>(str); }
458
4/4
✓ Branch 0 taken 394520 times.
✓ Branch 1 taken 1920 times.
✓ Branch 2 taken 546 times.
✓ Branch 3 taken 393974 times.
396440 else if (*str == '"' || *str == '\'')
459 {
460 // Special case hack for ''', which is currently our official way of handling the ' character.
461 // Even though it really stinks.
462
5/6
✓ Branch 0 taken 546 times.
✓ Branch 1 taken 1920 times.
✓ Branch 2 taken 36 times.
✓ Branch 3 taken 510 times.
✓ Branch 4 taken 36 times.
✗ Branch 5 not taken.
2466 if (str[0] == '\'' && str[1] == '\'' && str[2] == '\'') { str += 2; }
463 else
464 {
465 1250 char delimiter = *str;
466
467 do
468 {
469 27582 str++;
470
471 // If we want to support backslash escapes, we'll have to add that right here.
472
4/4
✓ Branch 0 taken 25158 times.
✓ Branch 1 taken 2424 times.
✓ Branch 2 taken 25152 times.
✓ Branch 3 taken 6 times.
27582 } while (*str != delimiter && *str != '\0');
473
474 // This feels like a superfluous check, but I can't really find a clean way to avoid it.
475
2/2
✓ Branch 0 taken 1180 times.
✓ Branch 1 taken 1250 times.
2430 if (*str == '\0') { return nullptr; }
476 }
477 }
478
479 396434 str++;
480 }
481
482 17475 return nullptr;
483 }
484
485 3921 inline string substr(const char * str, int len)
486 {
487 3921 return string(str, len);
488 }
489
490
491 209331 inline char *strip_whitespace(char *str)
492 {
493
2/2
✓ Branch 0 taken 11222 times.
✓ Branch 1 taken 209331 times.
220553 while(is_space(*str)) str++;
494
2/2
✓ Branch 0 taken 193573 times.
✓ Branch 1 taken 63178 times.
256751 for(int i = strlen(str) - 1; i >= 0; i--)
495 {
496
2/2
✓ Branch 0 taken 146153 times.
✓ Branch 1 taken 47420 times.
193573 if(!is_space(str[i]))
497 {
498 146153 str[i + 1] = 0;
499 146153 return str;
500 }
501 }
502 31629 return str;
503 }
504 6984 inline void strip_whitespace(string &str)
505 {
506
1/2
✓ Branch 0 taken 3506 times.
✗ Branch 1 not taken.
10462 str = string(strip_whitespace(str.temp_raw()));
507 6984 }
508
509 string &itrim(string &str, const char * left, const char * right);
510
511 34343 inline string &lower(string &old)
512 {
513 92 int length = old.length();
514
2/2
✓ Branch 0 taken 963116 times.
✓ Branch 1 taken 34343 times.
997459 for (int i=0;i<length;i++) old.raw()[i]=(char)to_lower(old.data()[i]);
515 34343 return old;
516 }
517
518
519 // Returns number of connected lines - 1
520 template<typename stringarraytype>
521 148257 inline int getconnectedlines(stringarraytype& lines, int startline, string& out)
522 {
523 71691 int count = 0;
524
525
1/2
✓ Branch 0 taken 148311 times.
✗ Branch 1 not taken.
148311 for (int i = startline; lines[i]; i++)
526 {
527 // The line should already be stripped of any comments at this point
528 148311 int linestartpos = (int)strlen(lines[i]);
529
530
4/4
✓ Branch 0 taken 108627 times.
✓ Branch 1 taken 39684 times.
✓ Branch 2 taken 54 times.
✓ Branch 3 taken 108573 times.
148311 if(linestartpos && lines[i][linestartpos - 1] == '\\')
531 {
532 54 count++;
533
2/4
✓ Branch 0 taken 54 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
54 out += string(lines[i], linestartpos - 1);
534 27 continue;
535 }
536 else
537 {
538
2/4
✓ Branch 0 taken 148257 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71691 times.
✗ Branch 3 not taken.
148257 out += string(lines[i], linestartpos);
539 148257 return count;
540 }
541 }
542
543 return count;
544 }
545