blob: c38668fa51a8ecb91e9a6625062fa7cfc0be3f32 [file] [log] [blame]
// 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