| Commit message (Collapse) | Author | Age |
|
|
|
|
| |
PiperOrigin-RevId: 502901875
Change-Id: I1c8c097e5c81a9e413692109ebfe0d0b24f50f2e
|
|
|
|
|
| |
PiperOrigin-RevId: 502689876
Change-Id: If75b00e2e257283b60c41411ef7a60dbd7cd8c6d
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The implementation can be optimized to not having to perform an ExtendByZero operation.
`RemoveCrc32cSuffix` can simply be implemented as
uint32_t result = static_cast<uint32_t>(full_string_crc) ^
static_cast<uint32_t>(suffix_crc);
CrcEngine()->UnextendByZeroes(&result, suffix_len);
return crc32c_t{result};
Math proof that this change is correct:
`ComputeCrc32c` actually computes the following:
ConditionedCRC(data) = UnconditionedCRC(data) + StartValue(data) + ~0
with:
StartValue(data) = ~0 * x**BitLength(data) mod P
(with `+` being a carry-less add, ie an xor).
``UnconditionedCRC` in the context of this description means: no initial or final xor with ~0 and a starting value of zero - ie the result that `CrcEngine()->Extend` would give you with a starting value of 0.
Given `full_string_crc` and `suffix_crc` (both conditioned CRCs), xoring them together results in:
(1):
full_string_crc + suffix_crc =
UnconditionedCRC(full_string) + StartValue(full_string) + ~0
+ UnconditionedCRC(suffix) + StartValue(suffix) + ~0
Since `+` is carry-less addition (ie an XOR), the two ~0 cancel each other out.
(2)
full_string_crc + suffix_crc =
UnconditionedCRC(full_string) + StartValue(full_string)
+ UnconditionedCRC(suffix) + StartValue(suffix)
We can make use of the fact that:
(3)
UnconditionedCRC(full_string) + UnConditionedCRC(suffix)
= UnconditionedCRC(full_string_with_suffix_replaced_by_zeros).
Ie, UnconditionedCRC("AABBB") + UnconditionedCRC("BBB") = UnconditionedCRC("AA\0\0\0")
Putting (3) into (2) yields:
(4)
full_string_crc + suffix_crc =
UnconditionedCRC(full_string_with_suffix_replaced_by_zeros)
+ StartValue(full_string) + StartValue(suffix)
Using:
(5)
UnconditionedCRC(full_string_with_suffix_replaced_by_zeros)
=
UnconditionedCRC(full_string_without_suffix) * x**Bitlength(suffix) mod P
and putting (5) into (4)
(6)
full_string_crc + suffix_crc =
UnconditionedCRC(full_string_without_suffix) * x**Bitlength(suffix) mod P +
StartValue(full_string) + StartValue(suffix)
Using
(7)
StartValue(full_string) = ~0 * x ** Bitlength(full_string) mod P
and
(8)
StartValue(suffix) = ~0 * x**BitLength(suffix) mod P
Putting (7) and (8) in (6):
(9):
full_string_crc + suffix_crc =
UnconditionedCRC(full_string_without_suffix) * x**(Bitlength(suffix)) mod P
+ ~0 * x ** Bitlength(full_string) mod P
+ ~0 * x ** BitLength(suffix) mod P
Using:
(10)
Bitlength(full_string) =
Bitlength(full_string_without_suffix) +
Bitlength(suffix)
And putting (10) in (9):
(11)
full_string_crc + suffix_crc =
UnconditionedCRC(full_string_without_suffix) * x**(Bitlength(suffix)) mod P
+ ~0 * x ** (Bitlength(full_string_without_suffix) + Bitlength(suffix)) mod P
+ ~0 * x ** BitLength(suffix) mod P
using x**(A+B) = x**A * x**B results in:
(12)
full_string_crc + suffix_crc =
UnconditionedCRC(full_string_without_suffix) * x**(Bitlength(suffix)) mod P
+ [ ~0 * x ** Bitlength(full_string_without_suffix) * x**Bitlength(suffix)] mod P
+ ~0 * x ** BitLength(suffix) mod P
using A mod P + B mod P + C mod P = (A + B + C) mod P:
(this works in carry-less arithmetic)
(13)
full_string_crc + suffix_crc = [
UnconditionedCRC(full_string_without_suffix) * x**(Bitlength(suffix))
+ [ ~0 * x ** Bitlength(full_string_without_suffix) * x**Bitlength(suffix)]
+ ~0 * x ** BitLength(suffix) ] mod P
Factor out x**Bitlength(suffix):
(14)
full_string_crc + suffix_crc = [
x**(Bitlength(suffix)) * [
UnconditionedCRC(full_string_without_suffix)
+ ~0 * x ** Bitlength(full_string_without_suffix)
+ ~0 ] mod P
Using:
(15)
ConditionedCRC(full_string_without_suffix) =
[ UnconditionedCRC(full_string_without_suffix)
+ ~0 * x ** Bitlength(full_string_without_suffix) ] mod P + ~0
=
[ UnconditionedCRC(full_string_without_suffix)
+ ~0 * x ** Bitlength(full_string_without_suffix) + ~0] mod P
(~0 is less than x**32, so ~0 mod P = ~0)
Putting (15) in (14) results in:
full_string_crc + suffix_crc = [
x**(Bitlength(suffix)) * ConditionedCRC(full_string_without_suffix)] mod P
Or:
(16)
ConditionedCRC(full_string_without_suffix) =
(full_string_crc + suffix_crc) * x**(-Bitlength(suffix)) mod P
A multiplication by x**(-8*bytelength) mod P is implemented by `CrcEngine()->UnextendByZeros`.
PiperOrigin-RevId: 502659140
Change-Id: I66b0700d258f948be0885f691370b73d7fad56e3
|
|
|
|
|
|
|
| |
growth runs out.
PiperOrigin-RevId: 502625638
Change-Id: I1c06b2162dbdaaa6a36cea503ac6d07cd157b2e2
|
|
|
|
|
|
|
| |
#1359
PiperOrigin-RevId: 502597369
Change-Id: I5d65ed7e2dbe4b51ebce47f282ead89d91d919cd
|
|
|
|
|
|
|
| |
volatile pointer type testcase to char pointers.
PiperOrigin-RevId: 501781539
Change-Id: I99012cecd960745de8a921b96671cde42e28a3af
|
|
|
|
|
| |
PiperOrigin-RevId: 501644407
Change-Id: Ie98d22e4983cfbd9cad2176925774d624d4702cf
|
|
|
|
|
| |
PiperOrigin-RevId: 501464530
Change-Id: I5a0929a2b88c1c158b1696634a65ffda9c4b8590
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Several problems with the previous documentation:
* It said it's stable "within the same binary" but not stable "across multiple binary invocations". Those statements contradict each other.
* It said "in the same binary will not produce the same sequence of variates within the same binary", which is repetitive since it says "in the same binary" twice.
* The comments about the seed sequence were not all next to each other, they were split apart by a rand.req.urng comment.
* It implied that process stability is all you get, whereas generally you also get changelist stability.
* It said you can use a seed sequence with SharedBitGen, but you can't.
* It said there is more info in std_seed_seq.h , but there isn't.
PiperOrigin-RevId: 501389708
Change-Id: I5e3dbc3548cc051265b8d004191c23147eccecc3
|
|
|
|
|
| |
PiperOrigin-RevId: 501343076
Change-Id: I12e04a87b9a90951f9b52bd9690cce28d03b0f29
|
|
|
|
|
| |
PiperOrigin-RevId: 501294426
Change-Id: Ic580a2f31b4a98b1dd3eb21f3279fda4cd4a5977
|
|
|
|
|
| |
PiperOrigin-RevId: 501074382
Change-Id: I26a59ee6452855685ffe89469c352e6384060f59
|
|
|
|
|
| |
PiperOrigin-RevId: 501014555
Change-Id: Ie204d307a4e537935a04c0f23bb13532e3c84bc8
|
|
|
|
|
|
|
|
|
| |
Remove duplicate documentation for two variants of Base64EscapeInternal().
Clarify role of base64 char array input (controls web-safe or not).
PiperOrigin-RevId: 500867221
Change-Id: Ie316a7ddd60794e041c5b9b39e9ab5b66ed565a6
|
|
|
|
|
|
|
| |
particular RFC specifications.
PiperOrigin-RevId: 500809781
Change-Id: I34d089343321f7658db8252ad29ff1824e6dbef2
|
|
|
|
|
| |
PiperOrigin-RevId: 500765473
Change-Id: Iaa3f9fdee6c9f4322bc8995b0d381cf1c8cb1349
|
|
|
|
|
|
|
|
| |
This is consistent with the rest of the GTEST_HAS_DEATH usages in
the code and the example in gtest-port.h.
PiperOrigin-RevId: 500740093
Change-Id: I2acc158116b0e8bccc8ab45d75c8059828a4c251
|
|\
| |
| |
| |
| | |
PiperOrigin-RevId: 500726761
Change-Id: I42fbd4d2d8015e907b3c40417d35be2bbb63085e
|
| |
| |
| |
| |
| | |
PiperOrigin-RevId: 500401844
Change-Id: I6d0909a8e395c914861dd034824a34737a52d71f
|
|\ \
| | |
| | |
| | |
| | | |
PiperOrigin-RevId: 500300819
Change-Id: Iacff97071d158843d687c811b0d78d4ddeba9039
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This also ensures that there is only one definition of
GetArchSpecificEngines by moving the condition to a common place.
PiperOrigin-RevId: 500038304
Change-Id: If0c55d701dfdc11a1a9c8c1b34eb220435529ffb
|
| | |
| | |
| | |
| | |
| | | |
PiperOrigin-RevId: 499964205
Change-Id: I45a1d62a5e093921946e7c3c7ab31480252b330e
|
| |/
|/| |
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
CalculateBase64EscapedLenInternal helper method.
Note that output padding is conditional on do_padding.
PiperOrigin-RevId: 499901986
Change-Id: I8c1d28fe372b3e0e2216654db83f949caa297892
|
| |
| |
| |
| |
| |
| |
| | |
This is now available as the public symbol ABSL_UNREACHABLE().
PiperOrigin-RevId: 499578459
Change-Id: Ib36c1826eb733271a6b02e81d6c3d088b255180a
|
| |
| |
| |
| |
| |
| |
| |
| | |
32-bit builds with SSE 4.2 do exist, and these builds do not work
without this patch.
PiperOrigin-RevId: 499498979
Change-Id: I0ade09068804655652c07d0f1ef13554464a1558
|
| |
| |
| |
| |
| |
| |
| | |
Using Damerau-Levenshtein distance to calculate potential candidates to suggest.
PiperOrigin-RevId: 499449034
Change-Id: I805aafefcd0f4f85585ac33a041c15360619c96a
|
| |
| |
| |
| |
| | |
PiperOrigin-RevId: 499292396
Change-Id: I3c66754169d7d7e304d5b973c0872690b79f59c5
|
|/
|
|
|
|
|
|
|
|
| |
off64_t is not provided without defining _LARGEFILE64_SOURCE on musl
this define is not defined automatically like glibc where it gets
defined when _GNU_SOURCE is defined. Using off_t makes it portable
across musl/glibc and for using 64bit off_t on glibc 32bit systems
-D_FILE_OFFSET_BITS=64 can be defined during build via CXXFLAGS
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
|
|
|
| |
PiperOrigin-RevId: 498192454
Change-Id: Ib6d251b9154322ae873477b44cf7265a74ce11f4
|
|
|
|
|
| |
PiperOrigin-RevId: 498179140
Change-Id: Ie18b68e6313817b4f41fec6b10dd878436431730
|
|
|
|
|
| |
PiperOrigin-RevId: 498048994
Change-Id: Iee969b9171921e3ffdca2610f9b93b53678d0b9d
|
|
|
|
|
| |
PiperOrigin-RevId: 497998566
Change-Id: I8d43311e280a5ea46c42abed55be62cd70d4d54a
|
|
|
|
|
|
|
| |
reserved growth if the reservation wouldn't grow the table.
PiperOrigin-RevId: 497246219
Change-Id: I9671236f56d10851c49de71c21899368be6c3a00
|
|
|
|
|
| |
PiperOrigin-RevId: 497232675
Change-Id: Ic3cabbb85d90eb4f32a4bee17207e73475258e4b
|
|
|
|
|
| |
PiperOrigin-RevId: 497197704
Change-Id: I3865a874e04f6f55a1ab374b03451535a86bc5a3
|
|
|
|
|
|
|
|
|
|
| |
* The template parameter provided to `FixedArray` for the number of inline elements is named `N`
* If left defaulted, which is recommended, `FixedArray` chooses the number of inline elements by itself
* The `inline_elements` static class member contains the actual number of inlinable elements
* Previously the docs referred to the template parameter as `inline_elements` instead of `N`.
PiperOrigin-RevId: 497185546
Change-Id: I321092826d956704c0074062d2a7b924b28e36d0
|
|
|
|
|
|
|
| |
that the assert can be a static_assert
PiperOrigin-RevId: 497161039
Change-Id: If714cb25ca1d9481ada94b3b5b4cb16a4dd4e85a
|
|
|
|
|
| |
PiperOrigin-RevId: 497124964
Change-Id: Ia5d7005fa9bc422c1ac9a47d5cbaf8c6b8f06d84
|
|
|
|
|
| |
PiperOrigin-RevId: 496974198
Change-Id: I73b4013a2ad9fd37650d788cbd1e758b327b59d2
|
|
|
|
|
|
|
|
|
|
|
| |
ABSL_UNREACHABLE() is an unreachable statement. A program which reaches
one has undefined behavior, and the compiler may optimize accordingly.
The behavior is changed to abort the program in !NDEBUG or
ABSL_OPTION_HARDENED modes.
PiperOrigin-RevId: 496917150
Change-Id: If036b2d9567933fa266fbcd33f3f98c682ad7f41
|
|
|
|
|
| |
PiperOrigin-RevId: 496788919
Change-Id: I8867f8b884b81aa2f7b6d08dabd90c75965d1939
|
|
|
|
|
|
|
|
|
| |
or ABSL_ATTRIBUTE_PURE_FUNCTION
However, both absl_attributes are now unimplemented to avoid breaking existing users.
PiperOrigin-RevId: 496769399
Change-Id: I9c00cb60b885526300d744f9ea7c0f2178f092bb
|
|
|
|
|
| |
PiperOrigin-RevId: 496514638
Change-Id: I45b8dfe01c83915c460711339d2d8c38604c8d81
|
|
|
|
|
|
|
| |
arrays so that we can detect invalid iterator use.
PiperOrigin-RevId: 496455788
Change-Id: I83df92828098a3ef1181b4e454f3ac5d3ac7a2f2
|
|
|
|
|
|
|
|
|
|
| |
Chromium builds Abseil with this warning.
Tests are still built with -Wno-sign-conversion due to many pre-existing
warnings.
PiperOrigin-RevId: 496438882
Change-Id: Ic47c893e5289d3d45cd5717ba02d5499a3b346fa
|
|
|
|
|
|
|
|
|
|
| |
Chromium builds Abseil with this warning.
Tests are still built with -Wno-shorten-64-to-32 due to many pre-existing
warnings.
PiperOrigin-RevId: 496421954
Change-Id: I796ca444967474df0bdeb3fe82f85512dab11d8f
|
|
|
|
|
| |
PiperOrigin-RevId: 496397075
Change-Id: Ib44467cf5704b9147c7fd197e8343a666fada1c3
|
|
|
|
|
|
|
|
| |
name old cpu/op new cpu/op delta
BM_Group_CountLeadingEmptyOrDeleted 0.98ns ± 0% 0.78ns ± 0% -20.51% (p=0.000 n=10+10)
PiperOrigin-RevId: 496397005
Change-Id: I1c6b325b14566da194f21d3387b6f4d838bf0b34
|
|
|
|
|
| |
PiperOrigin-RevId: 496112752
Change-Id: I0a7a8854a642f63ddd3ba67b9268bbb0803118e9
|