| // Copyright (c) 2019 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "quic/core/qpack/qpack_index_conversions.h" | |
| #include <limits> | |
| #include "quic/platform/api/quic_logging.h" | |
| namespace quic { | |
| uint64_t QpackAbsoluteIndexToEncoderStreamRelativeIndex( | |
| uint64_t absolute_index, | |
| uint64_t inserted_entry_count) { | |
| DCHECK_LT(absolute_index, inserted_entry_count); | |
| return inserted_entry_count - absolute_index - 1; | |
| } | |
| uint64_t QpackAbsoluteIndexToRequestStreamRelativeIndex(uint64_t absolute_index, | |
| uint64_t base) { | |
| DCHECK_LT(absolute_index, base); | |
| return base - absolute_index - 1; | |
| } | |
| bool QpackEncoderStreamRelativeIndexToAbsoluteIndex( | |
| uint64_t relative_index, | |
| uint64_t inserted_entry_count, | |
| uint64_t* absolute_index) { | |
| if (relative_index >= inserted_entry_count) { | |
| return false; | |
| } | |
| *absolute_index = inserted_entry_count - relative_index - 1; | |
| return true; | |
| } | |
| bool QpackRequestStreamRelativeIndexToAbsoluteIndex(uint64_t relative_index, | |
| uint64_t base, | |
| uint64_t* absolute_index) { | |
| if (relative_index >= base) { | |
| return false; | |
| } | |
| *absolute_index = base - relative_index - 1; | |
| return true; | |
| } | |
| bool QpackPostBaseIndexToAbsoluteIndex(uint64_t post_base_index, | |
| uint64_t base, | |
| uint64_t* absolute_index) { | |
| if (post_base_index >= std::numeric_limits<uint64_t>::max() - base) { | |
| return false; | |
| } | |
| *absolute_index = base + post_base_index; | |
| return true; | |
| } | |
| } // namespace quic |