OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/crypto/strike_register.h" | 5 #include "net/quic/crypto/strike_register.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 | 10 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 void SetOtherBits(uint8 otherbits) { | 59 void SetOtherBits(uint8 otherbits) { |
60 data_[1] = (data_[1] & 0xffffff00) | otherbits; | 60 data_[1] = (data_[1] & 0xffffff00) | otherbits; |
61 } | 61 } |
62 | 62 |
63 void SetNextPtr(uint32 next) { data_[0] = next; } | 63 void SetNextPtr(uint32 next) { data_[0] = next; } |
64 | 64 |
65 uint32 next() const { return data_[0]; } | 65 uint32 next() const { return data_[0]; } |
66 | 66 |
67 uint32 child(unsigned n) const { return data_[n] >> 8; } | 67 uint32 child(unsigned n) const { return data_[n] >> 8; } |
68 | 68 |
69 uint8 critbyte() const { return data_[0]; } | 69 uint8 critbyte() const { return static_cast<uint8>(data_[0]); } |
70 | 70 |
71 uint8 otherbits() const { return data_[1]; } | 71 uint8 otherbits() const { return static_cast<uint8>(data_[1]); } |
72 | 72 |
73 // These bytes are organised thus: | 73 // These bytes are organised thus: |
74 // <24 bits> left child | 74 // <24 bits> left child |
75 // <8 bits> crit-byte | 75 // <8 bits> crit-byte |
76 // <24 bits> right child | 76 // <24 bits> right child |
77 // <8 bits> other-bits | 77 // <8 bits> other-bits |
78 uint32 data_[2]; | 78 uint32 data_[2]; |
79 }; | 79 }; |
80 | 80 |
81 // kCreationTimeFromInternalEpoch contains the number of seconds between the | 81 // kCreationTimeFromInternalEpoch contains the number of seconds between the |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 // If we just evicted the best match, then we have to try and match again. | 187 // If we just evicted the best match, then we have to try and match again. |
188 // We know that we didn't just empty the tree because we require that | 188 // We know that we didn't just empty the tree because we require that |
189 // max_entries_ >= 2. Also, we know that it doesn't match because, if it | 189 // max_entries_ >= 2. Also, we know that it doesn't match because, if it |
190 // did, it would have been returned previously. | 190 // did, it would have been returned previously. |
191 if (external_node_index == best_match_index) { | 191 if (external_node_index == best_match_index) { |
192 best_match_index = BestMatch(value); | 192 best_match_index = BestMatch(value); |
193 best_match = external_node(best_match_index); | 193 best_match = external_node(best_match_index); |
194 } | 194 } |
195 | 195 |
196 // Now we need to find the first bit where we differ from |best_match|. | 196 // Now we need to find the first bit where we differ from |best_match|. |
197 unsigned differing_byte; | 197 uint8 differing_byte; |
198 uint8 new_other_bits; | 198 uint8 new_other_bits; |
199 for (differing_byte = 0; differing_byte < sizeof(value); differing_byte++) { | 199 for (differing_byte = 0; differing_byte < arraysize(value); |
| 200 differing_byte++) { |
200 new_other_bits = value[differing_byte] ^ best_match[differing_byte]; | 201 new_other_bits = value[differing_byte] ^ best_match[differing_byte]; |
201 if (new_other_bits) { | 202 if (new_other_bits) { |
202 break; | 203 break; |
203 } | 204 } |
204 } | 205 } |
205 | 206 |
206 // Once we have the XOR the of first differing byte in new_other_bits we need | 207 // Once we have the XOR the of first differing byte in new_other_bits we need |
207 // to find the most significant differing bit. We could do this with a simple | 208 // to find the most significant differing bit. We could do this with a simple |
208 // for loop, testing bits 7..0. Instead we fold the bits so that we end up | 209 // for loop, testing bits 7..0. Instead we fold the bits so that we end up |
209 // with a byte where all the bits below the most significant one, are set. | 210 // with a byte where all the bits below the most significant one, are set. |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 CHECK_EQ(free_internal_nodes.count(inter), 0u); | 512 CHECK_EQ(free_internal_nodes.count(inter), 0u); |
512 CHECK_EQ(used_internal_nodes->count(inter), 0u); | 513 CHECK_EQ(used_internal_nodes->count(inter), 0u); |
513 used_internal_nodes->insert(inter); | 514 used_internal_nodes->insert(inter); |
514 ValidateTree(inter, bit, bits, free_internal_nodes, free_external_nodes, | 515 ValidateTree(inter, bit, bits, free_internal_nodes, free_external_nodes, |
515 used_internal_nodes, used_external_nodes); | 516 used_internal_nodes, used_external_nodes); |
516 } | 517 } |
517 } | 518 } |
518 } | 519 } |
519 | 520 |
520 } // namespace net | 521 } // namespace net |
OLD | NEW |