Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: compiled/String.h

Issue 29613616: Issue 6064 - Put C++ code into a configurable namespace (Closed) Base URL: https://github.com/adblockplus/adblockpluscore.git
Left Patch Set: Created Nov. 21, 2017, 1:53 p.m.
Right Patch Set: rebase Created Feb. 6, 2018, 9:54 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « compiled/Map.h ('k') | compiled/StringMap.h » ('j') | compiled/StringMap.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-present eyeo GmbH 3 * Copyright (C) 2006-present eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 #pragma once 18 #pragma once
19 19
20 #include <algorithm> 20 #include <algorithm>
21 #include <cstddef> 21 #include <cstddef>
22 #include <cstring> 22 #include <cstring>
23 #include <type_traits> 23 #include <type_traits>
24 #ifdef INSIDE_TESTS
25 #include <iostream>
26 #include <codecvt>
27 #endif
24 28
25 #include "base.h" 29 #include "base.h"
26 #include "debug.h" 30 #include "debug.h"
27 #include "library.h" 31 #include "library.h"
28 32
29 ABP_NS_BEGIN 33 ABP_NS_BEGIN
30 34
31 inline void String_assert_writable(bool isWritable); 35 inline void String_assert_writable(bool isWritable);
32 36
33 class String 37 class String
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 if (currChar >= u'A' && currChar <= u'Z') 193 if (currChar >= u'A' && currChar <= u'Z')
190 mBuf[i] = currChar + u'a' - u'A'; 194 mBuf[i] = currChar + u'a' - u'A';
191 else if (currChar >= 128) 195 else if (currChar >= 128)
192 { 196 {
193 mBuf[i] = CharToLower(currChar); 197 mBuf[i] = CharToLower(currChar);
194 } 198 }
195 } 199 }
196 } 200 }
197 }; 201 };
198 202
203 #ifdef INSIDE_TESTS
204 inline std::ostream& operator<<(std::ostream& os, const String& str)
205 {
206 std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> converter;
207 os << converter.to_bytes(str.data(), str.data() + str.length());
208 return os;
209 }
210 #endif
211
199 class DependentString : public String 212 class DependentString : public String
200 { 213 {
201 public: 214 public:
202 explicit DependentString() 215 explicit DependentString()
203 : String(nullptr, 0, INVALID) 216 : String(nullptr, 0, INVALID)
204 { 217 {
205 } 218 }
206 219
207 explicit DependentString(value_type* buf, size_type len) 220 explicit DependentString(value_type* buf, size_type len)
208 : String(buf, len, READ_WRITE) 221 : String(buf, len, READ_WRITE)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 *this = DependentString(str, pos, len); 266 *this = DependentString(str, pos, len);
254 } 267 }
255 268
256 void erase() 269 void erase()
257 { 270 {
258 *this = DependentString(); 271 *this = DependentString();
259 mLen = DELETED; 272 mLen = DELETED;
260 } 273 }
261 }; 274 };
262 275
276 #ifdef INSIDE_TESTS
277 inline std::ostream& operator<<(std::ostream& os, const DependentString& str)
278 {
279 return os << static_cast<const String&>(str);
280 }
281 #endif
282
263 inline DependentString operator "" _str(const String::value_type* str, 283 inline DependentString operator "" _str(const String::value_type* str,
264 String::size_type len) 284 String::size_type len)
265 { 285 {
266 return DependentString(str, len); 286 return DependentString(str, len);
267 } 287 }
268 288
269 inline void String_assert_writable(bool isWritable) 289 inline void String_assert_writable(bool isWritable)
270 { 290 {
271 assert2(isWritable, u"Writing access to a read-only string"_str); 291 assert2(isWritable, u"Writing access to a read-only string"_str);
272 } 292 }
273 293
274 class OwnedString : public String 294 class OwnedString : public String
275 { 295 {
276 private: 296 private:
277 void grow(size_type additionalSize) 297 void grow(size_type additionalSize)
278 { 298 {
279 OwnedString newValue(length() + additionalSize); 299 OwnedString newValue(length() + additionalSize);
280 if (length() > 0) 300 if (length() > 0)
281 std::memcpy(newValue.mBuf, mBuf, sizeof(value_type) * length()); 301 std::memcpy(newValue.mBuf, mBuf, sizeof(value_type) * length());
282 *this = std::move(newValue); 302 *this = std::move(newValue);
283 } 303 }
284 304
285 public: 305 public:
286 explicit OwnedString(size_type len = 0) 306 explicit OwnedString(size_type len = 0)
287 : String(nullptr, len, READ_WRITE) 307 : String(nullptr, len, len ? READ_WRITE : INVALID)
288 { 308 {
289 if (len) 309 if (len)
290 { 310 {
291 mBuf = new value_type[length()]; 311 mBuf = new value_type[length()];
292 annotate_address(mBuf, "String"); 312 annotate_address(mBuf, "String");
293 } 313 }
294 else 314 else
295 mBuf = nullptr; 315 mBuf = nullptr;
296 } 316 }
297 317
298 explicit OwnedString(const String& str) 318 explicit OwnedString(const String& str)
299 : OwnedString(str.length()) 319 : OwnedString(str.length())
300 { 320 {
301 if (length()) 321 if (!str.is_invalid() && !length())
322 mLen = length() | READ_WRITE;
323 else if (length())
302 std::memcpy(mBuf, str.mBuf, sizeof(value_type) * length()); 324 std::memcpy(mBuf, str.mBuf, sizeof(value_type) * length());
303 } 325 }
304 326
305 OwnedString(const OwnedString& str) 327 OwnedString(const OwnedString& str)
306 : OwnedString(static_cast<const String&>(str)) 328 : OwnedString(static_cast<const String&>(str))
307 { 329 {
308 } 330 }
309 331
310 explicit OwnedString(const value_type* str, size_type len) 332 explicit OwnedString(const value_type* str, size_type len)
311 : OwnedString(DependentString(str, len)) 333 : OwnedString(DependentString(str, len))
312 { 334 {
313 } 335 }
314 336
315 explicit OwnedString(OwnedString&& str) 337 explicit OwnedString(OwnedString&& str)
316 : OwnedString(0) 338 : OwnedString(0)
317 { 339 {
318 mBuf = str.mBuf; 340 mBuf = str.mBuf;
319 mLen = str.mLen; 341 mLen = str.mLen;
320 str.mBuf = nullptr; 342 str.mBuf = nullptr;
321 str.mLen = READ_WRITE | 0; 343 str.mLen = READ_WRITE | 0;
322 } 344 }
323 345
324 ~OwnedString() 346 ~OwnedString()
325 { 347 {
326 if (mBuf) 348 if (mBuf)
327 delete[] mBuf; 349 delete[] mBuf;
350 }
351
352 void reset(const String& str)
353 {
354 *this = str;
355 }
356
357 void erase()
358 {
359 if (mBuf)
360 delete[] mBuf;
361 mBuf = nullptr;
362 mLen = DELETED;
328 } 363 }
329 364
330 OwnedString& operator=(const String& str) 365 OwnedString& operator=(const String& str)
331 { 366 {
332 *this = OwnedString(str); 367 *this = OwnedString(str);
333 return *this; 368 return *this;
334 } 369 }
335 370
336 OwnedString& operator=(const OwnedString& str) 371 OwnedString& operator=(const OwnedString& str)
337 { 372 {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 mBuf[pos++] = '-'; 437 mBuf[pos++] = '-';
403 438
404 for (int i = size - 1; i >= 0; i--) 439 for (int i = size - 1; i >= 0; i--)
405 { 440 {
406 mBuf[pos + i] = '0' + (num % 10); 441 mBuf[pos + i] = '0' + (num % 10);
407 num /= 10; 442 num /= 10;
408 } 443 }
409 } 444 }
410 }; 445 };
411 446
412 ABP_NS_END 447 #ifdef INSIDE_TESTS
448 inline std::ostream& operator<<(std::ostream& os, const OwnedString& str)
449 {
450 return os << static_cast<const String&>(str);
451 }
452 #endif
453 ABP_NS_END
LEFTRIGHT

Powered by Google App Engine
This is Rietveld