summaryrefslogtreecommitdiff
path: root/absl/strings
Commit message (Collapse)AuthorAge
...
* Add nullability annotationsGravatar Dmitri Gribenko2024-01-25
| | | | | PiperOrigin-RevId: 601477629 Change-Id: I3b683d94192b04f233ce5ec636586ccb90d24602
* Prevent brace initialization of AlphaNumGravatar Abseil Team2024-01-19
| | | | | | | | | This was not intended to be supported, and it has resulted in calls as `absl::StrCat({...})`, which are not supported and only work coincidentally for the first 4 arguments due to `absl::StrCat` having overloads that take `absl::AlphaNum` directly for those. The existing situation prevents modifying the implementations of such functions to alternatives that do not have such overloads for those arguments. PiperOrigin-RevId: 599872755 Change-Id: I02c90119b2b96a922cf7e3b5d5f02affe24a272d
* Remove code pieces for no longer supported MSVC versions.Gravatar Abseil Team2024-01-19
| | | | | | | The current support policy is `_MSC_VER >= 1920`. PiperOrigin-RevId: 599833619 Change-Id: I9cf7393a5b659d1680765e37e0328539ccb870fa
* Re-add the internal file //absl/string/internal/has_absl_stringify.h to unblockGravatar Derek Mauro2024-01-09
| | | | | | | | | | | | | | | releasing Abseil and GoogleTest. GoogleTest referenced this internal file and this internal trait. Since simultaneous releases are not possible since once release must reference another, we will temporarily add this back. https://github.com/google/googletest/blob/v1.14.x/googletest/include/gtest/gtest-printers.h#L119 https://github.com/google/googletest/pull/4368#issuecomment-1717699895 https://github.com/google/googletest/pull/4368#issuecomment-1717699895 PiperOrigin-RevId: 597073935 Change-Id: I7c2697a212dc477fd25770777445c64cfee73745
* Extend BM_StrAppendInt to use log-uniform random numbers instead of constantsGravatar Abseil Team2024-01-05
| | | | | | | | | This follows Benford's law, which is likely also a much more accurate representation of real data than a constant. We also add benchmarks for different integer types. PiperOrigin-RevId: 596039508 Change-Id: I4862c7cfdbf5face18ae31cf0bd2fd54e47684b7
* Optimize integer-to-string conversionsGravatar Abseil Team2024-01-04
| | | | | | | | | | | | | | | | | | | | | | The updated code is designed to: - Be branch-predictor-friendly - Be cache-friendly - Minimize the lengths of critical paths - Minimize slow operations (particularly multiplications) - Minimize binary/codegen bloat The most notable performance trick here is perhaps the precomputation & caching of the number of digits, so that we can reuse/exploit it when writing the output. This precomputation of the exact length enables 2 further performance benefits: - It makes `StrCat` and `StrAppend` zero-copy when only integers are passed, by avoiding intermediate `AlphaNum` entirely in those cases. If needed in the future, we can probably also make many other mixtures of non-integer types zero-copy as well. - It avoids over-reservation of the string buffer, allowing for more strings to fit inside SSO, which will likely have further performance benefits. There is also a side benefit of preventing `FastIntToBuffer` from writing beyond the end of the buffer, which has caused buffer overflows in the past. The new code continues to use & extend some of the existing core tricks (such as the division-by-100 trick), as those are already efficient. PiperOrigin-RevId: 595785531 Change-Id: Id6920e7e038fec10b2c45f213de75dc7e2cbddd1
* Correct nullability annotations on MakeNanGravatar Abseil Team2024-01-04
| | | | | | | Neither GCC nor Clang's __builtin_nan(), nor glibc's nan(), accept null pointers. PiperOrigin-RevId: 595767225 Change-Id: I4cddd1cafd0c9e83a823ec68386f10ce077c6b4c
* Avoid a empty library build failure on Apple platformsGravatar Derek Mauro2024-01-03
| | | | | | | | | | | | | | | | | | | | | https://github.com/abseil/abseil-cpp/issues/1465 reports that some CMake builds on Apply platforms issue ``` warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: libabsl_bad_any_cast_impl.a the table of contents is empty (no object file members in the library define global symbols) ``` Our CMake build handles this problem for header-only libraries by not building a library at all. For some libraries, for example our polyfills, the library is only conditionally empty. In these libraries, I added a single char variable on Apple platforms as a workaround. I have been able to reproduce the warnings reported in https://github.com/abseil/abseil-cpp/issues/1465, but they don't fail the build for me. I don't see them any more after this change. PiperOrigin-RevId: 595480705 Change-Id: Ie48637e84ebae2f2aea4e2de83b146f30f6a76b9
* Add compile-checks to ensure the parameter to ↵Gravatar Abseil Team2023-12-28
| | | | | | | | | absl::numbers_internal::FastIntToBuffer isn't provably insufficient This performance-sensitive API is internal, and should not be used directly. Nevertheless, some do use it, so it's worth trying to block incorrect uses where we can. PiperOrigin-RevId: 594289730 Change-Id: Ib5df39b450ef2ceda795082cde10ec2ba2642172
* Performance improvement for absl::AsciiStrToUpper() and absl::AsciiStrToLower()Gravatar Abseil Team2023-12-20
| | | | | PiperOrigin-RevId: 592664369 Change-Id: I7aa7b045c2b3c0f25cff7b82eb9d9cc13e9fc49f
* Added ByAsciiWhitespace to str_split library.Gravatar Abseil Team2023-12-20
| | | | | PiperOrigin-RevId: 592653487 Change-Id: Iddd2f484807cb02dd2ee8bba26c22d196be02c88
* Add a pragma to disable a stringop-overflow warning for GCC12+Gravatar Abseil Team2023-12-18
| | | | | PiperOrigin-RevId: 591894838 Change-Id: Ib3fe72d255f49320e2728c210ba1faabc81e0ef8
* Roll back changes to AsciiStrToUpper() and AsciiStrToLower() due to bug report.Gravatar Abseil Team2023-12-14
| | | | | PiperOrigin-RevId: 591161019 Change-Id: Iae2477a24819e20288fbb83b4a343031af71f1bb
* Performance improvement for absl::AsciiStrToUpper() and absl::AsciiStrToLower()Gravatar Abseil Team2023-12-14
| | | | | PiperOrigin-RevId: 591015112 Change-Id: I3e654433f0b0a4ea02ee10e0894e70738e730782
* Add nullability annotationsGravatar Dmitri Gribenko2023-12-11
| | | | | PiperOrigin-RevId: 589842893 Change-Id: I9657761d1f71c665582406f278c6605f6d382f6d
* Fixing a comment to be correct with the current code.Gravatar Abseil Team2023-12-06
| | | | | PiperOrigin-RevId: 588530709 Change-Id: Iee28c7693a4802f11e13728e1c28febee8c8576f
* Adds support for wchar_t/wchar_t*/std::wstring{_view} arguments to StrFormat().Gravatar Abseil Team2023-12-05
| | | | | | | This converts to UTF-8 regardless of locale. PiperOrigin-RevId: 588186076 Change-Id: I2c9598279b413d460e13ad65da2ba421c0b40b83
* Update documentation to reflect best practices (prefer brace initialization)Gravatar Abseil Team2023-11-27
| | | | | PiperOrigin-RevId: 585691325 Change-Id: Icd18dc0294dfd1e22f9878b628d5e5898fcc8185
* Fixed a very small typo in the Cord::empty() docstring.Gravatar Abseil Team2023-11-14
| | | | | PiperOrigin-RevId: 582455513 Change-Id: Ic78d14d6dd748420a64e7026ec7f8b967bebbf42
* Add new benchmark for integer `StrAppend`Gravatar Abseil Team2023-11-13
| | | | | PiperOrigin-RevId: 582033534 Change-Id: I9af42210f65b40ccd7f55c9a2e0c8387b69760dc
* Doc fix.Gravatar Abseil Team2023-11-03
| | | | | PiperOrigin-RevId: 579263069 Change-Id: I78678c2fc6aba4851f8a06dafb695c913accf0d0
* Optimize memcasecmp. Benchmarks shows slight improvement.Gravatar Ilya Tokar2023-10-30
| | | | | | | | | | | | | | | We are also avoiding potential cache-misses, by avoiding load. name old speed new speed delta BM_Searchcase 3.09GB/s ±13% 3.20GB/s ±16% +3.69% (p=0.039 n=20+17) BM_SearchcaseMedium 1.08GB/s ± 7% 1.04GB/s ±14% ~ (p=0.814 n=16+20) BM_SearchcasePathological 618kB/s ±13% 652kB/s ± 6% +5.55% (p=0.043 n=20+16) BM_Memcasematch 2.43GB/s ± 3% 2.45GB/s ± 3% ~ (p=0.488 n=17+16) BM_MemcasematchMedium 230MB/s ± 8% 261MB/s ±14% +13.77% (p=0.000 n=16+20) BM_MemcasematchPathological 624kB/s ±14% 619kB/s ±14% ~ (p=0.836 n=20+20) PiperOrigin-RevId: 577919033 Change-Id: I31324e04b6a577c582ad630d171d3b41d826f1e4
* Fix an unreachable code warning on some platformsGravatar Derek Mauro2023-10-30
| | | | | | | #1558 PiperOrigin-RevId: 577874842 Change-Id: I1d56f3f4b445f6c4a9df2fe06fec542cb00e0e92
* Fix a typo.Gravatar Abseil Team2023-10-24
| | | | | PiperOrigin-RevId: 576162408 Change-Id: Ib383bb744b5cb11b6cbc99f2323583e1d23d8ff1
* Add `AbslStringify()` support to `absl::Cord`Gravatar Abseil Team2023-10-24
| | | | | PiperOrigin-RevId: 576149980 Change-Id: I0a7e3df7a01edc78ee5d15d8d8e82e7bbc5fc0f3
* Performance improvements for `absl::AsciiStrToLower` and ↵Gravatar Abseil Team2023-10-23
| | | | | | | `absl::AsciiStrToUpper`. PiperOrigin-RevId: 575969640 Change-Id: If6ddc0a71debfe571c2739ec91fc99594bc36f88
* absl::string_view: Add support for starts_with() and ends_with()Gravatar Derek Mauro2023-10-20
| | | | | | | | | | | | | | | | when targeting at least C++20 These methods were added to C++20, so they are not available in earlier language standards. Users requiring compatibility prior to C++20 should use absl::StartsWith() and absl::EndsWith() from //absl/strings/match.h. Most users are not affected by this change. By default when targeting at least C++20 absl::string_view will be an alias for std::string_view. Only users that have modified //absl/base/options.h will see this change. PiperOrigin-RevId: 575238435 Change-Id: I7b03fde02c987b30b88c794640c2a616851997d1
* Add a template gadget to detect whether a type supports the ostream operator.Gravatar Zie Weaver2023-10-18
| | | | | | | | | | I.e. for a type `Example`, if ``` std::ostream& operator<<(std::ostream&, const Example&); ``` is declared, `absl::HasOstreamOperator<Example>::value` is `true`. PiperOrigin-RevId: 574637891 Change-Id: I123d8f35a6e3ea894745133f7d81b1610fb475d5
* Delete `absl::strings_internal::HasAbslStringify`.Gravatar Abseil Team2023-10-12
| | | | | | | Users should use `absl::HasAbslStringify` instead. PiperOrigin-RevId: 572916854 Change-Id: Ie67e076e0335b108d23f886a28074f7557ba045a
* Bazel: Enable the header_modules featureGravatar Derek Mauro2023-10-11
| | | | | PiperOrigin-RevId: 572575394 Change-Id: Ic1c5ac2423b1634e50c43bad6daa14e82a8f3e2c
* Bazel: Support layering_check and parse_headersGravatar Derek Mauro2023-10-10
| | | | | | | | | | | | | The layering_check feature ensures that rules that include a header explicitly depend on a rule that exports that header. Compiler support is required, and currently only Clang 16+ supports diagnoses layering_check failures. The parse_headers feature ensures headers are self-contained by compiling them with -fsyntax-only on supported compilers. PiperOrigin-RevId: 572350144 Change-Id: I37297f761566d686d9dd58d318979d688b7e36d1
* Update argument order of `EXPECT_EQ` in `absl::StrJoin` documentation.Gravatar Abseil Team2023-10-06
| | | | | PiperOrigin-RevId: 571487219 Change-Id: I6fbb2ff19db2b6d77e55059004d65c8639eb7fca
* Fix a crash when calling `EstimatedMemoryUsage()` on an empty checksummed ↵Gravatar Abseil Team2023-09-22
| | | | | | | `absl::Cord`. PiperOrigin-RevId: 567695227 Change-Id: I13eb8a1872d2fe703b5f3b9bc8df7fec4381fb55
* Additional StrCat microbenchmarks.Gravatar Abseil Team2023-09-19
| | | | | PiperOrigin-RevId: 566650311 Change-Id: Ibfabee88ea9999d08ade05ece362f5a075d19695
* Remove unused internal function `InlineRep::empty()` which has misleading ↵Gravatar Abseil Team2023-09-14
| | | | | | | semantics. PiperOrigin-RevId: 565330231 Change-Id: I84f0e9065986bb592b5bfb196b3fc221feb14bc4
* Make `HasAbslStringify` public.Gravatar Abseil Team2023-09-13
| | | | | PiperOrigin-RevId: 565050503 Change-Id: I8f4c463be4ef513a2788745d1b454a7ede489152
* Fixes StrCat() performance regression when not using libc++Gravatar Derek Mauro2023-09-11
| | | | | | | | | 65d7b6d changed StrCat() to not use an intermediate buffer when the result fits in the SSO buffer, but only libc++ has an SSO buffer large enough for this optimization to work. PiperOrigin-RevId: 564447163 Change-Id: I0c7fa4afed3369b36e13e7d1691eb7f933ea0091
* Doc fix.Gravatar Abseil Team2023-09-11
| | | | | PiperOrigin-RevId: 564296635 Change-Id: I13ca663cdb676948a7041c5671b82a97a4388ff1
* Remove CordRepRing experiment.Gravatar Martijn Vels2023-09-08
| | | | | | | We have no intention to use it instead of the CordRepBtree implementation, so cleanup up and remove all code and references. PiperOrigin-RevId: 563803813 Change-Id: I95a67318d0f722f3eb7ecdcc7b6c87e28f2e26dd
* Fix strict weak ordering in convert_test.ccGravatar Abseil Team2023-09-08
| | | | | | | It sorts NaNs and the test became flaky. Flakiness arises from the fact that sorting checks randomize and check for 100 elements but we sort here around a thousand PiperOrigin-RevId: 563783036 Change-Id: Id25bcb47483acf9c40be3fd1747c37d046197330
* Revise a comment regarding casting `memchr()`'s return type. The original ↵Gravatar Abseil Team2023-08-31
| | | | | | | comment seemed to suggest that the return type varies depending on the compiler and hence the `static_cast` is needed. PiperOrigin-RevId: 561706189 Change-Id: Ie244d235d082536edfca263d4165e16171cbc6c7
* Remove unused ReservedFlag.Gravatar Tomas Dzetkulic2023-08-30
| | | | | PiperOrigin-RevId: 561444343 Change-Id: I26c648b28b626e11caa32b0a34aef92932d5ddb9
* Speed up `FastIntToBuffer`.Gravatar Abseil Team2023-08-25
| | | | | PiperOrigin-RevId: 560038034 Change-Id: I2c74d271b52faeefb6e8627d9830b2b53de64e73
* Add absl::CharSet.Gravatar Abseil Team2023-08-23
| | | | | PiperOrigin-RevId: 559415517 Change-Id: I5bbc744bf00be2fd15ec7544b725d699e0d982fb
* Check CRC cordrep child nodes for nullptr.Gravatar Martijn Vels2023-08-18
| | | | | | | Some time ago the invariant for CRC cordreps was relaxed to allow for nullptr values on empty cords with an explicit empty CRC value. The CordzInfo analysis never checked for nullptr values causing cord sampling to crash if the sampling happened to include a (very unlikely) empty Cord value. PiperOrigin-RevId: 558202613 Change-Id: Ib0e1eadd08047167e4df5d3035b36dca2c285a0d
* StrCat: do not use intermediate buffer when result fits in SSO.Gravatar Abseil Team2023-08-17
| | | | | PiperOrigin-RevId: 557811632 Change-Id: I370fa17d2fb82a1f1ca86f84529bae31b34b18e4
* Implement `Cord::Find()` and `Cord::Contains()`Gravatar Abseil Team2023-08-16
| | | | | PiperOrigin-RevId: 557523229 Change-Id: I959c0b0b14a4a96bee396d4bc09b80328060287d
* Speed up kTotalMorePrecise mode of Cord::EstimatedMemoryUsage() by about 25% ↵Gravatar Abseil Team2023-08-14
| | | | | | | by avoiding a redundant map lookup. PiperOrigin-RevId: 556816759 Change-Id: I971e428bf12d91720df72a91cc0bdf0513b0c270
* Add ATTRIBUTE_LIFETIME_BOUND to Cord iterator methodsGravatar Abseil Team2023-08-10
| | | | | PiperOrigin-RevId: 555515105 Change-Id: I00929a869880cddd932ed2a08adb8f762a582738
* Eliminate redundant code branch in `StrAppend`.Gravatar Abseil Team2023-08-09
| | | | | PiperOrigin-RevId: 555080884 Change-Id: I3f83fbeea1352587cf46fed83861cd7fb75655b0