Add a convenient contstructor to QuicConnectionId that accepts a Span. QUIC-LB has many tests that write specific connection IDs, and a constructor that accepts array literals is way less cumbersome.
PiperOrigin-RevId: 432541846
diff --git a/quic/core/quic_connection_id.cc b/quic/core/quic_connection_id.cc
index a8cb4c0..19a35eb 100644
--- a/quic/core/quic_connection_id.cc
+++ b/quic/core/quic_connection_id.cc
@@ -71,6 +71,10 @@
memcpy(data_long_, data, length_);
}
+QuicConnectionId::QuicConnectionId(const absl::Span<const uint8_t>& data)
+ : QuicConnectionId(reinterpret_cast<const char*>(data.data()),
+ data.length()) {}
+
QuicConnectionId::~QuicConnectionId() {
if (length_ > sizeof(data_short_)) {
free(data_long_);
@@ -101,9 +105,7 @@
return data_long_;
}
-uint8_t QuicConnectionId::length() const {
- return length_;
-}
+uint8_t QuicConnectionId::length() const { return length_; }
void QuicConnectionId::set_length(uint8_t length) {
char temporary_data[sizeof(data_short_)];
@@ -131,9 +133,7 @@
length_ = length;
}
-bool QuicConnectionId::IsEmpty() const {
- return length_ == 0;
-}
+bool QuicConnectionId::IsEmpty() const { return length_ == 0; }
size_t QuicConnectionId::Hash() const {
static const QuicConnectionIdHasher hasher = QuicConnectionIdHasher();
@@ -170,9 +170,7 @@
return memcmp(data(), v.data(), length_) < 0;
}
-QuicConnectionId EmptyQuicConnectionId() {
- return QuicConnectionId();
-}
+QuicConnectionId EmptyQuicConnectionId() { return QuicConnectionId(); }
static_assert(kQuicDefaultConnectionIdLength == sizeof(uint64_t),
"kQuicDefaultConnectionIdLength changed");
diff --git a/quic/core/quic_connection_id.h b/quic/core/quic_connection_id.h
index a0669d7..4b39ba2 100644
--- a/quic/core/quic_connection_id.h
+++ b/quic/core/quic_connection_id.h
@@ -8,6 +8,7 @@
#include <string>
#include <vector>
+#include "absl/types/span.h"
#include "quic/platform/api/quic_export.h"
namespace quic {
@@ -47,6 +48,7 @@
// Creates a connection ID from network order bytes.
QuicConnectionId(const char* data, uint8_t length);
+ QuicConnectionId(const absl::Span<const uint8_t>& data);
// Creates a connection ID from another connection ID.
QuicConnectionId(const QuicConnectionId& other);
@@ -89,8 +91,7 @@
// operator<< allows easily logging connection IDs.
friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(
- std::ostream& os,
- const QuicConnectionId& v);
+ std::ostream& os, const QuicConnectionId& v);
bool operator==(const QuicConnectionId& v) const;
bool operator!=(const QuicConnectionId& v) const;
diff --git a/quic/core/quic_connection_id_test.cc b/quic/core/quic_connection_id_test.cc
index 3effb34..3f944e3 100644
--- a/quic/core/quic_connection_id_test.cc
+++ b/quic/core/quic_connection_id_test.cc
@@ -60,6 +60,33 @@
EXPECT_EQ(kNewLength, connection_id2.length());
}
+TEST_F(QuicConnectionIdTest, SpanData) {
+ QuicConnectionId connection_id = QuicConnectionId({0x01, 0x02, 0x03});
+ EXPECT_EQ(connection_id.length(), 3);
+ QuicConnectionId empty_connection_id =
+ QuicConnectionId(absl::Span<uint8_t>());
+ EXPECT_EQ(empty_connection_id.length(), 0);
+ QuicConnectionId connection_id2 = QuicConnectionId({
+ 0x01,
+ 0x02,
+ 0x03,
+ 0x04,
+ 0x05,
+ 0x06,
+ 0x07,
+ 0x08,
+ 0x09,
+ 0x0a,
+ 0x0b,
+ 0x0c,
+ 0x0d,
+ 0x0e,
+ 0x0f,
+ 0x10,
+ });
+ EXPECT_EQ(connection_id2.length(), 16);
+}
+
TEST_F(QuicConnectionIdTest, DoubleConvert) {
QuicConnectionId connection_id64_1 = test::TestConnectionId(1);
QuicConnectionId connection_id64_2 = test::TestConnectionId(42);