xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_index_conversions.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/quic/core/qpack/qpack_index_conversions.h"
6 
7 #include <limits>
8 
9 #include "quiche/quic/platform/api/quic_logging.h"
10 
11 namespace quic {
12 
QpackAbsoluteIndexToEncoderStreamRelativeIndex(uint64_t absolute_index,uint64_t inserted_entry_count)13 uint64_t QpackAbsoluteIndexToEncoderStreamRelativeIndex(
14     uint64_t absolute_index, uint64_t inserted_entry_count) {
15   QUICHE_DCHECK_LT(absolute_index, inserted_entry_count);
16 
17   return inserted_entry_count - absolute_index - 1;
18 }
19 
QpackAbsoluteIndexToRequestStreamRelativeIndex(uint64_t absolute_index,uint64_t base)20 uint64_t QpackAbsoluteIndexToRequestStreamRelativeIndex(uint64_t absolute_index,
21                                                         uint64_t base) {
22   QUICHE_DCHECK_LT(absolute_index, base);
23 
24   return base - absolute_index - 1;
25 }
26 
QpackEncoderStreamRelativeIndexToAbsoluteIndex(uint64_t relative_index,uint64_t inserted_entry_count,uint64_t * absolute_index)27 bool QpackEncoderStreamRelativeIndexToAbsoluteIndex(
28     uint64_t relative_index, uint64_t inserted_entry_count,
29     uint64_t* absolute_index) {
30   if (relative_index >= inserted_entry_count) {
31     return false;
32   }
33 
34   *absolute_index = inserted_entry_count - relative_index - 1;
35   return true;
36 }
37 
QpackRequestStreamRelativeIndexToAbsoluteIndex(uint64_t relative_index,uint64_t base,uint64_t * absolute_index)38 bool QpackRequestStreamRelativeIndexToAbsoluteIndex(uint64_t relative_index,
39                                                     uint64_t base,
40                                                     uint64_t* absolute_index) {
41   if (relative_index >= base) {
42     return false;
43   }
44 
45   *absolute_index = base - relative_index - 1;
46   return true;
47 }
48 
QpackPostBaseIndexToAbsoluteIndex(uint64_t post_base_index,uint64_t base,uint64_t * absolute_index)49 bool QpackPostBaseIndexToAbsoluteIndex(uint64_t post_base_index, uint64_t base,
50                                        uint64_t* absolute_index) {
51   if (post_base_index >= std::numeric_limits<uint64_t>::max() - base) {
52     return false;
53   }
54 
55   *absolute_index = base + post_base_index;
56   return true;
57 }
58 
59 }  // namespace quic
60