Replace absl::optional with std::optional in QUICHE.
Chrome has switched to those two types being the same, so we don't have any reason to use the Abseil version anymore.
PiperOrigin-RevId: 580345251
diff --git a/quiche/balsa/balsa_headers.h b/quiche/balsa/balsa_headers.h
index 3e1823b..4e6e613 100644
--- a/quiche/balsa/balsa_headers.h
+++ b/quiche/balsa/balsa_headers.h
@@ -12,6 +12,7 @@
#include <functional>
#include <iterator>
#include <memory>
+#include <optional>
#include <ostream>
#include <string>
#include <utility>
@@ -23,7 +24,6 @@
#include "absl/strings/ascii.h"
#include "absl/strings/match.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/balsa/balsa_enums.h"
#include "quiche/balsa/header_api.h"
#include "quiche/balsa/standard_header_map.h"
@@ -1265,8 +1265,7 @@
const BalsaHeaders* headers_;
HeaderLines::size_type idx_;
- mutable absl::optional<std::pair<absl::string_view, absl::string_view>>
- value_;
+ mutable std::optional<std::pair<absl::string_view, absl::string_view>> value_;
};
// A const iterator for all the header lines.
diff --git a/quiche/common/btree_scheduler.h b/quiche/common/btree_scheduler.h
index fd07d36..0f160c8 100644
--- a/quiche/common/btree_scheduler.h
+++ b/quiche/common/btree_scheduler.h
@@ -6,12 +6,12 @@
#define QUICHE_COMMON_BTREE_SCHEDULER_H_
#include <limits>
+#include <optional>
#include "absl/container/btree_map.h"
#include "absl/container/node_hash_map.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_bug_tracker.h"
#include "quiche/common/platform/api/quiche_export.h"
@@ -46,18 +46,18 @@
// Counts the number of scheduled entries in the range [min, max]. If either
// min or max is omitted, negative or positive infinity is assumed.
- size_t NumScheduledInPriorityRange(absl::optional<Priority> min,
- absl::optional<Priority> max) const;
+ size_t NumScheduledInPriorityRange(std::optional<Priority> min,
+ std::optional<Priority> max) const;
// Returns true if there is a stream that would go before `id` in the
// schedule.
absl::StatusOr<bool> ShouldYield(Id id) const;
// Returns the priority for `id`, or nullopt if stream is not registered.
- absl::optional<Priority> GetPriorityFor(Id id) const {
+ std::optional<Priority> GetPriorityFor(Id id) const {
auto it = streams_.find(id);
if (it == streams_.end()) {
- return absl::nullopt;
+ return std::nullopt;
}
return it->second.priority;
}
@@ -85,7 +85,7 @@
Priority priority;
// If present, the sequence number with which the stream is currently
// scheduled. If absent, indicates that the stream is not scheduled.
- absl::optional<int> current_sequence_number;
+ std::optional<int> current_sequence_number;
bool scheduled() const { return current_sequence_number.has_value(); }
};
@@ -140,7 +140,7 @@
template <typename Id, typename Priority>
size_t BTreeScheduler<Id, Priority>::NumScheduledInPriorityRange(
- absl::optional<Priority> min, absl::optional<Priority> max) const {
+ std::optional<Priority> min, std::optional<Priority> max) const {
if (min.has_value() && max.has_value()) {
QUICHE_DCHECK(*min <= *max);
}
@@ -210,7 +210,7 @@
}
StreamEntry& stream = it->second;
- absl::optional<int> sequence_number;
+ std::optional<int> sequence_number;
if (stream.scheduled()) {
absl::StatusOr<FullScheduleEntry> old_entry = DescheduleStream(stream);
if (old_entry.ok()) {
@@ -256,7 +256,7 @@
}
auto schedule_it = schedule_.begin();
QUICHE_DCHECK(schedule_it->second->second.scheduled());
- schedule_it->second->second.current_sequence_number = absl::nullopt;
+ schedule_it->second->second.current_sequence_number = std::nullopt;
Id result = StreamId(*schedule_it);
schedule_.erase(schedule_it);
diff --git a/quiche/common/btree_scheduler_test.cc b/quiche/common/btree_scheduler_test.cc
index d3a806c..c26e2d0 100644
--- a/quiche/common/btree_scheduler_test.cc
+++ b/quiche/common/btree_scheduler_test.cc
@@ -4,9 +4,10 @@
#include "quiche/common/btree_scheduler.h"
+#include <optional>
+
#include "absl/status/status.h"
#include "absl/status/statusor.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/common/platform/api/quiche_test.h"
#include "quiche/common/test_tools/quiche_test_utils.h"
@@ -49,7 +50,7 @@
EXPECT_THAT(scheduler.GetPriorityFor(1), Optional(100));
EXPECT_THAT(scheduler.GetPriorityFor(3), Optional(102));
- EXPECT_EQ(scheduler.GetPriorityFor(5), absl::nullopt);
+ EXPECT_EQ(scheduler.GetPriorityFor(5), std::nullopt);
EXPECT_EQ(scheduler.NumScheduled(), 0u);
EXPECT_FALSE(scheduler.HasScheduled());
@@ -113,7 +114,7 @@
QUICHE_EXPECT_OK(scheduler.Register(9, 64));
EXPECT_EQ(scheduler.NumScheduled(), 0u);
- EXPECT_EQ(scheduler.NumScheduledInPriorityRange(absl::nullopt, absl::nullopt),
+ EXPECT_EQ(scheduler.NumScheduledInPriorityRange(std::nullopt, std::nullopt),
0u);
EXPECT_EQ(scheduler.NumScheduledInPriorityRange(-1, 1), 0u);
@@ -122,11 +123,11 @@
}
EXPECT_EQ(scheduler.NumScheduled(), 9u);
- EXPECT_EQ(scheduler.NumScheduledInPriorityRange(absl::nullopt, absl::nullopt),
+ EXPECT_EQ(scheduler.NumScheduledInPriorityRange(std::nullopt, std::nullopt),
9u);
EXPECT_EQ(scheduler.NumScheduledInPriorityRange(0, 0), 3u);
- EXPECT_EQ(scheduler.NumScheduledInPriorityRange(absl::nullopt, -1), 2u);
- EXPECT_EQ(scheduler.NumScheduledInPriorityRange(1, absl::nullopt), 4u);
+ EXPECT_EQ(scheduler.NumScheduledInPriorityRange(std::nullopt, -1), 2u);
+ EXPECT_EQ(scheduler.NumScheduledInPriorityRange(1, std::nullopt), 4u);
}
TEST(BTreeSchedulerTest, Registration) {
diff --git a/quiche/common/capsule.h b/quiche/common/capsule.h
index 7220ee4..b5e1831 100644
--- a/quiche/common/capsule.h
+++ b/quiche/common/capsule.h
@@ -6,12 +6,12 @@
#define QUICHE_COMMON_CAPSULE_H_
#include <cstdint>
+#include <optional>
#include <string>
#include <vector>
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/variant.h"
#include "quiche/common/platform/api/quiche_export.h"
#include "quiche/common/platform/api/quiche_logging.h"
diff --git a/quiche/common/platform/api/quiche_file_utils.cc b/quiche/common/platform/api/quiche_file_utils.cc
index 6453ea2..d039f28 100644
--- a/quiche/common/platform/api/quiche_file_utils.cc
+++ b/quiche/common/platform/api/quiche_file_utils.cc
@@ -1,5 +1,7 @@
#include "quiche/common/platform/api/quiche_file_utils.h"
+#include <optional>
+
#include "quiche_platform_impl/quiche_file_utils_impl.h"
namespace quiche {
@@ -8,7 +10,7 @@
return JoinPathImpl(a, b);
}
-absl::optional<std::string> ReadFileContents(absl::string_view file) {
+std::optional<std::string> ReadFileContents(absl::string_view file) {
return ReadFileContentsImpl(file);
}
diff --git a/quiche/common/platform/api/quiche_file_utils.h b/quiche/common/platform/api/quiche_file_utils.h
index 47723d1..be7cd9d 100644
--- a/quiche/common/platform/api/quiche_file_utils.h
+++ b/quiche/common/platform/api/quiche_file_utils.h
@@ -9,11 +9,11 @@
#ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_FILE_UTILS_H_
#define QUICHE_COMMON_PLATFORM_API_QUICHE_FILE_UTILS_H_
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
namespace quiche {
@@ -22,7 +22,7 @@
std::string JoinPath(absl::string_view a, absl::string_view b);
// Reads the entire file into the memory.
-absl::optional<std::string> ReadFileContents(absl::string_view file);
+std::optional<std::string> ReadFileContents(absl::string_view file);
// Lists all files and directories in the directory specified by |path|. Returns
// true on success, false on failure.
diff --git a/quiche/common/platform/api/quiche_file_utils_test.cc b/quiche/common/platform/api/quiche_file_utils_test.cc
index 68387a4..3d7a7b8 100644
--- a/quiche/common/platform/api/quiche_file_utils_test.cc
+++ b/quiche/common/platform/api/quiche_file_utils_test.cc
@@ -1,11 +1,11 @@
#include "quiche/common/platform/api/quiche_file_utils.h"
+#include <optional>
#include <vector>
#include "absl/algorithm/container.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/strip.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_test.h"
namespace quiche {
@@ -18,7 +18,7 @@
TEST(QuicheFileUtilsTest, ReadFileContents) {
std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
"/platform/api/testdir/testfile");
- absl::optional<std::string> contents = ReadFileContents(path);
+ std::optional<std::string> contents = ReadFileContents(path);
ASSERT_TRUE(contents.has_value());
EXPECT_EQ(*contents, "This is a test file.");
}
@@ -27,7 +27,7 @@
std::string path =
absl::StrCat(QuicheGetCommonSourcePath(),
"/platform/api/testdir/file-that-does-not-exist");
- absl::optional<std::string> contents = ReadFileContents(path);
+ std::optional<std::string> contents = ReadFileContents(path);
EXPECT_FALSE(contents.has_value());
}
diff --git a/quiche/common/platform/api/quiche_time_utils.h b/quiche/common/platform/api/quiche_time_utils.h
index 60226d5..c5177ec 100644
--- a/quiche/common/platform/api/quiche_time_utils.h
+++ b/quiche/common/platform/api/quiche_time_utils.h
@@ -16,7 +16,7 @@
// instance, it will reject February 29 on non-leap years, or 25 hours in a day.
// As a notable exception, 60 seconds is accepted to deal with potential leap
// seconds. If the date predates Unix epoch, nullopt will be returned.
-inline absl::optional<int64_t> QuicheUtcDateTimeToUnixSeconds(
+inline std::optional<int64_t> QuicheUtcDateTimeToUnixSeconds(
int year, int month, int day, int hour, int minute, int second) {
return QuicheUtcDateTimeToUnixSecondsImpl(year, month, day, hour, minute,
second);
diff --git a/quiche/common/platform/api/quiche_time_utils_test.cc b/quiche/common/platform/api/quiche_time_utils_test.cc
index 5d09004..31f79ff 100644
--- a/quiche/common/platform/api/quiche_time_utils_test.cc
+++ b/quiche/common/platform/api/quiche_time_utils_test.cc
@@ -4,7 +4,8 @@
#include "quiche/common/platform/api/quiche_time_utils.h"
-#include "absl/types/optional.h"
+#include <optional>
+
#include "quiche/common/platform/api/quiche_test.h"
namespace quiche {
@@ -19,32 +20,25 @@
QuicheUtcDateTimeToUnixSeconds(2006, 7, 15, 12, 34, 56));
EXPECT_EQ(1591130001, QuicheUtcDateTimeToUnixSeconds(2020, 6, 2, 20, 33, 21));
- EXPECT_EQ(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1970, 2, 29, 0, 0, 1));
- EXPECT_NE(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1972, 2, 29, 0, 0, 1));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 2, 29, 0, 0, 1));
+ EXPECT_NE(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1972, 2, 29, 0, 0, 1));
}
TEST(QuicheTimeUtilsTest, Bounds) {
- EXPECT_EQ(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1970, 1, 32, 0, 0, 1));
- EXPECT_EQ(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1970, 4, 31, 0, 0, 1));
- EXPECT_EQ(absl::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 0, 0, 0, 1));
- EXPECT_EQ(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1970, 13, 1, 0, 0, 1));
- EXPECT_EQ(absl::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 0, 1, 0, 0, 1));
- EXPECT_EQ(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 24, 0, 0));
- EXPECT_EQ(absl::nullopt,
- QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 0, 60, 0));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 32, 0, 0, 1));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 4, 31, 0, 0, 1));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 0, 0, 0, 1));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 13, 1, 0, 0, 1));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 0, 1, 0, 0, 1));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 24, 0, 0));
+ EXPECT_EQ(std::nullopt, QuicheUtcDateTimeToUnixSeconds(1970, 1, 1, 0, 60, 0));
}
TEST(QuicheTimeUtilsTest, LeapSecond) {
EXPECT_EQ(QuicheUtcDateTimeToUnixSeconds(2015, 6, 30, 23, 59, 60),
QuicheUtcDateTimeToUnixSeconds(2015, 7, 1, 0, 0, 0));
EXPECT_EQ(QuicheUtcDateTimeToUnixSeconds(2015, 6, 30, 25, 59, 60),
- absl::nullopt);
+ std::nullopt);
}
} // namespace
diff --git a/quiche/common/platform/api/quiche_url_utils.h b/quiche/common/platform/api/quiche_url_utils.h
index 3590412..2aa7ceb 100644
--- a/quiche/common/platform/api/quiche_url_utils.h
+++ b/quiche/common/platform/api/quiche_url_utils.h
@@ -5,12 +5,12 @@
#ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_URL_UTILS_H_
#define QUICHE_COMMON_PLATFORM_API_QUICHE_URL_UTILS_H_
+#include <optional>
#include <string>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche_platform_impl/quiche_url_utils_impl.h"
@@ -29,8 +29,8 @@
}
// Decodes a URL-encoded string and converts it to ASCII. If the decoded input
-// contains non-ASCII characters, decoding fails and absl::nullopt is returned.
-inline absl::optional<std::string> AsciiUrlDecode(absl::string_view input) {
+// contains non-ASCII characters, decoding fails and std::nullopt is returned.
+inline std::optional<std::string> AsciiUrlDecode(absl::string_view input) {
return AsciiUrlDecodeImpl(input);
}
diff --git a/quiche/common/platform/api/quiche_url_utils_test.cc b/quiche/common/platform/api/quiche_url_utils_test.cc
index 33a30ec..7599777 100644
--- a/quiche/common/platform/api/quiche_url_utils_test.cc
+++ b/quiche/common/platform/api/quiche_url_utils_test.cc
@@ -4,12 +4,12 @@
#include "quiche/common/platform/api/quiche_url_utils.h"
+#include <optional>
#include <set>
#include <string>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_test.h"
namespace quiche {
@@ -54,8 +54,8 @@
}
void ValidateUrlDecode(const std::string& input,
- const absl::optional<std::string>& expected_output) {
- absl::optional<std::string> decode_result = AsciiUrlDecode(input);
+ const std::optional<std::string>& expected_output) {
+ std::optional<std::string> decode_result = AsciiUrlDecode(input);
if (!expected_output.has_value()) {
EXPECT_FALSE(decode_result.has_value());
return;
@@ -72,9 +72,7 @@
ValidateUrlDecode("%7Bfoobar%7D", "{foobar}");
}
-TEST(QuicheUrlUtilsTest, DecodeFail) {
- ValidateUrlDecode("%FF", absl::nullopt);
-}
+TEST(QuicheUrlUtilsTest, DecodeFail) { ValidateUrlDecode("%FF", std::nullopt); }
} // namespace
} // namespace quiche
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc b/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc
index 65965b2..f727425 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc
@@ -16,11 +16,11 @@
#include <fstream>
#include <ios>
#include <iostream>
+#include <optional>
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "absl/strings/strip.h"
-#include "absl/types/optional.h"
namespace quiche {
@@ -51,16 +51,16 @@
}
#endif // defined(_WIN32)
-absl::optional<std::string> ReadFileContentsImpl(absl::string_view file) {
+std::optional<std::string> ReadFileContentsImpl(absl::string_view file) {
std::ifstream input_file(std::string{file}, std::ios::binary);
if (!input_file || !input_file.is_open()) {
- return absl::nullopt;
+ return std::nullopt;
}
input_file.seekg(0, std::ios_base::end);
auto file_size = input_file.tellg();
if (!input_file) {
- return absl::nullopt;
+ return std::nullopt;
}
input_file.seekg(0, std::ios_base::beg);
@@ -68,7 +68,7 @@
output.resize(file_size);
input_file.read(&output[0], file_size);
if (!input_file) {
- return absl::nullopt;
+ return std::nullopt;
}
return output;
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h
index ad5ff1a..c083122 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h
@@ -5,17 +5,17 @@
#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FILE_UTILS_IMPL_H_
#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FILE_UTILS_IMPL_H_
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
namespace quiche {
std::string JoinPathImpl(absl::string_view a, absl::string_view b);
-absl::optional<std::string> ReadFileContentsImpl(absl::string_view file);
+std::optional<std::string> ReadFileContentsImpl(absl::string_view file);
bool EnumerateDirectoryImpl(absl::string_view path,
std::vector<std::string>& directories,
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h
index 7b5748c..6c4e96f 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h
@@ -1,10 +1,10 @@
#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
+#include <optional>
#include <string>
#include <thread> // NOLINT: only used outside of google3
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_export.h"
class QUICHE_NO_EXPORT QuicheThreadImpl {
@@ -20,7 +20,7 @@
void Join() { thread_->join(); }
private:
- absl::optional<std::thread> thread_;
+ std::optional<std::thread> thread_;
};
#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc b/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
index 71beb78..a350570 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
@@ -10,10 +10,10 @@
// Chrome converts broken out UTC times for certificates to unix times using
// the BoringSSL routines.
-absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year, int month,
- int day, int hour,
- int minute,
- int second) {
+std::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year, int month,
+ int day, int hour,
+ int minute,
+ int second) {
struct tm tmp_tm;
tmp_tm.tm_year = year - 1900;
tmp_tm.tm_mon = month - 1;
@@ -29,13 +29,13 @@
}
int64_t result;
if (!OPENSSL_tm_to_posix(&tmp_tm, &result)) {
- return absl::nullopt;
+ return std::nullopt;
}
// Our desired behaviour is to return the following second for a leap second
// assuming it is a valid time.
if (leap_second) {
if (!OPENSSL_posix_to_tm(result + 1, &tmp_tm)) {
- return absl::nullopt;
+ return std::nullopt;
}
result++;
}
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
index 24ef40f..5106e19 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
@@ -6,15 +6,14 @@
#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_
#include <cstdint>
-
-#include "absl/types/optional.h"
+#include <optional>
namespace quiche {
-absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year, int month,
- int day, int hour,
- int minute,
- int second);
+std::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year, int month,
+ int day, int hour,
+ int minute,
+ int second);
} // namespace quiche
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc b/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc
index d707145..686f631 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc
@@ -7,6 +7,7 @@
#include <cstddef>
#include <cstdint>
#include <limits>
+#include <optional>
#include <string>
#include "quiche_platform_impl/quiche_googleurl_impl.h"
@@ -15,7 +16,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/str_replace.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
namespace quiche {
@@ -57,7 +57,7 @@
return true;
}
-absl::optional<std::string> AsciiUrlDecodeImpl(absl::string_view input) {
+std::optional<std::string> AsciiUrlDecodeImpl(absl::string_view input) {
std::string input_encoded = std::string(input);
url::RawCanonOutputW<1024> canon_output;
url::DecodeURLEscapeSequences(input_encoded.c_str(), input_encoded.length(),
@@ -68,7 +68,7 @@
for (int i = 0; i < canon_output.length(); i++) {
const uint16_t c = reinterpret_cast<uint16_t*>(canon_output.data())[i];
if (c > std::numeric_limits<signed char>::max()) {
- return absl::nullopt;
+ return std::nullopt;
}
output += static_cast<char>(c);
}
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h
index 45d87e0..7f30056 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h
@@ -5,12 +5,12 @@
#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_URL_UTILS_IMPL_H_
#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_URL_UTILS_IMPL_H_
+#include <optional>
#include <string>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_export.h"
namespace quiche {
@@ -26,8 +26,8 @@
absl::flat_hash_set<std::string>* vars_found = nullptr);
// Decodes a URL-encoded string and converts it to ASCII. If the decoded input
-// contains non-ASCII characters, decoding fails and absl::nullopt is returned.
-QUICHE_EXPORT absl::optional<std::string> AsciiUrlDecodeImpl(
+// contains non-ASCII characters, decoding fails and std::nullopt is returned.
+QUICHE_EXPORT std::optional<std::string> AsciiUrlDecodeImpl(
absl::string_view input);
} // namespace quiche
diff --git a/quiche/common/quiche_text_utils.cc b/quiche/common/quiche_text_utils.cc
index 5b4ee8e..23b03e8 100644
--- a/quiche/common/quiche_text_utils.cc
+++ b/quiche/common/quiche_text_utils.cc
@@ -29,11 +29,11 @@
}
// static
-absl::optional<std::string> QuicheTextUtils::Base64Decode(
+std::optional<std::string> QuicheTextUtils::Base64Decode(
absl::string_view input) {
std::string output;
if (!absl::Base64Unescape(input, &output)) {
- return absl::nullopt;
+ return std::nullopt;
}
return output;
}
diff --git a/quiche/common/quiche_text_utils.h b/quiche/common/quiche_text_utils.h
index b433718..8f7d7f0 100644
--- a/quiche/common/quiche_text_utils.h
+++ b/quiche/common/quiche_text_utils.h
@@ -5,6 +5,7 @@
#ifndef QUICHE_COMMON_QUICHE_TEXT_UTILS_H_
#define QUICHE_COMMON_QUICHE_TEXT_UTILS_H_
+#include <optional>
#include <string>
#include "absl/hash/hash.h"
@@ -12,7 +13,6 @@
#include "absl/strings/escaping.h"
#include "absl/strings/match.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_export.h"
namespace quiche {
@@ -50,7 +50,7 @@
// Decodes a base64-encoded |input|. Returns nullopt when the input is
// invalid.
- static absl::optional<std::string> Base64Decode(absl::string_view input);
+ static std::optional<std::string> Base64Decode(absl::string_view input);
// Returns a string containing hex and ASCII representations of |binary|,
// side-by-side in the style of hexdump. Non-printable characters will be
diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc
index 58aec62..0762d0d 100644
--- a/quiche/common/structured_headers.cc
+++ b/quiche/common/structured_headers.cc
@@ -5,6 +5,7 @@
#include "quiche/common/structured_headers.h"
#include <cmath>
+#include <optional>
#include <string>
#include <utility>
@@ -96,14 +97,14 @@
}
// Parses a List of Lists ([SH09] 4.2.4).
- absl::optional<ListOfLists> ReadListOfLists() {
+ std::optional<ListOfLists> ReadListOfLists() {
QUICHE_CHECK_EQ(version_, kDraft09);
ListOfLists result;
while (true) {
std::vector<Item> inner_list;
while (true) {
- absl::optional<Item> item(ReadBareItem());
- if (!item) return absl::nullopt;
+ std::optional<Item> item(ReadBareItem());
+ if (!item) return std::nullopt;
inner_list.push_back(std::move(*item));
SkipWhitespaces();
if (!ConsumeChar(';')) break;
@@ -118,37 +119,37 @@
}
// Parses a List ([RFC8941] 4.2.1).
- absl::optional<List> ReadList() {
+ std::optional<List> ReadList() {
QUICHE_CHECK_EQ(version_, kFinal);
List members;
while (!input_.empty()) {
- absl::optional<ParameterizedMember> member(ReadItemOrInnerList());
- if (!member) return absl::nullopt;
+ std::optional<ParameterizedMember> member(ReadItemOrInnerList());
+ if (!member) return std::nullopt;
members.push_back(std::move(*member));
SkipOWS();
if (input_.empty()) break;
- if (!ConsumeChar(',')) return absl::nullopt;
+ if (!ConsumeChar(',')) return std::nullopt;
SkipOWS();
- if (input_.empty()) return absl::nullopt;
+ if (input_.empty()) return std::nullopt;
}
return members;
}
// Parses an Item ([RFC8941] 4.2.3).
- absl::optional<ParameterizedItem> ReadItem() {
- absl::optional<Item> item = ReadBareItem();
- if (!item) return absl::nullopt;
- absl::optional<Parameters> parameters = ReadParameters();
- if (!parameters) return absl::nullopt;
+ std::optional<ParameterizedItem> ReadItem() {
+ std::optional<Item> item = ReadBareItem();
+ if (!item) return std::nullopt;
+ std::optional<Parameters> parameters = ReadParameters();
+ if (!parameters) return std::nullopt;
return ParameterizedItem(std::move(*item), std::move(*parameters));
}
// Parses a bare Item ([RFC8941] 4.2.3.1, though this is also the algorithm
// for parsing an Item from [SH09] 4.2.7).
- absl::optional<Item> ReadBareItem() {
+ std::optional<Item> ReadBareItem() {
if (input_.empty()) {
QUICHE_DVLOG(1) << "ReadBareItem: unexpected EOF";
- return absl::nullopt;
+ return std::nullopt;
}
switch (input_.front()) {
case '"':
@@ -158,52 +159,52 @@
return ReadToken();
case ':':
if (version_ == kFinal) return ReadByteSequence();
- return absl::nullopt;
+ return std::nullopt;
case '?':
return ReadBoolean();
default:
if (input_.front() == '-' || absl::ascii_isdigit(input_.front()))
return ReadNumber();
if (absl::ascii_isalpha(input_.front())) return ReadToken();
- return absl::nullopt;
+ return std::nullopt;
}
}
// Parses a Dictionary ([RFC8941] 4.2.2).
- absl::optional<Dictionary> ReadDictionary() {
+ std::optional<Dictionary> ReadDictionary() {
QUICHE_CHECK_EQ(version_, kFinal);
Dictionary members;
while (!input_.empty()) {
- absl::optional<std::string> key(ReadKey());
- if (!key) return absl::nullopt;
- absl::optional<ParameterizedMember> member;
+ std::optional<std::string> key(ReadKey());
+ if (!key) return std::nullopt;
+ std::optional<ParameterizedMember> member;
if (ConsumeChar('=')) {
member = ReadItemOrInnerList();
- if (!member) return absl::nullopt;
+ if (!member) return std::nullopt;
} else {
- absl::optional<Parameters> parameters;
+ std::optional<Parameters> parameters;
parameters = ReadParameters();
- if (!parameters) return absl::nullopt;
+ if (!parameters) return std::nullopt;
member = ParameterizedMember{Item(true), std::move(*parameters)};
}
members[*key] = std::move(*member);
SkipOWS();
if (input_.empty()) break;
- if (!ConsumeChar(',')) return absl::nullopt;
+ if (!ConsumeChar(',')) return std::nullopt;
SkipOWS();
- if (input_.empty()) return absl::nullopt;
+ if (input_.empty()) return std::nullopt;
}
return members;
}
// Parses a Parameterised List ([SH09] 4.2.5).
- absl::optional<ParameterisedList> ReadParameterisedList() {
+ std::optional<ParameterisedList> ReadParameterisedList() {
QUICHE_CHECK_EQ(version_, kDraft09);
ParameterisedList items;
while (true) {
- absl::optional<ParameterisedIdentifier> item =
+ std::optional<ParameterisedIdentifier> item =
ReadParameterisedIdentifier();
- if (!item) return absl::nullopt;
+ if (!item) return std::nullopt;
items.push_back(std::move(*item));
SkipWhitespaces();
if (!ConsumeChar(',')) return items;
@@ -213,10 +214,10 @@
private:
// Parses a Parameterised Identifier ([SH09] 4.2.6).
- absl::optional<ParameterisedIdentifier> ReadParameterisedIdentifier() {
+ std::optional<ParameterisedIdentifier> ReadParameterisedIdentifier() {
QUICHE_CHECK_EQ(version_, kDraft09);
- absl::optional<Item> primary_identifier = ReadToken();
- if (!primary_identifier) return absl::nullopt;
+ std::optional<Item> primary_identifier = ReadToken();
+ if (!primary_identifier) return std::nullopt;
ParameterisedIdentifier::Parameters parameters;
@@ -224,19 +225,19 @@
while (ConsumeChar(';')) {
SkipWhitespaces();
- absl::optional<std::string> name = ReadKey();
- if (!name) return absl::nullopt;
+ std::optional<std::string> name = ReadKey();
+ if (!name) return std::nullopt;
Item value;
if (ConsumeChar('=')) {
auto item = ReadBareItem();
- if (!item) return absl::nullopt;
+ if (!item) return std::nullopt;
value = std::move(*item);
}
if (!parameters.emplace(*name, value).second) {
QUICHE_DVLOG(1) << "ReadParameterisedIdentifier: duplicated parameter: "
<< *name;
- return absl::nullopt;
+ return std::nullopt;
}
SkipWhitespaces();
}
@@ -245,7 +246,7 @@
}
// Parses an Item or Inner List ([RFC8941] 4.2.1.1).
- absl::optional<ParameterizedMember> ReadItemOrInnerList() {
+ std::optional<ParameterizedMember> ReadItemOrInnerList() {
QUICHE_CHECK_EQ(version_, kFinal);
std::vector<Item> member;
bool member_is_inner_list = (!input_.empty() && input_.front() == '(');
@@ -253,28 +254,28 @@
return ReadInnerList();
} else {
auto item = ReadItem();
- if (!item) return absl::nullopt;
+ if (!item) return std::nullopt;
return ParameterizedMember(std::move(item->item),
std::move(item->params));
}
}
// Parses Parameters ([RFC8941] 4.2.3.2)
- absl::optional<Parameters> ReadParameters() {
+ std::optional<Parameters> ReadParameters() {
Parameters parameters;
absl::flat_hash_set<std::string> keys;
while (ConsumeChar(';')) {
SkipWhitespaces();
- absl::optional<std::string> name = ReadKey();
- if (!name) return absl::nullopt;
+ std::optional<std::string> name = ReadKey();
+ if (!name) return std::nullopt;
bool is_duplicate_key = !keys.insert(*name).second;
Item value{true};
if (ConsumeChar('=')) {
auto item = ReadBareItem();
- if (!item) return absl::nullopt;
+ if (!item) return std::nullopt;
value = std::move(*item);
}
if (is_duplicate_key) {
@@ -292,41 +293,41 @@
}
// Parses an Inner List ([RFC8941] 4.2.1.2).
- absl::optional<ParameterizedMember> ReadInnerList() {
+ std::optional<ParameterizedMember> ReadInnerList() {
QUICHE_CHECK_EQ(version_, kFinal);
- if (!ConsumeChar('(')) return absl::nullopt;
+ if (!ConsumeChar('(')) return std::nullopt;
std::vector<ParameterizedItem> inner_list;
while (true) {
SkipWhitespaces();
if (ConsumeChar(')')) {
- absl::optional<Parameters> parameters;
+ std::optional<Parameters> parameters;
parameters = ReadParameters();
- if (!parameters) return absl::nullopt;
+ if (!parameters) return std::nullopt;
return ParameterizedMember(std::move(inner_list), true,
std::move(*parameters));
}
auto item = ReadItem();
- if (!item) return absl::nullopt;
+ if (!item) return std::nullopt;
inner_list.push_back(std::move(*item));
if (input_.empty() || (input_.front() != ' ' && input_.front() != ')'))
- return absl::nullopt;
+ return std::nullopt;
}
QUICHE_NOTREACHED();
- return absl::nullopt;
+ return std::nullopt;
}
// Parses a Key ([SH09] 4.2.2, [RFC8941] 4.2.3.3).
- absl::optional<std::string> ReadKey() {
+ std::optional<std::string> ReadKey() {
if (version_ == kDraft09) {
if (input_.empty() || !absl::ascii_islower(input_.front())) {
LogParseError("ReadKey", "lcalpha");
- return absl::nullopt;
+ return std::nullopt;
}
} else {
if (input_.empty() ||
(!absl::ascii_islower(input_.front()) && input_.front() != '*')) {
LogParseError("ReadKey", "lcalpha | *");
- return absl::nullopt;
+ return std::nullopt;
}
}
const char* allowed_chars =
@@ -339,11 +340,11 @@
}
// Parses a Token ([SH09] 4.2.10, [RFC8941] 4.2.6).
- absl::optional<Item> ReadToken() {
+ std::optional<Item> ReadToken() {
if (input_.empty() ||
!(absl::ascii_isalpha(input_.front()) || input_.front() == '*')) {
LogParseError("ReadToken", "ALPHA");
- return absl::nullopt;
+ return std::nullopt;
}
size_t len = input_.find_first_not_of(version_ == kDraft09 ? kTokenChars09
: kTokenChars);
@@ -354,7 +355,7 @@
}
// Parses a Number ([SH09] 4.2.8, [RFC8941] 4.2.4).
- absl::optional<Item> ReadNumber() {
+ std::optional<Item> ReadNumber() {
bool is_negative = ConsumeChar('-');
bool is_decimal = false;
size_t decimal_position = 0;
@@ -369,30 +370,30 @@
}
if (i == 0) {
LogParseError("ReadNumber", "DIGIT");
- return absl::nullopt;
+ return std::nullopt;
}
if (!is_decimal) {
// [RFC8941] restricts the range of integers further.
if (version_ == kFinal && i > 15) {
LogParseError("ReadNumber", "integer too long");
- return absl::nullopt;
+ return std::nullopt;
}
} else {
if (version_ != kFinal && i > 16) {
LogParseError("ReadNumber", "float too long");
- return absl::nullopt;
+ return std::nullopt;
}
if (version_ == kFinal && decimal_position > 12) {
LogParseError("ReadNumber", "decimal too long");
- return absl::nullopt;
+ return std::nullopt;
}
if (i - decimal_position > (version_ == kFinal ? 4 : 7)) {
LogParseError("ReadNumber", "too many digits after decimal");
- return absl::nullopt;
+ return std::nullopt;
}
if (i == decimal_position) {
LogParseError("ReadNumber", "no digits after decimal");
- return absl::nullopt;
+ return std::nullopt;
}
}
std::string output_number_string(input_.substr(0, i));
@@ -402,13 +403,13 @@
// Convert to a 64-bit double, and return if the conversion is
// successful.
double f;
- if (!absl::SimpleAtod(output_number_string, &f)) return absl::nullopt;
+ if (!absl::SimpleAtod(output_number_string, &f)) return std::nullopt;
return Item(is_negative ? -f : f);
} else {
// Convert to a 64-bit signed integer, and return if the conversion is
// successful.
int64_t n;
- if (!absl::SimpleAtoi(output_number_string, &n)) return absl::nullopt;
+ if (!absl::SimpleAtoi(output_number_string, &n)) return std::nullopt;
QUICHE_CHECK(version_ != kFinal ||
(n <= kMaxInteger && n >= kMinInteger));
return Item(is_negative ? -n : n);
@@ -416,35 +417,35 @@
}
// Parses a String ([SH09] 4.2.9, [RFC8941] 4.2.5).
- absl::optional<Item> ReadString() {
+ std::optional<Item> ReadString() {
std::string s;
if (!ConsumeChar('"')) {
LogParseError("ReadString", "'\"'");
- return absl::nullopt;
+ return std::nullopt;
}
while (!ConsumeChar('"')) {
size_t i = 0;
for (; i < input_.size(); ++i) {
if (!absl::ascii_isprint(input_[i])) {
QUICHE_DVLOG(1) << "ReadString: non printable-ASCII character";
- return absl::nullopt;
+ return std::nullopt;
}
if (input_[i] == '"' || input_[i] == '\\') break;
}
if (i == input_.size()) {
QUICHE_DVLOG(1) << "ReadString: missing closing '\"'";
- return absl::nullopt;
+ return std::nullopt;
}
s.append(std::string(input_.substr(0, i)));
input_.remove_prefix(i);
if (ConsumeChar('\\')) {
if (input_.empty()) {
QUICHE_DVLOG(1) << "ReadString: backslash at string end";
- return absl::nullopt;
+ return std::nullopt;
}
if (input_[0] != '"' && input_[0] != '\\') {
QUICHE_DVLOG(1) << "ReadString: invalid escape";
- return absl::nullopt;
+ return std::nullopt;
}
s.push_back(input_.front());
input_.remove_prefix(1);
@@ -454,16 +455,16 @@
}
// Parses a Byte Sequence ([SH09] 4.2.11, [RFC8941] 4.2.7).
- absl::optional<Item> ReadByteSequence() {
+ std::optional<Item> ReadByteSequence() {
char delimiter = (version_ == kDraft09 ? '*' : ':');
if (!ConsumeChar(delimiter)) {
LogParseError("ReadByteSequence", "delimiter");
- return absl::nullopt;
+ return std::nullopt;
}
size_t len = input_.find(delimiter);
if (len == absl::string_view::npos) {
QUICHE_DVLOG(1) << "ReadByteSequence: missing closing delimiter";
- return absl::nullopt;
+ return std::nullopt;
}
std::string base64(input_.substr(0, len));
// Append the necessary padding characters.
@@ -473,7 +474,7 @@
if (!absl::Base64Unescape(base64, &binary)) {
QUICHE_DVLOG(1) << "ReadByteSequence: failed to decode base64: "
<< base64;
- return absl::nullopt;
+ return std::nullopt;
}
input_.remove_prefix(len);
ConsumeChar(delimiter);
@@ -483,10 +484,10 @@
// Parses a Boolean ([RFC8941] 4.2.8).
// Note that this only parses ?0 and ?1 forms from SH version 10+, not the
// previous ?F and ?T, which were not needed by any consumers of SH version 9.
- absl::optional<Item> ReadBoolean() {
+ std::optional<Item> ReadBoolean() {
if (!ConsumeChar('?')) {
LogParseError("ReadBoolean", "'?'");
- return absl::nullopt;
+ return std::nullopt;
}
if (ConsumeChar('1')) {
return Item(true);
@@ -494,7 +495,7 @@
if (ConsumeChar('0')) {
return Item(false);
}
- return absl::nullopt;
+ return std::nullopt;
}
// There are several points in the specs where the handling of whitespace
@@ -839,71 +840,70 @@
return false;
}
-absl::optional<ParameterizedItem> ParseItem(absl::string_view str) {
+std::optional<ParameterizedItem> ParseItem(absl::string_view str) {
StructuredHeaderParser parser(str, StructuredHeaderParser::kFinal);
- absl::optional<ParameterizedItem> item = parser.ReadItem();
+ std::optional<ParameterizedItem> item = parser.ReadItem();
if (item && parser.FinishParsing()) return item;
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<Item> ParseBareItem(absl::string_view str) {
+std::optional<Item> ParseBareItem(absl::string_view str) {
StructuredHeaderParser parser(str, StructuredHeaderParser::kFinal);
- absl::optional<Item> item = parser.ReadBareItem();
+ std::optional<Item> item = parser.ReadBareItem();
if (item && parser.FinishParsing()) return item;
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<ParameterisedList> ParseParameterisedList(
- absl::string_view str) {
+std::optional<ParameterisedList> ParseParameterisedList(absl::string_view str) {
StructuredHeaderParser parser(str, StructuredHeaderParser::kDraft09);
- absl::optional<ParameterisedList> param_list = parser.ReadParameterisedList();
+ std::optional<ParameterisedList> param_list = parser.ReadParameterisedList();
if (param_list && parser.FinishParsing()) return param_list;
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<ListOfLists> ParseListOfLists(absl::string_view str) {
+std::optional<ListOfLists> ParseListOfLists(absl::string_view str) {
StructuredHeaderParser parser(str, StructuredHeaderParser::kDraft09);
- absl::optional<ListOfLists> list_of_lists = parser.ReadListOfLists();
+ std::optional<ListOfLists> list_of_lists = parser.ReadListOfLists();
if (list_of_lists && parser.FinishParsing()) return list_of_lists;
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<List> ParseList(absl::string_view str) {
+std::optional<List> ParseList(absl::string_view str) {
StructuredHeaderParser parser(str, StructuredHeaderParser::kFinal);
- absl::optional<List> list = parser.ReadList();
+ std::optional<List> list = parser.ReadList();
if (list && parser.FinishParsing()) return list;
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<Dictionary> ParseDictionary(absl::string_view str) {
+std::optional<Dictionary> ParseDictionary(absl::string_view str) {
StructuredHeaderParser parser(str, StructuredHeaderParser::kFinal);
- absl::optional<Dictionary> dictionary = parser.ReadDictionary();
+ std::optional<Dictionary> dictionary = parser.ReadDictionary();
if (dictionary && parser.FinishParsing()) return dictionary;
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<std::string> SerializeItem(const Item& value) {
+std::optional<std::string> SerializeItem(const Item& value) {
StructuredHeaderSerializer s;
if (s.WriteItem(ParameterizedItem(value, {}))) return s.Output();
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<std::string> SerializeItem(const ParameterizedItem& value) {
+std::optional<std::string> SerializeItem(const ParameterizedItem& value) {
StructuredHeaderSerializer s;
if (s.WriteItem(value)) return s.Output();
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<std::string> SerializeList(const List& value) {
+std::optional<std::string> SerializeList(const List& value) {
StructuredHeaderSerializer s;
if (s.WriteList(value)) return s.Output();
- return absl::nullopt;
+ return std::nullopt;
}
-absl::optional<std::string> SerializeDictionary(const Dictionary& value) {
+std::optional<std::string> SerializeDictionary(const Dictionary& value) {
StructuredHeaderSerializer s;
if (s.WriteDictionary(value)) return s.Output();
- return absl::nullopt;
+ return std::nullopt;
}
} // namespace structured_headers
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index 00bf795..af1b199 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -7,13 +7,13 @@
#include <algorithm>
#include <map>
+#include <optional>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/variant.h"
#include "quiche/common/platform/api/quiche_export.h"
#include "quiche/common/platform/api/quiche_logging.h"
@@ -276,13 +276,12 @@
// Returns the result of parsing the header value as an Item, if it can be
// parsed as one, or nullopt if it cannot. Note that this uses the Draft 15
// parsing rules, and so applies tighter range limits to integers.
-QUICHE_EXPORT absl::optional<ParameterizedItem> ParseItem(
- absl::string_view str);
+QUICHE_EXPORT std::optional<ParameterizedItem> ParseItem(absl::string_view str);
// Returns the result of parsing the header value as an Item with no parameters,
// or nullopt if it cannot. Note that this uses the Draft 15 parsing rules, and
// so applies tighter range limits to integers.
-QUICHE_EXPORT absl::optional<Item> ParseBareItem(absl::string_view str);
+QUICHE_EXPORT std::optional<Item> ParseBareItem(absl::string_view str);
// Returns the result of parsing the header value as a Parameterised List, if it
// can be parsed as one, or nullopt if it cannot. Note that parameter keys will
@@ -290,7 +289,7 @@
// as well as parameter values, will be returned as Items. This method uses the
// Draft 09 parsing rules for Items, so integers have the 64-bit int range.
// Structured-Headers Draft 09 only.
-QUICHE_EXPORT absl::optional<ParameterisedList> ParseParameterisedList(
+QUICHE_EXPORT std::optional<ParameterisedList> ParseParameterisedList(
absl::string_view str);
// Returns the result of parsing the header value as a List of Lists, if it can
@@ -298,25 +297,25 @@
// as Items. This method uses the Draft 09 parsing rules for Items, so integers
// have the 64-bit int range.
// Structured-Headers Draft 09 only.
-QUICHE_EXPORT absl::optional<ListOfLists> ParseListOfLists(
+QUICHE_EXPORT std::optional<ListOfLists> ParseListOfLists(
absl::string_view str);
// Returns the result of parsing the header value as a general List, if it can
// be parsed as one, or nullopt if it cannot.
// Structured-Headers Draft 15 only.
-QUICHE_EXPORT absl::optional<List> ParseList(absl::string_view str);
+QUICHE_EXPORT std::optional<List> ParseList(absl::string_view str);
// Returns the result of parsing the header value as a general Dictionary, if it
// can be parsed as one, or nullopt if it cannot. Structured-Headers Draft 15
// only.
-QUICHE_EXPORT absl::optional<Dictionary> ParseDictionary(absl::string_view str);
+QUICHE_EXPORT std::optional<Dictionary> ParseDictionary(absl::string_view str);
// Serialization is implemented for Structured-Headers Draft 15 only.
-QUICHE_EXPORT absl::optional<std::string> SerializeItem(const Item& value);
-QUICHE_EXPORT absl::optional<std::string> SerializeItem(
+QUICHE_EXPORT std::optional<std::string> SerializeItem(const Item& value);
+QUICHE_EXPORT std::optional<std::string> SerializeItem(
const ParameterizedItem& value);
-QUICHE_EXPORT absl::optional<std::string> SerializeList(const List& value);
-QUICHE_EXPORT absl::optional<std::string> SerializeDictionary(
+QUICHE_EXPORT std::optional<std::string> SerializeList(const List& value);
+QUICHE_EXPORT std::optional<std::string> SerializeDictionary(
const Dictionary& value);
} // namespace structured_headers
diff --git a/quiche/common/structured_headers_generated_test.cc b/quiche/common/structured_headers_generated_test.cc
index 7e94e49..d9b1dc6 100644
--- a/quiche/common/structured_headers_generated_test.cc
+++ b/quiche/common/structured_headers_generated_test.cc
@@ -48,7 +48,7 @@
const char* name;
const char* raw;
size_t raw_len;
- const absl::optional<ParameterizedItem>
+ const std::optional<ParameterizedItem>
expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
@@ -69,10 +69,10 @@
9,
{{Item("hello", Item::kByteSequenceType), {}}},
":aGVsbG8=:"},
- {"bad end delimiter", ":aGVsbG8=", 9, absl::nullopt, nullptr},
- {"extra whitespace", ":aGVsb G8=:", 11, absl::nullopt, nullptr},
- {"extra chars", ":aGVsbG!8=:", 11, absl::nullopt, nullptr},
- {"suffix chars", ":aGVsbG8=!:", 11, absl::nullopt, nullptr},
+ {"bad end delimiter", ":aGVsbG8=", 9, std::nullopt, nullptr},
+ {"extra whitespace", ":aGVsb G8=:", 11, std::nullopt, nullptr},
+ {"extra chars", ":aGVsbG!8=:", 11, std::nullopt, nullptr},
+ {"suffix chars", ":aGVsbG8=!:", 11, std::nullopt, nullptr},
{"non-zero pad bits",
":iZ==:",
6,
@@ -83,19 +83,19 @@
6,
{{Item("\377\340!", Item::kByteSequenceType), {}}},
nullptr},
- {"base64url binary", ":_-Ah:", 6, absl::nullopt, nullptr},
+ {"base64url binary", ":_-Ah:", 6, std::nullopt, nullptr},
// boolean.json
{"basic true boolean", "?1", 2, {{Item(true), {}}}, nullptr},
{"basic false boolean", "?0", 2, {{Item(false), {}}}, nullptr},
- {"unknown boolean", "?Q", 2, absl::nullopt, nullptr},
- {"whitespace boolean", "? 1", 3, absl::nullopt, nullptr},
- {"negative zero boolean", "?-0", 3, absl::nullopt, nullptr},
- {"T boolean", "?T", 2, absl::nullopt, nullptr},
- {"F boolean", "?F", 2, absl::nullopt, nullptr},
- {"t boolean", "?t", 2, absl::nullopt, nullptr},
- {"f boolean", "?f", 2, absl::nullopt, nullptr},
- {"spelled-out True boolean", "?True", 5, absl::nullopt, nullptr},
- {"spelled-out False boolean", "?False", 6, absl::nullopt, nullptr},
+ {"unknown boolean", "?Q", 2, std::nullopt, nullptr},
+ {"whitespace boolean", "? 1", 3, std::nullopt, nullptr},
+ {"negative zero boolean", "?-0", 3, std::nullopt, nullptr},
+ {"T boolean", "?T", 2, std::nullopt, nullptr},
+ {"F boolean", "?F", 2, std::nullopt, nullptr},
+ {"t boolean", "?t", 2, std::nullopt, nullptr},
+ {"f boolean", "?f", 2, std::nullopt, nullptr},
+ {"spelled-out True boolean", "?True", 5, std::nullopt, nullptr},
+ {"spelled-out False boolean", "?False", 6, std::nullopt, nullptr},
// examples.json
{"Foo-Example",
"2; foourl=\"https://foo.example.com/\"",
@@ -127,9 +127,9 @@
nullptr},
{"Example-BoolHdr", "?1", 2, {{Item(true), {}}}, nullptr},
// item.json
- {"empty item", "", 0, absl::nullopt, nullptr},
- {"leading space", " \t 1", 4, absl::nullopt, nullptr},
- {"trailing space", "1 \t ", 4, absl::nullopt, nullptr},
+ {"empty item", "", 0, std::nullopt, nullptr},
+ {"leading space", " \t 1", 4, std::nullopt, nullptr},
+ {"trailing space", "1 \t ", 4, std::nullopt, nullptr},
{"leading and trailing space", " 1 ", 5, {{Integer(1), {}}}, "1"},
{"leading and trailing whitespace", " 1 ", 8, {{Integer(1), {}}}, "1"},
// number-generated.json
@@ -962,27 +962,27 @@
16,
{{Item(999999999999.999023), {}}},
nullptr},
- {"too many digit 0 decimal", "000000000000000.0", 17, absl::nullopt,
+ {"too many digit 0 decimal", "000000000000000.0", 17, std::nullopt,
nullptr},
{"too many fractional digits 0 decimal", "000000000000.0000", 17,
- absl::nullopt, nullptr},
- {"too many digit 9 decimal", "999999999999999.9", 17, absl::nullopt,
+ std::nullopt, nullptr},
+ {"too many digit 9 decimal", "999999999999999.9", 17, std::nullopt,
nullptr},
{"too many fractional digits 9 decimal", "999999999999.9999", 17,
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
// number.json
{"basic integer", "42", 2, {{Integer(42), {}}}, nullptr},
{"zero integer", "0", 1, {{Integer(0), {}}}, nullptr},
{"negative zero", "-0", 2, {{Integer(0), {}}}, "0"},
- {"double negative zero", "--0", 3, absl::nullopt, nullptr},
+ {"double negative zero", "--0", 3, std::nullopt, nullptr},
{"negative integer", "-42", 3, {{Integer(-42), {}}}, nullptr},
{"leading 0 integer", "042", 3, {{Integer(42), {}}}, "42"},
{"leading 0 negative integer", "-042", 4, {{Integer(-42), {}}}, "-42"},
{"leading 0 zero", "00", 2, {{Integer(0), {}}}, "0"},
- {"comma", "2,3", 3, absl::nullopt, nullptr},
- {"negative non-DIGIT first character", "-a23", 4, absl::nullopt, nullptr},
- {"sign out of place", "4-2", 3, absl::nullopt, nullptr},
- {"whitespace after sign", "- 42", 4, absl::nullopt, nullptr},
+ {"comma", "2,3", 3, std::nullopt, nullptr},
+ {"negative non-DIGIT first character", "-a23", 4, std::nullopt, nullptr},
+ {"sign out of place", "4-2", 3, std::nullopt, nullptr},
+ {"whitespace after sign", "- 42", 4, std::nullopt, nullptr},
{"long integer",
"123456789012345",
15,
@@ -993,22 +993,22 @@
16,
{{Integer(-123456789012345), {}}},
nullptr},
- {"too long integer", "1234567890123456", 16, absl::nullopt, nullptr},
- {"negative too long integer", "-1234567890123456", 17, absl::nullopt,
+ {"too long integer", "1234567890123456", 16, std::nullopt, nullptr},
+ {"negative too long integer", "-1234567890123456", 17, std::nullopt,
nullptr},
{"simple decimal", "1.23", 4, {{Item(1.230000), {}}}, nullptr},
{"negative decimal", "-1.23", 5, {{Item(-1.230000), {}}}, nullptr},
- {"decimal, whitespace after decimal", "1. 23", 5, absl::nullopt, nullptr},
- {"decimal, whitespace before decimal", "1 .23", 5, absl::nullopt, nullptr},
- {"negative decimal, whitespace after sign", "- 1.23", 6, absl::nullopt,
+ {"decimal, whitespace after decimal", "1. 23", 5, std::nullopt, nullptr},
+ {"decimal, whitespace before decimal", "1 .23", 5, std::nullopt, nullptr},
+ {"negative decimal, whitespace after sign", "- 1.23", 6, std::nullopt,
nullptr},
{"tricky precision decimal",
"123456789012.1",
14,
{{Item(123456789012.100006), {}}},
nullptr},
- {"double decimal decimal", "1.5.4", 5, absl::nullopt, nullptr},
- {"adjacent double decimal decimal", "1..4", 4, absl::nullopt, nullptr},
+ {"double decimal decimal", "1.5.4", 5, std::nullopt, nullptr},
+ {"adjacent double decimal decimal", "1..4", 4, std::nullopt, nullptr},
{"decimal with three fractional digits",
"1.123",
5,
@@ -1019,50 +1019,49 @@
6,
{{Item(-1.123000), {}}},
nullptr},
- {"decimal with four fractional digits", "1.1234", 6, absl::nullopt,
+ {"decimal with four fractional digits", "1.1234", 6, std::nullopt, nullptr},
+ {"negative decimal with four fractional digits", "-1.1234", 7, std::nullopt,
nullptr},
- {"negative decimal with four fractional digits", "-1.1234", 7,
- absl::nullopt, nullptr},
{"decimal with thirteen integer digits", "1234567890123.0", 15,
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
{"negative decimal with thirteen integer digits", "-1234567890123.0", 16,
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
// string-generated.json
- {"0x00 in string", "\" \000 \"", 5, absl::nullopt, nullptr},
- {"0x01 in string", "\" \001 \"", 5, absl::nullopt, nullptr},
- {"0x02 in string", "\" \002 \"", 5, absl::nullopt, nullptr},
- {"0x03 in string", "\" \003 \"", 5, absl::nullopt, nullptr},
- {"0x04 in string", "\" \004 \"", 5, absl::nullopt, nullptr},
- {"0x05 in string", "\" \005 \"", 5, absl::nullopt, nullptr},
- {"0x06 in string", "\" \006 \"", 5, absl::nullopt, nullptr},
- {"0x07 in string", "\" \a \"", 5, absl::nullopt, nullptr},
- {"0x08 in string", "\" \b \"", 5, absl::nullopt, nullptr},
- {"0x09 in string", "\" \t \"", 5, absl::nullopt, nullptr},
- {"0x0a in string", "\" \n \"", 5, absl::nullopt, nullptr},
- {"0x0b in string", "\" \v \"", 5, absl::nullopt, nullptr},
- {"0x0c in string", "\" \f \"", 5, absl::nullopt, nullptr},
- {"0x0d in string", "\" \r \"", 5, absl::nullopt, nullptr},
- {"0x0e in string", "\" \016 \"", 5, absl::nullopt, nullptr},
- {"0x0f in string", "\" \017 \"", 5, absl::nullopt, nullptr},
- {"0x10 in string", "\" \020 \"", 5, absl::nullopt, nullptr},
- {"0x11 in string", "\" \021 \"", 5, absl::nullopt, nullptr},
- {"0x12 in string", "\" \022 \"", 5, absl::nullopt, nullptr},
- {"0x13 in string", "\" \023 \"", 5, absl::nullopt, nullptr},
- {"0x14 in string", "\" \024 \"", 5, absl::nullopt, nullptr},
- {"0x15 in string", "\" \025 \"", 5, absl::nullopt, nullptr},
- {"0x16 in string", "\" \026 \"", 5, absl::nullopt, nullptr},
- {"0x17 in string", "\" \027 \"", 5, absl::nullopt, nullptr},
- {"0x18 in string", "\" \030 \"", 5, absl::nullopt, nullptr},
- {"0x19 in string", "\" \031 \"", 5, absl::nullopt, nullptr},
- {"0x1a in string", "\" \032 \"", 5, absl::nullopt, nullptr},
- {"0x1b in string", "\" \033 \"", 5, absl::nullopt, nullptr},
- {"0x1c in string", "\" \034 \"", 5, absl::nullopt, nullptr},
- {"0x1d in string", "\" \035 \"", 5, absl::nullopt, nullptr},
- {"0x1e in string", "\" \036 \"", 5, absl::nullopt, nullptr},
- {"0x1f in string", "\" \037 \"", 5, absl::nullopt, nullptr},
+ {"0x00 in string", "\" \000 \"", 5, std::nullopt, nullptr},
+ {"0x01 in string", "\" \001 \"", 5, std::nullopt, nullptr},
+ {"0x02 in string", "\" \002 \"", 5, std::nullopt, nullptr},
+ {"0x03 in string", "\" \003 \"", 5, std::nullopt, nullptr},
+ {"0x04 in string", "\" \004 \"", 5, std::nullopt, nullptr},
+ {"0x05 in string", "\" \005 \"", 5, std::nullopt, nullptr},
+ {"0x06 in string", "\" \006 \"", 5, std::nullopt, nullptr},
+ {"0x07 in string", "\" \a \"", 5, std::nullopt, nullptr},
+ {"0x08 in string", "\" \b \"", 5, std::nullopt, nullptr},
+ {"0x09 in string", "\" \t \"", 5, std::nullopt, nullptr},
+ {"0x0a in string", "\" \n \"", 5, std::nullopt, nullptr},
+ {"0x0b in string", "\" \v \"", 5, std::nullopt, nullptr},
+ {"0x0c in string", "\" \f \"", 5, std::nullopt, nullptr},
+ {"0x0d in string", "\" \r \"", 5, std::nullopt, nullptr},
+ {"0x0e in string", "\" \016 \"", 5, std::nullopt, nullptr},
+ {"0x0f in string", "\" \017 \"", 5, std::nullopt, nullptr},
+ {"0x10 in string", "\" \020 \"", 5, std::nullopt, nullptr},
+ {"0x11 in string", "\" \021 \"", 5, std::nullopt, nullptr},
+ {"0x12 in string", "\" \022 \"", 5, std::nullopt, nullptr},
+ {"0x13 in string", "\" \023 \"", 5, std::nullopt, nullptr},
+ {"0x14 in string", "\" \024 \"", 5, std::nullopt, nullptr},
+ {"0x15 in string", "\" \025 \"", 5, std::nullopt, nullptr},
+ {"0x16 in string", "\" \026 \"", 5, std::nullopt, nullptr},
+ {"0x17 in string", "\" \027 \"", 5, std::nullopt, nullptr},
+ {"0x18 in string", "\" \030 \"", 5, std::nullopt, nullptr},
+ {"0x19 in string", "\" \031 \"", 5, std::nullopt, nullptr},
+ {"0x1a in string", "\" \032 \"", 5, std::nullopt, nullptr},
+ {"0x1b in string", "\" \033 \"", 5, std::nullopt, nullptr},
+ {"0x1c in string", "\" \034 \"", 5, std::nullopt, nullptr},
+ {"0x1d in string", "\" \035 \"", 5, std::nullopt, nullptr},
+ {"0x1e in string", "\" \036 \"", 5, std::nullopt, nullptr},
+ {"0x1f in string", "\" \037 \"", 5, std::nullopt, nullptr},
{"0x20 in string", "\" \"", 5, {{Item(" "), {}}}, nullptr},
{"0x21 in string", "\" ! \"", 5, {{Item(" ! "), {}}}, nullptr},
- {"0x22 in string", "\" \" \"", 5, absl::nullopt, nullptr},
+ {"0x22 in string", "\" \" \"", 5, std::nullopt, nullptr},
{"0x23 in string", "\" # \"", 5, {{Item(" # "), {}}}, nullptr},
{"0x24 in string", "\" $ \"", 5, {{Item(" $ "), {}}}, nullptr},
{"0x25 in string", "\" % \"", 5, {{Item(" % "), {}}}, nullptr},
@@ -1120,7 +1119,7 @@
{"0x59 in string", "\" Y \"", 5, {{Item(" Y "), {}}}, nullptr},
{"0x5a in string", "\" Z \"", 5, {{Item(" Z "), {}}}, nullptr},
{"0x5b in string", "\" [ \"", 5, {{Item(" [ "), {}}}, nullptr},
- {"0x5c in string", "\" \\ \"", 5, absl::nullopt, nullptr},
+ {"0x5c in string", "\" \\ \"", 5, std::nullopt, nullptr},
{"0x5d in string", "\" ] \"", 5, {{Item(" ] "), {}}}, nullptr},
{"0x5e in string", "\" ^ \"", 5, {{Item(" ^ "), {}}}, nullptr},
{"0x5f in string", "\" _ \"", 5, {{Item(" _ "), {}}}, nullptr},
@@ -1155,135 +1154,135 @@
{"0x7c in string", "\" | \"", 5, {{Item(" | "), {}}}, nullptr},
{"0x7d in string", "\" } \"", 5, {{Item(" } "), {}}}, nullptr},
{"0x7e in string", "\" ~ \"", 5, {{Item(" ~ "), {}}}, nullptr},
- {"0x7f in string", "\" \177 \"", 5, absl::nullopt, nullptr},
- {"Escaped 0x00 in string", "\"\\\000\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x01 in string", "\"\\\001\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x02 in string", "\"\\\002\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x03 in string", "\"\\\003\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x04 in string", "\"\\\004\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x05 in string", "\"\\\005\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x06 in string", "\"\\\006\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x07 in string", "\"\\\a\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x08 in string", "\"\\\b\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x09 in string", "\"\\\t\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x0a in string", "\"\\\n\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x0b in string", "\"\\\v\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x0c in string", "\"\\\f\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x0d in string", "\"\\\r\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x0e in string", "\"\\\016\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x0f in string", "\"\\\017\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x10 in string", "\"\\\020\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x11 in string", "\"\\\021\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x12 in string", "\"\\\022\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x13 in string", "\"\\\023\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x14 in string", "\"\\\024\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x15 in string", "\"\\\025\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x16 in string", "\"\\\026\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x17 in string", "\"\\\027\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x18 in string", "\"\\\030\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x19 in string", "\"\\\031\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x1a in string", "\"\\\032\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x1b in string", "\"\\\033\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x1c in string", "\"\\\034\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x1d in string", "\"\\\035\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x1e in string", "\"\\\036\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x1f in string", "\"\\\037\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x20 in string", "\"\\ \"", 4, absl::nullopt, nullptr},
- {"Escaped 0x21 in string", "\"\\!\"", 4, absl::nullopt, nullptr},
+ {"0x7f in string", "\" \177 \"", 5, std::nullopt, nullptr},
+ {"Escaped 0x00 in string", "\"\\\000\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x01 in string", "\"\\\001\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x02 in string", "\"\\\002\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x03 in string", "\"\\\003\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x04 in string", "\"\\\004\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x05 in string", "\"\\\005\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x06 in string", "\"\\\006\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x07 in string", "\"\\\a\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x08 in string", "\"\\\b\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x09 in string", "\"\\\t\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x0a in string", "\"\\\n\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x0b in string", "\"\\\v\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x0c in string", "\"\\\f\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x0d in string", "\"\\\r\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x0e in string", "\"\\\016\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x0f in string", "\"\\\017\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x10 in string", "\"\\\020\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x11 in string", "\"\\\021\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x12 in string", "\"\\\022\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x13 in string", "\"\\\023\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x14 in string", "\"\\\024\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x15 in string", "\"\\\025\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x16 in string", "\"\\\026\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x17 in string", "\"\\\027\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x18 in string", "\"\\\030\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x19 in string", "\"\\\031\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x1a in string", "\"\\\032\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x1b in string", "\"\\\033\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x1c in string", "\"\\\034\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x1d in string", "\"\\\035\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x1e in string", "\"\\\036\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x1f in string", "\"\\\037\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x20 in string", "\"\\ \"", 4, std::nullopt, nullptr},
+ {"Escaped 0x21 in string", "\"\\!\"", 4, std::nullopt, nullptr},
{"Escaped 0x22 in string", "\"\\\"\"", 4, {{Item("\""), {}}}, nullptr},
- {"Escaped 0x23 in string", "\"\\#\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x24 in string", "\"\\$\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x25 in string", "\"\\%\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x26 in string", "\"\\&\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x27 in string", "\"\\'\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x28 in string", "\"\\(\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x29 in string", "\"\\)\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x2a in string", "\"\\*\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x2b in string", "\"\\+\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x2c in string", "\"\\,\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x2d in string", "\"\\-\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x2e in string", "\"\\.\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x2f in string", "\"\\/\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x30 in string", "\"\\0\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x31 in string", "\"\\1\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x32 in string", "\"\\2\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x33 in string", "\"\\3\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x34 in string", "\"\\4\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x35 in string", "\"\\5\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x36 in string", "\"\\6\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x37 in string", "\"\\7\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x38 in string", "\"\\8\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x39 in string", "\"\\9\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x3a in string", "\"\\:\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x3b in string", "\"\\;\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x3c in string", "\"\\<\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x3d in string", "\"\\=\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x3e in string", "\"\\>\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x3f in string", "\"\\?\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x40 in string", "\"\\@\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x41 in string", "\"\\A\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x42 in string", "\"\\B\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x43 in string", "\"\\C\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x44 in string", "\"\\D\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x45 in string", "\"\\E\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x46 in string", "\"\\F\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x47 in string", "\"\\G\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x48 in string", "\"\\H\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x49 in string", "\"\\I\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x4a in string", "\"\\J\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x4b in string", "\"\\K\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x4c in string", "\"\\L\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x4d in string", "\"\\M\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x4e in string", "\"\\N\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x4f in string", "\"\\O\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x50 in string", "\"\\P\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x51 in string", "\"\\Q\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x52 in string", "\"\\R\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x53 in string", "\"\\S\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x54 in string", "\"\\T\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x55 in string", "\"\\U\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x56 in string", "\"\\V\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x57 in string", "\"\\W\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x58 in string", "\"\\X\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x59 in string", "\"\\Y\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x5a in string", "\"\\Z\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x5b in string", "\"\\[\"", 4, absl::nullopt, nullptr},
+ {"Escaped 0x23 in string", "\"\\#\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x24 in string", "\"\\$\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x25 in string", "\"\\%\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x26 in string", "\"\\&\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x27 in string", "\"\\'\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x28 in string", "\"\\(\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x29 in string", "\"\\)\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x2a in string", "\"\\*\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x2b in string", "\"\\+\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x2c in string", "\"\\,\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x2d in string", "\"\\-\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x2e in string", "\"\\.\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x2f in string", "\"\\/\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x30 in string", "\"\\0\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x31 in string", "\"\\1\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x32 in string", "\"\\2\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x33 in string", "\"\\3\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x34 in string", "\"\\4\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x35 in string", "\"\\5\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x36 in string", "\"\\6\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x37 in string", "\"\\7\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x38 in string", "\"\\8\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x39 in string", "\"\\9\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x3a in string", "\"\\:\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x3b in string", "\"\\;\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x3c in string", "\"\\<\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x3d in string", "\"\\=\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x3e in string", "\"\\>\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x3f in string", "\"\\?\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x40 in string", "\"\\@\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x41 in string", "\"\\A\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x42 in string", "\"\\B\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x43 in string", "\"\\C\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x44 in string", "\"\\D\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x45 in string", "\"\\E\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x46 in string", "\"\\F\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x47 in string", "\"\\G\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x48 in string", "\"\\H\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x49 in string", "\"\\I\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x4a in string", "\"\\J\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x4b in string", "\"\\K\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x4c in string", "\"\\L\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x4d in string", "\"\\M\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x4e in string", "\"\\N\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x4f in string", "\"\\O\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x50 in string", "\"\\P\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x51 in string", "\"\\Q\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x52 in string", "\"\\R\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x53 in string", "\"\\S\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x54 in string", "\"\\T\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x55 in string", "\"\\U\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x56 in string", "\"\\V\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x57 in string", "\"\\W\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x58 in string", "\"\\X\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x59 in string", "\"\\Y\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x5a in string", "\"\\Z\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x5b in string", "\"\\[\"", 4, std::nullopt, nullptr},
{"Escaped 0x5c in string", "\"\\\\\"", 4, {{Item("\\"), {}}}, nullptr},
- {"Escaped 0x5d in string", "\"\\]\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x5e in string", "\"\\^\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x5f in string", "\"\\_\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x60 in string", "\"\\`\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x61 in string", "\"\\a\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x62 in string", "\"\\b\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x63 in string", "\"\\c\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x64 in string", "\"\\d\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x65 in string", "\"\\e\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x66 in string", "\"\\f\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x67 in string", "\"\\g\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x68 in string", "\"\\h\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x69 in string", "\"\\i\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x6a in string", "\"\\j\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x6b in string", "\"\\k\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x6c in string", "\"\\l\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x6d in string", "\"\\m\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x6e in string", "\"\\n\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x6f in string", "\"\\o\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x70 in string", "\"\\p\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x71 in string", "\"\\q\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x72 in string", "\"\\r\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x73 in string", "\"\\s\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x74 in string", "\"\\t\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x75 in string", "\"\\u\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x76 in string", "\"\\v\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x77 in string", "\"\\w\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x78 in string", "\"\\x\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x79 in string", "\"\\y\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x7a in string", "\"\\z\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x7b in string", "\"\\{\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x7c in string", "\"\\|\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x7d in string", "\"\\}\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x7e in string", "\"\\~\"", 4, absl::nullopt, nullptr},
- {"Escaped 0x7f in string", "\"\\\177\"", 4, absl::nullopt, nullptr},
+ {"Escaped 0x5d in string", "\"\\]\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x5e in string", "\"\\^\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x5f in string", "\"\\_\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x60 in string", "\"\\`\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x61 in string", "\"\\a\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x62 in string", "\"\\b\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x63 in string", "\"\\c\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x64 in string", "\"\\d\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x65 in string", "\"\\e\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x66 in string", "\"\\f\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x67 in string", "\"\\g\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x68 in string", "\"\\h\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x69 in string", "\"\\i\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x6a in string", "\"\\j\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x6b in string", "\"\\k\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x6c in string", "\"\\l\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x6d in string", "\"\\m\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x6e in string", "\"\\n\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x6f in string", "\"\\o\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x70 in string", "\"\\p\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x71 in string", "\"\\q\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x72 in string", "\"\\r\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x73 in string", "\"\\s\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x74 in string", "\"\\t\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x75 in string", "\"\\u\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x76 in string", "\"\\v\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x77 in string", "\"\\w\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x78 in string", "\"\\x\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x79 in string", "\"\\y\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x7a in string", "\"\\z\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x7b in string", "\"\\{\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x7c in string", "\"\\|\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x7d in string", "\"\\}\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x7e in string", "\"\\~\"", 4, std::nullopt, nullptr},
+ {"Escaped 0x7f in string", "\"\\\177\"", 4, std::nullopt, nullptr},
// string.json
{"basic string", "\"foo bar\"", 9, {{Item("foo bar"), {}}}, nullptr},
{"empty string", "\"\"", 2, {{Item(""), {}}}, nullptr},
@@ -1301,65 +1300,65 @@
{}}},
nullptr},
{"whitespace string", "\" \"", 5, {{Item(" "), {}}}, nullptr},
- {"non-ascii string", "\"f\374\374\"", 5, absl::nullopt, nullptr},
- {"tab in string", "\"\\t\"", 4, absl::nullopt, nullptr},
- {"newline in string", "\" \\n \"", 6, absl::nullopt, nullptr},
- {"single quoted string", "'foo'", 5, absl::nullopt, nullptr},
- {"unbalanced string", "\"foo", 4, absl::nullopt, nullptr},
+ {"non-ascii string", "\"f\374\374\"", 5, std::nullopt, nullptr},
+ {"tab in string", "\"\\t\"", 4, std::nullopt, nullptr},
+ {"newline in string", "\" \\n \"", 6, std::nullopt, nullptr},
+ {"single quoted string", "'foo'", 5, std::nullopt, nullptr},
+ {"unbalanced string", "\"foo", 4, std::nullopt, nullptr},
{"string quoting",
"\"foo \\\"bar\\\" \\\\ baz\"",
20,
{{Item("foo \"bar\" \\ baz"), {}}},
nullptr},
- {"bad string quoting", "\"foo \\,\"", 8, absl::nullopt, nullptr},
- {"ending string quote", "\"foo \\\"", 7, absl::nullopt, nullptr},
- {"abruptly ending string quote", "\"foo \\", 6, absl::nullopt, nullptr},
+ {"bad string quoting", "\"foo \\,\"", 8, std::nullopt, nullptr},
+ {"ending string quote", "\"foo \\\"", 7, std::nullopt, nullptr},
+ {"abruptly ending string quote", "\"foo \\", 6, std::nullopt, nullptr},
// token-generated.json
- {"0x00 in token", "a\000a", 3, absl::nullopt, nullptr},
- {"0x01 in token", "a\001a", 3, absl::nullopt, nullptr},
- {"0x02 in token", "a\002a", 3, absl::nullopt, nullptr},
- {"0x03 in token", "a\003a", 3, absl::nullopt, nullptr},
- {"0x04 in token", "a\004a", 3, absl::nullopt, nullptr},
- {"0x05 in token", "a\005a", 3, absl::nullopt, nullptr},
- {"0x06 in token", "a\006a", 3, absl::nullopt, nullptr},
- {"0x07 in token", "a\aa", 3, absl::nullopt, nullptr},
- {"0x08 in token", "a\ba", 3, absl::nullopt, nullptr},
- {"0x09 in token", "a\ta", 3, absl::nullopt, nullptr},
- {"0x0a in token", "a\na", 3, absl::nullopt, nullptr},
- {"0x0b in token", "a\va", 3, absl::nullopt, nullptr},
- {"0x0c in token", "a\fa", 3, absl::nullopt, nullptr},
- {"0x0d in token", "a\ra", 3, absl::nullopt, nullptr},
- {"0x0e in token", "a\016a", 3, absl::nullopt, nullptr},
- {"0x0f in token", "a\017a", 3, absl::nullopt, nullptr},
- {"0x10 in token", "a\020a", 3, absl::nullopt, nullptr},
- {"0x11 in token", "a\021a", 3, absl::nullopt, nullptr},
- {"0x12 in token", "a\022a", 3, absl::nullopt, nullptr},
- {"0x13 in token", "a\023a", 3, absl::nullopt, nullptr},
- {"0x14 in token", "a\024a", 3, absl::nullopt, nullptr},
- {"0x15 in token", "a\025a", 3, absl::nullopt, nullptr},
- {"0x16 in token", "a\026a", 3, absl::nullopt, nullptr},
- {"0x17 in token", "a\027a", 3, absl::nullopt, nullptr},
- {"0x18 in token", "a\030a", 3, absl::nullopt, nullptr},
- {"0x19 in token", "a\031a", 3, absl::nullopt, nullptr},
- {"0x1a in token", "a\032a", 3, absl::nullopt, nullptr},
- {"0x1b in token", "a\033a", 3, absl::nullopt, nullptr},
- {"0x1c in token", "a\034a", 3, absl::nullopt, nullptr},
- {"0x1d in token", "a\035a", 3, absl::nullopt, nullptr},
- {"0x1e in token", "a\036a", 3, absl::nullopt, nullptr},
- {"0x1f in token", "a\037a", 3, absl::nullopt, nullptr},
- {"0x20 in token", "a a", 3, absl::nullopt, nullptr},
+ {"0x00 in token", "a\000a", 3, std::nullopt, nullptr},
+ {"0x01 in token", "a\001a", 3, std::nullopt, nullptr},
+ {"0x02 in token", "a\002a", 3, std::nullopt, nullptr},
+ {"0x03 in token", "a\003a", 3, std::nullopt, nullptr},
+ {"0x04 in token", "a\004a", 3, std::nullopt, nullptr},
+ {"0x05 in token", "a\005a", 3, std::nullopt, nullptr},
+ {"0x06 in token", "a\006a", 3, std::nullopt, nullptr},
+ {"0x07 in token", "a\aa", 3, std::nullopt, nullptr},
+ {"0x08 in token", "a\ba", 3, std::nullopt, nullptr},
+ {"0x09 in token", "a\ta", 3, std::nullopt, nullptr},
+ {"0x0a in token", "a\na", 3, std::nullopt, nullptr},
+ {"0x0b in token", "a\va", 3, std::nullopt, nullptr},
+ {"0x0c in token", "a\fa", 3, std::nullopt, nullptr},
+ {"0x0d in token", "a\ra", 3, std::nullopt, nullptr},
+ {"0x0e in token", "a\016a", 3, std::nullopt, nullptr},
+ {"0x0f in token", "a\017a", 3, std::nullopt, nullptr},
+ {"0x10 in token", "a\020a", 3, std::nullopt, nullptr},
+ {"0x11 in token", "a\021a", 3, std::nullopt, nullptr},
+ {"0x12 in token", "a\022a", 3, std::nullopt, nullptr},
+ {"0x13 in token", "a\023a", 3, std::nullopt, nullptr},
+ {"0x14 in token", "a\024a", 3, std::nullopt, nullptr},
+ {"0x15 in token", "a\025a", 3, std::nullopt, nullptr},
+ {"0x16 in token", "a\026a", 3, std::nullopt, nullptr},
+ {"0x17 in token", "a\027a", 3, std::nullopt, nullptr},
+ {"0x18 in token", "a\030a", 3, std::nullopt, nullptr},
+ {"0x19 in token", "a\031a", 3, std::nullopt, nullptr},
+ {"0x1a in token", "a\032a", 3, std::nullopt, nullptr},
+ {"0x1b in token", "a\033a", 3, std::nullopt, nullptr},
+ {"0x1c in token", "a\034a", 3, std::nullopt, nullptr},
+ {"0x1d in token", "a\035a", 3, std::nullopt, nullptr},
+ {"0x1e in token", "a\036a", 3, std::nullopt, nullptr},
+ {"0x1f in token", "a\037a", 3, std::nullopt, nullptr},
+ {"0x20 in token", "a a", 3, std::nullopt, nullptr},
{"0x21 in token", "a!a", 3, {{Item("a!a", Item::kTokenType), {}}}, nullptr},
- {"0x22 in token", "a\"a", 3, absl::nullopt, nullptr},
+ {"0x22 in token", "a\"a", 3, std::nullopt, nullptr},
{"0x23 in token", "a#a", 3, {{Item("a#a", Item::kTokenType), {}}}, nullptr},
{"0x24 in token", "a$a", 3, {{Item("a$a", Item::kTokenType), {}}}, nullptr},
{"0x25 in token", "a%a", 3, {{Item("a%a", Item::kTokenType), {}}}, nullptr},
{"0x26 in token", "a&a", 3, {{Item("a&a", Item::kTokenType), {}}}, nullptr},
{"0x27 in token", "a'a", 3, {{Item("a'a", Item::kTokenType), {}}}, nullptr},
- {"0x28 in token", "a(a", 3, absl::nullopt, nullptr},
- {"0x29 in token", "a)a", 3, absl::nullopt, nullptr},
+ {"0x28 in token", "a(a", 3, std::nullopt, nullptr},
+ {"0x29 in token", "a)a", 3, std::nullopt, nullptr},
{"0x2a in token", "a*a", 3, {{Item("a*a", Item::kTokenType), {}}}, nullptr},
{"0x2b in token", "a+a", 3, {{Item("a+a", Item::kTokenType), {}}}, nullptr},
- {"0x2c in token", "a,a", 3, absl::nullopt, nullptr},
+ {"0x2c in token", "a,a", 3, std::nullopt, nullptr},
{"0x2d in token", "a-a", 3, {{Item("a-a", Item::kTokenType), {}}}, nullptr},
{"0x2e in token", "a.a", 3, {{Item("a.a", Item::kTokenType), {}}}, nullptr},
{"0x2f in token", "a/a", 3, {{Item("a/a", Item::kTokenType), {}}}, nullptr},
@@ -1379,11 +1378,11 @@
3,
{{Item("a", Item::kTokenType), {BooleanParam("a", true)}}},
nullptr},
- {"0x3c in token", "a<a", 3, absl::nullopt, nullptr},
- {"0x3d in token", "a=a", 3, absl::nullopt, nullptr},
- {"0x3e in token", "a>a", 3, absl::nullopt, nullptr},
- {"0x3f in token", "a?a", 3, absl::nullopt, nullptr},
- {"0x40 in token", "a@a", 3, absl::nullopt, nullptr},
+ {"0x3c in token", "a<a", 3, std::nullopt, nullptr},
+ {"0x3d in token", "a=a", 3, std::nullopt, nullptr},
+ {"0x3e in token", "a>a", 3, std::nullopt, nullptr},
+ {"0x3f in token", "a?a", 3, std::nullopt, nullptr},
+ {"0x40 in token", "a@a", 3, std::nullopt, nullptr},
{"0x41 in token", "aAa", 3, {{Item("aAa", Item::kTokenType), {}}}, nullptr},
{"0x42 in token", "aBa", 3, {{Item("aBa", Item::kTokenType), {}}}, nullptr},
{"0x43 in token", "aCa", 3, {{Item("aCa", Item::kTokenType), {}}}, nullptr},
@@ -1410,9 +1409,9 @@
{"0x58 in token", "aXa", 3, {{Item("aXa", Item::kTokenType), {}}}, nullptr},
{"0x59 in token", "aYa", 3, {{Item("aYa", Item::kTokenType), {}}}, nullptr},
{"0x5a in token", "aZa", 3, {{Item("aZa", Item::kTokenType), {}}}, nullptr},
- {"0x5b in token", "a[a", 3, absl::nullopt, nullptr},
- {"0x5c in token", "a\\a", 3, absl::nullopt, nullptr},
- {"0x5d in token", "a]a", 3, absl::nullopt, nullptr},
+ {"0x5b in token", "a[a", 3, std::nullopt, nullptr},
+ {"0x5c in token", "a\\a", 3, std::nullopt, nullptr},
+ {"0x5d in token", "a]a", 3, std::nullopt, nullptr},
{"0x5e in token", "a^a", 3, {{Item("a^a", Item::kTokenType), {}}}, nullptr},
{"0x5f in token", "a_a", 3, {{Item("a_a", Item::kTokenType), {}}}, nullptr},
{"0x60 in token", "a`a", 3, {{Item("a`a", Item::kTokenType), {}}}, nullptr},
@@ -1442,84 +1441,84 @@
{"0x78 in token", "axa", 3, {{Item("axa", Item::kTokenType), {}}}, nullptr},
{"0x79 in token", "aya", 3, {{Item("aya", Item::kTokenType), {}}}, nullptr},
{"0x7a in token", "aza", 3, {{Item("aza", Item::kTokenType), {}}}, nullptr},
- {"0x7b in token", "a{a", 3, absl::nullopt, nullptr},
+ {"0x7b in token", "a{a", 3, std::nullopt, nullptr},
{"0x7c in token", "a|a", 3, {{Item("a|a", Item::kTokenType), {}}}, nullptr},
- {"0x7d in token", "a}a", 3, absl::nullopt, nullptr},
+ {"0x7d in token", "a}a", 3, std::nullopt, nullptr},
{"0x7e in token", "a~a", 3, {{Item("a~a", Item::kTokenType), {}}}, nullptr},
- {"0x7f in token", "a\177a", 3, absl::nullopt, nullptr},
- {"0x00 starting an token", "\000a", 2, absl::nullopt, nullptr},
- {"0x01 starting an token", "\001a", 2, absl::nullopt, nullptr},
- {"0x02 starting an token", "\002a", 2, absl::nullopt, nullptr},
- {"0x03 starting an token", "\003a", 2, absl::nullopt, nullptr},
- {"0x04 starting an token", "\004a", 2, absl::nullopt, nullptr},
- {"0x05 starting an token", "\005a", 2, absl::nullopt, nullptr},
- {"0x06 starting an token", "\006a", 2, absl::nullopt, nullptr},
- {"0x07 starting an token", "\aa", 2, absl::nullopt, nullptr},
- {"0x08 starting an token", "\ba", 2, absl::nullopt, nullptr},
- {"0x09 starting an token", "\ta", 2, absl::nullopt, nullptr},
- {"0x0a starting an token", "\na", 2, absl::nullopt, nullptr},
- {"0x0b starting an token", "\va", 2, absl::nullopt, nullptr},
- {"0x0c starting an token", "\fa", 2, absl::nullopt, nullptr},
- {"0x0d starting an token", "\ra", 2, absl::nullopt, nullptr},
- {"0x0e starting an token", "\016a", 2, absl::nullopt, nullptr},
- {"0x0f starting an token", "\017a", 2, absl::nullopt, nullptr},
- {"0x10 starting an token", "\020a", 2, absl::nullopt, nullptr},
- {"0x11 starting an token", "\021a", 2, absl::nullopt, nullptr},
- {"0x12 starting an token", "\022a", 2, absl::nullopt, nullptr},
- {"0x13 starting an token", "\023a", 2, absl::nullopt, nullptr},
- {"0x14 starting an token", "\024a", 2, absl::nullopt, nullptr},
- {"0x15 starting an token", "\025a", 2, absl::nullopt, nullptr},
- {"0x16 starting an token", "\026a", 2, absl::nullopt, nullptr},
- {"0x17 starting an token", "\027a", 2, absl::nullopt, nullptr},
- {"0x18 starting an token", "\030a", 2, absl::nullopt, nullptr},
- {"0x19 starting an token", "\031a", 2, absl::nullopt, nullptr},
- {"0x1a starting an token", "\032a", 2, absl::nullopt, nullptr},
- {"0x1b starting an token", "\033a", 2, absl::nullopt, nullptr},
- {"0x1c starting an token", "\034a", 2, absl::nullopt, nullptr},
- {"0x1d starting an token", "\035a", 2, absl::nullopt, nullptr},
- {"0x1e starting an token", "\036a", 2, absl::nullopt, nullptr},
- {"0x1f starting an token", "\037a", 2, absl::nullopt, nullptr},
+ {"0x7f in token", "a\177a", 3, std::nullopt, nullptr},
+ {"0x00 starting an token", "\000a", 2, std::nullopt, nullptr},
+ {"0x01 starting an token", "\001a", 2, std::nullopt, nullptr},
+ {"0x02 starting an token", "\002a", 2, std::nullopt, nullptr},
+ {"0x03 starting an token", "\003a", 2, std::nullopt, nullptr},
+ {"0x04 starting an token", "\004a", 2, std::nullopt, nullptr},
+ {"0x05 starting an token", "\005a", 2, std::nullopt, nullptr},
+ {"0x06 starting an token", "\006a", 2, std::nullopt, nullptr},
+ {"0x07 starting an token", "\aa", 2, std::nullopt, nullptr},
+ {"0x08 starting an token", "\ba", 2, std::nullopt, nullptr},
+ {"0x09 starting an token", "\ta", 2, std::nullopt, nullptr},
+ {"0x0a starting an token", "\na", 2, std::nullopt, nullptr},
+ {"0x0b starting an token", "\va", 2, std::nullopt, nullptr},
+ {"0x0c starting an token", "\fa", 2, std::nullopt, nullptr},
+ {"0x0d starting an token", "\ra", 2, std::nullopt, nullptr},
+ {"0x0e starting an token", "\016a", 2, std::nullopt, nullptr},
+ {"0x0f starting an token", "\017a", 2, std::nullopt, nullptr},
+ {"0x10 starting an token", "\020a", 2, std::nullopt, nullptr},
+ {"0x11 starting an token", "\021a", 2, std::nullopt, nullptr},
+ {"0x12 starting an token", "\022a", 2, std::nullopt, nullptr},
+ {"0x13 starting an token", "\023a", 2, std::nullopt, nullptr},
+ {"0x14 starting an token", "\024a", 2, std::nullopt, nullptr},
+ {"0x15 starting an token", "\025a", 2, std::nullopt, nullptr},
+ {"0x16 starting an token", "\026a", 2, std::nullopt, nullptr},
+ {"0x17 starting an token", "\027a", 2, std::nullopt, nullptr},
+ {"0x18 starting an token", "\030a", 2, std::nullopt, nullptr},
+ {"0x19 starting an token", "\031a", 2, std::nullopt, nullptr},
+ {"0x1a starting an token", "\032a", 2, std::nullopt, nullptr},
+ {"0x1b starting an token", "\033a", 2, std::nullopt, nullptr},
+ {"0x1c starting an token", "\034a", 2, std::nullopt, nullptr},
+ {"0x1d starting an token", "\035a", 2, std::nullopt, nullptr},
+ {"0x1e starting an token", "\036a", 2, std::nullopt, nullptr},
+ {"0x1f starting an token", "\037a", 2, std::nullopt, nullptr},
{"0x20 starting an token",
" a",
2,
{{Item("a", Item::kTokenType), {}}},
"a"},
- {"0x21 starting an token", "!a", 2, absl::nullopt, nullptr},
- {"0x22 starting an token", "\"a", 2, absl::nullopt, nullptr},
- {"0x23 starting an token", "#a", 2, absl::nullopt, nullptr},
- {"0x24 starting an token", "$a", 2, absl::nullopt, nullptr},
- {"0x25 starting an token", "%a", 2, absl::nullopt, nullptr},
- {"0x26 starting an token", "&a", 2, absl::nullopt, nullptr},
- {"0x27 starting an token", "'a", 2, absl::nullopt, nullptr},
- {"0x28 starting an token", "(a", 2, absl::nullopt, nullptr},
- {"0x29 starting an token", ")a", 2, absl::nullopt, nullptr},
+ {"0x21 starting an token", "!a", 2, std::nullopt, nullptr},
+ {"0x22 starting an token", "\"a", 2, std::nullopt, nullptr},
+ {"0x23 starting an token", "#a", 2, std::nullopt, nullptr},
+ {"0x24 starting an token", "$a", 2, std::nullopt, nullptr},
+ {"0x25 starting an token", "%a", 2, std::nullopt, nullptr},
+ {"0x26 starting an token", "&a", 2, std::nullopt, nullptr},
+ {"0x27 starting an token", "'a", 2, std::nullopt, nullptr},
+ {"0x28 starting an token", "(a", 2, std::nullopt, nullptr},
+ {"0x29 starting an token", ")a", 2, std::nullopt, nullptr},
{"0x2a starting an token",
"*a",
2,
{{Item("*a", Item::kTokenType), {}}},
nullptr},
- {"0x2b starting an token", "+a", 2, absl::nullopt, nullptr},
- {"0x2c starting an token", ",a", 2, absl::nullopt, nullptr},
- {"0x2d starting an token", "-a", 2, absl::nullopt, nullptr},
- {"0x2e starting an token", ".a", 2, absl::nullopt, nullptr},
- {"0x2f starting an token", "/a", 2, absl::nullopt, nullptr},
- {"0x30 starting an token", "0a", 2, absl::nullopt, nullptr},
- {"0x31 starting an token", "1a", 2, absl::nullopt, nullptr},
- {"0x32 starting an token", "2a", 2, absl::nullopt, nullptr},
- {"0x33 starting an token", "3a", 2, absl::nullopt, nullptr},
- {"0x34 starting an token", "4a", 2, absl::nullopt, nullptr},
- {"0x35 starting an token", "5a", 2, absl::nullopt, nullptr},
- {"0x36 starting an token", "6a", 2, absl::nullopt, nullptr},
- {"0x37 starting an token", "7a", 2, absl::nullopt, nullptr},
- {"0x38 starting an token", "8a", 2, absl::nullopt, nullptr},
- {"0x39 starting an token", "9a", 2, absl::nullopt, nullptr},
- {"0x3a starting an token", ":a", 2, absl::nullopt, nullptr},
- {"0x3b starting an token", ";a", 2, absl::nullopt, nullptr},
- {"0x3c starting an token", "<a", 2, absl::nullopt, nullptr},
- {"0x3d starting an token", "=a", 2, absl::nullopt, nullptr},
- {"0x3e starting an token", ">a", 2, absl::nullopt, nullptr},
- {"0x3f starting an token", "?a", 2, absl::nullopt, nullptr},
- {"0x40 starting an token", "@a", 2, absl::nullopt, nullptr},
+ {"0x2b starting an token", "+a", 2, std::nullopt, nullptr},
+ {"0x2c starting an token", ",a", 2, std::nullopt, nullptr},
+ {"0x2d starting an token", "-a", 2, std::nullopt, nullptr},
+ {"0x2e starting an token", ".a", 2, std::nullopt, nullptr},
+ {"0x2f starting an token", "/a", 2, std::nullopt, nullptr},
+ {"0x30 starting an token", "0a", 2, std::nullopt, nullptr},
+ {"0x31 starting an token", "1a", 2, std::nullopt, nullptr},
+ {"0x32 starting an token", "2a", 2, std::nullopt, nullptr},
+ {"0x33 starting an token", "3a", 2, std::nullopt, nullptr},
+ {"0x34 starting an token", "4a", 2, std::nullopt, nullptr},
+ {"0x35 starting an token", "5a", 2, std::nullopt, nullptr},
+ {"0x36 starting an token", "6a", 2, std::nullopt, nullptr},
+ {"0x37 starting an token", "7a", 2, std::nullopt, nullptr},
+ {"0x38 starting an token", "8a", 2, std::nullopt, nullptr},
+ {"0x39 starting an token", "9a", 2, std::nullopt, nullptr},
+ {"0x3a starting an token", ":a", 2, std::nullopt, nullptr},
+ {"0x3b starting an token", ";a", 2, std::nullopt, nullptr},
+ {"0x3c starting an token", "<a", 2, std::nullopt, nullptr},
+ {"0x3d starting an token", "=a", 2, std::nullopt, nullptr},
+ {"0x3e starting an token", ">a", 2, std::nullopt, nullptr},
+ {"0x3f starting an token", "?a", 2, std::nullopt, nullptr},
+ {"0x40 starting an token", "@a", 2, std::nullopt, nullptr},
{"0x41 starting an token",
"Aa",
2,
@@ -1650,12 +1649,12 @@
2,
{{Item("Za", Item::kTokenType), {}}},
nullptr},
- {"0x5b starting an token", "[a", 2, absl::nullopt, nullptr},
- {"0x5c starting an token", "\\a", 2, absl::nullopt, nullptr},
- {"0x5d starting an token", "]a", 2, absl::nullopt, nullptr},
- {"0x5e starting an token", "^a", 2, absl::nullopt, nullptr},
- {"0x5f starting an token", "_a", 2, absl::nullopt, nullptr},
- {"0x60 starting an token", "`a", 2, absl::nullopt, nullptr},
+ {"0x5b starting an token", "[a", 2, std::nullopt, nullptr},
+ {"0x5c starting an token", "\\a", 2, std::nullopt, nullptr},
+ {"0x5d starting an token", "]a", 2, std::nullopt, nullptr},
+ {"0x5e starting an token", "^a", 2, std::nullopt, nullptr},
+ {"0x5f starting an token", "_a", 2, std::nullopt, nullptr},
+ {"0x60 starting an token", "`a", 2, std::nullopt, nullptr},
{"0x61 starting an token",
"aa",
2,
@@ -1786,11 +1785,11 @@
2,
{{Item("za", Item::kTokenType), {}}},
nullptr},
- {"0x7b starting an token", "{a", 2, absl::nullopt, nullptr},
- {"0x7c starting an token", "|a", 2, absl::nullopt, nullptr},
- {"0x7d starting an token", "}a", 2, absl::nullopt, nullptr},
- {"0x7e starting an token", "~a", 2, absl::nullopt, nullptr},
- {"0x7f starting an token", "\177a", 2, absl::nullopt, nullptr},
+ {"0x7b starting an token", "{a", 2, std::nullopt, nullptr},
+ {"0x7c starting an token", "|a", 2, std::nullopt, nullptr},
+ {"0x7d starting an token", "}a", 2, std::nullopt, nullptr},
+ {"0x7e starting an token", "~a", 2, std::nullopt, nullptr},
+ {"0x7f starting an token", "\177a", 2, std::nullopt, nullptr},
// token.json
{"basic token - item",
"a_b-c.d3:f%00/*",
@@ -1813,7 +1812,7 @@
const char* name;
const char* raw;
size_t raw_len;
- const absl::optional<List> expected; // nullopt if parse error is expected.
+ const std::optional<List> expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
} list_test_cases[] = {
@@ -1861,99 +1860,88 @@
{Param("q", "9"), TokenParam("r", "w")}}}},
"abc;a=1;b=2;cde_456, (ghi;jk=4 l);q=\"9\";r=w"},
// key-generated.json
- {"0x00 in parameterised list key", "foo; a\000a=1", 10, absl::nullopt,
+ {"0x00 in parameterised list key", "foo; a\000a=1", 10, std::nullopt,
nullptr},
- {"0x01 in parameterised list key", "foo; a\001a=1", 10, absl::nullopt,
+ {"0x01 in parameterised list key", "foo; a\001a=1", 10, std::nullopt,
nullptr},
- {"0x02 in parameterised list key", "foo; a\002a=1", 10, absl::nullopt,
+ {"0x02 in parameterised list key", "foo; a\002a=1", 10, std::nullopt,
nullptr},
- {"0x03 in parameterised list key", "foo; a\003a=1", 10, absl::nullopt,
+ {"0x03 in parameterised list key", "foo; a\003a=1", 10, std::nullopt,
nullptr},
- {"0x04 in parameterised list key", "foo; a\004a=1", 10, absl::nullopt,
+ {"0x04 in parameterised list key", "foo; a\004a=1", 10, std::nullopt,
nullptr},
- {"0x05 in parameterised list key", "foo; a\005a=1", 10, absl::nullopt,
+ {"0x05 in parameterised list key", "foo; a\005a=1", 10, std::nullopt,
nullptr},
- {"0x06 in parameterised list key", "foo; a\006a=1", 10, absl::nullopt,
+ {"0x06 in parameterised list key", "foo; a\006a=1", 10, std::nullopt,
nullptr},
- {"0x07 in parameterised list key", "foo; a\aa=1", 10, absl::nullopt,
+ {"0x07 in parameterised list key", "foo; a\aa=1", 10, std::nullopt,
nullptr},
- {"0x08 in parameterised list key", "foo; a\ba=1", 10, absl::nullopt,
+ {"0x08 in parameterised list key", "foo; a\ba=1", 10, std::nullopt,
nullptr},
- {"0x09 in parameterised list key", "foo; a\ta=1", 10, absl::nullopt,
+ {"0x09 in parameterised list key", "foo; a\ta=1", 10, std::nullopt,
nullptr},
- {"0x0a in parameterised list key", "foo; a\na=1", 10, absl::nullopt,
+ {"0x0a in parameterised list key", "foo; a\na=1", 10, std::nullopt,
nullptr},
- {"0x0b in parameterised list key", "foo; a\va=1", 10, absl::nullopt,
+ {"0x0b in parameterised list key", "foo; a\va=1", 10, std::nullopt,
nullptr},
- {"0x0c in parameterised list key", "foo; a\fa=1", 10, absl::nullopt,
+ {"0x0c in parameterised list key", "foo; a\fa=1", 10, std::nullopt,
nullptr},
- {"0x0d in parameterised list key", "foo; a\ra=1", 10, absl::nullopt,
+ {"0x0d in parameterised list key", "foo; a\ra=1", 10, std::nullopt,
nullptr},
- {"0x0e in parameterised list key", "foo; a\016a=1", 10, absl::nullopt,
+ {"0x0e in parameterised list key", "foo; a\016a=1", 10, std::nullopt,
nullptr},
- {"0x0f in parameterised list key", "foo; a\017a=1", 10, absl::nullopt,
+ {"0x0f in parameterised list key", "foo; a\017a=1", 10, std::nullopt,
nullptr},
- {"0x10 in parameterised list key", "foo; a\020a=1", 10, absl::nullopt,
+ {"0x10 in parameterised list key", "foo; a\020a=1", 10, std::nullopt,
nullptr},
- {"0x11 in parameterised list key", "foo; a\021a=1", 10, absl::nullopt,
+ {"0x11 in parameterised list key", "foo; a\021a=1", 10, std::nullopt,
nullptr},
- {"0x12 in parameterised list key", "foo; a\022a=1", 10, absl::nullopt,
+ {"0x12 in parameterised list key", "foo; a\022a=1", 10, std::nullopt,
nullptr},
- {"0x13 in parameterised list key", "foo; a\023a=1", 10, absl::nullopt,
+ {"0x13 in parameterised list key", "foo; a\023a=1", 10, std::nullopt,
nullptr},
- {"0x14 in parameterised list key", "foo; a\024a=1", 10, absl::nullopt,
+ {"0x14 in parameterised list key", "foo; a\024a=1", 10, std::nullopt,
nullptr},
- {"0x15 in parameterised list key", "foo; a\025a=1", 10, absl::nullopt,
+ {"0x15 in parameterised list key", "foo; a\025a=1", 10, std::nullopt,
nullptr},
- {"0x16 in parameterised list key", "foo; a\026a=1", 10, absl::nullopt,
+ {"0x16 in parameterised list key", "foo; a\026a=1", 10, std::nullopt,
nullptr},
- {"0x17 in parameterised list key", "foo; a\027a=1", 10, absl::nullopt,
+ {"0x17 in parameterised list key", "foo; a\027a=1", 10, std::nullopt,
nullptr},
- {"0x18 in parameterised list key", "foo; a\030a=1", 10, absl::nullopt,
+ {"0x18 in parameterised list key", "foo; a\030a=1", 10, std::nullopt,
nullptr},
- {"0x19 in parameterised list key", "foo; a\031a=1", 10, absl::nullopt,
+ {"0x19 in parameterised list key", "foo; a\031a=1", 10, std::nullopt,
nullptr},
- {"0x1a in parameterised list key", "foo; a\032a=1", 10, absl::nullopt,
+ {"0x1a in parameterised list key", "foo; a\032a=1", 10, std::nullopt,
nullptr},
- {"0x1b in parameterised list key", "foo; a\033a=1", 10, absl::nullopt,
+ {"0x1b in parameterised list key", "foo; a\033a=1", 10, std::nullopt,
nullptr},
- {"0x1c in parameterised list key", "foo; a\034a=1", 10, absl::nullopt,
+ {"0x1c in parameterised list key", "foo; a\034a=1", 10, std::nullopt,
nullptr},
- {"0x1d in parameterised list key", "foo; a\035a=1", 10, absl::nullopt,
+ {"0x1d in parameterised list key", "foo; a\035a=1", 10, std::nullopt,
nullptr},
- {"0x1e in parameterised list key", "foo; a\036a=1", 10, absl::nullopt,
+ {"0x1e in parameterised list key", "foo; a\036a=1", 10, std::nullopt,
nullptr},
- {"0x1f in parameterised list key", "foo; a\037a=1", 10, absl::nullopt,
+ {"0x1f in parameterised list key", "foo; a\037a=1", 10, std::nullopt,
nullptr},
- {"0x20 in parameterised list key", "foo; a a=1", 10, absl::nullopt,
+ {"0x20 in parameterised list key", "foo; a a=1", 10, std::nullopt, nullptr},
+ {"0x21 in parameterised list key", "foo; a!a=1", 10, std::nullopt, nullptr},
+ {"0x22 in parameterised list key", "foo; a\"a=1", 10, std::nullopt,
nullptr},
- {"0x21 in parameterised list key", "foo; a!a=1", 10, absl::nullopt,
- nullptr},
- {"0x22 in parameterised list key", "foo; a\"a=1", 10, absl::nullopt,
- nullptr},
- {"0x23 in parameterised list key", "foo; a#a=1", 10, absl::nullopt,
- nullptr},
- {"0x24 in parameterised list key", "foo; a$a=1", 10, absl::nullopt,
- nullptr},
- {"0x25 in parameterised list key", "foo; a%a=1", 10, absl::nullopt,
- nullptr},
- {"0x26 in parameterised list key", "foo; a&a=1", 10, absl::nullopt,
- nullptr},
- {"0x27 in parameterised list key", "foo; a'a=1", 10, absl::nullopt,
- nullptr},
- {"0x28 in parameterised list key", "foo; a(a=1", 10, absl::nullopt,
- nullptr},
- {"0x29 in parameterised list key", "foo; a)a=1", 10, absl::nullopt,
- nullptr},
+ {"0x23 in parameterised list key", "foo; a#a=1", 10, std::nullopt, nullptr},
+ {"0x24 in parameterised list key", "foo; a$a=1", 10, std::nullopt, nullptr},
+ {"0x25 in parameterised list key", "foo; a%a=1", 10, std::nullopt, nullptr},
+ {"0x26 in parameterised list key", "foo; a&a=1", 10, std::nullopt, nullptr},
+ {"0x27 in parameterised list key", "foo; a'a=1", 10, std::nullopt, nullptr},
+ {"0x28 in parameterised list key", "foo; a(a=1", 10, std::nullopt, nullptr},
+ {"0x29 in parameterised list key", "foo; a)a=1", 10, std::nullopt, nullptr},
{"0x2a in parameterised list key",
"foo; a*a=1",
10,
{{{Item("foo", Item::kTokenType), {Param("a*a", 1)}}}},
"foo;a*a=1"},
- {"0x2b in parameterised list key", "foo; a+a=1", 10, absl::nullopt,
- nullptr},
- {"0x2c in parameterised list key", "foo; a,a=1", 10, absl::nullopt,
- nullptr},
+ {"0x2b in parameterised list key", "foo; a+a=1", 10, std::nullopt, nullptr},
+ {"0x2c in parameterised list key", "foo; a,a=1", 10, std::nullopt, nullptr},
{"0x2d in parameterised list key",
"foo; a-a=1",
10,
@@ -1964,8 +1952,7 @@
10,
{{{Item("foo", Item::kTokenType), {Param("a.a", 1)}}}},
"foo;a.a=1"},
- {"0x2f in parameterised list key", "foo; a/a=1", 10, absl::nullopt,
- nullptr},
+ {"0x2f in parameterised list key", "foo; a/a=1", 10, std::nullopt, nullptr},
{"0x30 in parameterised list key",
"foo; a0a=1",
10,
@@ -2016,90 +2003,54 @@
10,
{{{Item("foo", Item::kTokenType), {Param("a9a", 1)}}}},
"foo;a9a=1"},
- {"0x3a in parameterised list key", "foo; a:a=1", 10, absl::nullopt,
- nullptr},
+ {"0x3a in parameterised list key", "foo; a:a=1", 10, std::nullopt, nullptr},
{"0x3b in parameterised list key",
"foo; a;a=1",
10,
{{{Item("foo", Item::kTokenType), {Param("a", 1)}}}},
"foo;a=1"},
- {"0x3c in parameterised list key", "foo; a<a=1", 10, absl::nullopt,
+ {"0x3c in parameterised list key", "foo; a<a=1", 10, std::nullopt, nullptr},
+ {"0x3d in parameterised list key", "foo; a=a=1", 10, std::nullopt, nullptr},
+ {"0x3e in parameterised list key", "foo; a>a=1", 10, std::nullopt, nullptr},
+ {"0x3f in parameterised list key", "foo; a?a=1", 10, std::nullopt, nullptr},
+ {"0x40 in parameterised list key", "foo; a@a=1", 10, std::nullopt, nullptr},
+ {"0x41 in parameterised list key", "foo; aAa=1", 10, std::nullopt, nullptr},
+ {"0x42 in parameterised list key", "foo; aBa=1", 10, std::nullopt, nullptr},
+ {"0x43 in parameterised list key", "foo; aCa=1", 10, std::nullopt, nullptr},
+ {"0x44 in parameterised list key", "foo; aDa=1", 10, std::nullopt, nullptr},
+ {"0x45 in parameterised list key", "foo; aEa=1", 10, std::nullopt, nullptr},
+ {"0x46 in parameterised list key", "foo; aFa=1", 10, std::nullopt, nullptr},
+ {"0x47 in parameterised list key", "foo; aGa=1", 10, std::nullopt, nullptr},
+ {"0x48 in parameterised list key", "foo; aHa=1", 10, std::nullopt, nullptr},
+ {"0x49 in parameterised list key", "foo; aIa=1", 10, std::nullopt, nullptr},
+ {"0x4a in parameterised list key", "foo; aJa=1", 10, std::nullopt, nullptr},
+ {"0x4b in parameterised list key", "foo; aKa=1", 10, std::nullopt, nullptr},
+ {"0x4c in parameterised list key", "foo; aLa=1", 10, std::nullopt, nullptr},
+ {"0x4d in parameterised list key", "foo; aMa=1", 10, std::nullopt, nullptr},
+ {"0x4e in parameterised list key", "foo; aNa=1", 10, std::nullopt, nullptr},
+ {"0x4f in parameterised list key", "foo; aOa=1", 10, std::nullopt, nullptr},
+ {"0x50 in parameterised list key", "foo; aPa=1", 10, std::nullopt, nullptr},
+ {"0x51 in parameterised list key", "foo; aQa=1", 10, std::nullopt, nullptr},
+ {"0x52 in parameterised list key", "foo; aRa=1", 10, std::nullopt, nullptr},
+ {"0x53 in parameterised list key", "foo; aSa=1", 10, std::nullopt, nullptr},
+ {"0x54 in parameterised list key", "foo; aTa=1", 10, std::nullopt, nullptr},
+ {"0x55 in parameterised list key", "foo; aUa=1", 10, std::nullopt, nullptr},
+ {"0x56 in parameterised list key", "foo; aVa=1", 10, std::nullopt, nullptr},
+ {"0x57 in parameterised list key", "foo; aWa=1", 10, std::nullopt, nullptr},
+ {"0x58 in parameterised list key", "foo; aXa=1", 10, std::nullopt, nullptr},
+ {"0x59 in parameterised list key", "foo; aYa=1", 10, std::nullopt, nullptr},
+ {"0x5a in parameterised list key", "foo; aZa=1", 10, std::nullopt, nullptr},
+ {"0x5b in parameterised list key", "foo; a[a=1", 10, std::nullopt, nullptr},
+ {"0x5c in parameterised list key", "foo; a\\a=1", 10, std::nullopt,
nullptr},
- {"0x3d in parameterised list key", "foo; a=a=1", 10, absl::nullopt,
- nullptr},
- {"0x3e in parameterised list key", "foo; a>a=1", 10, absl::nullopt,
- nullptr},
- {"0x3f in parameterised list key", "foo; a?a=1", 10, absl::nullopt,
- nullptr},
- {"0x40 in parameterised list key", "foo; a@a=1", 10, absl::nullopt,
- nullptr},
- {"0x41 in parameterised list key", "foo; aAa=1", 10, absl::nullopt,
- nullptr},
- {"0x42 in parameterised list key", "foo; aBa=1", 10, absl::nullopt,
- nullptr},
- {"0x43 in parameterised list key", "foo; aCa=1", 10, absl::nullopt,
- nullptr},
- {"0x44 in parameterised list key", "foo; aDa=1", 10, absl::nullopt,
- nullptr},
- {"0x45 in parameterised list key", "foo; aEa=1", 10, absl::nullopt,
- nullptr},
- {"0x46 in parameterised list key", "foo; aFa=1", 10, absl::nullopt,
- nullptr},
- {"0x47 in parameterised list key", "foo; aGa=1", 10, absl::nullopt,
- nullptr},
- {"0x48 in parameterised list key", "foo; aHa=1", 10, absl::nullopt,
- nullptr},
- {"0x49 in parameterised list key", "foo; aIa=1", 10, absl::nullopt,
- nullptr},
- {"0x4a in parameterised list key", "foo; aJa=1", 10, absl::nullopt,
- nullptr},
- {"0x4b in parameterised list key", "foo; aKa=1", 10, absl::nullopt,
- nullptr},
- {"0x4c in parameterised list key", "foo; aLa=1", 10, absl::nullopt,
- nullptr},
- {"0x4d in parameterised list key", "foo; aMa=1", 10, absl::nullopt,
- nullptr},
- {"0x4e in parameterised list key", "foo; aNa=1", 10, absl::nullopt,
- nullptr},
- {"0x4f in parameterised list key", "foo; aOa=1", 10, absl::nullopt,
- nullptr},
- {"0x50 in parameterised list key", "foo; aPa=1", 10, absl::nullopt,
- nullptr},
- {"0x51 in parameterised list key", "foo; aQa=1", 10, absl::nullopt,
- nullptr},
- {"0x52 in parameterised list key", "foo; aRa=1", 10, absl::nullopt,
- nullptr},
- {"0x53 in parameterised list key", "foo; aSa=1", 10, absl::nullopt,
- nullptr},
- {"0x54 in parameterised list key", "foo; aTa=1", 10, absl::nullopt,
- nullptr},
- {"0x55 in parameterised list key", "foo; aUa=1", 10, absl::nullopt,
- nullptr},
- {"0x56 in parameterised list key", "foo; aVa=1", 10, absl::nullopt,
- nullptr},
- {"0x57 in parameterised list key", "foo; aWa=1", 10, absl::nullopt,
- nullptr},
- {"0x58 in parameterised list key", "foo; aXa=1", 10, absl::nullopt,
- nullptr},
- {"0x59 in parameterised list key", "foo; aYa=1", 10, absl::nullopt,
- nullptr},
- {"0x5a in parameterised list key", "foo; aZa=1", 10, absl::nullopt,
- nullptr},
- {"0x5b in parameterised list key", "foo; a[a=1", 10, absl::nullopt,
- nullptr},
- {"0x5c in parameterised list key", "foo; a\\a=1", 10, absl::nullopt,
- nullptr},
- {"0x5d in parameterised list key", "foo; a]a=1", 10, absl::nullopt,
- nullptr},
- {"0x5e in parameterised list key", "foo; a^a=1", 10, absl::nullopt,
- nullptr},
+ {"0x5d in parameterised list key", "foo; a]a=1", 10, std::nullopt, nullptr},
+ {"0x5e in parameterised list key", "foo; a^a=1", 10, std::nullopt, nullptr},
{"0x5f in parameterised list key",
"foo; a_a=1",
10,
{{{Item("foo", Item::kTokenType), {Param("a_a", 1)}}}},
"foo;a_a=1"},
- {"0x60 in parameterised list key", "foo; a`a=1", 10, absl::nullopt,
- nullptr},
+ {"0x60 in parameterised list key", "foo; a`a=1", 10, std::nullopt, nullptr},
{"0x61 in parameterised list key",
"foo; aaa=1",
10,
@@ -2230,215 +2181,211 @@
10,
{{{Item("foo", Item::kTokenType), {Param("aza", 1)}}}},
"foo;aza=1"},
- {"0x7b in parameterised list key", "foo; a{a=1", 10, absl::nullopt,
+ {"0x7b in parameterised list key", "foo; a{a=1", 10, std::nullopt, nullptr},
+ {"0x7c in parameterised list key", "foo; a|a=1", 10, std::nullopt, nullptr},
+ {"0x7d in parameterised list key", "foo; a}a=1", 10, std::nullopt, nullptr},
+ {"0x7e in parameterised list key", "foo; a~a=1", 10, std::nullopt, nullptr},
+ {"0x7f in parameterised list key", "foo; a\177a=1", 10, std::nullopt,
nullptr},
- {"0x7c in parameterised list key", "foo; a|a=1", 10, absl::nullopt,
+ {"0x00 starting a parameterised list key", "foo; \000a=1", 9, std::nullopt,
nullptr},
- {"0x7d in parameterised list key", "foo; a}a=1", 10, absl::nullopt,
+ {"0x01 starting a parameterised list key", "foo; \001a=1", 9, std::nullopt,
nullptr},
- {"0x7e in parameterised list key", "foo; a~a=1", 10, absl::nullopt,
+ {"0x02 starting a parameterised list key", "foo; \002a=1", 9, std::nullopt,
nullptr},
- {"0x7f in parameterised list key", "foo; a\177a=1", 10, absl::nullopt,
+ {"0x03 starting a parameterised list key", "foo; \003a=1", 9, std::nullopt,
nullptr},
- {"0x00 starting a parameterised list key", "foo; \000a=1", 9, absl::nullopt,
+ {"0x04 starting a parameterised list key", "foo; \004a=1", 9, std::nullopt,
nullptr},
- {"0x01 starting a parameterised list key", "foo; \001a=1", 9, absl::nullopt,
+ {"0x05 starting a parameterised list key", "foo; \005a=1", 9, std::nullopt,
nullptr},
- {"0x02 starting a parameterised list key", "foo; \002a=1", 9, absl::nullopt,
+ {"0x06 starting a parameterised list key", "foo; \006a=1", 9, std::nullopt,
nullptr},
- {"0x03 starting a parameterised list key", "foo; \003a=1", 9, absl::nullopt,
+ {"0x07 starting a parameterised list key", "foo; \aa=1", 9, std::nullopt,
nullptr},
- {"0x04 starting a parameterised list key", "foo; \004a=1", 9, absl::nullopt,
+ {"0x08 starting a parameterised list key", "foo; \ba=1", 9, std::nullopt,
nullptr},
- {"0x05 starting a parameterised list key", "foo; \005a=1", 9, absl::nullopt,
+ {"0x09 starting a parameterised list key", "foo; \ta=1", 9, std::nullopt,
nullptr},
- {"0x06 starting a parameterised list key", "foo; \006a=1", 9, absl::nullopt,
+ {"0x0a starting a parameterised list key", "foo; \na=1", 9, std::nullopt,
nullptr},
- {"0x07 starting a parameterised list key", "foo; \aa=1", 9, absl::nullopt,
+ {"0x0b starting a parameterised list key", "foo; \va=1", 9, std::nullopt,
nullptr},
- {"0x08 starting a parameterised list key", "foo; \ba=1", 9, absl::nullopt,
+ {"0x0c starting a parameterised list key", "foo; \fa=1", 9, std::nullopt,
nullptr},
- {"0x09 starting a parameterised list key", "foo; \ta=1", 9, absl::nullopt,
+ {"0x0d starting a parameterised list key", "foo; \ra=1", 9, std::nullopt,
nullptr},
- {"0x0a starting a parameterised list key", "foo; \na=1", 9, absl::nullopt,
+ {"0x0e starting a parameterised list key", "foo; \016a=1", 9, std::nullopt,
nullptr},
- {"0x0b starting a parameterised list key", "foo; \va=1", 9, absl::nullopt,
+ {"0x0f starting a parameterised list key", "foo; \017a=1", 9, std::nullopt,
nullptr},
- {"0x0c starting a parameterised list key", "foo; \fa=1", 9, absl::nullopt,
+ {"0x10 starting a parameterised list key", "foo; \020a=1", 9, std::nullopt,
nullptr},
- {"0x0d starting a parameterised list key", "foo; \ra=1", 9, absl::nullopt,
+ {"0x11 starting a parameterised list key", "foo; \021a=1", 9, std::nullopt,
nullptr},
- {"0x0e starting a parameterised list key", "foo; \016a=1", 9, absl::nullopt,
+ {"0x12 starting a parameterised list key", "foo; \022a=1", 9, std::nullopt,
nullptr},
- {"0x0f starting a parameterised list key", "foo; \017a=1", 9, absl::nullopt,
+ {"0x13 starting a parameterised list key", "foo; \023a=1", 9, std::nullopt,
nullptr},
- {"0x10 starting a parameterised list key", "foo; \020a=1", 9, absl::nullopt,
+ {"0x14 starting a parameterised list key", "foo; \024a=1", 9, std::nullopt,
nullptr},
- {"0x11 starting a parameterised list key", "foo; \021a=1", 9, absl::nullopt,
+ {"0x15 starting a parameterised list key", "foo; \025a=1", 9, std::nullopt,
nullptr},
- {"0x12 starting a parameterised list key", "foo; \022a=1", 9, absl::nullopt,
+ {"0x16 starting a parameterised list key", "foo; \026a=1", 9, std::nullopt,
nullptr},
- {"0x13 starting a parameterised list key", "foo; \023a=1", 9, absl::nullopt,
+ {"0x17 starting a parameterised list key", "foo; \027a=1", 9, std::nullopt,
nullptr},
- {"0x14 starting a parameterised list key", "foo; \024a=1", 9, absl::nullopt,
+ {"0x18 starting a parameterised list key", "foo; \030a=1", 9, std::nullopt,
nullptr},
- {"0x15 starting a parameterised list key", "foo; \025a=1", 9, absl::nullopt,
+ {"0x19 starting a parameterised list key", "foo; \031a=1", 9, std::nullopt,
nullptr},
- {"0x16 starting a parameterised list key", "foo; \026a=1", 9, absl::nullopt,
+ {"0x1a starting a parameterised list key", "foo; \032a=1", 9, std::nullopt,
nullptr},
- {"0x17 starting a parameterised list key", "foo; \027a=1", 9, absl::nullopt,
+ {"0x1b starting a parameterised list key", "foo; \033a=1", 9, std::nullopt,
nullptr},
- {"0x18 starting a parameterised list key", "foo; \030a=1", 9, absl::nullopt,
+ {"0x1c starting a parameterised list key", "foo; \034a=1", 9, std::nullopt,
nullptr},
- {"0x19 starting a parameterised list key", "foo; \031a=1", 9, absl::nullopt,
+ {"0x1d starting a parameterised list key", "foo; \035a=1", 9, std::nullopt,
nullptr},
- {"0x1a starting a parameterised list key", "foo; \032a=1", 9, absl::nullopt,
+ {"0x1e starting a parameterised list key", "foo; \036a=1", 9, std::nullopt,
nullptr},
- {"0x1b starting a parameterised list key", "foo; \033a=1", 9, absl::nullopt,
- nullptr},
- {"0x1c starting a parameterised list key", "foo; \034a=1", 9, absl::nullopt,
- nullptr},
- {"0x1d starting a parameterised list key", "foo; \035a=1", 9, absl::nullopt,
- nullptr},
- {"0x1e starting a parameterised list key", "foo; \036a=1", 9, absl::nullopt,
- nullptr},
- {"0x1f starting a parameterised list key", "foo; \037a=1", 9, absl::nullopt,
+ {"0x1f starting a parameterised list key", "foo; \037a=1", 9, std::nullopt,
nullptr},
{"0x20 starting a parameterised list key",
"foo; a=1",
9,
{{{Item("foo", Item::kTokenType), {Param("a", 1)}}}},
"foo;a=1"},
- {"0x21 starting a parameterised list key", "foo; !a=1", 9, absl::nullopt,
+ {"0x21 starting a parameterised list key", "foo; !a=1", 9, std::nullopt,
nullptr},
- {"0x22 starting a parameterised list key", "foo; \"a=1", 9, absl::nullopt,
+ {"0x22 starting a parameterised list key", "foo; \"a=1", 9, std::nullopt,
nullptr},
- {"0x23 starting a parameterised list key", "foo; #a=1", 9, absl::nullopt,
+ {"0x23 starting a parameterised list key", "foo; #a=1", 9, std::nullopt,
nullptr},
- {"0x24 starting a parameterised list key", "foo; $a=1", 9, absl::nullopt,
+ {"0x24 starting a parameterised list key", "foo; $a=1", 9, std::nullopt,
nullptr},
- {"0x25 starting a parameterised list key", "foo; %a=1", 9, absl::nullopt,
+ {"0x25 starting a parameterised list key", "foo; %a=1", 9, std::nullopt,
nullptr},
- {"0x26 starting a parameterised list key", "foo; &a=1", 9, absl::nullopt,
+ {"0x26 starting a parameterised list key", "foo; &a=1", 9, std::nullopt,
nullptr},
- {"0x27 starting a parameterised list key", "foo; 'a=1", 9, absl::nullopt,
+ {"0x27 starting a parameterised list key", "foo; 'a=1", 9, std::nullopt,
nullptr},
- {"0x28 starting a parameterised list key", "foo; (a=1", 9, absl::nullopt,
+ {"0x28 starting a parameterised list key", "foo; (a=1", 9, std::nullopt,
nullptr},
- {"0x29 starting a parameterised list key", "foo; )a=1", 9, absl::nullopt,
+ {"0x29 starting a parameterised list key", "foo; )a=1", 9, std::nullopt,
nullptr},
{"0x2a starting a parameterised list key",
"foo; *a=1",
9,
{{{Item("foo", Item::kTokenType), {Param("*a", 1)}}}},
"foo;*a=1"},
- {"0x2b starting a parameterised list key", "foo; +a=1", 9, absl::nullopt,
+ {"0x2b starting a parameterised list key", "foo; +a=1", 9, std::nullopt,
nullptr},
- {"0x2c starting a parameterised list key", "foo; ,a=1", 9, absl::nullopt,
+ {"0x2c starting a parameterised list key", "foo; ,a=1", 9, std::nullopt,
nullptr},
- {"0x2d starting a parameterised list key", "foo; -a=1", 9, absl::nullopt,
+ {"0x2d starting a parameterised list key", "foo; -a=1", 9, std::nullopt,
nullptr},
- {"0x2e starting a parameterised list key", "foo; .a=1", 9, absl::nullopt,
+ {"0x2e starting a parameterised list key", "foo; .a=1", 9, std::nullopt,
nullptr},
- {"0x2f starting a parameterised list key", "foo; /a=1", 9, absl::nullopt,
+ {"0x2f starting a parameterised list key", "foo; /a=1", 9, std::nullopt,
nullptr},
- {"0x30 starting a parameterised list key", "foo; 0a=1", 9, absl::nullopt,
+ {"0x30 starting a parameterised list key", "foo; 0a=1", 9, std::nullopt,
nullptr},
- {"0x31 starting a parameterised list key", "foo; 1a=1", 9, absl::nullopt,
+ {"0x31 starting a parameterised list key", "foo; 1a=1", 9, std::nullopt,
nullptr},
- {"0x32 starting a parameterised list key", "foo; 2a=1", 9, absl::nullopt,
+ {"0x32 starting a parameterised list key", "foo; 2a=1", 9, std::nullopt,
nullptr},
- {"0x33 starting a parameterised list key", "foo; 3a=1", 9, absl::nullopt,
+ {"0x33 starting a parameterised list key", "foo; 3a=1", 9, std::nullopt,
nullptr},
- {"0x34 starting a parameterised list key", "foo; 4a=1", 9, absl::nullopt,
+ {"0x34 starting a parameterised list key", "foo; 4a=1", 9, std::nullopt,
nullptr},
- {"0x35 starting a parameterised list key", "foo; 5a=1", 9, absl::nullopt,
+ {"0x35 starting a parameterised list key", "foo; 5a=1", 9, std::nullopt,
nullptr},
- {"0x36 starting a parameterised list key", "foo; 6a=1", 9, absl::nullopt,
+ {"0x36 starting a parameterised list key", "foo; 6a=1", 9, std::nullopt,
nullptr},
- {"0x37 starting a parameterised list key", "foo; 7a=1", 9, absl::nullopt,
+ {"0x37 starting a parameterised list key", "foo; 7a=1", 9, std::nullopt,
nullptr},
- {"0x38 starting a parameterised list key", "foo; 8a=1", 9, absl::nullopt,
+ {"0x38 starting a parameterised list key", "foo; 8a=1", 9, std::nullopt,
nullptr},
- {"0x39 starting a parameterised list key", "foo; 9a=1", 9, absl::nullopt,
+ {"0x39 starting a parameterised list key", "foo; 9a=1", 9, std::nullopt,
nullptr},
- {"0x3a starting a parameterised list key", "foo; :a=1", 9, absl::nullopt,
+ {"0x3a starting a parameterised list key", "foo; :a=1", 9, std::nullopt,
nullptr},
- {"0x3b starting a parameterised list key", "foo; ;a=1", 9, absl::nullopt,
+ {"0x3b starting a parameterised list key", "foo; ;a=1", 9, std::nullopt,
nullptr},
- {"0x3c starting a parameterised list key", "foo; <a=1", 9, absl::nullopt,
+ {"0x3c starting a parameterised list key", "foo; <a=1", 9, std::nullopt,
nullptr},
- {"0x3d starting a parameterised list key", "foo; =a=1", 9, absl::nullopt,
+ {"0x3d starting a parameterised list key", "foo; =a=1", 9, std::nullopt,
nullptr},
- {"0x3e starting a parameterised list key", "foo; >a=1", 9, absl::nullopt,
+ {"0x3e starting a parameterised list key", "foo; >a=1", 9, std::nullopt,
nullptr},
- {"0x3f starting a parameterised list key", "foo; ?a=1", 9, absl::nullopt,
+ {"0x3f starting a parameterised list key", "foo; ?a=1", 9, std::nullopt,
nullptr},
- {"0x40 starting a parameterised list key", "foo; @a=1", 9, absl::nullopt,
+ {"0x40 starting a parameterised list key", "foo; @a=1", 9, std::nullopt,
nullptr},
- {"0x41 starting a parameterised list key", "foo; Aa=1", 9, absl::nullopt,
+ {"0x41 starting a parameterised list key", "foo; Aa=1", 9, std::nullopt,
nullptr},
- {"0x42 starting a parameterised list key", "foo; Ba=1", 9, absl::nullopt,
+ {"0x42 starting a parameterised list key", "foo; Ba=1", 9, std::nullopt,
nullptr},
- {"0x43 starting a parameterised list key", "foo; Ca=1", 9, absl::nullopt,
+ {"0x43 starting a parameterised list key", "foo; Ca=1", 9, std::nullopt,
nullptr},
- {"0x44 starting a parameterised list key", "foo; Da=1", 9, absl::nullopt,
+ {"0x44 starting a parameterised list key", "foo; Da=1", 9, std::nullopt,
nullptr},
- {"0x45 starting a parameterised list key", "foo; Ea=1", 9, absl::nullopt,
+ {"0x45 starting a parameterised list key", "foo; Ea=1", 9, std::nullopt,
nullptr},
- {"0x46 starting a parameterised list key", "foo; Fa=1", 9, absl::nullopt,
+ {"0x46 starting a parameterised list key", "foo; Fa=1", 9, std::nullopt,
nullptr},
- {"0x47 starting a parameterised list key", "foo; Ga=1", 9, absl::nullopt,
+ {"0x47 starting a parameterised list key", "foo; Ga=1", 9, std::nullopt,
nullptr},
- {"0x48 starting a parameterised list key", "foo; Ha=1", 9, absl::nullopt,
+ {"0x48 starting a parameterised list key", "foo; Ha=1", 9, std::nullopt,
nullptr},
- {"0x49 starting a parameterised list key", "foo; Ia=1", 9, absl::nullopt,
+ {"0x49 starting a parameterised list key", "foo; Ia=1", 9, std::nullopt,
nullptr},
- {"0x4a starting a parameterised list key", "foo; Ja=1", 9, absl::nullopt,
+ {"0x4a starting a parameterised list key", "foo; Ja=1", 9, std::nullopt,
nullptr},
- {"0x4b starting a parameterised list key", "foo; Ka=1", 9, absl::nullopt,
+ {"0x4b starting a parameterised list key", "foo; Ka=1", 9, std::nullopt,
nullptr},
- {"0x4c starting a parameterised list key", "foo; La=1", 9, absl::nullopt,
+ {"0x4c starting a parameterised list key", "foo; La=1", 9, std::nullopt,
nullptr},
- {"0x4d starting a parameterised list key", "foo; Ma=1", 9, absl::nullopt,
+ {"0x4d starting a parameterised list key", "foo; Ma=1", 9, std::nullopt,
nullptr},
- {"0x4e starting a parameterised list key", "foo; Na=1", 9, absl::nullopt,
+ {"0x4e starting a parameterised list key", "foo; Na=1", 9, std::nullopt,
nullptr},
- {"0x4f starting a parameterised list key", "foo; Oa=1", 9, absl::nullopt,
+ {"0x4f starting a parameterised list key", "foo; Oa=1", 9, std::nullopt,
nullptr},
- {"0x50 starting a parameterised list key", "foo; Pa=1", 9, absl::nullopt,
+ {"0x50 starting a parameterised list key", "foo; Pa=1", 9, std::nullopt,
nullptr},
- {"0x51 starting a parameterised list key", "foo; Qa=1", 9, absl::nullopt,
+ {"0x51 starting a parameterised list key", "foo; Qa=1", 9, std::nullopt,
nullptr},
- {"0x52 starting a parameterised list key", "foo; Ra=1", 9, absl::nullopt,
+ {"0x52 starting a parameterised list key", "foo; Ra=1", 9, std::nullopt,
nullptr},
- {"0x53 starting a parameterised list key", "foo; Sa=1", 9, absl::nullopt,
+ {"0x53 starting a parameterised list key", "foo; Sa=1", 9, std::nullopt,
nullptr},
- {"0x54 starting a parameterised list key", "foo; Ta=1", 9, absl::nullopt,
+ {"0x54 starting a parameterised list key", "foo; Ta=1", 9, std::nullopt,
nullptr},
- {"0x55 starting a parameterised list key", "foo; Ua=1", 9, absl::nullopt,
+ {"0x55 starting a parameterised list key", "foo; Ua=1", 9, std::nullopt,
nullptr},
- {"0x56 starting a parameterised list key", "foo; Va=1", 9, absl::nullopt,
+ {"0x56 starting a parameterised list key", "foo; Va=1", 9, std::nullopt,
nullptr},
- {"0x57 starting a parameterised list key", "foo; Wa=1", 9, absl::nullopt,
+ {"0x57 starting a parameterised list key", "foo; Wa=1", 9, std::nullopt,
nullptr},
- {"0x58 starting a parameterised list key", "foo; Xa=1", 9, absl::nullopt,
+ {"0x58 starting a parameterised list key", "foo; Xa=1", 9, std::nullopt,
nullptr},
- {"0x59 starting a parameterised list key", "foo; Ya=1", 9, absl::nullopt,
+ {"0x59 starting a parameterised list key", "foo; Ya=1", 9, std::nullopt,
nullptr},
- {"0x5a starting a parameterised list key", "foo; Za=1", 9, absl::nullopt,
+ {"0x5a starting a parameterised list key", "foo; Za=1", 9, std::nullopt,
nullptr},
- {"0x5b starting a parameterised list key", "foo; [a=1", 9, absl::nullopt,
+ {"0x5b starting a parameterised list key", "foo; [a=1", 9, std::nullopt,
nullptr},
- {"0x5c starting a parameterised list key", "foo; \\a=1", 9, absl::nullopt,
+ {"0x5c starting a parameterised list key", "foo; \\a=1", 9, std::nullopt,
nullptr},
- {"0x5d starting a parameterised list key", "foo; ]a=1", 9, absl::nullopt,
+ {"0x5d starting a parameterised list key", "foo; ]a=1", 9, std::nullopt,
nullptr},
- {"0x5e starting a parameterised list key", "foo; ^a=1", 9, absl::nullopt,
+ {"0x5e starting a parameterised list key", "foo; ^a=1", 9, std::nullopt,
nullptr},
- {"0x5f starting a parameterised list key", "foo; _a=1", 9, absl::nullopt,
+ {"0x5f starting a parameterised list key", "foo; _a=1", 9, std::nullopt,
nullptr},
- {"0x60 starting a parameterised list key", "foo; `a=1", 9, absl::nullopt,
+ {"0x60 starting a parameterised list key", "foo; `a=1", 9, std::nullopt,
nullptr},
{"0x61 starting a parameterised list key",
"foo; aa=1",
@@ -2570,15 +2517,15 @@
9,
{{{Item("foo", Item::kTokenType), {Param("za", 1)}}}},
"foo;za=1"},
- {"0x7b starting a parameterised list key", "foo; {a=1", 9, absl::nullopt,
+ {"0x7b starting a parameterised list key", "foo; {a=1", 9, std::nullopt,
nullptr},
- {"0x7c starting a parameterised list key", "foo; |a=1", 9, absl::nullopt,
+ {"0x7c starting a parameterised list key", "foo; |a=1", 9, std::nullopt,
nullptr},
- {"0x7d starting a parameterised list key", "foo; }a=1", 9, absl::nullopt,
+ {"0x7d starting a parameterised list key", "foo; }a=1", 9, std::nullopt,
nullptr},
- {"0x7e starting a parameterised list key", "foo; ~a=1", 9, absl::nullopt,
+ {"0x7e starting a parameterised list key", "foo; ~a=1", 9, std::nullopt,
nullptr},
- {"0x7f starting a parameterised list key", "foo; \177a=1", 9, absl::nullopt,
+ {"0x7f starting a parameterised list key", "foo; \177a=1", 9, std::nullopt,
nullptr},
// list.json
{"basic list",
@@ -2613,9 +2560,9 @@
5,
{{{Integer(1), {}}, {Integer(42), {}}}},
"1, 42"},
- {"trailing comma list", "1, 42,", 6, absl::nullopt, nullptr},
- {"empty item list", "1,,42", 5, absl::nullopt, nullptr},
- {"empty item list (multiple field lines)", "1, , 42", 7, absl::nullopt,
+ {"trailing comma list", "1, 42,", 6, std::nullopt, nullptr},
+ {"empty item list", "1,,42", 5, std::nullopt, nullptr},
+ {"empty item list (multiple field lines)", "1, , 42", 7, std::nullopt,
nullptr},
// listlist.json
{"basic list of lists",
@@ -2646,14 +2593,14 @@
11,
{{{{{Integer(1), {}}, {Integer(42), {}}}, {}}}},
"(1 42)"},
- {"wrong whitespace list of lists", "(1\t 42)", 7, absl::nullopt, nullptr},
- {"no trailing parenthesis list of lists", "(1 42", 5, absl::nullopt,
+ {"wrong whitespace list of lists", "(1\t 42)", 7, std::nullopt, nullptr},
+ {"no trailing parenthesis list of lists", "(1 42", 5, std::nullopt,
nullptr},
{"no trailing parenthesis middle list of lists", "(1 2, (42 43)", 13,
- absl::nullopt, nullptr},
- {"no spaces in inner-list", "(abc\"def\"?0123*dXZ3*xyz)", 24, absl::nullopt,
+ std::nullopt, nullptr},
+ {"no spaces in inner-list", "(abc\"def\"?0123*dXZ3*xyz)", 24, std::nullopt,
nullptr},
- {"no closing parenthesis", "(", 1, absl::nullopt, nullptr},
+ {"no closing parenthesis", "(", 1, std::nullopt, nullptr},
// param-list.json
{"basic parameterised list",
"abc_123;a=1;b=2; cdef_456, ghi;q=9;r=\"+w\"",
@@ -2686,11 +2633,11 @@
{Item("text/plain", Item::kTokenType), {DoubleParam("q", 0.500000)}}}},
"text/html, text/plain;q=0.5"},
{"whitespace before = parameterised list", "text/html, text/plain;q =0.5",
- 28, absl::nullopt, nullptr},
+ 28, std::nullopt, nullptr},
{"whitespace after = parameterised list", "text/html, text/plain;q= 0.5",
- 28, absl::nullopt, nullptr},
+ 28, std::nullopt, nullptr},
{"whitespace before ; parameterised list", "text/html, text/plain ;q=0.5",
- 28, absl::nullopt, nullptr},
+ 28, std::nullopt, nullptr},
{"whitespace after ; parameterised list",
"text/html, text/plain; q=0.5",
28,
@@ -2711,9 +2658,9 @@
{Item("text/plain", Item::kTokenType), {DoubleParam("q", 0.500000)}}}},
"text/html, text/plain;q=0.5"},
{"trailing comma parameterised list", "text/html,text/plain;q=0.5,", 27,
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
{"empty item parameterised list", "text/html,,text/plain;q=0.5,", 28,
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
// param-listlist.json
{"parameterised inner list",
"(abc_123);a=1;b=2, cdef_456",
@@ -2757,7 +2704,7 @@
const char* name;
const char* raw;
size_t raw_len;
- const absl::optional<Dictionary>
+ const std::optional<Dictionary>
expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
@@ -2812,8 +2759,8 @@
15,
{Dictionary{{{"a", {Integer(1), {}}}, {"b", {Integer(2), {}}}}}},
"a=1, b=2"},
- {"whitespace before = dictionary", "a =1, b=2", 9, absl::nullopt, nullptr},
- {"whitespace after = dictionary", "a=1, b= 2", 9, absl::nullopt, nullptr},
+ {"whitespace before = dictionary", "a =1, b=2", 9, std::nullopt, nullptr},
+ {"whitespace after = dictionary", "a=1, b= 2", 9, std::nullopt, nullptr},
{"two lines dictionary",
"a=1, b=2",
8,
@@ -2857,16 +2804,16 @@
{"b", {Item(true), {Param("foo", 9)}}},
{"c", {Integer(3), {}}}}}},
"a=1, b;foo=9, c=3"},
- {"trailing comma dictionary", "a=1, b=2,", 9, absl::nullopt, nullptr},
- {"empty item dictionary", "a=1,,b=2,", 9, absl::nullopt, nullptr},
+ {"trailing comma dictionary", "a=1, b=2,", 9, std::nullopt, nullptr},
+ {"empty item dictionary", "a=1,,b=2,", 9, std::nullopt, nullptr},
{"duplicate key dictionary",
"a=1,b=2,a=3",
11,
{Dictionary{{{"a", {Integer(3), {}}}, {"b", {Integer(2), {}}}}}},
"a=3, b=2"},
- {"numeric key dictionary", "a=1,1b=2,a=1", 12, absl::nullopt, nullptr},
- {"uppercase key dictionary", "a=1,B=2,a=1", 11, absl::nullopt, nullptr},
- {"bad key dictionary", "a=1,b!=2,a=1", 12, absl::nullopt, nullptr},
+ {"numeric key dictionary", "a=1,1b=2,a=1", 12, std::nullopt, nullptr},
+ {"uppercase key dictionary", "a=1,B=2,a=1", 11, std::nullopt, nullptr},
+ {"bad key dictionary", "a=1,b!=2,a=1", 12, std::nullopt, nullptr},
// examples.json
{"Example-DictHeader",
"en=\"Applepie\", da=:w4ZibGV0w6ZydGU=:",
@@ -2913,202 +2860,202 @@
{Dictionary{{{"foo", {Integer(1), {}}}, {"bar", {Integer(2), {}}}}}},
"foo=1, bar=2"},
// key-generated.json
- {"0x00 as a single-character dictionary key", "\000=1", 3, absl::nullopt,
+ {"0x00 as a single-character dictionary key", "\000=1", 3, std::nullopt,
nullptr},
- {"0x01 as a single-character dictionary key", "\001=1", 3, absl::nullopt,
+ {"0x01 as a single-character dictionary key", "\001=1", 3, std::nullopt,
nullptr},
- {"0x02 as a single-character dictionary key", "\002=1", 3, absl::nullopt,
+ {"0x02 as a single-character dictionary key", "\002=1", 3, std::nullopt,
nullptr},
- {"0x03 as a single-character dictionary key", "\003=1", 3, absl::nullopt,
+ {"0x03 as a single-character dictionary key", "\003=1", 3, std::nullopt,
nullptr},
- {"0x04 as a single-character dictionary key", "\004=1", 3, absl::nullopt,
+ {"0x04 as a single-character dictionary key", "\004=1", 3, std::nullopt,
nullptr},
- {"0x05 as a single-character dictionary key", "\005=1", 3, absl::nullopt,
+ {"0x05 as a single-character dictionary key", "\005=1", 3, std::nullopt,
nullptr},
- {"0x06 as a single-character dictionary key", "\006=1", 3, absl::nullopt,
+ {"0x06 as a single-character dictionary key", "\006=1", 3, std::nullopt,
nullptr},
- {"0x07 as a single-character dictionary key", "\a=1", 3, absl::nullopt,
+ {"0x07 as a single-character dictionary key", "\a=1", 3, std::nullopt,
nullptr},
- {"0x08 as a single-character dictionary key", "\b=1", 3, absl::nullopt,
+ {"0x08 as a single-character dictionary key", "\b=1", 3, std::nullopt,
nullptr},
- {"0x09 as a single-character dictionary key", "\t=1", 3, absl::nullopt,
+ {"0x09 as a single-character dictionary key", "\t=1", 3, std::nullopt,
nullptr},
- {"0x0a as a single-character dictionary key", "\n=1", 3, absl::nullopt,
+ {"0x0a as a single-character dictionary key", "\n=1", 3, std::nullopt,
nullptr},
- {"0x0b as a single-character dictionary key", "\v=1", 3, absl::nullopt,
+ {"0x0b as a single-character dictionary key", "\v=1", 3, std::nullopt,
nullptr},
- {"0x0c as a single-character dictionary key", "\f=1", 3, absl::nullopt,
+ {"0x0c as a single-character dictionary key", "\f=1", 3, std::nullopt,
nullptr},
- {"0x0d as a single-character dictionary key", "\r=1", 3, absl::nullopt,
+ {"0x0d as a single-character dictionary key", "\r=1", 3, std::nullopt,
nullptr},
- {"0x0e as a single-character dictionary key", "\016=1", 3, absl::nullopt,
+ {"0x0e as a single-character dictionary key", "\016=1", 3, std::nullopt,
nullptr},
- {"0x0f as a single-character dictionary key", "\017=1", 3, absl::nullopt,
+ {"0x0f as a single-character dictionary key", "\017=1", 3, std::nullopt,
nullptr},
- {"0x10 as a single-character dictionary key", "\020=1", 3, absl::nullopt,
+ {"0x10 as a single-character dictionary key", "\020=1", 3, std::nullopt,
nullptr},
- {"0x11 as a single-character dictionary key", "\021=1", 3, absl::nullopt,
+ {"0x11 as a single-character dictionary key", "\021=1", 3, std::nullopt,
nullptr},
- {"0x12 as a single-character dictionary key", "\022=1", 3, absl::nullopt,
+ {"0x12 as a single-character dictionary key", "\022=1", 3, std::nullopt,
nullptr},
- {"0x13 as a single-character dictionary key", "\023=1", 3, absl::nullopt,
+ {"0x13 as a single-character dictionary key", "\023=1", 3, std::nullopt,
nullptr},
- {"0x14 as a single-character dictionary key", "\024=1", 3, absl::nullopt,
+ {"0x14 as a single-character dictionary key", "\024=1", 3, std::nullopt,
nullptr},
- {"0x15 as a single-character dictionary key", "\025=1", 3, absl::nullopt,
+ {"0x15 as a single-character dictionary key", "\025=1", 3, std::nullopt,
nullptr},
- {"0x16 as a single-character dictionary key", "\026=1", 3, absl::nullopt,
+ {"0x16 as a single-character dictionary key", "\026=1", 3, std::nullopt,
nullptr},
- {"0x17 as a single-character dictionary key", "\027=1", 3, absl::nullopt,
+ {"0x17 as a single-character dictionary key", "\027=1", 3, std::nullopt,
nullptr},
- {"0x18 as a single-character dictionary key", "\030=1", 3, absl::nullopt,
+ {"0x18 as a single-character dictionary key", "\030=1", 3, std::nullopt,
nullptr},
- {"0x19 as a single-character dictionary key", "\031=1", 3, absl::nullopt,
+ {"0x19 as a single-character dictionary key", "\031=1", 3, std::nullopt,
nullptr},
- {"0x1a as a single-character dictionary key", "\032=1", 3, absl::nullopt,
+ {"0x1a as a single-character dictionary key", "\032=1", 3, std::nullopt,
nullptr},
- {"0x1b as a single-character dictionary key", "\033=1", 3, absl::nullopt,
+ {"0x1b as a single-character dictionary key", "\033=1", 3, std::nullopt,
nullptr},
- {"0x1c as a single-character dictionary key", "\034=1", 3, absl::nullopt,
+ {"0x1c as a single-character dictionary key", "\034=1", 3, std::nullopt,
nullptr},
- {"0x1d as a single-character dictionary key", "\035=1", 3, absl::nullopt,
+ {"0x1d as a single-character dictionary key", "\035=1", 3, std::nullopt,
nullptr},
- {"0x1e as a single-character dictionary key", "\036=1", 3, absl::nullopt,
+ {"0x1e as a single-character dictionary key", "\036=1", 3, std::nullopt,
nullptr},
- {"0x1f as a single-character dictionary key", "\037=1", 3, absl::nullopt,
+ {"0x1f as a single-character dictionary key", "\037=1", 3, std::nullopt,
nullptr},
- {"0x20 as a single-character dictionary key", "=1", 2, absl::nullopt,
+ {"0x20 as a single-character dictionary key", "=1", 2, std::nullopt,
nullptr},
- {"0x21 as a single-character dictionary key", "!=1", 3, absl::nullopt,
+ {"0x21 as a single-character dictionary key", "!=1", 3, std::nullopt,
nullptr},
- {"0x22 as a single-character dictionary key", "\"=1", 3, absl::nullopt,
+ {"0x22 as a single-character dictionary key", "\"=1", 3, std::nullopt,
nullptr},
- {"0x23 as a single-character dictionary key", "#=1", 3, absl::nullopt,
+ {"0x23 as a single-character dictionary key", "#=1", 3, std::nullopt,
nullptr},
- {"0x24 as a single-character dictionary key", "$=1", 3, absl::nullopt,
+ {"0x24 as a single-character dictionary key", "$=1", 3, std::nullopt,
nullptr},
- {"0x25 as a single-character dictionary key", "%=1", 3, absl::nullopt,
+ {"0x25 as a single-character dictionary key", "%=1", 3, std::nullopt,
nullptr},
- {"0x26 as a single-character dictionary key", "&=1", 3, absl::nullopt,
+ {"0x26 as a single-character dictionary key", "&=1", 3, std::nullopt,
nullptr},
- {"0x27 as a single-character dictionary key", "'=1", 3, absl::nullopt,
+ {"0x27 as a single-character dictionary key", "'=1", 3, std::nullopt,
nullptr},
- {"0x28 as a single-character dictionary key", "(=1", 3, absl::nullopt,
+ {"0x28 as a single-character dictionary key", "(=1", 3, std::nullopt,
nullptr},
- {"0x29 as a single-character dictionary key", ")=1", 3, absl::nullopt,
+ {"0x29 as a single-character dictionary key", ")=1", 3, std::nullopt,
nullptr},
{"0x2a as a single-character dictionary key",
"*=1",
3,
{Dictionary{{{"*", {Integer(1), {}}}}}},
nullptr},
- {"0x2b as a single-character dictionary key", "+=1", 3, absl::nullopt,
+ {"0x2b as a single-character dictionary key", "+=1", 3, std::nullopt,
nullptr},
- {"0x2c as a single-character dictionary key", ",=1", 3, absl::nullopt,
+ {"0x2c as a single-character dictionary key", ",=1", 3, std::nullopt,
nullptr},
- {"0x2d as a single-character dictionary key", "-=1", 3, absl::nullopt,
+ {"0x2d as a single-character dictionary key", "-=1", 3, std::nullopt,
nullptr},
- {"0x2e as a single-character dictionary key", ".=1", 3, absl::nullopt,
+ {"0x2e as a single-character dictionary key", ".=1", 3, std::nullopt,
nullptr},
- {"0x2f as a single-character dictionary key", "/=1", 3, absl::nullopt,
+ {"0x2f as a single-character dictionary key", "/=1", 3, std::nullopt,
nullptr},
- {"0x30 as a single-character dictionary key", "0=1", 3, absl::nullopt,
+ {"0x30 as a single-character dictionary key", "0=1", 3, std::nullopt,
nullptr},
- {"0x31 as a single-character dictionary key", "1=1", 3, absl::nullopt,
+ {"0x31 as a single-character dictionary key", "1=1", 3, std::nullopt,
nullptr},
- {"0x32 as a single-character dictionary key", "2=1", 3, absl::nullopt,
+ {"0x32 as a single-character dictionary key", "2=1", 3, std::nullopt,
nullptr},
- {"0x33 as a single-character dictionary key", "3=1", 3, absl::nullopt,
+ {"0x33 as a single-character dictionary key", "3=1", 3, std::nullopt,
nullptr},
- {"0x34 as a single-character dictionary key", "4=1", 3, absl::nullopt,
+ {"0x34 as a single-character dictionary key", "4=1", 3, std::nullopt,
nullptr},
- {"0x35 as a single-character dictionary key", "5=1", 3, absl::nullopt,
+ {"0x35 as a single-character dictionary key", "5=1", 3, std::nullopt,
nullptr},
- {"0x36 as a single-character dictionary key", "6=1", 3, absl::nullopt,
+ {"0x36 as a single-character dictionary key", "6=1", 3, std::nullopt,
nullptr},
- {"0x37 as a single-character dictionary key", "7=1", 3, absl::nullopt,
+ {"0x37 as a single-character dictionary key", "7=1", 3, std::nullopt,
nullptr},
- {"0x38 as a single-character dictionary key", "8=1", 3, absl::nullopt,
+ {"0x38 as a single-character dictionary key", "8=1", 3, std::nullopt,
nullptr},
- {"0x39 as a single-character dictionary key", "9=1", 3, absl::nullopt,
+ {"0x39 as a single-character dictionary key", "9=1", 3, std::nullopt,
nullptr},
- {"0x3a as a single-character dictionary key", ":=1", 3, absl::nullopt,
+ {"0x3a as a single-character dictionary key", ":=1", 3, std::nullopt,
nullptr},
- {"0x3b as a single-character dictionary key", ";=1", 3, absl::nullopt,
+ {"0x3b as a single-character dictionary key", ";=1", 3, std::nullopt,
nullptr},
- {"0x3c as a single-character dictionary key", "<=1", 3, absl::nullopt,
+ {"0x3c as a single-character dictionary key", "<=1", 3, std::nullopt,
nullptr},
- {"0x3d as a single-character dictionary key", "==1", 3, absl::nullopt,
+ {"0x3d as a single-character dictionary key", "==1", 3, std::nullopt,
nullptr},
- {"0x3e as a single-character dictionary key", ">=1", 3, absl::nullopt,
+ {"0x3e as a single-character dictionary key", ">=1", 3, std::nullopt,
nullptr},
- {"0x3f as a single-character dictionary key", "?=1", 3, absl::nullopt,
+ {"0x3f as a single-character dictionary key", "?=1", 3, std::nullopt,
nullptr},
- {"0x40 as a single-character dictionary key", "@=1", 3, absl::nullopt,
+ {"0x40 as a single-character dictionary key", "@=1", 3, std::nullopt,
nullptr},
- {"0x41 as a single-character dictionary key", "A=1", 3, absl::nullopt,
+ {"0x41 as a single-character dictionary key", "A=1", 3, std::nullopt,
nullptr},
- {"0x42 as a single-character dictionary key", "B=1", 3, absl::nullopt,
+ {"0x42 as a single-character dictionary key", "B=1", 3, std::nullopt,
nullptr},
- {"0x43 as a single-character dictionary key", "C=1", 3, absl::nullopt,
+ {"0x43 as a single-character dictionary key", "C=1", 3, std::nullopt,
nullptr},
- {"0x44 as a single-character dictionary key", "D=1", 3, absl::nullopt,
+ {"0x44 as a single-character dictionary key", "D=1", 3, std::nullopt,
nullptr},
- {"0x45 as a single-character dictionary key", "E=1", 3, absl::nullopt,
+ {"0x45 as a single-character dictionary key", "E=1", 3, std::nullopt,
nullptr},
- {"0x46 as a single-character dictionary key", "F=1", 3, absl::nullopt,
+ {"0x46 as a single-character dictionary key", "F=1", 3, std::nullopt,
nullptr},
- {"0x47 as a single-character dictionary key", "G=1", 3, absl::nullopt,
+ {"0x47 as a single-character dictionary key", "G=1", 3, std::nullopt,
nullptr},
- {"0x48 as a single-character dictionary key", "H=1", 3, absl::nullopt,
+ {"0x48 as a single-character dictionary key", "H=1", 3, std::nullopt,
nullptr},
- {"0x49 as a single-character dictionary key", "I=1", 3, absl::nullopt,
+ {"0x49 as a single-character dictionary key", "I=1", 3, std::nullopt,
nullptr},
- {"0x4a as a single-character dictionary key", "J=1", 3, absl::nullopt,
+ {"0x4a as a single-character dictionary key", "J=1", 3, std::nullopt,
nullptr},
- {"0x4b as a single-character dictionary key", "K=1", 3, absl::nullopt,
+ {"0x4b as a single-character dictionary key", "K=1", 3, std::nullopt,
nullptr},
- {"0x4c as a single-character dictionary key", "L=1", 3, absl::nullopt,
+ {"0x4c as a single-character dictionary key", "L=1", 3, std::nullopt,
nullptr},
- {"0x4d as a single-character dictionary key", "M=1", 3, absl::nullopt,
+ {"0x4d as a single-character dictionary key", "M=1", 3, std::nullopt,
nullptr},
- {"0x4e as a single-character dictionary key", "N=1", 3, absl::nullopt,
+ {"0x4e as a single-character dictionary key", "N=1", 3, std::nullopt,
nullptr},
- {"0x4f as a single-character dictionary key", "O=1", 3, absl::nullopt,
+ {"0x4f as a single-character dictionary key", "O=1", 3, std::nullopt,
nullptr},
- {"0x50 as a single-character dictionary key", "P=1", 3, absl::nullopt,
+ {"0x50 as a single-character dictionary key", "P=1", 3, std::nullopt,
nullptr},
- {"0x51 as a single-character dictionary key", "Q=1", 3, absl::nullopt,
+ {"0x51 as a single-character dictionary key", "Q=1", 3, std::nullopt,
nullptr},
- {"0x52 as a single-character dictionary key", "R=1", 3, absl::nullopt,
+ {"0x52 as a single-character dictionary key", "R=1", 3, std::nullopt,
nullptr},
- {"0x53 as a single-character dictionary key", "S=1", 3, absl::nullopt,
+ {"0x53 as a single-character dictionary key", "S=1", 3, std::nullopt,
nullptr},
- {"0x54 as a single-character dictionary key", "T=1", 3, absl::nullopt,
+ {"0x54 as a single-character dictionary key", "T=1", 3, std::nullopt,
nullptr},
- {"0x55 as a single-character dictionary key", "U=1", 3, absl::nullopt,
+ {"0x55 as a single-character dictionary key", "U=1", 3, std::nullopt,
nullptr},
- {"0x56 as a single-character dictionary key", "V=1", 3, absl::nullopt,
+ {"0x56 as a single-character dictionary key", "V=1", 3, std::nullopt,
nullptr},
- {"0x57 as a single-character dictionary key", "W=1", 3, absl::nullopt,
+ {"0x57 as a single-character dictionary key", "W=1", 3, std::nullopt,
nullptr},
- {"0x58 as a single-character dictionary key", "X=1", 3, absl::nullopt,
+ {"0x58 as a single-character dictionary key", "X=1", 3, std::nullopt,
nullptr},
- {"0x59 as a single-character dictionary key", "Y=1", 3, absl::nullopt,
+ {"0x59 as a single-character dictionary key", "Y=1", 3, std::nullopt,
nullptr},
- {"0x5a as a single-character dictionary key", "Z=1", 3, absl::nullopt,
+ {"0x5a as a single-character dictionary key", "Z=1", 3, std::nullopt,
nullptr},
- {"0x5b as a single-character dictionary key", "[=1", 3, absl::nullopt,
+ {"0x5b as a single-character dictionary key", "[=1", 3, std::nullopt,
nullptr},
- {"0x5c as a single-character dictionary key", "\\=1", 3, absl::nullopt,
+ {"0x5c as a single-character dictionary key", "\\=1", 3, std::nullopt,
nullptr},
- {"0x5d as a single-character dictionary key", "]=1", 3, absl::nullopt,
+ {"0x5d as a single-character dictionary key", "]=1", 3, std::nullopt,
nullptr},
- {"0x5e as a single-character dictionary key", "^=1", 3, absl::nullopt,
+ {"0x5e as a single-character dictionary key", "^=1", 3, std::nullopt,
nullptr},
- {"0x5f as a single-character dictionary key", "_=1", 3, absl::nullopt,
+ {"0x5f as a single-character dictionary key", "_=1", 3, std::nullopt,
nullptr},
- {"0x60 as a single-character dictionary key", "`=1", 3, absl::nullopt,
+ {"0x60 as a single-character dictionary key", "`=1", 3, std::nullopt,
nullptr},
{"0x61 as a single-character dictionary key",
"a=1",
@@ -3240,64 +3187,64 @@
3,
{Dictionary{{{"z", {Integer(1), {}}}}}},
nullptr},
- {"0x7b as a single-character dictionary key", "{=1", 3, absl::nullopt,
+ {"0x7b as a single-character dictionary key", "{=1", 3, std::nullopt,
nullptr},
- {"0x7c as a single-character dictionary key", "|=1", 3, absl::nullopt,
+ {"0x7c as a single-character dictionary key", "|=1", 3, std::nullopt,
nullptr},
- {"0x7d as a single-character dictionary key", "}=1", 3, absl::nullopt,
+ {"0x7d as a single-character dictionary key", "}=1", 3, std::nullopt,
nullptr},
- {"0x7e as a single-character dictionary key", "~=1", 3, absl::nullopt,
+ {"0x7e as a single-character dictionary key", "~=1", 3, std::nullopt,
nullptr},
- {"0x7f as a single-character dictionary key", "\177=1", 3, absl::nullopt,
+ {"0x7f as a single-character dictionary key", "\177=1", 3, std::nullopt,
nullptr},
- {"0x00 in dictionary key", "a\000a=1", 5, absl::nullopt, nullptr},
- {"0x01 in dictionary key", "a\001a=1", 5, absl::nullopt, nullptr},
- {"0x02 in dictionary key", "a\002a=1", 5, absl::nullopt, nullptr},
- {"0x03 in dictionary key", "a\003a=1", 5, absl::nullopt, nullptr},
- {"0x04 in dictionary key", "a\004a=1", 5, absl::nullopt, nullptr},
- {"0x05 in dictionary key", "a\005a=1", 5, absl::nullopt, nullptr},
- {"0x06 in dictionary key", "a\006a=1", 5, absl::nullopt, nullptr},
- {"0x07 in dictionary key", "a\aa=1", 5, absl::nullopt, nullptr},
- {"0x08 in dictionary key", "a\ba=1", 5, absl::nullopt, nullptr},
- {"0x09 in dictionary key", "a\ta=1", 5, absl::nullopt, nullptr},
- {"0x0a in dictionary key", "a\na=1", 5, absl::nullopt, nullptr},
- {"0x0b in dictionary key", "a\va=1", 5, absl::nullopt, nullptr},
- {"0x0c in dictionary key", "a\fa=1", 5, absl::nullopt, nullptr},
- {"0x0d in dictionary key", "a\ra=1", 5, absl::nullopt, nullptr},
- {"0x0e in dictionary key", "a\016a=1", 5, absl::nullopt, nullptr},
- {"0x0f in dictionary key", "a\017a=1", 5, absl::nullopt, nullptr},
- {"0x10 in dictionary key", "a\020a=1", 5, absl::nullopt, nullptr},
- {"0x11 in dictionary key", "a\021a=1", 5, absl::nullopt, nullptr},
- {"0x12 in dictionary key", "a\022a=1", 5, absl::nullopt, nullptr},
- {"0x13 in dictionary key", "a\023a=1", 5, absl::nullopt, nullptr},
- {"0x14 in dictionary key", "a\024a=1", 5, absl::nullopt, nullptr},
- {"0x15 in dictionary key", "a\025a=1", 5, absl::nullopt, nullptr},
- {"0x16 in dictionary key", "a\026a=1", 5, absl::nullopt, nullptr},
- {"0x17 in dictionary key", "a\027a=1", 5, absl::nullopt, nullptr},
- {"0x18 in dictionary key", "a\030a=1", 5, absl::nullopt, nullptr},
- {"0x19 in dictionary key", "a\031a=1", 5, absl::nullopt, nullptr},
- {"0x1a in dictionary key", "a\032a=1", 5, absl::nullopt, nullptr},
- {"0x1b in dictionary key", "a\033a=1", 5, absl::nullopt, nullptr},
- {"0x1c in dictionary key", "a\034a=1", 5, absl::nullopt, nullptr},
- {"0x1d in dictionary key", "a\035a=1", 5, absl::nullopt, nullptr},
- {"0x1e in dictionary key", "a\036a=1", 5, absl::nullopt, nullptr},
- {"0x1f in dictionary key", "a\037a=1", 5, absl::nullopt, nullptr},
- {"0x20 in dictionary key", "a a=1", 5, absl::nullopt, nullptr},
- {"0x21 in dictionary key", "a!a=1", 5, absl::nullopt, nullptr},
- {"0x22 in dictionary key", "a\"a=1", 5, absl::nullopt, nullptr},
- {"0x23 in dictionary key", "a#a=1", 5, absl::nullopt, nullptr},
- {"0x24 in dictionary key", "a$a=1", 5, absl::nullopt, nullptr},
- {"0x25 in dictionary key", "a%a=1", 5, absl::nullopt, nullptr},
- {"0x26 in dictionary key", "a&a=1", 5, absl::nullopt, nullptr},
- {"0x27 in dictionary key", "a'a=1", 5, absl::nullopt, nullptr},
- {"0x28 in dictionary key", "a(a=1", 5, absl::nullopt, nullptr},
- {"0x29 in dictionary key", "a)a=1", 5, absl::nullopt, nullptr},
+ {"0x00 in dictionary key", "a\000a=1", 5, std::nullopt, nullptr},
+ {"0x01 in dictionary key", "a\001a=1", 5, std::nullopt, nullptr},
+ {"0x02 in dictionary key", "a\002a=1", 5, std::nullopt, nullptr},
+ {"0x03 in dictionary key", "a\003a=1", 5, std::nullopt, nullptr},
+ {"0x04 in dictionary key", "a\004a=1", 5, std::nullopt, nullptr},
+ {"0x05 in dictionary key", "a\005a=1", 5, std::nullopt, nullptr},
+ {"0x06 in dictionary key", "a\006a=1", 5, std::nullopt, nullptr},
+ {"0x07 in dictionary key", "a\aa=1", 5, std::nullopt, nullptr},
+ {"0x08 in dictionary key", "a\ba=1", 5, std::nullopt, nullptr},
+ {"0x09 in dictionary key", "a\ta=1", 5, std::nullopt, nullptr},
+ {"0x0a in dictionary key", "a\na=1", 5, std::nullopt, nullptr},
+ {"0x0b in dictionary key", "a\va=1", 5, std::nullopt, nullptr},
+ {"0x0c in dictionary key", "a\fa=1", 5, std::nullopt, nullptr},
+ {"0x0d in dictionary key", "a\ra=1", 5, std::nullopt, nullptr},
+ {"0x0e in dictionary key", "a\016a=1", 5, std::nullopt, nullptr},
+ {"0x0f in dictionary key", "a\017a=1", 5, std::nullopt, nullptr},
+ {"0x10 in dictionary key", "a\020a=1", 5, std::nullopt, nullptr},
+ {"0x11 in dictionary key", "a\021a=1", 5, std::nullopt, nullptr},
+ {"0x12 in dictionary key", "a\022a=1", 5, std::nullopt, nullptr},
+ {"0x13 in dictionary key", "a\023a=1", 5, std::nullopt, nullptr},
+ {"0x14 in dictionary key", "a\024a=1", 5, std::nullopt, nullptr},
+ {"0x15 in dictionary key", "a\025a=1", 5, std::nullopt, nullptr},
+ {"0x16 in dictionary key", "a\026a=1", 5, std::nullopt, nullptr},
+ {"0x17 in dictionary key", "a\027a=1", 5, std::nullopt, nullptr},
+ {"0x18 in dictionary key", "a\030a=1", 5, std::nullopt, nullptr},
+ {"0x19 in dictionary key", "a\031a=1", 5, std::nullopt, nullptr},
+ {"0x1a in dictionary key", "a\032a=1", 5, std::nullopt, nullptr},
+ {"0x1b in dictionary key", "a\033a=1", 5, std::nullopt, nullptr},
+ {"0x1c in dictionary key", "a\034a=1", 5, std::nullopt, nullptr},
+ {"0x1d in dictionary key", "a\035a=1", 5, std::nullopt, nullptr},
+ {"0x1e in dictionary key", "a\036a=1", 5, std::nullopt, nullptr},
+ {"0x1f in dictionary key", "a\037a=1", 5, std::nullopt, nullptr},
+ {"0x20 in dictionary key", "a a=1", 5, std::nullopt, nullptr},
+ {"0x21 in dictionary key", "a!a=1", 5, std::nullopt, nullptr},
+ {"0x22 in dictionary key", "a\"a=1", 5, std::nullopt, nullptr},
+ {"0x23 in dictionary key", "a#a=1", 5, std::nullopt, nullptr},
+ {"0x24 in dictionary key", "a$a=1", 5, std::nullopt, nullptr},
+ {"0x25 in dictionary key", "a%a=1", 5, std::nullopt, nullptr},
+ {"0x26 in dictionary key", "a&a=1", 5, std::nullopt, nullptr},
+ {"0x27 in dictionary key", "a'a=1", 5, std::nullopt, nullptr},
+ {"0x28 in dictionary key", "a(a=1", 5, std::nullopt, nullptr},
+ {"0x29 in dictionary key", "a)a=1", 5, std::nullopt, nullptr},
{"0x2a in dictionary key",
"a*a=1",
5,
{Dictionary{{{"a*a", {Integer(1), {}}}}}},
nullptr},
- {"0x2b in dictionary key", "a+a=1", 5, absl::nullopt, nullptr},
+ {"0x2b in dictionary key", "a+a=1", 5, std::nullopt, nullptr},
{"0x2c in dictionary key",
"a,a=1",
5,
@@ -3313,7 +3260,7 @@
5,
{Dictionary{{{"a.a", {Integer(1), {}}}}}},
nullptr},
- {"0x2f in dictionary key", "a/a=1", 5, absl::nullopt, nullptr},
+ {"0x2f in dictionary key", "a/a=1", 5, std::nullopt, nullptr},
{"0x30 in dictionary key",
"a0a=1",
5,
@@ -3364,53 +3311,53 @@
5,
{Dictionary{{{"a9a", {Integer(1), {}}}}}},
nullptr},
- {"0x3a in dictionary key", "a:a=1", 5, absl::nullopt, nullptr},
+ {"0x3a in dictionary key", "a:a=1", 5, std::nullopt, nullptr},
{"0x3b in dictionary key",
"a;a=1",
5,
{Dictionary{{{"a", {Item(true), {Param("a", 1)}}}}}},
nullptr},
- {"0x3c in dictionary key", "a<a=1", 5, absl::nullopt, nullptr},
- {"0x3d in dictionary key", "a=a=1", 5, absl::nullopt, nullptr},
- {"0x3e in dictionary key", "a>a=1", 5, absl::nullopt, nullptr},
- {"0x3f in dictionary key", "a?a=1", 5, absl::nullopt, nullptr},
- {"0x40 in dictionary key", "a@a=1", 5, absl::nullopt, nullptr},
- {"0x41 in dictionary key", "aAa=1", 5, absl::nullopt, nullptr},
- {"0x42 in dictionary key", "aBa=1", 5, absl::nullopt, nullptr},
- {"0x43 in dictionary key", "aCa=1", 5, absl::nullopt, nullptr},
- {"0x44 in dictionary key", "aDa=1", 5, absl::nullopt, nullptr},
- {"0x45 in dictionary key", "aEa=1", 5, absl::nullopt, nullptr},
- {"0x46 in dictionary key", "aFa=1", 5, absl::nullopt, nullptr},
- {"0x47 in dictionary key", "aGa=1", 5, absl::nullopt, nullptr},
- {"0x48 in dictionary key", "aHa=1", 5, absl::nullopt, nullptr},
- {"0x49 in dictionary key", "aIa=1", 5, absl::nullopt, nullptr},
- {"0x4a in dictionary key", "aJa=1", 5, absl::nullopt, nullptr},
- {"0x4b in dictionary key", "aKa=1", 5, absl::nullopt, nullptr},
- {"0x4c in dictionary key", "aLa=1", 5, absl::nullopt, nullptr},
- {"0x4d in dictionary key", "aMa=1", 5, absl::nullopt, nullptr},
- {"0x4e in dictionary key", "aNa=1", 5, absl::nullopt, nullptr},
- {"0x4f in dictionary key", "aOa=1", 5, absl::nullopt, nullptr},
- {"0x50 in dictionary key", "aPa=1", 5, absl::nullopt, nullptr},
- {"0x51 in dictionary key", "aQa=1", 5, absl::nullopt, nullptr},
- {"0x52 in dictionary key", "aRa=1", 5, absl::nullopt, nullptr},
- {"0x53 in dictionary key", "aSa=1", 5, absl::nullopt, nullptr},
- {"0x54 in dictionary key", "aTa=1", 5, absl::nullopt, nullptr},
- {"0x55 in dictionary key", "aUa=1", 5, absl::nullopt, nullptr},
- {"0x56 in dictionary key", "aVa=1", 5, absl::nullopt, nullptr},
- {"0x57 in dictionary key", "aWa=1", 5, absl::nullopt, nullptr},
- {"0x58 in dictionary key", "aXa=1", 5, absl::nullopt, nullptr},
- {"0x59 in dictionary key", "aYa=1", 5, absl::nullopt, nullptr},
- {"0x5a in dictionary key", "aZa=1", 5, absl::nullopt, nullptr},
- {"0x5b in dictionary key", "a[a=1", 5, absl::nullopt, nullptr},
- {"0x5c in dictionary key", "a\\a=1", 5, absl::nullopt, nullptr},
- {"0x5d in dictionary key", "a]a=1", 5, absl::nullopt, nullptr},
- {"0x5e in dictionary key", "a^a=1", 5, absl::nullopt, nullptr},
+ {"0x3c in dictionary key", "a<a=1", 5, std::nullopt, nullptr},
+ {"0x3d in dictionary key", "a=a=1", 5, std::nullopt, nullptr},
+ {"0x3e in dictionary key", "a>a=1", 5, std::nullopt, nullptr},
+ {"0x3f in dictionary key", "a?a=1", 5, std::nullopt, nullptr},
+ {"0x40 in dictionary key", "a@a=1", 5, std::nullopt, nullptr},
+ {"0x41 in dictionary key", "aAa=1", 5, std::nullopt, nullptr},
+ {"0x42 in dictionary key", "aBa=1", 5, std::nullopt, nullptr},
+ {"0x43 in dictionary key", "aCa=1", 5, std::nullopt, nullptr},
+ {"0x44 in dictionary key", "aDa=1", 5, std::nullopt, nullptr},
+ {"0x45 in dictionary key", "aEa=1", 5, std::nullopt, nullptr},
+ {"0x46 in dictionary key", "aFa=1", 5, std::nullopt, nullptr},
+ {"0x47 in dictionary key", "aGa=1", 5, std::nullopt, nullptr},
+ {"0x48 in dictionary key", "aHa=1", 5, std::nullopt, nullptr},
+ {"0x49 in dictionary key", "aIa=1", 5, std::nullopt, nullptr},
+ {"0x4a in dictionary key", "aJa=1", 5, std::nullopt, nullptr},
+ {"0x4b in dictionary key", "aKa=1", 5, std::nullopt, nullptr},
+ {"0x4c in dictionary key", "aLa=1", 5, std::nullopt, nullptr},
+ {"0x4d in dictionary key", "aMa=1", 5, std::nullopt, nullptr},
+ {"0x4e in dictionary key", "aNa=1", 5, std::nullopt, nullptr},
+ {"0x4f in dictionary key", "aOa=1", 5, std::nullopt, nullptr},
+ {"0x50 in dictionary key", "aPa=1", 5, std::nullopt, nullptr},
+ {"0x51 in dictionary key", "aQa=1", 5, std::nullopt, nullptr},
+ {"0x52 in dictionary key", "aRa=1", 5, std::nullopt, nullptr},
+ {"0x53 in dictionary key", "aSa=1", 5, std::nullopt, nullptr},
+ {"0x54 in dictionary key", "aTa=1", 5, std::nullopt, nullptr},
+ {"0x55 in dictionary key", "aUa=1", 5, std::nullopt, nullptr},
+ {"0x56 in dictionary key", "aVa=1", 5, std::nullopt, nullptr},
+ {"0x57 in dictionary key", "aWa=1", 5, std::nullopt, nullptr},
+ {"0x58 in dictionary key", "aXa=1", 5, std::nullopt, nullptr},
+ {"0x59 in dictionary key", "aYa=1", 5, std::nullopt, nullptr},
+ {"0x5a in dictionary key", "aZa=1", 5, std::nullopt, nullptr},
+ {"0x5b in dictionary key", "a[a=1", 5, std::nullopt, nullptr},
+ {"0x5c in dictionary key", "a\\a=1", 5, std::nullopt, nullptr},
+ {"0x5d in dictionary key", "a]a=1", 5, std::nullopt, nullptr},
+ {"0x5e in dictionary key", "a^a=1", 5, std::nullopt, nullptr},
{"0x5f in dictionary key",
"a_a=1",
5,
{Dictionary{{{"a_a", {Integer(1), {}}}}}},
nullptr},
- {"0x60 in dictionary key", "a`a=1", 5, absl::nullopt, nullptr},
+ {"0x60 in dictionary key", "a`a=1", 5, std::nullopt, nullptr},
{"0x61 in dictionary key",
"aaa=1",
5,
@@ -3541,116 +3488,116 @@
5,
{Dictionary{{{"aza", {Integer(1), {}}}}}},
nullptr},
- {"0x7b in dictionary key", "a{a=1", 5, absl::nullopt, nullptr},
- {"0x7c in dictionary key", "a|a=1", 5, absl::nullopt, nullptr},
- {"0x7d in dictionary key", "a}a=1", 5, absl::nullopt, nullptr},
- {"0x7e in dictionary key", "a~a=1", 5, absl::nullopt, nullptr},
- {"0x7f in dictionary key", "a\177a=1", 5, absl::nullopt, nullptr},
- {"0x00 starting an dictionary key", "\000a=1", 4, absl::nullopt, nullptr},
- {"0x01 starting an dictionary key", "\001a=1", 4, absl::nullopt, nullptr},
- {"0x02 starting an dictionary key", "\002a=1", 4, absl::nullopt, nullptr},
- {"0x03 starting an dictionary key", "\003a=1", 4, absl::nullopt, nullptr},
- {"0x04 starting an dictionary key", "\004a=1", 4, absl::nullopt, nullptr},
- {"0x05 starting an dictionary key", "\005a=1", 4, absl::nullopt, nullptr},
- {"0x06 starting an dictionary key", "\006a=1", 4, absl::nullopt, nullptr},
- {"0x07 starting an dictionary key", "\aa=1", 4, absl::nullopt, nullptr},
- {"0x08 starting an dictionary key", "\ba=1", 4, absl::nullopt, nullptr},
- {"0x09 starting an dictionary key", "\ta=1", 4, absl::nullopt, nullptr},
- {"0x0a starting an dictionary key", "\na=1", 4, absl::nullopt, nullptr},
- {"0x0b starting an dictionary key", "\va=1", 4, absl::nullopt, nullptr},
- {"0x0c starting an dictionary key", "\fa=1", 4, absl::nullopt, nullptr},
- {"0x0d starting an dictionary key", "\ra=1", 4, absl::nullopt, nullptr},
- {"0x0e starting an dictionary key", "\016a=1", 4, absl::nullopt, nullptr},
- {"0x0f starting an dictionary key", "\017a=1", 4, absl::nullopt, nullptr},
- {"0x10 starting an dictionary key", "\020a=1", 4, absl::nullopt, nullptr},
- {"0x11 starting an dictionary key", "\021a=1", 4, absl::nullopt, nullptr},
- {"0x12 starting an dictionary key", "\022a=1", 4, absl::nullopt, nullptr},
- {"0x13 starting an dictionary key", "\023a=1", 4, absl::nullopt, nullptr},
- {"0x14 starting an dictionary key", "\024a=1", 4, absl::nullopt, nullptr},
- {"0x15 starting an dictionary key", "\025a=1", 4, absl::nullopt, nullptr},
- {"0x16 starting an dictionary key", "\026a=1", 4, absl::nullopt, nullptr},
- {"0x17 starting an dictionary key", "\027a=1", 4, absl::nullopt, nullptr},
- {"0x18 starting an dictionary key", "\030a=1", 4, absl::nullopt, nullptr},
- {"0x19 starting an dictionary key", "\031a=1", 4, absl::nullopt, nullptr},
- {"0x1a starting an dictionary key", "\032a=1", 4, absl::nullopt, nullptr},
- {"0x1b starting an dictionary key", "\033a=1", 4, absl::nullopt, nullptr},
- {"0x1c starting an dictionary key", "\034a=1", 4, absl::nullopt, nullptr},
- {"0x1d starting an dictionary key", "\035a=1", 4, absl::nullopt, nullptr},
- {"0x1e starting an dictionary key", "\036a=1", 4, absl::nullopt, nullptr},
- {"0x1f starting an dictionary key", "\037a=1", 4, absl::nullopt, nullptr},
+ {"0x7b in dictionary key", "a{a=1", 5, std::nullopt, nullptr},
+ {"0x7c in dictionary key", "a|a=1", 5, std::nullopt, nullptr},
+ {"0x7d in dictionary key", "a}a=1", 5, std::nullopt, nullptr},
+ {"0x7e in dictionary key", "a~a=1", 5, std::nullopt, nullptr},
+ {"0x7f in dictionary key", "a\177a=1", 5, std::nullopt, nullptr},
+ {"0x00 starting an dictionary key", "\000a=1", 4, std::nullopt, nullptr},
+ {"0x01 starting an dictionary key", "\001a=1", 4, std::nullopt, nullptr},
+ {"0x02 starting an dictionary key", "\002a=1", 4, std::nullopt, nullptr},
+ {"0x03 starting an dictionary key", "\003a=1", 4, std::nullopt, nullptr},
+ {"0x04 starting an dictionary key", "\004a=1", 4, std::nullopt, nullptr},
+ {"0x05 starting an dictionary key", "\005a=1", 4, std::nullopt, nullptr},
+ {"0x06 starting an dictionary key", "\006a=1", 4, std::nullopt, nullptr},
+ {"0x07 starting an dictionary key", "\aa=1", 4, std::nullopt, nullptr},
+ {"0x08 starting an dictionary key", "\ba=1", 4, std::nullopt, nullptr},
+ {"0x09 starting an dictionary key", "\ta=1", 4, std::nullopt, nullptr},
+ {"0x0a starting an dictionary key", "\na=1", 4, std::nullopt, nullptr},
+ {"0x0b starting an dictionary key", "\va=1", 4, std::nullopt, nullptr},
+ {"0x0c starting an dictionary key", "\fa=1", 4, std::nullopt, nullptr},
+ {"0x0d starting an dictionary key", "\ra=1", 4, std::nullopt, nullptr},
+ {"0x0e starting an dictionary key", "\016a=1", 4, std::nullopt, nullptr},
+ {"0x0f starting an dictionary key", "\017a=1", 4, std::nullopt, nullptr},
+ {"0x10 starting an dictionary key", "\020a=1", 4, std::nullopt, nullptr},
+ {"0x11 starting an dictionary key", "\021a=1", 4, std::nullopt, nullptr},
+ {"0x12 starting an dictionary key", "\022a=1", 4, std::nullopt, nullptr},
+ {"0x13 starting an dictionary key", "\023a=1", 4, std::nullopt, nullptr},
+ {"0x14 starting an dictionary key", "\024a=1", 4, std::nullopt, nullptr},
+ {"0x15 starting an dictionary key", "\025a=1", 4, std::nullopt, nullptr},
+ {"0x16 starting an dictionary key", "\026a=1", 4, std::nullopt, nullptr},
+ {"0x17 starting an dictionary key", "\027a=1", 4, std::nullopt, nullptr},
+ {"0x18 starting an dictionary key", "\030a=1", 4, std::nullopt, nullptr},
+ {"0x19 starting an dictionary key", "\031a=1", 4, std::nullopt, nullptr},
+ {"0x1a starting an dictionary key", "\032a=1", 4, std::nullopt, nullptr},
+ {"0x1b starting an dictionary key", "\033a=1", 4, std::nullopt, nullptr},
+ {"0x1c starting an dictionary key", "\034a=1", 4, std::nullopt, nullptr},
+ {"0x1d starting an dictionary key", "\035a=1", 4, std::nullopt, nullptr},
+ {"0x1e starting an dictionary key", "\036a=1", 4, std::nullopt, nullptr},
+ {"0x1f starting an dictionary key", "\037a=1", 4, std::nullopt, nullptr},
{"0x20 starting an dictionary key",
" a=1",
4,
{Dictionary{{{"a", {Integer(1), {}}}}}},
"a=1"},
- {"0x21 starting an dictionary key", "!a=1", 4, absl::nullopt, nullptr},
- {"0x22 starting an dictionary key", "\"a=1", 4, absl::nullopt, nullptr},
- {"0x23 starting an dictionary key", "#a=1", 4, absl::nullopt, nullptr},
- {"0x24 starting an dictionary key", "$a=1", 4, absl::nullopt, nullptr},
- {"0x25 starting an dictionary key", "%a=1", 4, absl::nullopt, nullptr},
- {"0x26 starting an dictionary key", "&a=1", 4, absl::nullopt, nullptr},
- {"0x27 starting an dictionary key", "'a=1", 4, absl::nullopt, nullptr},
- {"0x28 starting an dictionary key", "(a=1", 4, absl::nullopt, nullptr},
- {"0x29 starting an dictionary key", ")a=1", 4, absl::nullopt, nullptr},
+ {"0x21 starting an dictionary key", "!a=1", 4, std::nullopt, nullptr},
+ {"0x22 starting an dictionary key", "\"a=1", 4, std::nullopt, nullptr},
+ {"0x23 starting an dictionary key", "#a=1", 4, std::nullopt, nullptr},
+ {"0x24 starting an dictionary key", "$a=1", 4, std::nullopt, nullptr},
+ {"0x25 starting an dictionary key", "%a=1", 4, std::nullopt, nullptr},
+ {"0x26 starting an dictionary key", "&a=1", 4, std::nullopt, nullptr},
+ {"0x27 starting an dictionary key", "'a=1", 4, std::nullopt, nullptr},
+ {"0x28 starting an dictionary key", "(a=1", 4, std::nullopt, nullptr},
+ {"0x29 starting an dictionary key", ")a=1", 4, std::nullopt, nullptr},
{"0x2a starting an dictionary key",
"*a=1",
4,
{Dictionary{{{"*a", {Integer(1), {}}}}}},
nullptr},
- {"0x2b starting an dictionary key", "+a=1", 4, absl::nullopt, nullptr},
- {"0x2c starting an dictionary key", ",a=1", 4, absl::nullopt, nullptr},
- {"0x2d starting an dictionary key", "-a=1", 4, absl::nullopt, nullptr},
- {"0x2e starting an dictionary key", ".a=1", 4, absl::nullopt, nullptr},
- {"0x2f starting an dictionary key", "/a=1", 4, absl::nullopt, nullptr},
- {"0x30 starting an dictionary key", "0a=1", 4, absl::nullopt, nullptr},
- {"0x31 starting an dictionary key", "1a=1", 4, absl::nullopt, nullptr},
- {"0x32 starting an dictionary key", "2a=1", 4, absl::nullopt, nullptr},
- {"0x33 starting an dictionary key", "3a=1", 4, absl::nullopt, nullptr},
- {"0x34 starting an dictionary key", "4a=1", 4, absl::nullopt, nullptr},
- {"0x35 starting an dictionary key", "5a=1", 4, absl::nullopt, nullptr},
- {"0x36 starting an dictionary key", "6a=1", 4, absl::nullopt, nullptr},
- {"0x37 starting an dictionary key", "7a=1", 4, absl::nullopt, nullptr},
- {"0x38 starting an dictionary key", "8a=1", 4, absl::nullopt, nullptr},
- {"0x39 starting an dictionary key", "9a=1", 4, absl::nullopt, nullptr},
- {"0x3a starting an dictionary key", ":a=1", 4, absl::nullopt, nullptr},
- {"0x3b starting an dictionary key", ";a=1", 4, absl::nullopt, nullptr},
- {"0x3c starting an dictionary key", "<a=1", 4, absl::nullopt, nullptr},
- {"0x3d starting an dictionary key", "=a=1", 4, absl::nullopt, nullptr},
- {"0x3e starting an dictionary key", ">a=1", 4, absl::nullopt, nullptr},
- {"0x3f starting an dictionary key", "?a=1", 4, absl::nullopt, nullptr},
- {"0x40 starting an dictionary key", "@a=1", 4, absl::nullopt, nullptr},
- {"0x41 starting an dictionary key", "Aa=1", 4, absl::nullopt, nullptr},
- {"0x42 starting an dictionary key", "Ba=1", 4, absl::nullopt, nullptr},
- {"0x43 starting an dictionary key", "Ca=1", 4, absl::nullopt, nullptr},
- {"0x44 starting an dictionary key", "Da=1", 4, absl::nullopt, nullptr},
- {"0x45 starting an dictionary key", "Ea=1", 4, absl::nullopt, nullptr},
- {"0x46 starting an dictionary key", "Fa=1", 4, absl::nullopt, nullptr},
- {"0x47 starting an dictionary key", "Ga=1", 4, absl::nullopt, nullptr},
- {"0x48 starting an dictionary key", "Ha=1", 4, absl::nullopt, nullptr},
- {"0x49 starting an dictionary key", "Ia=1", 4, absl::nullopt, nullptr},
- {"0x4a starting an dictionary key", "Ja=1", 4, absl::nullopt, nullptr},
- {"0x4b starting an dictionary key", "Ka=1", 4, absl::nullopt, nullptr},
- {"0x4c starting an dictionary key", "La=1", 4, absl::nullopt, nullptr},
- {"0x4d starting an dictionary key", "Ma=1", 4, absl::nullopt, nullptr},
- {"0x4e starting an dictionary key", "Na=1", 4, absl::nullopt, nullptr},
- {"0x4f starting an dictionary key", "Oa=1", 4, absl::nullopt, nullptr},
- {"0x50 starting an dictionary key", "Pa=1", 4, absl::nullopt, nullptr},
- {"0x51 starting an dictionary key", "Qa=1", 4, absl::nullopt, nullptr},
- {"0x52 starting an dictionary key", "Ra=1", 4, absl::nullopt, nullptr},
- {"0x53 starting an dictionary key", "Sa=1", 4, absl::nullopt, nullptr},
- {"0x54 starting an dictionary key", "Ta=1", 4, absl::nullopt, nullptr},
- {"0x55 starting an dictionary key", "Ua=1", 4, absl::nullopt, nullptr},
- {"0x56 starting an dictionary key", "Va=1", 4, absl::nullopt, nullptr},
- {"0x57 starting an dictionary key", "Wa=1", 4, absl::nullopt, nullptr},
- {"0x58 starting an dictionary key", "Xa=1", 4, absl::nullopt, nullptr},
- {"0x59 starting an dictionary key", "Ya=1", 4, absl::nullopt, nullptr},
- {"0x5a starting an dictionary key", "Za=1", 4, absl::nullopt, nullptr},
- {"0x5b starting an dictionary key", "[a=1", 4, absl::nullopt, nullptr},
- {"0x5c starting an dictionary key", "\\a=1", 4, absl::nullopt, nullptr},
- {"0x5d starting an dictionary key", "]a=1", 4, absl::nullopt, nullptr},
- {"0x5e starting an dictionary key", "^a=1", 4, absl::nullopt, nullptr},
- {"0x5f starting an dictionary key", "_a=1", 4, absl::nullopt, nullptr},
- {"0x60 starting an dictionary key", "`a=1", 4, absl::nullopt, nullptr},
+ {"0x2b starting an dictionary key", "+a=1", 4, std::nullopt, nullptr},
+ {"0x2c starting an dictionary key", ",a=1", 4, std::nullopt, nullptr},
+ {"0x2d starting an dictionary key", "-a=1", 4, std::nullopt, nullptr},
+ {"0x2e starting an dictionary key", ".a=1", 4, std::nullopt, nullptr},
+ {"0x2f starting an dictionary key", "/a=1", 4, std::nullopt, nullptr},
+ {"0x30 starting an dictionary key", "0a=1", 4, std::nullopt, nullptr},
+ {"0x31 starting an dictionary key", "1a=1", 4, std::nullopt, nullptr},
+ {"0x32 starting an dictionary key", "2a=1", 4, std::nullopt, nullptr},
+ {"0x33 starting an dictionary key", "3a=1", 4, std::nullopt, nullptr},
+ {"0x34 starting an dictionary key", "4a=1", 4, std::nullopt, nullptr},
+ {"0x35 starting an dictionary key", "5a=1", 4, std::nullopt, nullptr},
+ {"0x36 starting an dictionary key", "6a=1", 4, std::nullopt, nullptr},
+ {"0x37 starting an dictionary key", "7a=1", 4, std::nullopt, nullptr},
+ {"0x38 starting an dictionary key", "8a=1", 4, std::nullopt, nullptr},
+ {"0x39 starting an dictionary key", "9a=1", 4, std::nullopt, nullptr},
+ {"0x3a starting an dictionary key", ":a=1", 4, std::nullopt, nullptr},
+ {"0x3b starting an dictionary key", ";a=1", 4, std::nullopt, nullptr},
+ {"0x3c starting an dictionary key", "<a=1", 4, std::nullopt, nullptr},
+ {"0x3d starting an dictionary key", "=a=1", 4, std::nullopt, nullptr},
+ {"0x3e starting an dictionary key", ">a=1", 4, std::nullopt, nullptr},
+ {"0x3f starting an dictionary key", "?a=1", 4, std::nullopt, nullptr},
+ {"0x40 starting an dictionary key", "@a=1", 4, std::nullopt, nullptr},
+ {"0x41 starting an dictionary key", "Aa=1", 4, std::nullopt, nullptr},
+ {"0x42 starting an dictionary key", "Ba=1", 4, std::nullopt, nullptr},
+ {"0x43 starting an dictionary key", "Ca=1", 4, std::nullopt, nullptr},
+ {"0x44 starting an dictionary key", "Da=1", 4, std::nullopt, nullptr},
+ {"0x45 starting an dictionary key", "Ea=1", 4, std::nullopt, nullptr},
+ {"0x46 starting an dictionary key", "Fa=1", 4, std::nullopt, nullptr},
+ {"0x47 starting an dictionary key", "Ga=1", 4, std::nullopt, nullptr},
+ {"0x48 starting an dictionary key", "Ha=1", 4, std::nullopt, nullptr},
+ {"0x49 starting an dictionary key", "Ia=1", 4, std::nullopt, nullptr},
+ {"0x4a starting an dictionary key", "Ja=1", 4, std::nullopt, nullptr},
+ {"0x4b starting an dictionary key", "Ka=1", 4, std::nullopt, nullptr},
+ {"0x4c starting an dictionary key", "La=1", 4, std::nullopt, nullptr},
+ {"0x4d starting an dictionary key", "Ma=1", 4, std::nullopt, nullptr},
+ {"0x4e starting an dictionary key", "Na=1", 4, std::nullopt, nullptr},
+ {"0x4f starting an dictionary key", "Oa=1", 4, std::nullopt, nullptr},
+ {"0x50 starting an dictionary key", "Pa=1", 4, std::nullopt, nullptr},
+ {"0x51 starting an dictionary key", "Qa=1", 4, std::nullopt, nullptr},
+ {"0x52 starting an dictionary key", "Ra=1", 4, std::nullopt, nullptr},
+ {"0x53 starting an dictionary key", "Sa=1", 4, std::nullopt, nullptr},
+ {"0x54 starting an dictionary key", "Ta=1", 4, std::nullopt, nullptr},
+ {"0x55 starting an dictionary key", "Ua=1", 4, std::nullopt, nullptr},
+ {"0x56 starting an dictionary key", "Va=1", 4, std::nullopt, nullptr},
+ {"0x57 starting an dictionary key", "Wa=1", 4, std::nullopt, nullptr},
+ {"0x58 starting an dictionary key", "Xa=1", 4, std::nullopt, nullptr},
+ {"0x59 starting an dictionary key", "Ya=1", 4, std::nullopt, nullptr},
+ {"0x5a starting an dictionary key", "Za=1", 4, std::nullopt, nullptr},
+ {"0x5b starting an dictionary key", "[a=1", 4, std::nullopt, nullptr},
+ {"0x5c starting an dictionary key", "\\a=1", 4, std::nullopt, nullptr},
+ {"0x5d starting an dictionary key", "]a=1", 4, std::nullopt, nullptr},
+ {"0x5e starting an dictionary key", "^a=1", 4, std::nullopt, nullptr},
+ {"0x5f starting an dictionary key", "_a=1", 4, std::nullopt, nullptr},
+ {"0x60 starting an dictionary key", "`a=1", 4, std::nullopt, nullptr},
{"0x61 starting an dictionary key",
"aa=1",
4,
@@ -3781,11 +3728,11 @@
4,
{Dictionary{{{"za", {Integer(1), {}}}}}},
nullptr},
- {"0x7b starting an dictionary key", "{a=1", 4, absl::nullopt, nullptr},
- {"0x7c starting an dictionary key", "|a=1", 4, absl::nullopt, nullptr},
- {"0x7d starting an dictionary key", "}a=1", 4, absl::nullopt, nullptr},
- {"0x7e starting an dictionary key", "~a=1", 4, absl::nullopt, nullptr},
- {"0x7f starting an dictionary key", "\177a=1", 4, absl::nullopt, nullptr},
+ {"0x7b starting an dictionary key", "{a=1", 4, std::nullopt, nullptr},
+ {"0x7c starting an dictionary key", "|a=1", 4, std::nullopt, nullptr},
+ {"0x7d starting an dictionary key", "}a=1", 4, std::nullopt, nullptr},
+ {"0x7e starting an dictionary key", "~a=1", 4, std::nullopt, nullptr},
+ {"0x7f starting an dictionary key", "\177a=1", 4, std::nullopt, nullptr},
// param-dict.json
{"basic parameterised dict",
"abc=123;a=1;b=2, def=456, ghi=789;q=9;r=\"+w\"",
@@ -3825,11 +3772,11 @@
{Dictionary{{{"a", {Item("b", Item::kTokenType), {Param("c", 1)}}},
{"d", {Item("e", Item::kTokenType), {Param("f", 2)}}}}}},
"a=b;c=1, d=e;f=2"},
- {"whitespace before = parameterised dict", "a=b;q =0.5", 10, absl::nullopt,
+ {"whitespace before = parameterised dict", "a=b;q =0.5", 10, std::nullopt,
nullptr},
- {"whitespace after = parameterised dict", "a=b;q= 0.5", 10, absl::nullopt,
+ {"whitespace after = parameterised dict", "a=b;q= 0.5", 10, std::nullopt,
nullptr},
- {"whitespace before ; parameterised dict", "a=b ;q=0.5", 10, absl::nullopt,
+ {"whitespace before ; parameterised dict", "a=b ;q=0.5", 10, std::nullopt,
nullptr},
{"whitespace after ; parameterised dict",
"a=b; q=0.5",
@@ -3851,9 +3798,9 @@
{Dictionary{{{"a", {Item("b", Item::kTokenType), {Param("c", 1)}}},
{"d", {Item("e", Item::kTokenType), {Param("f", 2)}}}}}},
"a=b;c=1, d=e;f=2"},
- {"trailing comma parameterised list", "a=b; q=1.0,", 11, absl::nullopt,
+ {"trailing comma parameterised list", "a=b; q=1.0,", 11, std::nullopt,
nullptr},
- {"empty item parameterised list", "a=b; q=1.0,,c=d", 15, absl::nullopt,
+ {"empty item parameterised list", "a=b; q=1.0,,c=d", 15, std::nullopt,
nullptr},
};
@@ -3864,7 +3811,7 @@
if (c.raw) {
SCOPED_TRACE(c.name);
std::string raw{c.raw, c.raw_len};
- absl::optional<ParameterizedItem> result = ParseItem(raw);
+ std::optional<ParameterizedItem> result = ParseItem(raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -3875,7 +3822,7 @@
if (c.raw) {
SCOPED_TRACE(c.name);
std::string raw{c.raw, c.raw_len};
- absl::optional<List> result = ParseList(raw);
+ std::optional<List> result = ParseList(raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -3886,7 +3833,7 @@
if (c.raw) {
SCOPED_TRACE(c.name);
std::string raw{c.raw, c.raw_len};
- absl::optional<Dictionary> result = ParseDictionary(raw);
+ std::optional<Dictionary> result = ParseDictionary(raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -3896,7 +3843,7 @@
for (const auto& c : parameterized_item_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeItem(*c.expected);
+ std::optional<std::string> result = SerializeItem(*c.expected);
if (c.raw || c.canonical) {
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(),
@@ -3912,7 +3859,7 @@
for (const auto& c : list_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeList(*c.expected);
+ std::optional<std::string> result = SerializeList(*c.expected);
if (c.raw || c.canonical) {
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(),
@@ -3928,7 +3875,7 @@
for (const auto& c : dictionary_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeDictionary(*c.expected);
+ std::optional<std::string> result = SerializeDictionary(*c.expected);
if (c.raw || c.canonical) {
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(),
diff --git a/quiche/common/structured_headers_test.cc b/quiche/common/structured_headers_test.cc
index 73a7ab3..988a660 100644
--- a/quiche/common/structured_headers_test.cc
+++ b/quiche/common/structured_headers_test.cc
@@ -7,6 +7,7 @@
#include <math.h>
#include <limits>
+#include <optional>
#include <string>
#include "quiche/common/platform/api/quiche_test.h"
@@ -57,12 +58,12 @@
const struct ItemTestCase {
const char* name;
const char* raw;
- const absl::optional<Item> expected; // nullopt if parse error is expected.
+ const std::optional<Item> expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
} item_test_cases[] = {
// Token
- {"bad token - item", "abc$@%!", absl::nullopt, nullptr},
+ {"bad token - item", "abc$@%!", std::nullopt, nullptr},
{"leading whitespace", " foo", Token("foo"), "foo"},
{"trailing whitespace", "foo ", Token("foo"), "foo"},
{"leading asterisk", "*foo", Token("*foo"), nullptr},
@@ -70,19 +71,19 @@
{"long integer", "999999999999999", Integer(999999999999999L), nullptr},
{"long negative integer", "-999999999999999", Integer(-999999999999999L),
nullptr},
- {"too long integer", "1000000000000000", absl::nullopt, nullptr},
- {"negative too long integer", "-1000000000000000", absl::nullopt, nullptr},
+ {"too long integer", "1000000000000000", std::nullopt, nullptr},
+ {"negative too long integer", "-1000000000000000", std::nullopt, nullptr},
{"integral decimal", "1.0", Item(1.0), nullptr},
// String
{"basic string", "\"foo\"", Item("foo"), nullptr},
- {"non-ascii string", "\"f\xC3\xBC\xC3\xBC\"", absl::nullopt, nullptr},
+ {"non-ascii string", "\"f\xC3\xBC\xC3\xBC\"", std::nullopt, nullptr},
// Additional tests
{"valid quoting containing \\n", "\"\\\\n\"", Item("\\n"), nullptr},
{"valid quoting containing \\t", "\"\\\\t\"", Item("\\t"), nullptr},
{"valid quoting containing \\x", "\"\\\\x61\"", Item("\\x61"), nullptr},
- {"c-style hex escape in string", "\"\\x61\"", absl::nullopt, nullptr},
+ {"c-style hex escape in string", "\"\\x61\"", std::nullopt, nullptr},
{"valid quoting containing \\u", "\"\\\\u0061\"", Item("\\u0061"), nullptr},
- {"c-style unicode escape in string", "\"\\u0061\"", absl::nullopt, nullptr},
+ {"c-style unicode escape in string", "\"\\u0061\"", std::nullopt, nullptr},
};
const ItemTestCase sh09_item_test_cases[] = {
@@ -91,8 +92,8 @@
nullptr},
{"large negative integer", "-9223372036854775807",
Integer(-9223372036854775807L), nullptr},
- {"too large integer", "9223372036854775808", absl::nullopt, nullptr},
- {"too large negative integer", "-9223372036854775808", absl::nullopt,
+ {"too large integer", "9223372036854775808", std::nullopt, nullptr},
+ {"too large negative integer", "-9223372036854775808", std::nullopt,
nullptr},
// Byte Sequence
{"basic binary", "*aGVsbG8=*", Item("hello", Item::kByteSequenceType),
@@ -100,23 +101,23 @@
{"empty binary", "**", Item("", Item::kByteSequenceType), nullptr},
{"bad paddding", "*aGVsbG8*", Item("hello", Item::kByteSequenceType),
"*aGVsbG8=*"},
- {"bad end delimiter", "*aGVsbG8=", absl::nullopt, nullptr},
- {"extra whitespace", "*aGVsb G8=*", absl::nullopt, nullptr},
- {"extra chars", "*aGVsbG!8=*", absl::nullopt, nullptr},
- {"suffix chars", "*aGVsbG8=!*", absl::nullopt, nullptr},
+ {"bad end delimiter", "*aGVsbG8=", std::nullopt, nullptr},
+ {"extra whitespace", "*aGVsb G8=*", std::nullopt, nullptr},
+ {"extra chars", "*aGVsbG!8=*", std::nullopt, nullptr},
+ {"suffix chars", "*aGVsbG8=!*", std::nullopt, nullptr},
{"non-zero pad bits", "*iZ==*", Item("\x89", Item::kByteSequenceType),
"*iQ==*"},
{"non-ASCII binary", "*/+Ah*", Item("\xFF\xE0!", Item::kByteSequenceType),
nullptr},
- {"base64url binary", "*_-Ah*", absl::nullopt, nullptr},
- {"token with leading asterisk", "*foo", absl::nullopt, nullptr},
+ {"base64url binary", "*_-Ah*", std::nullopt, nullptr},
+ {"token with leading asterisk", "*foo", std::nullopt, nullptr},
};
// For Structured Headers Draft 15
const struct ParameterizedItemTestCase {
const char* name;
const char* raw;
- const absl::optional<ParameterizedItem>
+ const std::optional<ParameterizedItem>
expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
@@ -147,11 +148,11 @@
{{Token("text/html"), {Param("a", 1L)}}},
"text/html;a=1"},
{"whitespace before = parameterised item", "text/html, text/plain;q =0.5",
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
{"whitespace after = parameterised item", "text/html, text/plain;q= 0.5",
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
{"whitespace before ; parameterised item", "text/html, text/plain ;q=0.5",
- absl::nullopt, nullptr},
+ std::nullopt, nullptr},
{"whitespace after ; parameterised item",
"text/plain; q=0.5",
{{Token("text/plain"), {DoubleParam("q", 0.5)}}},
@@ -167,7 +168,7 @@
const struct ListTestCase {
const char* name;
const char* raw;
- const absl::optional<List> expected; // nullopt if parse error is expected.
+ const std::optional<List> expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
} list_test_cases[] = {
@@ -214,7 +215,7 @@
{{{Integer(42L), {}}, {Integer(43L), {}}}, {BooleanParam("b", true)}}}},
nullptr},
{"extra whitespace before semicolon in parameters on inner list member",
- "(a;b ;c b)", absl::nullopt, nullptr},
+ "(a;b ;c b)", std::nullopt, nullptr},
{"extra whitespace between parameters on inner list member",
"(a;b; c b)",
{{{{{Token("a"), {BooleanParam("b", true), BooleanParam("c", true)}},
@@ -222,7 +223,7 @@
{}}}},
"(a;b;c b)"},
{"extra whitespace before semicolon in parameters on inner list",
- "(a b);c ;d, (e)", absl::nullopt, nullptr},
+ "(a b);c ;d, (e)", std::nullopt, nullptr},
{"extra whitespace between parameters on inner list",
"(a b);c; d, (e)",
{{{{{Token("a"), {}}, {Token("b"), {}}},
@@ -235,7 +236,7 @@
const struct DictionaryTestCase {
const char* name;
const char* raw;
- const absl::optional<Dictionary>
+ const std::optional<Dictionary>
expected; // nullopt if parse error is expected.
const char* canonical; // nullptr if parse error is expected, or if canonical
// format is identical to raw.
@@ -281,7 +282,7 @@
TEST(StructuredHeaderTest, ParseBareItem) {
for (const auto& c : item_test_cases) {
SCOPED_TRACE(c.name);
- absl::optional<Item> result = ParseBareItem(c.raw);
+ std::optional<Item> result = ParseBareItem(c.raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -290,7 +291,7 @@
TEST(StructuredHeaderTest, ParseItem) {
for (const auto& c : parameterized_item_test_cases) {
SCOPED_TRACE(c.name);
- absl::optional<ParameterizedItem> result = ParseItem(c.raw);
+ std::optional<ParameterizedItem> result = ParseItem(c.raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -302,7 +303,7 @@
TEST(StructuredHeaderTest, ParseSH09Item) {
for (const auto& c : sh09_item_test_cases) {
SCOPED_TRACE(c.name);
- absl::optional<ListOfLists> result = ParseListOfLists(c.raw);
+ std::optional<ListOfLists> result = ParseListOfLists(c.raw);
if (c.expected.has_value()) {
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result->size(), 1UL);
@@ -320,7 +321,7 @@
TEST(StructuredHeaderTest, SH09HighPrecisionFloats) {
// These values are exactly representable in binary floating point, so no
// accuracy issues are expected in this test.
- absl::optional<ListOfLists> result =
+ std::optional<ListOfLists> result =
ParseListOfLists("1.03125;-1.03125;12345678901234.5;-12345678901234.5");
ASSERT_TRUE(result.has_value());
EXPECT_EQ(*result,
@@ -365,7 +366,7 @@
};
for (const auto& c : cases) {
SCOPED_TRACE(c.name);
- absl::optional<ListOfLists> result = ParseListOfLists(c.raw);
+ std::optional<ListOfLists> result = ParseListOfLists(c.raw);
if (!c.expected.empty()) {
EXPECT_TRUE(result.has_value());
EXPECT_EQ(*result, c.expected);
@@ -417,7 +418,7 @@
};
for (const auto& c : cases) {
SCOPED_TRACE(c.name);
- absl::optional<ParameterisedList> result = ParseParameterisedList(c.raw);
+ std::optional<ParameterisedList> result = ParseParameterisedList(c.raw);
if (c.expected.empty()) {
EXPECT_FALSE(result.has_value());
continue;
@@ -436,7 +437,7 @@
TEST(StructuredHeaderTest, ParseList) {
for (const auto& c : list_test_cases) {
SCOPED_TRACE(c.name);
- absl::optional<List> result = ParseList(c.raw);
+ std::optional<List> result = ParseList(c.raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -445,7 +446,7 @@
TEST(StructuredHeaderTest, ParseDictionary) {
for (const auto& c : dictionary_test_cases) {
SCOPED_TRACE(c.name);
- absl::optional<Dictionary> result = ParseDictionary(c.raw);
+ std::optional<Dictionary> result = ParseDictionary(c.raw);
EXPECT_EQ(result, c.expected);
}
}
@@ -456,7 +457,7 @@
for (const auto& c : item_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeItem(*c.expected);
+ std::optional<std::string> result = SerializeItem(*c.expected);
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(), std::string(c.canonical ? c.canonical : c.raw));
}
@@ -467,7 +468,7 @@
for (const auto& c : parameterized_item_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeItem(*c.expected);
+ std::optional<std::string> result = SerializeItem(*c.expected);
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(), std::string(c.canonical ? c.canonical : c.raw));
}
@@ -504,7 +505,7 @@
};
for (const auto& bad_token : bad_tokens) {
SCOPED_TRACE(bad_token.name);
- absl::optional<std::string> serialization =
+ std::optional<std::string> serialization =
SerializeItem(Token(bad_token.value));
EXPECT_FALSE(serialization.has_value()) << *serialization;
}
@@ -536,7 +537,7 @@
};
for (const auto& bad_key : bad_keys) {
SCOPED_TRACE(bad_key.name);
- absl::optional<std::string> serialization =
+ std::optional<std::string> serialization =
SerializeItem(ParameterizedItem("a", {{bad_key.value, "a"}}));
EXPECT_FALSE(serialization.has_value()) << *serialization;
}
@@ -557,7 +558,7 @@
};
for (const auto& bad_string : bad_strings) {
SCOPED_TRACE(bad_string.name);
- absl::optional<std::string> serialization =
+ std::optional<std::string> serialization =
SerializeItem(Item(bad_string.value));
EXPECT_FALSE(serialization.has_value()) << *serialization;
}
@@ -616,7 +617,7 @@
};
for (const auto& test_case : float_test_cases) {
SCOPED_TRACE(test_case.name);
- absl::optional<std::string> serialization =
+ std::optional<std::string> serialization =
SerializeItem(Item(test_case.value));
EXPECT_TRUE(serialization.has_value());
EXPECT_EQ(*serialization, test_case.canonical);
@@ -627,7 +628,7 @@
for (const auto& c : list_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeList(*c.expected);
+ std::optional<std::string> result = SerializeList(*c.expected);
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(), std::string(c.canonical ? c.canonical : c.raw));
}
@@ -654,7 +655,7 @@
};
for (const auto& bad_list : bad_lists) {
SCOPED_TRACE(bad_list.name);
- absl::optional<std::string> serialization = SerializeList(bad_list.value);
+ std::optional<std::string> serialization = SerializeList(bad_list.value);
EXPECT_FALSE(serialization.has_value()) << *serialization;
}
}
@@ -663,7 +664,7 @@
for (const auto& c : dictionary_test_cases) {
SCOPED_TRACE(c.name);
if (c.expected) {
- absl::optional<std::string> result = SerializeDictionary(*c.expected);
+ std::optional<std::string> result = SerializeDictionary(*c.expected);
EXPECT_TRUE(result.has_value());
EXPECT_EQ(result.value(), std::string(c.canonical ? c.canonical : c.raw));
}
@@ -752,7 +753,7 @@
};
for (const auto& bad_dictionary : bad_dictionaries) {
SCOPED_TRACE(bad_dictionary.name);
- absl::optional<std::string> serialization =
+ std::optional<std::string> serialization =
SerializeDictionary(bad_dictionary.value);
EXPECT_FALSE(serialization.has_value()) << *serialization;
}
diff --git a/quiche/common/wire_serialization.h b/quiche/common/wire_serialization.h
index 4cb482b..81e0760 100644
--- a/quiche/common/wire_serialization.h
+++ b/quiche/common/wire_serialization.h
@@ -64,7 +64,6 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_logging.h"
#include "quiche/common/quiche_buffer_allocator.h"
#include "quiche/common/quiche_data_writer.h"
@@ -232,17 +231,17 @@
// Represents varint62-prefixed strings.
using WireStringWithVarInt62Length = WireStringWithLengthPrefix<WireVarInt62>;
-// Allows absl::optional to be used with this API. For instance, if the spec
+// Allows std::optional to be used with this API. For instance, if the spec
// defines
// [Context ID (i)]
-// and the value is stored as absl::optional<uint64> context_id, this can be
+// and the value is stored as std::optional<uint64> context_id, this can be
// recorded as
// WireOptional<WireVarInt62>(context_id)
// When optional is absent, nothing is written onto the wire.
template <typename WireType, typename InnerType = typename WireType::DataType>
class QUICHE_EXPORT WireOptional {
public:
- using DataType = absl::optional<InnerType>;
+ using DataType = std::optional<InnerType>;
using Status = SerializeIntoWriterStatus<WireType>;
explicit WireOptional(DataType value) { value_ = value; }
diff --git a/quiche/common/wire_serialization_test.cc b/quiche/common/wire_serialization_test.cc
index 9abdda9..6c8267f 100644
--- a/quiche/common/wire_serialization_test.cc
+++ b/quiche/common/wire_serialization_test.cc
@@ -5,12 +5,12 @@
#include "quiche/common/wire_serialization.h"
#include <limits>
+#include <optional>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/escaping.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_expect_bug.h"
#include "quiche/common/platform/api/quiche_test.h"
#include "quiche/common/quiche_buffer_allocator.h"
@@ -101,16 +101,16 @@
}
TEST(SerializationTest, SerializeOptionalValues) {
- absl::optional<uint8_t> has_no_value;
- absl::optional<uint8_t> has_value = 0x42;
+ std::optional<uint8_t> has_no_value;
+ std::optional<uint8_t> has_value = 0x42;
ExpectEncodingHex("optional without value", "00", WireUint8(0),
WireOptional<WireUint8>(has_no_value));
ExpectEncodingHex("optional with value", "0142", WireUint8(1),
WireOptional<WireUint8>(has_value));
ExpectEncodingHex("empty data", "", WireOptional<WireUint8>(has_no_value));
- absl::optional<std::string> has_no_string;
- absl::optional<std::string> has_string = "\x42";
+ std::optional<std::string> has_no_string;
+ std::optional<std::string> has_string = "\x42";
ExpectEncodingHex("optional no string", "",
WireOptional<WireStringWithVarInt62Length>(has_no_string));
ExpectEncodingHex("optional string", "0142",
diff --git a/quiche/http2/adapter/header_validator.h b/quiche/http2/adapter/header_validator.h
index f1c8497..ef55948 100644
--- a/quiche/http2/adapter/header_validator.h
+++ b/quiche/http2/adapter/header_validator.h
@@ -2,11 +2,11 @@
#define QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_
#include <bitset>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/http2/adapter/header_validator_base.h"
#include "quiche/common/platform/api/quiche_export.h"
diff --git a/quiche/http2/adapter/header_validator_base.h b/quiche/http2/adapter/header_validator_base.h
index 703d319..416c3aa 100644
--- a/quiche/http2/adapter/header_validator_base.h
+++ b/quiche/http2/adapter/header_validator_base.h
@@ -1,11 +1,12 @@
#ifndef QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_BASE_H_
#define QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_BASE_H_
+#include <cstddef>
#include <cstdint>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_export.h"
namespace http2 {
@@ -31,7 +32,7 @@
virtual void StartHeaderBlock() {
status_.clear();
- content_length_ = absl::nullopt;
+ content_length_ = std::nullopt;
}
enum HeaderStatus {
@@ -49,7 +50,7 @@
// For responses, returns the value of the ":status" header, if present.
absl::string_view status_header() const { return status_; }
- absl::optional<size_t> content_length() const { return content_length_; }
+ std::optional<size_t> content_length() const { return content_length_; }
void SetMaxFieldSize(uint32_t field_size) { max_field_size_ = field_size; }
void SetObsTextOption(ObsTextOption option) { obs_text_option_ = option; }
@@ -69,8 +70,8 @@
protected:
std::string status_;
- absl::optional<size_t> max_field_size_;
- absl::optional<size_t> content_length_;
+ std::optional<size_t> max_field_size_;
+ std::optional<size_t> content_length_;
ObsTextOption obs_text_option_ = ObsTextOption::kDisallow;
bool allow_extended_connect_ = false;
bool validate_path_ = false;
diff --git a/quiche/http2/adapter/header_validator_test.cc b/quiche/http2/adapter/header_validator_test.cc
index f465528..e3a4c68 100644
--- a/quiche/http2/adapter/header_validator_test.cc
+++ b/quiche/http2/adapter/header_validator_test.cc
@@ -1,10 +1,10 @@
#include "quiche/http2/adapter/header_validator.h"
+#include <optional>
#include <utility>
#include <vector>
#include "absl/strings/str_cat.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_test.h"
namespace http2 {
@@ -721,13 +721,13 @@
HeaderValidator v;
v.StartHeaderBlock();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(HeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "41"));
EXPECT_THAT(v.content_length(), Optional(41));
v.StartHeaderBlock();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(HeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "42"));
EXPECT_THAT(v.content_length(), Optional(42));
@@ -737,16 +737,16 @@
HeaderValidator v;
v.StartHeaderBlock();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID,
v.ValidateSingleHeader("content-length", ""));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID,
v.ValidateSingleHeader("content-length", "nan"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(HeaderValidator::HEADER_FIELD_INVALID,
v.ValidateSingleHeader("content-length", "-42"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
// End on a positive note.
EXPECT_EQ(HeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "42"));
@@ -815,7 +815,7 @@
TEST(HeaderValidatorTest, MixedCaseContentLength) {
HeaderValidator v;
v.SetAllowUppercaseInHeaderNames();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(HeaderValidator::HEADER_OK,
v.ValidateSingleHeader("Content-Length", "42"));
EXPECT_THAT(v.content_length(), Optional(42));
diff --git a/quiche/http2/adapter/http2_adapter.h b/quiche/http2/adapter/http2_adapter.h
index fb9df13..0ab0a72 100644
--- a/quiche/http2/adapter/http2_adapter.h
+++ b/quiche/http2/adapter/http2_adapter.h
@@ -4,7 +4,6 @@
#include <cstdint>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/http2/adapter/data_source.h"
#include "quiche/http2/adapter/http2_protocol.h"
diff --git a/quiche/http2/adapter/noop_header_validator_test.cc b/quiche/http2/adapter/noop_header_validator_test.cc
index 6340c60..65cc763 100644
--- a/quiche/http2/adapter/noop_header_validator_test.cc
+++ b/quiche/http2/adapter/noop_header_validator_test.cc
@@ -1,10 +1,10 @@
#include "quiche/http2/adapter/noop_header_validator.h"
+#include <optional>
#include <utility>
#include <vector>
#include "absl/strings/str_cat.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_test.h"
namespace http2 {
@@ -457,35 +457,35 @@
NoopHeaderValidator v;
v.StartHeaderBlock();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "41"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
v.StartHeaderBlock();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "42"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
}
TEST(NoopHeaderValidatorTest, InvalidContentLength) {
NoopHeaderValidator v;
v.StartHeaderBlock();
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", ""));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "nan"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "-42"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
v.ValidateSingleHeader("content-length", "42"));
- EXPECT_EQ(v.content_length(), absl::nullopt);
+ EXPECT_EQ(v.content_length(), std::nullopt);
}
TEST(NoopHeaderValidatorTest, TeHeader) {
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index fdf308e..d91d9dc 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -2,6 +2,7 @@
#include <cstdint>
#include <memory>
+#include <optional>
#include <utility>
#include <vector>
@@ -739,7 +740,7 @@
if (is_settings_ack && encoder_header_table_capacity_when_acking_) {
framer_.UpdateHeaderEncoderTableSize(
*encoder_header_table_capacity_when_acking_);
- encoder_header_table_capacity_when_acking_ = absl::nullopt;
+ encoder_header_table_capacity_when_acking_ = std::nullopt;
} else if (!is_settings_ack) {
sent_non_ack_settings_ = true;
}
@@ -1855,7 +1856,7 @@
}
HeaderType OgHttp2Session::NextHeaderType(
- absl::optional<HeaderType> current_type) {
+ std::optional<HeaderType> current_type) {
if (IsServerSession()) {
if (!current_type) {
return HeaderType::REQUEST;
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index 96b50e9..16e4db4 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -5,10 +5,10 @@
#include <limits>
#include <list>
#include <memory>
+#include <optional>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/variant.h"
#include "quiche/http2/adapter/data_source.h"
#include "quiche/http2/adapter/event_forwarder.h"
@@ -47,14 +47,14 @@
// The perspective of this session.
Perspective perspective = Perspective::kClient;
// The maximum HPACK table size to use.
- absl::optional<size_t> max_hpack_encoding_table_capacity = absl::nullopt;
+ std::optional<size_t> max_hpack_encoding_table_capacity;
// The maximum number of decoded header bytes that a stream can receive.
- absl::optional<uint32_t> max_header_list_bytes = absl::nullopt;
+ std::optional<uint32_t> max_header_list_bytes = std::nullopt;
// The maximum size of an individual header field, including name and value.
- absl::optional<uint32_t> max_header_field_size = absl::nullopt;
+ std::optional<uint32_t> max_header_field_size = std::nullopt;
// The assumed initial value of the remote endpoint's max concurrent streams
// setting.
- absl::optional<uint32_t> remote_max_concurrent_streams = absl::nullopt;
+ std::optional<uint32_t> remote_max_concurrent_streams = std::nullopt;
// Whether to automatically send PING acks when receiving a PING.
bool auto_ping_ack = true;
// Whether (as server) to send a RST_STREAM NO_ERROR when sending a fin on
@@ -245,8 +245,8 @@
std::unique_ptr<spdy::Http2HeaderBlock> trailers;
void* user_data = nullptr;
int32_t send_window;
- absl::optional<HeaderType> received_header_type;
- absl::optional<size_t> remaining_content_length;
+ std::optional<HeaderType> received_header_type;
+ std::optional<size_t> remaining_content_length;
bool half_closed_local = false;
bool half_closed_remote = false;
// Indicates that `outbound_body` temporarily cannot produce data.
@@ -286,7 +286,7 @@
type_ == HeaderType::RESPONSE_100);
return validator_->status_header();
}
- absl::optional<size_t> content_length() const {
+ std::optional<size_t> content_length() const {
return validator_->content_length();
}
void SetAllowExtendedConnect() { validator_->SetAllowExtendedConnect(); }
@@ -410,7 +410,7 @@
void CloseStream(Http2StreamId stream_id, Http2ErrorCode error_code);
// Calculates the next expected header type for a stream in a given state.
- HeaderType NextHeaderType(absl::optional<HeaderType> current_type);
+ HeaderType NextHeaderType(std::optional<HeaderType> current_type);
// Returns true if the session can create a new stream.
bool CanCreateStream() const;
@@ -542,7 +542,7 @@
// acking SETTINGS from the peer. Only contains a value if the peer advertises
// a larger table capacity than currently used; a smaller value can safely be
// applied immediately upon receipt.
- absl::optional<uint32_t> encoder_header_table_capacity_when_acking_;
+ std::optional<uint32_t> encoder_header_table_capacity_when_acking_;
uint8_t current_frame_type_ = 0;
diff --git a/quiche/http2/adapter/test_frame_sequence.cc b/quiche/http2/adapter/test_frame_sequence.cc
index d73f036..fab4083 100644
--- a/quiche/http2/adapter/test_frame_sequence.cc
+++ b/quiche/http2/adapter/test_frame_sequence.cc
@@ -1,6 +1,7 @@
#include "quiche/http2/adapter/test_frame_sequence.h"
#include <memory>
+#include <optional>
#include "quiche/http2/adapter/http2_util.h"
#include "quiche/http2/adapter/oghttp2_util.h"
@@ -33,7 +34,7 @@
TestFrameSequence& TestFrameSequence::Data(Http2StreamId stream_id,
absl::string_view payload, bool fin,
- absl::optional<int> padding_length) {
+ std::optional<int> padding_length) {
auto data = std::make_unique<spdy::SpdyDataIR>(stream_id, payload);
data->set_fin(fin);
if (padding_length) {
diff --git a/quiche/http2/adapter/test_frame_sequence.h b/quiche/http2/adapter/test_frame_sequence.h
index 953aed1..47f8199 100644
--- a/quiche/http2/adapter/test_frame_sequence.h
+++ b/quiche/http2/adapter/test_frame_sequence.h
@@ -28,7 +28,7 @@
absl::Span<const Http2Setting> settings = {});
TestFrameSequence& Data(Http2StreamId stream_id, absl::string_view payload,
bool fin = false,
- absl::optional<int> padding_length = absl::nullopt);
+ std::optional<int> padding_length = std::nullopt);
TestFrameSequence& RstStream(Http2StreamId stream_id, Http2ErrorCode error);
TestFrameSequence& Settings(absl::Span<const Http2Setting> settings);
TestFrameSequence& SettingsAck();
diff --git a/quiche/http2/adapter/test_utils.cc b/quiche/http2/adapter/test_utils.cc
index f85d5a3..2cdd560 100644
--- a/quiche/http2/adapter/test_utils.cc
+++ b/quiche/http2/adapter/test_utils.cc
@@ -1,11 +1,13 @@
#include "quiche/http2/adapter/test_utils.h"
+#include <optional>
#include <ostream>
#include "absl/strings/str_format.h"
#include "quiche/http2/adapter/http2_visitor_interface.h"
#include "quiche/common/quiche_data_reader.h"
#include "quiche/spdy/core/hpack/hpack_encoder.h"
+#include "quiche/spdy/core/spdy_protocol.h"
namespace http2 {
namespace adapter {
@@ -104,7 +106,7 @@
namespace {
using TypeAndOptionalLength =
- std::pair<spdy::SpdyFrameType, absl::optional<size_t>>;
+ std::pair<spdy::SpdyFrameType, std::optional<size_t>>;
std::ostream& operator<<(
std::ostream& os,
@@ -152,7 +154,7 @@
}
bool MatchAndExplainOneFrame(spdy::SpdyFrameType expected_type,
- absl::optional<size_t> expected_length,
+ std::optional<size_t> expected_length,
quiche::QuicheDataReader* reader,
testing::MatchResultListener* listener) const {
uint32_t payload_length;
@@ -203,18 +205,18 @@
} // namespace
testing::Matcher<absl::string_view> EqualsFrames(
- std::vector<std::pair<spdy::SpdyFrameType, absl::optional<size_t>>>
+ std::vector<std::pair<spdy::SpdyFrameType, std::optional<size_t>>>
types_and_lengths) {
return MakeMatcher(new SpdyControlFrameMatcher(std::move(types_and_lengths)));
}
testing::Matcher<absl::string_view> EqualsFrames(
std::vector<spdy::SpdyFrameType> types) {
- std::vector<std::pair<spdy::SpdyFrameType, absl::optional<size_t>>>
+ std::vector<std::pair<spdy::SpdyFrameType, std::optional<size_t>>>
types_and_lengths;
types_and_lengths.reserve(types.size());
for (spdy::SpdyFrameType type : types) {
- types_and_lengths.push_back({type, absl::nullopt});
+ types_and_lengths.push_back({type, std::nullopt});
}
return MakeMatcher(new SpdyControlFrameMatcher(std::move(types_and_lengths)));
}
diff --git a/quiche/http2/adapter/test_utils.h b/quiche/http2/adapter/test_utils.h
index cd1aa8a..ceda74f 100644
--- a/quiche/http2/adapter/test_utils.h
+++ b/quiche/http2/adapter/test_utils.h
@@ -125,7 +125,7 @@
// Requires that frames match both types and lengths.
testing::Matcher<absl::string_view> EqualsFrames(
- std::vector<std::pair<spdy::SpdyFrameType, absl::optional<size_t>>>
+ std::vector<std::pair<spdy::SpdyFrameType, std::optional<size_t>>>
types_and_lengths);
// Requires that frames match the specified types.
diff --git a/quiche/http2/adapter/test_utils_test.cc b/quiche/http2/adapter/test_utils_test.cc
index 0ea44dc..9abeead 100644
--- a/quiche/http2/adapter/test_utils_test.cc
+++ b/quiche/http2/adapter/test_utils_test.cc
@@ -1,5 +1,7 @@
#include "quiche/http2/adapter/test_utils.h"
+#include <optional>
+
#include "quiche/common/platform/api/quiche_test.h"
#include "quiche/spdy/core/spdy_framer.h"
@@ -35,12 +37,12 @@
spdy::SpdyRstStreamIR rst_stream{7, spdy::ERROR_CODE_REFUSED_STREAM};
EXPECT_THAT(framer.SerializeFrame(rst_stream),
- EqualsFrames({{spdy::SpdyFrameType::RST_STREAM, absl::nullopt}}));
+ EqualsFrames({{spdy::SpdyFrameType::RST_STREAM, std::nullopt}}));
spdy::SpdyGoAwayIR goaway{13, spdy::ERROR_CODE_ENHANCE_YOUR_CALM,
"Consider taking some deep breaths."};
EXPECT_THAT(framer.SerializeFrame(goaway),
- EqualsFrames({{spdy::SpdyFrameType::GOAWAY, absl::nullopt}}));
+ EqualsFrames({{spdy::SpdyFrameType::GOAWAY, std::nullopt}}));
spdy::Http2HeaderBlock block;
block[":method"] = "GET";
@@ -48,7 +50,7 @@
block[":authority"] = "example.com";
spdy::SpdyHeadersIR headers{17, std::move(block)};
EXPECT_THAT(framer.SerializeFrame(headers),
- EqualsFrames({{spdy::SpdyFrameType::HEADERS, absl::nullopt}}));
+ EqualsFrames({{spdy::SpdyFrameType::HEADERS, std::nullopt}}));
}
TEST(EqualsFrames, MultipleFrames) {
@@ -75,17 +77,17 @@
absl::string_view(framer.SerializeFrame(headers)));
absl::string_view frame_sequence_view = frame_sequence;
EXPECT_THAT(frame_sequence,
- EqualsFrames({{spdy::SpdyFrameType::PING, absl::nullopt},
- {spdy::SpdyFrameType::WINDOW_UPDATE, absl::nullopt},
+ EqualsFrames({{spdy::SpdyFrameType::PING, std::nullopt},
+ {spdy::SpdyFrameType::WINDOW_UPDATE, std::nullopt},
{spdy::SpdyFrameType::DATA, 25},
- {spdy::SpdyFrameType::RST_STREAM, absl::nullopt},
+ {spdy::SpdyFrameType::RST_STREAM, std::nullopt},
{spdy::SpdyFrameType::GOAWAY, 42},
{spdy::SpdyFrameType::HEADERS, 19}}));
EXPECT_THAT(frame_sequence_view,
- EqualsFrames({{spdy::SpdyFrameType::PING, absl::nullopt},
- {spdy::SpdyFrameType::WINDOW_UPDATE, absl::nullopt},
+ EqualsFrames({{spdy::SpdyFrameType::PING, std::nullopt},
+ {spdy::SpdyFrameType::WINDOW_UPDATE, std::nullopt},
{spdy::SpdyFrameType::DATA, 25},
- {spdy::SpdyFrameType::RST_STREAM, absl::nullopt},
+ {spdy::SpdyFrameType::RST_STREAM, std::nullopt},
{spdy::SpdyFrameType::GOAWAY, 42},
{spdy::SpdyFrameType::HEADERS, 19}}));
EXPECT_THAT(
diff --git a/quiche/http2/core/priority_write_scheduler.h b/quiche/http2/core/priority_write_scheduler.h
index d63a316..0e33111 100644
--- a/quiche/http2/core/priority_write_scheduler.h
+++ b/quiche/http2/core/priority_write_scheduler.h
@@ -9,6 +9,7 @@
#include <cstddef>
#include <cstdint>
#include <memory>
+#include <optional>
#include <string>
#include <tuple>
#include <utility>
@@ -17,7 +18,6 @@
#include "absl/container/flat_hash_map.h"
#include "absl/strings/str_cat.h"
#include "absl/time/time.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_bug_tracker.h"
#include "quiche/common/platform/api/quiche_export.h"
#include "quiche/common/platform/api/quiche_logging.h"
@@ -171,14 +171,14 @@
// event.
//
// Preconditions: `stream_id` should be registered.
- absl::optional<absl::Time> GetLatestEventWithPriority(
+ std::optional<absl::Time> GetLatestEventWithPriority(
StreamIdType stream_id) const {
auto it = stream_infos_.find(stream_id);
if (it == stream_infos_.end()) {
QUICHE_BUG(spdy_bug_19_5) << "Stream " << stream_id << " not registered";
- return absl::nullopt;
+ return std::nullopt;
}
- absl::optional<absl::Time> last_event_time;
+ std::optional<absl::Time> last_event_time;
const StreamInfo* const stream_info = it->second.get();
for (int p = kHighestPriority;
p < PriorityTypeToInt()(stream_info->priority); ++p) {
@@ -347,7 +347,7 @@
// IDs of streams that are ready to write.
ReadyList ready_list;
// Time of latest write event for stream of this priority.
- absl::optional<absl::Time> last_event_time;
+ std::optional<absl::Time> last_event_time;
};
// Use std::unique_ptr, because absl::flat_hash_map does not have pointer
diff --git a/quiche/http2/test_tools/frame_parts.cc b/quiche/http2/test_tools/frame_parts.cc
index 4792e27..824c864 100644
--- a/quiche/http2/test_tools/frame_parts.cc
+++ b/quiche/http2/test_tools/frame_parts.cc
@@ -4,6 +4,7 @@
#include "quiche/http2/test_tools/frame_parts.h"
+#include <optional>
#include <type_traits>
#include "absl/strings/escaping.h"
@@ -534,7 +535,7 @@
AssertionResult FrameParts::AppendString(absl::string_view source,
std::string* target,
- absl::optional<size_t>* opt_length) {
+ std::optional<size_t>* opt_length) {
target->append(source.data(), source.size());
if (opt_length != nullptr) {
HTTP2_VERIFY_TRUE(*opt_length) << "Length is not set yet\n" << *this;
diff --git a/quiche/http2/test_tools/frame_parts.h b/quiche/http2/test_tools/frame_parts.h
index d116228..9ae5185 100644
--- a/quiche/http2/test_tools/frame_parts.h
+++ b/quiche/http2/test_tools/frame_parts.h
@@ -13,11 +13,11 @@
#include <stddef.h>
#include <cstdint>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/http2/decoder/http2_frame_decoder_listener.h"
#include "quiche/http2/http2_constants.h"
#include "quiche/http2/http2_structures.h"
@@ -118,74 +118,74 @@
const Http2FrameHeader& GetFrameHeader() const { return frame_header_; }
- absl::optional<Http2PriorityFields> GetOptPriority() const {
+ std::optional<Http2PriorityFields> GetOptPriority() const {
return opt_priority_;
}
- absl::optional<Http2ErrorCode> GetOptRstStreamErrorCode() const {
+ std::optional<Http2ErrorCode> GetOptRstStreamErrorCode() const {
return opt_rst_stream_error_code_;
}
- absl::optional<Http2PushPromiseFields> GetOptPushPromise() const {
+ std::optional<Http2PushPromiseFields> GetOptPushPromise() const {
return opt_push_promise_;
}
- absl::optional<Http2PingFields> GetOptPing() const { return opt_ping_; }
- absl::optional<Http2GoAwayFields> GetOptGoaway() const { return opt_goaway_; }
- absl::optional<size_t> GetOptPadLength() const { return opt_pad_length_; }
- absl::optional<size_t> GetOptPayloadLength() const {
+ std::optional<Http2PingFields> GetOptPing() const { return opt_ping_; }
+ std::optional<Http2GoAwayFields> GetOptGoaway() const { return opt_goaway_; }
+ std::optional<size_t> GetOptPadLength() const { return opt_pad_length_; }
+ std::optional<size_t> GetOptPayloadLength() const {
return opt_payload_length_;
}
- absl::optional<size_t> GetOptMissingLength() const {
+ std::optional<size_t> GetOptMissingLength() const {
return opt_missing_length_;
}
- absl::optional<size_t> GetOptAltsvcOriginLength() const {
+ std::optional<size_t> GetOptAltsvcOriginLength() const {
return opt_altsvc_origin_length_;
}
- absl::optional<size_t> GetOptAltsvcValueLength() const {
+ std::optional<size_t> GetOptAltsvcValueLength() const {
return opt_altsvc_value_length_;
}
- absl::optional<size_t> GetOptWindowUpdateIncrement() const {
+ std::optional<size_t> GetOptWindowUpdateIncrement() const {
return opt_window_update_increment_;
}
bool GetHasFrameSizeError() const { return has_frame_size_error_; }
- void SetOptPriority(absl::optional<Http2PriorityFields> opt_priority) {
+ void SetOptPriority(std::optional<Http2PriorityFields> opt_priority) {
opt_priority_ = opt_priority;
}
void SetOptRstStreamErrorCode(
- absl::optional<Http2ErrorCode> opt_rst_stream_error_code) {
+ std::optional<Http2ErrorCode> opt_rst_stream_error_code) {
opt_rst_stream_error_code_ = opt_rst_stream_error_code;
}
void SetOptPushPromise(
- absl::optional<Http2PushPromiseFields> opt_push_promise) {
+ std::optional<Http2PushPromiseFields> opt_push_promise) {
opt_push_promise_ = opt_push_promise;
}
- void SetOptPing(absl::optional<Http2PingFields> opt_ping) {
+ void SetOptPing(std::optional<Http2PingFields> opt_ping) {
opt_ping_ = opt_ping;
}
- void SetOptGoaway(absl::optional<Http2GoAwayFields> opt_goaway) {
+ void SetOptGoaway(std::optional<Http2GoAwayFields> opt_goaway) {
opt_goaway_ = opt_goaway;
}
- void SetOptPadLength(absl::optional<size_t> opt_pad_length) {
+ void SetOptPadLength(std::optional<size_t> opt_pad_length) {
opt_pad_length_ = opt_pad_length;
}
- void SetOptPayloadLength(absl::optional<size_t> opt_payload_length) {
+ void SetOptPayloadLength(std::optional<size_t> opt_payload_length) {
opt_payload_length_ = opt_payload_length;
}
- void SetOptMissingLength(absl::optional<size_t> opt_missing_length) {
+ void SetOptMissingLength(std::optional<size_t> opt_missing_length) {
opt_missing_length_ = opt_missing_length;
}
void SetOptAltsvcOriginLength(
- absl::optional<size_t> opt_altsvc_origin_length) {
+ std::optional<size_t> opt_altsvc_origin_length) {
opt_altsvc_origin_length_ = opt_altsvc_origin_length;
}
- void SetOptAltsvcValueLength(absl::optional<size_t> opt_altsvc_value_length) {
+ void SetOptAltsvcValueLength(std::optional<size_t> opt_altsvc_value_length) {
opt_altsvc_value_length_ = opt_altsvc_value_length;
}
void SetOptWindowUpdateIncrement(
- absl::optional<size_t> opt_window_update_increment) {
+ std::optional<size_t> opt_window_update_increment) {
opt_window_update_increment_ = opt_window_update_increment;
}
void SetOptPriorityUpdate(
- absl::optional<Http2PriorityUpdateFields> priority_update) {
+ std::optional<Http2PriorityUpdateFields> priority_update) {
opt_priority_update_ = priority_update;
}
@@ -216,7 +216,7 @@
// called), and that target is not longer than opt_length->value().
::testing::AssertionResult AppendString(absl::string_view source,
std::string* target,
- absl::optional<size_t>* opt_length);
+ std::optional<size_t>* opt_length);
const Http2FrameHeader frame_header_;
@@ -225,20 +225,20 @@
std::string altsvc_origin_;
std::string altsvc_value_;
- absl::optional<Http2PriorityFields> opt_priority_;
- absl::optional<Http2ErrorCode> opt_rst_stream_error_code_;
- absl::optional<Http2PushPromiseFields> opt_push_promise_;
- absl::optional<Http2PingFields> opt_ping_;
- absl::optional<Http2GoAwayFields> opt_goaway_;
- absl::optional<Http2PriorityUpdateFields> opt_priority_update_;
+ std::optional<Http2PriorityFields> opt_priority_;
+ std::optional<Http2ErrorCode> opt_rst_stream_error_code_;
+ std::optional<Http2PushPromiseFields> opt_push_promise_;
+ std::optional<Http2PingFields> opt_ping_;
+ std::optional<Http2GoAwayFields> opt_goaway_;
+ std::optional<Http2PriorityUpdateFields> opt_priority_update_;
- absl::optional<size_t> opt_pad_length_;
- absl::optional<size_t> opt_payload_length_;
- absl::optional<size_t> opt_missing_length_;
- absl::optional<size_t> opt_altsvc_origin_length_;
- absl::optional<size_t> opt_altsvc_value_length_;
+ std::optional<size_t> opt_pad_length_;
+ std::optional<size_t> opt_payload_length_;
+ std::optional<size_t> opt_missing_length_;
+ std::optional<size_t> opt_altsvc_origin_length_;
+ std::optional<size_t> opt_altsvc_value_length_;
- absl::optional<size_t> opt_window_update_increment_;
+ std::optional<size_t> opt_window_update_increment_;
bool has_frame_size_error_ = false;
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.cc b/quiche/oblivious_http/buffers/oblivious_http_request.cc
index fec5c8f..eaf3c33 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_request.cc
@@ -4,6 +4,7 @@
#include <stdint.h>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
@@ -12,7 +13,6 @@
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "openssl/hpke.h"
#include "quiche/common/platform/api/quiche_bug_tracker.h"
#include "quiche/common/platform/api/quiche_logging.h"
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.h b/quiche/oblivious_http/buffers/oblivious_http_request.h
index 0678ff5..cf27c41 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request.h
+++ b/quiche/oblivious_http/buffers/oblivious_http_request.h
@@ -2,11 +2,11 @@
#define QUICHE_OBLIVIOUS_HTTP_BUFFERS_OBLIVIOUS_HTTP_REQUEST_H_
#include <memory>
+#include <optional>
#include <string>
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "openssl/hpke.h"
#include "quiche/oblivious_http/common/oblivious_http_header_key_config.h"
@@ -115,7 +115,7 @@
absl::string_view seed, absl::string_view request_label);
// This field will be empty after calling `ReleaseContext()`.
- absl::optional<Context> oblivious_http_request_context_;
+ std::optional<Context> oblivious_http_request_context_;
ObliviousHttpHeaderKeyConfig key_config_;
std::string request_ciphertext_;
std::string request_plaintext_;
diff --git a/quiche/quic/core/batch_writer/quic_batch_writer_base.h b/quiche/quic/core/batch_writer/quic_batch_writer_base.h
index 69cefba..34c801a 100644
--- a/quiche/quic/core/batch_writer/quic_batch_writer_base.h
+++ b/quiche/quic/core/batch_writer/quic_batch_writer_base.h
@@ -39,7 +39,7 @@
void SetWritable() final { write_blocked_ = false; }
- absl::optional<int> MessageTooBigErrorCode() const override {
+ std::optional<int> MessageTooBigErrorCode() const override {
return EMSGSIZE;
}
diff --git a/quiche/quic/core/chlo_extractor.cc b/quiche/quic/core/chlo_extractor.cc
index a663432..ae4d6e3 100644
--- a/quiche/quic/core/chlo_extractor.cc
+++ b/quiche/quic/core/chlo_extractor.cc
@@ -57,7 +57,7 @@
bool OnAckTimestamp(QuicPacketNumber packet_number,
QuicTime timestamp) override;
bool OnAckFrameEnd(QuicPacketNumber start,
- const absl::optional<QuicEcnCounts>& ecn_counts) override;
+ const std::optional<QuicEcnCounts>& ecn_counts) override;
bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override;
bool OnPingFrame(const QuicPingFrame& frame) override;
bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override;
@@ -219,7 +219,7 @@
bool ChloFramerVisitor::OnAckFrameEnd(
QuicPacketNumber /*start*/,
- const absl::optional<QuicEcnCounts>& /*ecn_counts*/) {
+ const std::optional<QuicEcnCounts>& /*ecn_counts*/) {
return true;
}
diff --git a/quiche/quic/core/congestion_control/bbr2_simulator_test.cc b/quiche/quic/core/congestion_control/bbr2_simulator_test.cc
index 4a14fc7..9eadce2 100644
--- a/quiche/quic/core/congestion_control/bbr2_simulator_test.cc
+++ b/quiche/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -3,11 +3,11 @@
// found in the LICENSE file.
#include <memory>
+#include <optional>
#include <sstream>
#include <utility>
#include "absl/strings/str_cat.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/congestion_control/bbr2_misc.h"
#include "quiche/quic/core/congestion_control/bbr2_sender.h"
#include "quiche/quic/core/congestion_control/bbr_sender.h"
@@ -90,7 +90,7 @@
// Network switch queue capacity, in number of BDPs.
float switch_queue_capacity_in_bdp = 2;
- absl::optional<TrafficPolicerParams> sender_policer_params;
+ std::optional<TrafficPolicerParams> sender_policer_params;
QuicBandwidth BottleneckBandwidth() const {
return std::min(local_link.bandwidth, test_link.bandwidth);
diff --git a/quiche/quic/core/congestion_control/general_loss_algorithm_test.cc b/quiche/quic/core/congestion_control/general_loss_algorithm_test.cc
index 8fa22e0..4ec8a52 100644
--- a/quiche/quic/core/congestion_control/general_loss_algorithm_test.cc
+++ b/quiche/quic/core/congestion_control/general_loss_algorithm_test.cc
@@ -62,15 +62,14 @@
const AckedPacketVector& packets_acked,
const std::vector<uint64_t>& losses_expected) {
return VerifyLosses(largest_newly_acked, packets_acked, losses_expected,
- absl::nullopt, absl::nullopt);
+ std::nullopt, std::nullopt);
}
void VerifyLosses(
uint64_t largest_newly_acked, const AckedPacketVector& packets_acked,
const std::vector<uint64_t>& losses_expected,
- absl::optional<QuicPacketCount> max_sequence_reordering_expected,
- absl::optional<QuicPacketCount>
- num_borderline_time_reorderings_expected) {
+ std::optional<QuicPacketCount> max_sequence_reordering_expected,
+ std::optional<QuicPacketCount> num_borderline_time_reorderings_expected) {
unacked_packets_.MaybeUpdateLargestAckedOfPacketNumberSpace(
APPLICATION_DATA, QuicPacketNumber(largest_newly_acked));
LostPacketVector lost_packets;
diff --git a/quiche/quic/core/congestion_control/uber_loss_algorithm.h b/quiche/quic/core/congestion_control/uber_loss_algorithm.h
index 19e3d9c..8b316cc 100644
--- a/quiche/quic/core/congestion_control/uber_loss_algorithm.h
+++ b/quiche/quic/core/congestion_control/uber_loss_algorithm.h
@@ -5,7 +5,8 @@
#ifndef QUICHE_QUIC_CORE_CONGESTION_CONTROL_UBER_LOSS_ALGORITHM_H_
#define QUICHE_QUIC_CORE_CONGESTION_CONTROL_UBER_LOSS_ALGORITHM_H_
-#include "absl/types/optional.h"
+#include <optional>
+
#include "quiche/quic/core/congestion_control/general_loss_algorithm.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/platform/api/quic_flags.h"
@@ -20,8 +21,8 @@
struct QUICHE_EXPORT LossDetectionParameters {
// See GeneralLossAlgorithm for the meaning of reordering_(shift|threshold).
- absl::optional<int> reordering_shift;
- absl::optional<QuicPacketCount> reordering_threshold;
+ std::optional<int> reordering_shift;
+ std::optional<QuicPacketCount> reordering_threshold;
};
class QUICHE_EXPORT LossDetectionTunerInterface {
diff --git a/quiche/quic/core/congestion_control/uber_loss_algorithm_test.cc b/quiche/quic/core/congestion_control/uber_loss_algorithm_test.cc
index f840847..e2ada18 100644
--- a/quiche/quic/core/congestion_control/uber_loss_algorithm_test.cc
+++ b/quiche/quic/core/congestion_control/uber_loss_algorithm_test.cc
@@ -5,9 +5,9 @@
#include "quiche/quic/core/congestion_control/uber_loss_algorithm.h"
#include <memory>
+#include <optional>
#include <utility>
-#include "absl/types/optional.h"
#include "quiche/quic/core/congestion_control/rtt_stats.h"
#include "quiche/quic/core/crypto/crypto_protocol.h"
#include "quiche/quic/core/quic_types.h"
@@ -69,13 +69,13 @@
const AckedPacketVector& packets_acked,
const std::vector<uint64_t>& losses_expected) {
return VerifyLosses(largest_newly_acked, packets_acked, losses_expected,
- absl::nullopt);
+ std::nullopt);
}
void VerifyLosses(
uint64_t largest_newly_acked, const AckedPacketVector& packets_acked,
const std::vector<uint64_t>& losses_expected,
- absl::optional<QuicPacketCount> max_sequence_reordering_expected) {
+ std::optional<QuicPacketCount> max_sequence_reordering_expected) {
LostPacketVector lost_packets;
LossDetectionInterface::DetectionStats stats = loss_algorithm_.DetectLosses(
*unacked_packets_, clock_.Now(), rtt_stats_,
diff --git a/quiche/quic/core/connection_id_generator.h b/quiche/quic/core/connection_id_generator.h
index 3e46a9e..33ecedc 100644
--- a/quiche/quic/core/connection_id_generator.h
+++ b/quiche/quic/core/connection_id_generator.h
@@ -17,11 +17,11 @@
// Generate a new connection ID for a given connection ID. Returns the new
// connection ID. If it cannot be generated for some reason, returns
// empty.
- virtual absl::optional<QuicConnectionId> GenerateNextConnectionId(
+ virtual std::optional<QuicConnectionId> GenerateNextConnectionId(
const QuicConnectionId& original) = 0;
// Consider the client-generated server connection ID in the quic handshake
// and consider replacing it. Returns empty if not replaced.
- virtual absl::optional<QuicConnectionId> MaybeReplaceConnectionId(
+ virtual std::optional<QuicConnectionId> MaybeReplaceConnectionId(
const QuicConnectionId& original, const ParsedQuicVersion& version) = 0;
// Returns the length of a connection ID generated by this generator with the
// specified first byte.
diff --git a/quiche/quic/core/crypto/certificate_util_test.cc b/quiche/quic/core/crypto/certificate_util_test.cc
index 4c98d7c..06d5c4f 100644
--- a/quiche/quic/core/crypto/certificate_util_test.cc
+++ b/quiche/quic/core/crypto/certificate_util_test.cc
@@ -35,7 +35,7 @@
ASSERT_NE(cert_view, nullptr);
EXPECT_EQ(cert_view->public_key_type(), PublicKeyType::kP256);
- absl::optional<std::string> subject = cert_view->GetHumanReadableSubject();
+ std::optional<std::string> subject = cert_view->GetHumanReadableSubject();
ASSERT_TRUE(subject.has_value());
EXPECT_EQ(*subject, options.subject);
diff --git a/quiche/quic/core/crypto/certificate_view.cc b/quiche/quic/core/crypto/certificate_view.cc
index 456d94b..5e83ae7 100644
--- a/quiche/quic/core/crypto/certificate_view.cc
+++ b/quiche/quic/core/crypto/certificate_view.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <cstdint>
#include <memory>
+#include <optional>
#include <string>
#include "absl/strings/escaping.h"
@@ -14,7 +15,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/str_join.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "openssl/base.h"
#include "openssl/bytestring.h"
#include "openssl/digest.h"
@@ -137,12 +137,12 @@
} // namespace
-absl::optional<std::string> X509NameAttributeToString(CBS input) {
+std::optional<std::string> X509NameAttributeToString(CBS input) {
CBS name, value;
unsigned value_tag;
if (!CBS_get_asn1(&input, &name, CBS_ASN1_OBJECT) ||
!CBS_get_any_asn1(&input, &value, &value_tag) || CBS_len(&input) != 0) {
- return absl::nullopt;
+ return std::nullopt;
}
// Note that this does not process encoding of |input| in any way. This works
// fine for the most cases.
@@ -153,17 +153,17 @@
namespace {
template <unsigned inner_tag, char separator,
- absl::optional<std::string> (*parser)(CBS)>
-absl::optional<std::string> ParseAndJoin(CBS input) {
+ std::optional<std::string> (*parser)(CBS)>
+std::optional<std::string> ParseAndJoin(CBS input) {
std::vector<std::string> pieces;
while (CBS_len(&input) != 0) {
CBS attribute;
if (!CBS_get_asn1(&input, &attribute, inner_tag)) {
- return absl::nullopt;
+ return std::nullopt;
}
- absl::optional<std::string> formatted = parser(attribute);
+ std::optional<std::string> formatted = parser(attribute);
if (!formatted.has_value()) {
- return absl::nullopt;
+ return std::nullopt;
}
pieces.push_back(*formatted);
}
@@ -171,11 +171,11 @@
return absl::StrJoin(pieces, std::string({separator}));
}
-absl::optional<std::string> RelativeDistinguishedNameToString(CBS input) {
+std::optional<std::string> RelativeDistinguishedNameToString(CBS input) {
return ParseAndJoin<CBS_ASN1_SEQUENCE, '+', X509NameAttributeToString>(input);
}
-absl::optional<std::string> DistinguishedNameToString(CBS input) {
+std::optional<std::string> DistinguishedNameToString(CBS input) {
return ParseAndJoin<CBS_ASN1_SET, ',', RelativeDistinguishedNameToString>(
input);
}
@@ -198,11 +198,11 @@
return "";
}
-absl::optional<quic::QuicWallTime> ParseDerTime(unsigned tag,
- absl::string_view payload) {
+std::optional<quic::QuicWallTime> ParseDerTime(unsigned tag,
+ absl::string_view payload) {
if (tag != CBS_ASN1_GENERALIZEDTIME && tag != CBS_ASN1_UTCTIME) {
QUIC_DLOG(WARNING) << "Invalid tag supplied for a DER timestamp";
- return absl::nullopt;
+ return std::nullopt;
}
const size_t year_length = tag == CBS_ASN1_GENERALIZEDTIME ? 4 : 2;
@@ -214,7 +214,7 @@
!reader.ReadDecimal64(2, &second) ||
reader.ReadRemainingPayload() != "Z") {
QUIC_DLOG(WARNING) << "Failed to parse the DER timestamp";
- return absl::nullopt;
+ return std::nullopt;
}
if (tag == CBS_ASN1_UTCTIME) {
@@ -222,11 +222,11 @@
year += (year >= 50) ? 1900 : 2000;
}
- const absl::optional<int64_t> unix_time =
+ const std::optional<int64_t> unix_time =
quiche::QuicheUtcDateTimeToUnixSeconds(year, month, day, hour, minute,
second);
if (!unix_time.has_value() || *unix_time < 0) {
- return absl::nullopt;
+ return std::nullopt;
}
return QuicWallTime::FromUNIXSeconds(*unix_time);
}
@@ -256,7 +256,7 @@
// Handle END lines.
if (pending_message && line == expected_end) {
- absl::optional<std::string> data =
+ std::optional<std::string> data =
QuicheTextUtils::Base64Decode(encoded_message_contents);
if (data.has_value()) {
result.status = PemReadResult::kOk;
@@ -361,9 +361,9 @@
QUIC_DLOG(WARNING) << "Failed to extract the validity dates";
return nullptr;
}
- absl::optional<QuicWallTime> not_before_parsed =
+ std::optional<QuicWallTime> not_before_parsed =
ParseDerTime(not_before_tag, CbsToStringPiece(not_before));
- absl::optional<QuicWallTime> not_after_parsed =
+ std::optional<QuicWallTime> not_after_parsed =
ParseDerTime(not_after_tag, CbsToStringPiece(not_after));
if (!not_before_parsed.has_value() || !not_after_parsed.has_value()) {
QUIC_DLOG(WARNING) << "Failed to parse validity dates";
@@ -545,7 +545,7 @@
data.size());
}
-absl::optional<std::string> CertificateView::GetHumanReadableSubject() const {
+std::optional<std::string> CertificateView::GetHumanReadableSubject() const {
CBS input = StringPieceToCbs(subject_der_);
return DistinguishedNameToString(input);
}
diff --git a/quiche/quic/core/crypto/certificate_view.h b/quiche/quic/core/crypto/certificate_view.h
index 4a190a0..1229ad7 100644
--- a/quiche/quic/core/crypto/certificate_view.h
+++ b/quiche/quic/core/crypto/certificate_view.h
@@ -7,10 +7,10 @@
#include <istream>
#include <memory>
+#include <optional>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "openssl/base.h"
#include "openssl/bytestring.h"
#include "openssl/evp.h"
@@ -79,7 +79,7 @@
// Returns a human-readable representation of the Subject field. The format
// is similar to RFC 2253, but does not match it exactly.
- absl::optional<std::string> GetHumanReadableSubject() const;
+ std::optional<std::string> GetHumanReadableSubject() const;
// |signature_algorithm| is a TLS signature algorithm ID.
bool VerifySignature(absl::string_view data, absl::string_view signature,
@@ -143,11 +143,11 @@
};
// Parses a DER-encoded X.509 NameAttribute. Exposed primarily for testing.
-QUICHE_EXPORT absl::optional<std::string> X509NameAttributeToString(CBS input);
+QUICHE_EXPORT std::optional<std::string> X509NameAttributeToString(CBS input);
// Parses a DER time based on the specified ASN.1 tag. Exposed primarily for
// testing.
-QUICHE_EXPORT absl::optional<quic::QuicWallTime> ParseDerTime(
+QUICHE_EXPORT std::optional<quic::QuicWallTime> ParseDerTime(
unsigned tag, absl::string_view payload);
} // namespace quic
diff --git a/quiche/quic/core/crypto/certificate_view_test.cc b/quiche/quic/core/crypto/certificate_view_test.cc
index d142ae4..d6b3b39 100644
--- a/quiche/quic/core/crypto/certificate_view_test.cc
+++ b/quiche/quic/core/crypto/certificate_view_test.cc
@@ -157,27 +157,27 @@
Optional(QuicWallTime::FromUNIXSeconds(24)));
EXPECT_TRUE(ParseDerTime(CBS_ASN1_UTCTIME, "200101000024Z").has_value());
- EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, ""), absl::nullopt);
+ EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, ""), std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101000024.001Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101000024Q"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101000024-0500"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "700101000024ZZ"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101000024.00Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101000024.Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "197O0101000024Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101000024.0O1Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "-9700101000024Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "1970-101000024Z"),
- absl::nullopt);
+ std::nullopt);
EXPECT_TRUE(ParseDerTime(CBS_ASN1_UTCTIME, "490101000024Z").has_value());
// This should parse as 1950, which predates UNIX epoch.
@@ -186,7 +186,7 @@
EXPECT_THAT(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101230000Z"),
Optional(QuicWallTime::FromUNIXSeconds(23 * 3600)));
EXPECT_EQ(ParseDerTime(CBS_ASN1_GENERALIZEDTIME, "19700101240000Z"),
- absl::nullopt);
+ std::nullopt);
}
TEST(CertificateViewTest, NameAttribute) {
diff --git a/quiche/quic/core/crypto/crypto_utils.cc b/quiche/quic/core/crypto/crypto_utils.cc
index 1ac33da..1e6b04b 100644
--- a/quiche/quic/core/crypto/crypto_utils.cc
+++ b/quiche/quic/core/crypto/crypto_utils.cc
@@ -790,7 +790,7 @@
}
// static
-absl::optional<std::string> CryptoUtils::GenerateProofPayloadToBeSigned(
+std::optional<std::string> CryptoUtils::GenerateProofPayloadToBeSigned(
absl::string_view chlo_hash, absl::string_view server_config) {
size_t payload_size = sizeof(kProofSignatureLabel) + sizeof(uint32_t) +
chlo_hash.size() + server_config.size();
@@ -804,7 +804,7 @@
payload_writer.WriteStringPiece(chlo_hash) &&
payload_writer.WriteStringPiece(server_config);
if (!success) {
- return absl::nullopt;
+ return std::nullopt;
}
return payload;
}
diff --git a/quiche/quic/core/crypto/crypto_utils.h b/quiche/quic/core/crypto/crypto_utils.h
index 12822aa..41823fe 100644
--- a/quiche/quic/core/crypto/crypto_utils.h
+++ b/quiche/quic/core/crypto/crypto_utils.h
@@ -250,7 +250,7 @@
// Computes the contents of a binary message that is signed inside QUIC Crypto
// protocol using the certificate key.
- static absl::optional<std::string> GenerateProofPayloadToBeSigned(
+ static std::optional<std::string> GenerateProofPayloadToBeSigned(
absl::string_view chlo_hash, absl::string_view server_config);
};
diff --git a/quiche/quic/core/crypto/proof_source.h b/quiche/quic/core/crypto/proof_source.h
index 01907c1..b963034 100644
--- a/quiche/quic/core/crypto/proof_source.h
+++ b/quiche/quic/core/crypto/proof_source.h
@@ -320,9 +320,9 @@
const QuicConnectionId& original_connection_id,
absl::string_view ssl_capabilities, const std::string& hostname,
absl::string_view client_hello, const std::string& alpn,
- absl::optional<std::string> alps,
+ std::optional<std::string> alps,
const std::vector<uint8_t>& quic_transport_params,
- const absl::optional<std::vector<uint8_t>>& early_data_context,
+ const std::optional<std::vector<uint8_t>>& early_data_context,
const QuicSSLConfig& ssl_config) = 0;
// Starts a compute signature operation. If the operation is not cancelled
diff --git a/quiche/quic/core/crypto/proof_source_x509.cc b/quiche/quic/core/crypto/proof_source_x509.cc
index a86c78b..c14722b 100644
--- a/quiche/quic/core/crypto/proof_source_x509.cc
+++ b/quiche/quic/core/crypto/proof_source_x509.cc
@@ -5,10 +5,10 @@
#include "quiche/quic/core/crypto/proof_source_x509.h"
#include <memory>
+#include <optional>
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "openssl/ssl.h"
#include "quiche/quic/core/crypto/certificate_view.h"
#include "quiche/quic/core/crypto/crypto_protocol.h"
@@ -54,7 +54,7 @@
return;
}
- absl::optional<std::string> payload =
+ std::optional<std::string> payload =
CryptoUtils::GenerateProofPayloadToBeSigned(chlo_hash, server_config);
if (!payload.has_value()) {
callback->Run(/*ok=*/false, nullptr, proof, nullptr);
diff --git a/quiche/quic/core/crypto/quic_crypto_client_config.h b/quiche/quic/core/crypto/quic_crypto_client_config.h
index 30cddcc..35433f3 100644
--- a/quiche/quic/core/crypto/quic_crypto_client_config.h
+++ b/quiche/quic/core/crypto/quic_crypto_client_config.h
@@ -380,7 +380,7 @@
tls_signature_algorithms_ = std::move(signature_algorithms);
}
- const absl::optional<std::string>& tls_signature_algorithms() const {
+ const std::optional<std::string>& tls_signature_algorithms() const {
return tls_signature_algorithms_;
}
@@ -459,7 +459,7 @@
// If set, configure the client to use the specified signature algorithms, via
// SSL_set1_sigalgs_list. TLS only.
- absl::optional<std::string> tls_signature_algorithms_;
+ std::optional<std::string> tls_signature_algorithms_;
// In QUIC, technically, client hello should be fully padded.
// However, fully padding on slow network connection (e.g. 50kbps) can add
diff --git a/quiche/quic/core/crypto/quic_crypto_server_config.cc b/quiche/quic/core/crypto/quic_crypto_server_config.cc
index 2599f5b..69275dc 100644
--- a/quiche/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quiche/quic/core/crypto/quic_crypto_server_config.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <cstdlib>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
@@ -14,7 +15,6 @@
#include "absl/strings/escaping.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "openssl/sha.h"
#include "openssl/ssl.h"
#include "quiche/quic/core/crypto/aes_128_gcm_12_decrypter.h"
@@ -1536,7 +1536,7 @@
std::unique_ptr<CertificateView> view =
CertificateView::ParseSingleCertificate(certs[0]);
if (view != nullptr) {
- absl::optional<std::string> maybe_ca_subject =
+ std::optional<std::string> maybe_ca_subject =
view->GetHumanReadableSubject();
if (maybe_ca_subject.has_value()) {
ca_subject = *maybe_ca_subject;
diff --git a/quiche/quic/core/crypto/transport_parameters.h b/quiche/quic/core/crypto/transport_parameters.h
index ff57add..496de82 100644
--- a/quiche/quic/core/crypto/transport_parameters.h
+++ b/quiche/quic/core/crypto/transport_parameters.h
@@ -6,11 +6,11 @@
#define QUICHE_QUIC_CORE_CRYPTO_TRANSPORT_PARAMETERS_H_
#include <memory>
+#include <optional>
#include <vector>
#include "absl/container/flat_hash_map.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_data_reader.h"
#include "quiche/quic/core/quic_data_writer.h"
@@ -176,15 +176,15 @@
Perspective perspective;
// Google QUIC downgrade prevention mechanism sent over QUIC+TLS.
- absl::optional<LegacyVersionInformation> legacy_version_information;
+ std::optional<LegacyVersionInformation> legacy_version_information;
// IETF downgrade prevention and compatible version negotiation, see
// draft-ietf-quic-version-negotiation.
- absl::optional<VersionInformation> version_information;
+ std::optional<VersionInformation> version_information;
// The value of the Destination Connection ID field from the first
// Initial packet sent by the client.
- absl::optional<QuicConnectionId> original_destination_connection_id;
+ std::optional<QuicConnectionId> original_destination_connection_id;
// Maximum idle timeout expressed in milliseconds.
IntegerParameter max_idle_timeout_ms;
@@ -238,11 +238,11 @@
// The value that the endpoint included in the Source Connection ID field of
// the first Initial packet it sent.
- absl::optional<QuicConnectionId> initial_source_connection_id;
+ std::optional<QuicConnectionId> initial_source_connection_id;
// The value that the server included in the Source Connection ID field of a
// Retry packet it sent.
- absl::optional<QuicConnectionId> retry_source_connection_id;
+ std::optional<QuicConnectionId> retry_source_connection_id;
// Indicates support for the DATAGRAM frame and the maximum frame size that
// the sender accepts. See draft-ietf-quic-datagram.
@@ -253,10 +253,10 @@
IntegerParameter initial_round_trip_time_us;
// Google internal handshake message.
- absl::optional<std::string> google_handshake_message;
+ std::optional<std::string> google_handshake_message;
// Google-specific connection options.
- absl::optional<QuicTagVector> google_connection_options;
+ std::optional<QuicTagVector> google_connection_options;
// Validates whether transport parameters are valid according to
// the specification. If the transport parameters are not valid, this method
diff --git a/quiche/quic/core/crypto/transport_parameters_test.cc b/quiche/quic/core/crypto/transport_parameters_test.cc
index 6b782c4..59f2188 100644
--- a/quiche/quic/core/crypto/transport_parameters_test.cc
+++ b/quiche/quic/core/crypto/transport_parameters_test.cc
@@ -242,7 +242,7 @@
// Test comparison on connection IDs.
orig_params.initial_source_connection_id =
CreateFakeInitialSourceConnectionId();
- new_params.initial_source_connection_id = absl::nullopt;
+ new_params.initial_source_connection_id = std::nullopt;
EXPECT_NE(orig_params, new_params);
EXPECT_FALSE(orig_params == new_params);
EXPECT_TRUE(orig_params != new_params);
diff --git a/quiche/quic/core/deterministic_connection_id_generator.cc b/quiche/quic/core/deterministic_connection_id_generator.cc
index 619ede6..4a22b63 100644
--- a/quiche/quic/core/deterministic_connection_id_generator.cc
+++ b/quiche/quic/core/deterministic_connection_id_generator.cc
@@ -20,7 +20,7 @@
}
}
-absl::optional<QuicConnectionId>
+std::optional<QuicConnectionId>
DeterministicConnectionIdGenerator::GenerateNextConnectionId(
const QuicConnectionId& original) {
if (expected_connection_id_length_ == 0) {
@@ -50,19 +50,19 @@
expected_connection_id_length_);
}
-absl::optional<QuicConnectionId>
+std::optional<QuicConnectionId>
DeterministicConnectionIdGenerator::MaybeReplaceConnectionId(
const QuicConnectionId& original, const ParsedQuicVersion& version) {
if (original.length() == expected_connection_id_length_) {
- return absl::optional<QuicConnectionId>();
+ return std::optional<QuicConnectionId>();
}
QUICHE_DCHECK(version.AllowsVariableLengthConnectionIds());
- absl::optional<QuicConnectionId> new_connection_id =
+ std::optional<QuicConnectionId> new_connection_id =
GenerateNextConnectionId(original);
// Verify that ReplaceShortServerConnectionId is deterministic.
if (!new_connection_id.has_value()) {
QUIC_BUG(unset_next_connection_id);
- return absl::nullopt;
+ return std::nullopt;
}
QUICHE_DCHECK_EQ(
*new_connection_id,
diff --git a/quiche/quic/core/deterministic_connection_id_generator.h b/quiche/quic/core/deterministic_connection_id_generator.h
index fbb9900..fc8f8e4 100644
--- a/quiche/quic/core/deterministic_connection_id_generator.h
+++ b/quiche/quic/core/deterministic_connection_id_generator.h
@@ -20,11 +20,11 @@
DeterministicConnectionIdGenerator(uint8_t expected_connection_id_length);
// Hashes |original| to create a new connection ID.
- absl::optional<QuicConnectionId> GenerateNextConnectionId(
+ std::optional<QuicConnectionId> GenerateNextConnectionId(
const QuicConnectionId& original) override;
// Replace the connection ID if and only if |original| is not of the expected
// length.
- absl::optional<QuicConnectionId> MaybeReplaceConnectionId(
+ std::optional<QuicConnectionId> MaybeReplaceConnectionId(
const QuicConnectionId& original,
const ParsedQuicVersion& version) override;
uint8_t ConnectionIdLength(uint8_t /*first_byte*/) const override {
diff --git a/quiche/quic/core/deterministic_connection_id_generator_test.cc b/quiche/quic/core/deterministic_connection_id_generator_test.cc
index 6c3ee21..a24b3dc 100644
--- a/quiche/quic/core/deterministic_connection_id_generator_test.cc
+++ b/quiche/quic/core/deterministic_connection_id_generator_test.cc
@@ -74,7 +74,7 @@
const char connection_id_bytes[255] = {};
for (uint8_t i = 0; i < sizeof(connection_id_bytes) - 1; ++i) {
QuicConnectionId connection_id(connection_id_bytes, i);
- absl::optional<QuicConnectionId> replacement_connection_id =
+ std::optional<QuicConnectionId> replacement_connection_id =
generator_.GenerateNextConnectionId(connection_id);
ASSERT_TRUE(replacement_connection_id.has_value());
EXPECT_EQ(connection_id_length_, replacement_connection_id->length());
@@ -85,14 +85,14 @@
// Make sure all these test connection IDs have different replacements.
for (uint64_t i = 0; i < 256; ++i) {
QuicConnectionId connection_id_i = TestConnectionId(i);
- absl::optional<QuicConnectionId> new_i =
+ std::optional<QuicConnectionId> new_i =
generator_.GenerateNextConnectionId(connection_id_i);
ASSERT_TRUE(new_i.has_value());
EXPECT_NE(connection_id_i, *new_i);
for (uint64_t j = i + 1; j <= 256; ++j) {
QuicConnectionId connection_id_j = TestConnectionId(j);
EXPECT_NE(connection_id_i, connection_id_j);
- absl::optional<QuicConnectionId> new_j =
+ std::optional<QuicConnectionId> new_j =
generator_.GenerateNextConnectionId(connection_id_j);
ASSERT_TRUE(new_j.has_value());
EXPECT_NE(*new_i, *new_j);
@@ -107,7 +107,7 @@
0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14};
for (int i = 0; i < kQuicMaxConnectionIdWithLengthPrefixLength; i++) {
QuicConnectionId input = QuicConnectionId(connection_id_input, i);
- absl::optional<QuicConnectionId> output =
+ std::optional<QuicConnectionId> output =
generator_.MaybeReplaceConnectionId(input, version_);
if (i == connection_id_length_) {
EXPECT_FALSE(output.has_value());
diff --git a/quiche/quic/core/frames/quic_ack_frame.h b/quiche/quic/core/frames/quic_ack_frame.h
index d0b8424..bafc755 100644
--- a/quiche/quic/core/frames/quic_ack_frame.h
+++ b/quiche/quic/core/frames/quic_ack_frame.h
@@ -116,7 +116,7 @@
PacketNumberQueue packets;
// ECN counters.
- absl::optional<QuicEcnCounts> ecn_counters;
+ std::optional<QuicEcnCounts> ecn_counters;
};
// The highest acked packet number we've observed from the peer. If no packets
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index 961214b..06200ff 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -921,7 +921,7 @@
// Default is true.
bool connect_to_server_on_initialize_;
QuicSocketAddress server_address_;
- absl::optional<QuicSocketAddress> server_listening_address_;
+ std::optional<QuicSocketAddress> server_listening_address_;
std::string server_hostname_;
QuicTestBackend memory_cache_backend_;
std::unique_ptr<ServerThread> server_thread_;
@@ -4172,7 +4172,7 @@
QuicVersionLabel version_label;
ParsedQuicVersion parsed_version = ParsedQuicVersion::Unsupported();
QuicConnectionId destination_connection_id, source_connection_id;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
std::string detailed_error;
if (QuicFramer::ParsePublicHeaderDispatcher(
QuicEncryptedPacket(buffer, buf_len),
diff --git a/quiche/quic/core/http/quic_receive_control_stream.cc b/quiche/quic/core/http/quic_receive_control_stream.cc
index 4be1536..6a57d5f 100644
--- a/quiche/quic/core/http/quic_receive_control_stream.cc
+++ b/quiche/quic/core/http/quic_receive_control_stream.cc
@@ -4,12 +4,12 @@
#include "quiche/quic/core/http/quic_receive_control_stream.h"
+#include <optional>
#include <utility>
#include "absl/strings/numbers.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/http_constants.h"
#include "quiche/quic/core/http/http_decoder.h"
#include "quiche/quic/core/http/quic_spdy_session.h"
@@ -137,7 +137,7 @@
spdy_session()->debug_visitor()->OnPriorityUpdateFrameReceived(frame);
}
- absl::optional<HttpStreamPriority> priority =
+ std::optional<HttpStreamPriority> priority =
ParsePriorityFieldValue(frame.priority_field_value);
if (!priority.has_value()) {
diff --git a/quiche/quic/core/http/quic_send_control_stream_test.cc b/quiche/quic/core/http/quic_send_control_stream_test.cc
index 9698a37..e83e46d 100644
--- a/quiche/quic/core/http/quic_send_control_stream_test.cc
+++ b/quiche/quic/core/http/quic_send_control_stream_test.cc
@@ -206,7 +206,7 @@
[&writer, this](QuicStreamId /*id*/, size_t write_length,
QuicStreamOffset offset, StreamSendingState /*state*/,
TransmissionType /*type*/,
- absl::optional<EncryptionLevel> /*level*/) {
+ std::optional<EncryptionLevel> /*level*/) {
send_control_stream_->WriteStreamData(offset, write_length, &writer);
return QuicConsumedData(/* bytes_consumed = */ write_length,
/* fin_consumed = */ false);
diff --git a/quiche/quic/core/http/quic_server_session_base.cc b/quiche/quic/core/http/quic_server_session_base.cc
index 5816eb3..5248024 100644
--- a/quiche/quic/core/http/quic_server_session_base.cc
+++ b/quiche/quic/core/http/quic_server_session_base.cc
@@ -190,7 +190,7 @@
bandwidth_estimate_sent_to_client_ = new_bandwidth_estimate;
}
} else {
- absl::optional<CachedNetworkParameters> cached_network_params =
+ std::optional<CachedNetworkParameters> cached_network_params =
GenerateCachedNetworkParameters();
if (cached_network_params.has_value()) {
@@ -311,7 +311,7 @@
return ssl_config;
}
-absl::optional<CachedNetworkParameters>
+std::optional<CachedNetworkParameters>
QuicServerSessionBase::GenerateCachedNetworkParameters() const {
const QuicSentPacketManager& sent_packet_manager =
connection()->sent_packet_manager();
diff --git a/quiche/quic/core/http/quic_server_session_base.h b/quiche/quic/core/http/quic_server_session_base.h
index 113f754..9892356 100644
--- a/quiche/quic/core/http/quic_server_session_base.h
+++ b/quiche/quic/core/http/quic_server_session_base.h
@@ -78,7 +78,7 @@
const QuicCryptoServerStreamBase* GetCryptoStream() const override;
- absl::optional<CachedNetworkParameters> GenerateCachedNetworkParameters()
+ std::optional<CachedNetworkParameters> GenerateCachedNetworkParameters()
const override;
// If an outgoing stream can be created, return true.
diff --git a/quiche/quic/core/http/quic_spdy_session.cc b/quiche/quic/core/http/quic_spdy_session.cc
index 0580fca..b78a6cc 100644
--- a/quiche/quic/core/http/quic_spdy_session.cc
+++ b/quiche/quic/core/http/quic_spdy_session.cc
@@ -8,6 +8,7 @@
#include <cstdint>
#include <limits>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
@@ -16,7 +17,6 @@
#include "absl/strings/numbers.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/http_constants.h"
#include "quiche/quic/core/http/http_decoder.h"
#include "quiche/quic/core/http/http_frames.h"
@@ -158,13 +158,13 @@
}
bool OnUnknownFrameEnd() override { return true; }
- const absl::optional<std::string>& error_detail() const {
+ const std::optional<std::string>& error_detail() const {
return error_detail_;
}
private:
QuicSpdySession* const session_;
- absl::optional<std::string> error_detail_;
+ std::optional<std::string> error_detail_;
// True if SETTINGS frame has been received via ALPS.
bool settings_frame_received_via_alps_ = false;
@@ -993,8 +993,8 @@
return true;
}
-absl::optional<std::string> QuicSpdySession::OnAlpsData(
- const uint8_t* alps_data, size_t alps_length) {
+std::optional<std::string> QuicSpdySession::OnAlpsData(const uint8_t* alps_data,
+ size_t alps_length) {
AlpsFrameDecoder alps_frame_decoder(this);
HttpDecoder decoder(&alps_frame_decoder);
decoder.ProcessInput(reinterpret_cast<const char*>(alps_data), alps_length);
@@ -1010,7 +1010,7 @@
return "incomplete HTTP/3 frame";
}
- return absl::nullopt;
+ return std::nullopt;
}
void QuicSpdySession::OnAcceptChFrameReceivedViaAlps(
@@ -1060,7 +1060,7 @@
bool QuicSpdySession::ValidateWebTransportSettingsConsistency() {
// Only apply the following checks to draft-07 or later.
- absl::optional<WebTransportHttp3Version> version =
+ std::optional<WebTransportHttp3Version> version =
NegotiatedWebTransportVersion();
if (!version.has_value() || *version == WebTransportHttp3Version::kDraft02) {
return true;
@@ -1092,7 +1092,7 @@
return true;
}
-absl::optional<std::string> QuicSpdySession::OnSettingsFrameViaAlps(
+std::optional<std::string> QuicSpdySession::OnSettingsFrameViaAlps(
const SettingsFrame& frame) {
QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
@@ -1107,7 +1107,7 @@
return "error parsing setting";
}
}
- return absl::nullopt;
+ return std::nullopt;
}
bool QuicSpdySession::VerifySettingIsZeroOrOne(uint64_t id, uint64_t value) {
@@ -1756,10 +1756,10 @@
NegotiatedWebTransportVersion().has_value() && allow_extended_connect_;
}
-absl::optional<WebTransportHttp3Version>
+std::optional<WebTransportHttp3Version>
QuicSpdySession::SupportedWebTransportVersion() {
if (!SupportsWebTransport()) {
- return absl::nullopt;
+ return std::nullopt;
}
return NegotiatedWebTransportVersion();
}
@@ -1887,12 +1887,12 @@
}
void QuicSpdySession::OnDatagramProcessed(
- absl::optional<MessageStatus> /*status*/) {
+ std::optional<MessageStatus> /*status*/) {
// TODO(b/184598230): make this work with multiple datagram flows.
}
void QuicSpdySession::DatagramObserver::OnDatagramProcessed(
- absl::optional<MessageStatus> status) {
+ std::optional<MessageStatus> status) {
session_->OnDatagramProcessed(status);
}
diff --git a/quiche/quic/core/http/quic_spdy_session.h b/quiche/quic/core/http/quic_spdy_session.h
index c295569..290b640 100644
--- a/quiche/quic/core/http/quic_spdy_session.h
+++ b/quiche/quic/core/http/quic_spdy_session.h
@@ -9,12 +9,12 @@
#include <cstdint>
#include <list>
#include <memory>
+#include <optional>
#include <string>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/http_frames.h"
#include "quiche/quic/core/http/quic_header_list.h"
#include "quiche/quic/core/http/quic_headers_stream.h"
@@ -259,8 +259,7 @@
// Called when an HTTP/3 SETTINGS frame is received via ALPS.
// Returns an error message if an error has occurred, or nullopt otherwise.
// May or may not close the connection on error.
- absl::optional<std::string> OnSettingsFrameViaAlps(
- const SettingsFrame& frame);
+ std::optional<std::string> OnSettingsFrameViaAlps(const SettingsFrame& frame);
// Called when a setting is parsed from a SETTINGS frame received on the
// control stream or from cached application state.
@@ -339,7 +338,7 @@
// received or sent.
bool goaway_received() const;
bool goaway_sent() const;
- absl::optional<uint64_t> last_received_http3_goaway_id() {
+ std::optional<uint64_t> last_received_http3_goaway_id() {
return last_received_http3_goaway_id_;
}
@@ -373,8 +372,8 @@
// Decode SETTINGS from |cached_state| and apply it to the session.
bool ResumeApplicationState(ApplicationState* cached_state) override;
- absl::optional<std::string> OnAlpsData(const uint8_t* alps_data,
- size_t alps_length) override;
+ std::optional<std::string> OnAlpsData(const uint8_t* alps_data,
+ size_t alps_length) override;
// Called when ACCEPT_CH frame is parsed out of data received in TLS ALPS
// extension.
@@ -401,7 +400,7 @@
// If SupportsWebTransport() is true, returns the version of WebTransport
// currently in use (which is the highest version supported by both peers).
- absl::optional<WebTransportHttp3Version> SupportedWebTransportVersion();
+ std::optional<WebTransportHttp3Version> SupportedWebTransportVersion();
// Indicates whether both the peer and us support HTTP/3 Datagrams.
bool SupportsH3Datagram() const;
@@ -537,7 +536,7 @@
void MaybeBundleOpportunistically() override;
// Called whenever a datagram is dequeued or dropped from datagram_queue().
- virtual void OnDatagramProcessed(absl::optional<MessageStatus> status);
+ virtual void OnDatagramProcessed(std::optional<MessageStatus> status);
// Returns which version of the HTTP/3 datagram extension we should advertise
// in settings and accept remote settings for.
@@ -562,7 +561,7 @@
class QUICHE_EXPORT DatagramObserver : public QuicDatagramQueue::Observer {
public:
explicit DatagramObserver(QuicSpdySession* session) : session_(session) {}
- void OnDatagramProcessed(absl::optional<MessageStatus> status) override;
+ void OnDatagramProcessed(std::optional<MessageStatus> status) override;
private:
QuicSpdySession* session_; // not owned
@@ -591,7 +590,7 @@
bool VerifySettingIsZeroOrOne(uint64_t id, uint64_t value);
// Computes the highest WebTransport version supported by both peers.
- absl::optional<WebTransportHttp3Version> NegotiatedWebTransportVersion()
+ std::optional<WebTransportHttp3Version> NegotiatedWebTransportVersion()
const {
return (LocallySupportedWebTransportVersions() &
peer_web_transport_versions_)
@@ -668,10 +667,10 @@
// The identifier in the most recently received GOAWAY frame. Unset if no
// GOAWAY frame has been received yet.
- absl::optional<uint64_t> last_received_http3_goaway_id_;
+ std::optional<uint64_t> last_received_http3_goaway_id_;
// The identifier in the most recently sent GOAWAY frame. Unset if no GOAWAY
// frame has been sent yet.
- absl::optional<uint64_t> last_sent_http3_goaway_id_;
+ std::optional<uint64_t> last_sent_http3_goaway_id_;
// Whether both this endpoint and our peer support HTTP datagrams and which
// draft is in use for this session.
diff --git a/quiche/quic/core/http/quic_spdy_session_test.cc b/quiche/quic/core/http/quic_spdy_session_test.cc
index ef7b072..a8c8c0a 100644
--- a/quiche/quic/core/http/quic_spdy_session_test.cc
+++ b/quiche/quic/core/http/quic_spdy_session_test.cc
@@ -3603,7 +3603,7 @@
ReceiveWebTransportSettings(
WebTransportHttp3VersionSet({WebTransportHttp3Version::kDraft02}));
EXPECT_FALSE(session_.SupportsWebTransport());
- EXPECT_EQ(session_.SupportedWebTransportVersion(), absl::nullopt);
+ EXPECT_EQ(session_.SupportedWebTransportVersion(), std::nullopt);
}
TEST_P(QuicSpdySessionTestClient, WebTransportSettingSetToZero) {
diff --git a/quiche/quic/core/http/quic_spdy_stream.cc b/quiche/quic/core/http/quic_spdy_stream.cc
index 6f40159..40ecc03 100644
--- a/quiche/quic/core/http/quic_spdy_stream.cc
+++ b/quiche/quic/core/http/quic_spdy_stream.cc
@@ -6,6 +6,7 @@
#include <limits>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
@@ -13,7 +14,6 @@
#include "absl/strings/numbers.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/http2/http2_constants.h"
#include "quiche/quic/core/http/http_constants.h"
#include "quiche/quic/core/http/http_decoder.h"
@@ -1117,7 +1117,7 @@
QuicStreamOffset offset = sequencer()->NumBytesConsumed();
sequencer()->MarkConsumed(header_length);
- absl::optional<WebTransportHttp3Version> version =
+ std::optional<WebTransportHttp3Version> version =
spdy_session_->SupportedWebTransportVersion();
QUICHE_DCHECK(version.has_value());
if (version == WebTransportHttp3Version::kDraft02) {
diff --git a/quiche/quic/core/http/spdy_utils.cc b/quiche/quic/core/http/spdy_utils.cc
index 873d39c..7df35ef 100644
--- a/quiche/quic/core/http/spdy_utils.cc
+++ b/quiche/quic/core/http/spdy_utils.cc
@@ -5,6 +5,7 @@
#include "quiche/quic/core/http/spdy_utils.h"
#include <memory>
+#include <optional>
#include <string>
#include <vector>
@@ -12,7 +13,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_versions.h"
#include "quiche/quic/platform/api/quic_flag_utils.h"
#include "quiche/quic/platform/api/quic_flags.h"
diff --git a/quiche/quic/core/http/spdy_utils.h b/quiche/quic/core/http/spdy_utils.h
index ff93b69..0b0b854 100644
--- a/quiche/quic/core/http/spdy_utils.h
+++ b/quiche/quic/core/http/spdy_utils.h
@@ -7,9 +7,9 @@
#include <cstddef>
#include <cstdint>
+#include <optional>
#include <string>
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/http_constants.h"
#include "quiche/quic/core/http/quic_header_list.h"
#include "quiche/quic/core/quic_packets.h"
diff --git a/quiche/quic/core/http/web_transport_http3.cc b/quiche/quic/core/http/web_transport_http3.cc
index 31a1a35..d1f477d 100644
--- a/quiche/quic/core/http/web_transport_http3.cc
+++ b/quiche/quic/core/http/web_transport_http3.cc
@@ -6,10 +6,10 @@
#include <limits>
#include <memory>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/quic_spdy_session.h"
#include "quiche/quic/core/http/quic_spdy_stream.h"
#include "quiche/quic/core/quic_data_reader.h"
@@ -436,16 +436,16 @@
constexpr WebTransportStreamError kDefaultWebTransportError = 0;
} // namespace
-absl::optional<WebTransportStreamError> Http3ErrorToWebTransport(
+std::optional<WebTransportStreamError> Http3ErrorToWebTransport(
uint64_t http3_error_code) {
// Ensure the code is within the valid range.
if (http3_error_code < kWebTransportMappedErrorCodeFirst ||
http3_error_code > kWebTransportMappedErrorCodeLast) {
- return absl::nullopt;
+ return std::nullopt;
}
// Exclude GREASE codepoints.
if ((http3_error_code - 0x21) % 0x1f == 0) {
- return absl::nullopt;
+ return std::nullopt;
}
uint64_t shifted = http3_error_code - kWebTransportMappedErrorCodeFirst;
@@ -457,7 +457,7 @@
WebTransportStreamError Http3ErrorToWebTransportOrDefault(
uint64_t http3_error_code) {
- absl::optional<WebTransportStreamError> result =
+ std::optional<WebTransportStreamError> result =
Http3ErrorToWebTransport(http3_error_code);
return result.has_value() ? *result : kDefaultWebTransportError;
}
diff --git a/quiche/quic/core/http/web_transport_http3.h b/quiche/quic/core/http/web_transport_http3.h
index 14b4a1c..4f3815b 100644
--- a/quiche/quic/core/http/web_transport_http3.h
+++ b/quiche/quic/core/http/web_transport_http3.h
@@ -6,11 +6,11 @@
#define QUICHE_QUIC_CORE_HTTP_WEB_TRANSPORT_HTTP3_H_
#include <memory>
+#include <optional>
#include "absl/base/attributes.h"
#include "absl/container/flat_hash_set.h"
#include "absl/time/time.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/quic_spdy_session.h"
#include "quiche/quic/core/http/web_transport_stream_adapter.h"
#include "quiche/quic/core/quic_error_codes.h"
@@ -174,7 +174,7 @@
private:
QuicSpdySession* session_;
WebTransportStreamAdapter adapter_;
- absl::optional<WebTransportSessionId> session_id_;
+ std::optional<WebTransportSessionId> session_id_;
bool needs_to_send_preamble_;
bool ReadSessionId();
@@ -184,7 +184,7 @@
// Remaps HTTP/3 error code into a WebTransport error code. Returns nullopt if
// the provided code is outside of valid range.
-QUICHE_EXPORT absl::optional<WebTransportStreamError> Http3ErrorToWebTransport(
+QUICHE_EXPORT std::optional<WebTransportStreamError> Http3ErrorToWebTransport(
uint64_t http3_error_code);
// Same as above, but returns default error value (zero) when none could be
diff --git a/quiche/quic/core/http/web_transport_http3_test.cc b/quiche/quic/core/http/web_transport_http3_test.cc
index be8cfdd..87289f1 100644
--- a/quiche/quic/core/http/web_transport_http3_test.cc
+++ b/quiche/quic/core/http/web_transport_http3_test.cc
@@ -6,8 +6,8 @@
#include <cstdint>
#include <limits>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/platform/api/quic_test.h"
namespace quic {
@@ -33,25 +33,25 @@
EXPECT_THAT(Http3ErrorToWebTransport(0x52e4a40fa8f7), Optional(0x1cu));
EXPECT_THAT(Http3ErrorToWebTransport(0x52e4a40fa8f8), Optional(0x1du));
- EXPECT_THAT(Http3ErrorToWebTransport(0x52e4a40fa8f9), absl::nullopt);
+ EXPECT_THAT(Http3ErrorToWebTransport(0x52e4a40fa8f9), std::nullopt);
EXPECT_THAT(Http3ErrorToWebTransport(0x52e4a40fa8fa), Optional(0x1eu));
- EXPECT_EQ(Http3ErrorToWebTransport(0), absl::nullopt);
+ EXPECT_EQ(Http3ErrorToWebTransport(0), std::nullopt);
EXPECT_EQ(Http3ErrorToWebTransport(std::numeric_limits<uint64_t>::max()),
- absl::nullopt);
+ std::nullopt);
}
TEST(WebTransportHttp3Test, ErrorCodeRoundTrip) {
for (int error = 0; error <= 65536; error++) {
uint64_t http_error = WebTransportErrorToHttp3(error);
- absl::optional<WebTransportStreamError> mapped_back =
+ std::optional<WebTransportStreamError> mapped_back =
quic::Http3ErrorToWebTransport(http_error);
ASSERT_THAT(mapped_back, Optional(error));
}
for (int64_t error = 0; error < std::numeric_limits<uint32_t>::max();
error += 65537) {
uint64_t http_error = WebTransportErrorToHttp3(error);
- absl::optional<WebTransportStreamError> mapped_back =
+ std::optional<WebTransportStreamError> mapped_back =
quic::Http3ErrorToWebTransport(http_error);
ASSERT_THAT(mapped_back, Optional(error));
}
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket.h b/quiche/quic/core/io/event_loop_connecting_client_socket.h
index 16d4a57..a4fb9e9 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket.h
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket.h
@@ -5,11 +5,11 @@
#ifndef QUICHE_QUIC_CORE_IO_EVENT_LOOP_CONNECTING_CLIENT_SOCKET_H_
#define QUICHE_QUIC_CORE_IO_EVENT_LOOP_CONNECTING_CLIENT_SOCKET_H_
+#include <optional>
#include <string>
#include "absl/status/status.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/variant.h"
#include "quiche/quic/core/connecting_client_socket.h"
#include "quiche/quic/core/io/quic_event_loop.h"
@@ -90,7 +90,7 @@
ConnectStatus connect_status_ = ConnectStatus::kNotConnected;
// Only set while receive in progress or pending, otherwise nullopt.
- absl::optional<QuicByteCount> receive_max_size_;
+ std::optional<QuicByteCount> receive_max_size_;
// Only contains data while send in progress or pending, otherwise monostate.
absl::variant<absl::monostate, std::string, quiche::QuicheMemSlice>
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
index b0d4406..c7e18ce 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
@@ -6,6 +6,7 @@
#include <functional>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
#include <vector>
@@ -14,7 +15,6 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/connecting_client_socket.h"
#include "quiche/quic/core/io/event_loop_socket_factory.h"
@@ -292,9 +292,9 @@
std::unique_ptr<QuicEventLoop> event_loop_;
std::unique_ptr<EventLoopSocketFactory> socket_factory_;
- absl::optional<absl::Status> connect_result_;
- absl::optional<absl::StatusOr<quiche::QuicheMemSlice>> receive_result_;
- absl::optional<absl::Status> send_result_;
+ std::optional<absl::Status> connect_result_;
+ std::optional<absl::StatusOr<quiche::QuicheMemSlice>> receive_result_;
+ std::optional<absl::Status> send_result_;
};
std::string GetTestParamName(
diff --git a/quiche/quic/core/quic_buffered_packet_store.cc b/quiche/quic/core/quic_buffered_packet_store.cc
index 48690ce..3c31b6c 100644
--- a/quiche/quic/core/quic_buffered_packet_store.cc
+++ b/quiche/quic/core/quic_buffered_packet_store.cc
@@ -7,11 +7,11 @@
#include <cstddef>
#include <list>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/quic_alarm.h"
#include "quiche/quic/core/quic_alarm_factory.h"
@@ -105,7 +105,7 @@
QuicConnectionId connection_id, bool ietf_quic,
const QuicReceivedPacket& packet, QuicSocketAddress self_address,
QuicSocketAddress peer_address, const ParsedQuicVersion& version,
- absl::optional<ParsedClientHello> parsed_chlo,
+ std::optional<ParsedClientHello> parsed_chlo,
ConnectionIdGeneratorInterface* connection_id_generator) {
const bool is_chlo = parsed_chlo.has_value();
QUIC_BUG_IF(quic_bug_12410_1, !GetQuicFlag(quic_allow_chlo_buffering))
@@ -209,7 +209,7 @@
ParsedQuicVersion unused_parsed_version = UnsupportedQuicVersion();
QuicConnectionId unused_destination_connection_id;
QuicConnectionId unused_source_connection_id;
- absl::optional<absl::string_view> unused_retry_token;
+ std::optional<absl::string_view> unused_retry_token;
std::string unused_detailed_error;
// We don't need to pass |generator| because we already got the correct
@@ -314,7 +314,7 @@
std::vector<uint16_t>* out_supported_groups,
std::vector<std::string>* out_alpns, std::string* out_sni,
bool* out_resumption_attempted, bool* out_early_data_attempted,
- absl::optional<uint8_t>* tls_alert) {
+ std::optional<uint8_t>* tls_alert) {
QUICHE_DCHECK_NE(out_alpns, nullptr);
QUICHE_DCHECK_NE(out_sni, nullptr);
QUICHE_DCHECK_NE(tls_alert, nullptr);
diff --git a/quiche/quic/core/quic_buffered_packet_store.h b/quiche/quic/core/quic_buffered_packet_store.h
index 012374a..4cff83d 100644
--- a/quiche/quic/core/quic_buffered_packet_store.h
+++ b/quiche/quic/core/quic_buffered_packet_store.h
@@ -8,10 +8,10 @@
#include <cstdint>
#include <list>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
-#include "absl/types/optional.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/quic_alarm.h"
#include "quiche/quic/core/quic_alarm_factory.h"
@@ -76,7 +76,7 @@
std::list<BufferedPacket> buffered_packets;
QuicTime creation_time;
// |parsed_chlo| is set iff the entire CHLO has been received.
- absl::optional<ParsedClientHello> parsed_chlo;
+ std::optional<ParsedClientHello> parsed_chlo;
// Indicating whether this is an IETF QUIC connection.
bool ietf_quic;
// If buffered_packets contains the CHLO, it is the version of the CHLO.
@@ -121,7 +121,7 @@
QuicConnectionId connection_id, bool ietf_quic,
const QuicReceivedPacket& packet, QuicSocketAddress self_address,
QuicSocketAddress peer_address, const ParsedQuicVersion& version,
- absl::optional<ParsedClientHello> parsed_chlo,
+ std::optional<ParsedClientHello> parsed_chlo,
ConnectionIdGeneratorInterface* connection_id_generator);
// Returns true if there are any packets buffered for |connection_id|.
@@ -144,7 +144,7 @@
std::vector<uint16_t>* out_supported_groups,
std::vector<std::string>* out_alpns, std::string* out_sni,
bool* out_resumption_attempted, bool* out_early_data_attempted,
- absl::optional<uint8_t>* tls_alert);
+ std::optional<uint8_t>* tls_alert);
// Returns the list of buffered packets for |connection_id| and removes them
// from the store. Returns an empty list if no early arrived packets for this
diff --git a/quiche/quic/core/quic_buffered_packet_store_test.cc b/quiche/quic/core/quic_buffered_packet_store_test.cc
index 16a53e2..13f75f8 100644
--- a/quiche/quic/core/quic_buffered_packet_store_test.cc
+++ b/quiche/quic/core/quic_buffered_packet_store_test.cc
@@ -8,11 +8,11 @@
#include <cstdint>
#include <list>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/crypto/transport_parameters.h"
#include "quiche/quic/core/quic_connection_id.h"
@@ -40,8 +40,8 @@
namespace test {
namespace {
-const absl::optional<ParsedClientHello> kNoParsedChlo;
-const absl::optional<ParsedClientHello> kDefaultParsedChlo =
+const std::optional<ParsedClientHello> kNoParsedChlo;
+const std::optional<ParsedClientHello> kDefaultParsedChlo =
absl::make_optional<ParsedClientHello>();
using BufferedPacket = QuicBufferedPacketStore::BufferedPacket;
@@ -539,7 +539,7 @@
bool resumption_attempted = false;
bool early_data_attempted = false;
QuicConfig config;
- absl::optional<uint8_t> tls_alert;
+ std::optional<uint8_t> tls_alert;
EXPECT_FALSE(store_.HasBufferedPackets(connection_id));
store_.EnqueuePacket(connection_id, false, packet_, self_address_,
@@ -608,7 +608,7 @@
ParsedQuicVersion unused_parsed_version = UnsupportedQuicVersion();
QuicConnectionId unused_destination_connection_id;
QuicConnectionId unused_source_connection_id;
- absl::optional<absl::string_view> unused_retry_token;
+ std::optional<absl::string_view> unused_retry_token;
std::string unused_detailed_error;
QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
*packet, kQuicDefaultConnectionIdLength, &unused_format,
@@ -627,7 +627,7 @@
ParsedQuicVersion unused_parsed_version = UnsupportedQuicVersion();
QuicConnectionId unused_destination_connection_id;
QuicConnectionId unused_source_connection_id;
- absl::optional<absl::string_view> unused_retry_token;
+ std::optional<absl::string_view> unused_retry_token;
std::string unused_detailed_error;
QuicErrorCode error_code = QUIC_NO_ERROR;
diff --git a/quiche/quic/core/quic_chaos_protector.cc b/quiche/quic/core/quic_chaos_protector.cc
index 8daaeb7..6760df4 100644
--- a/quiche/quic/core/quic_chaos_protector.cc
+++ b/quiche/quic/core/quic_chaos_protector.cc
@@ -9,9 +9,9 @@
#include <cstdint>
#include <limits>
#include <memory>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/frames/quic_crypto_frame.h"
#include "quiche/quic/core/frames/quic_frame.h"
@@ -45,10 +45,10 @@
QuicChaosProtector::~QuicChaosProtector() { DeleteFrames(&frames_); }
-absl::optional<size_t> QuicChaosProtector::BuildDataPacket(
+std::optional<size_t> QuicChaosProtector::BuildDataPacket(
const QuicPacketHeader& header, char* buffer) {
if (!CopyCryptoDataToLocalBuffer()) {
- return absl::nullopt;
+ return std::nullopt;
}
SplitCryptoFrame();
AddPingFrames();
@@ -206,7 +206,7 @@
}
}
-absl::optional<size_t> QuicChaosProtector::BuildPacket(
+std::optional<size_t> QuicChaosProtector::BuildPacket(
const QuicPacketHeader& header, char* buffer) {
QuicStreamFrameDataProducer* original_data_producer =
framer_->data_producer();
@@ -217,7 +217,7 @@
framer_->set_data_producer(original_data_producer);
if (length == 0) {
- return absl::nullopt;
+ return std::nullopt;
}
return length;
}
diff --git a/quiche/quic/core/quic_chaos_protector.h b/quiche/quic/core/quic_chaos_protector.h
index 9b7636f..f053f89 100644
--- a/quiche/quic/core/quic_chaos_protector.h
+++ b/quiche/quic/core/quic_chaos_protector.h
@@ -7,8 +7,8 @@
#include <cstddef>
#include <memory>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/frames/quic_crypto_frame.h"
#include "quiche/quic/core/frames/quic_frame.h"
@@ -41,9 +41,9 @@
QuicChaosProtector& operator=(QuicChaosProtector&&) = delete;
// Attempts to build a data packet with chaos protection. If an error occurs,
- // then absl::nullopt is returned. Otherwise returns the serialized length.
- absl::optional<size_t> BuildDataPacket(const QuicPacketHeader& header,
- char* buffer);
+ // then std::nullopt is returned. Otherwise returns the serialized length.
+ std::optional<size_t> BuildDataPacket(const QuicPacketHeader& header,
+ char* buffer);
// From QuicStreamFrameDataProducer.
WriteStreamDataResult WriteStreamData(QuicStreamId id,
@@ -75,8 +75,8 @@
void SpreadPadding();
// Serialize |frames_| using |framer_|.
- absl::optional<size_t> BuildPacket(const QuicPacketHeader& header,
- char* buffer);
+ std::optional<size_t> BuildPacket(const QuicPacketHeader& header,
+ char* buffer);
size_t packet_size_;
std::unique_ptr<char[]> crypto_frame_buffer_;
diff --git a/quiche/quic/core/quic_chaos_protector_test.cc b/quiche/quic/core/quic_chaos_protector_test.cc
index 92d3af9..9c312db 100644
--- a/quiche/quic/core/quic_chaos_protector_test.cc
+++ b/quiche/quic/core/quic_chaos_protector_test.cc
@@ -100,7 +100,7 @@
}
void BuildEncryptAndParse() {
- absl::optional<size_t> length =
+ std::optional<size_t> length =
chaos_protector_->BuildDataPacket(header_, packet_buffer_.get());
ASSERT_TRUE(length.has_value());
ASSERT_GT(length.value(), 0u);
diff --git a/quiche/quic/core/quic_config.cc b/quiche/quic/core/quic_config.cc
index f0d78ba..75d29f3 100644
--- a/quiche/quic/core/quic_config.cc
+++ b/quiche/quic/core/quic_config.cc
@@ -476,7 +476,7 @@
google_handshake_message_to_send_ = std::move(message);
}
-const absl::optional<std::string>&
+const std::optional<std::string>&
QuicConfig::GetReceivedGoogleHandshakeMessage() const {
return received_google_handshake_message_;
}
@@ -1405,7 +1405,7 @@
received_google_handshake_message_.reset();
}
-absl::optional<QuicSocketAddress> QuicConfig::GetPreferredAddressToSend(
+std::optional<QuicSocketAddress> QuicConfig::GetPreferredAddressToSend(
quiche::IpAddressFamily address_family) const {
if (alternate_server_address_ipv6_.HasSendValue() &&
address_family == quiche::IpAddressFamily::IP_V6) {
@@ -1416,7 +1416,7 @@
address_family == quiche::IpAddressFamily::IP_V4) {
return alternate_server_address_ipv4_.GetSendValue();
}
- return absl::nullopt;
+ return std::nullopt;
}
void QuicConfig::ClearAlternateServerAddressToSend(
diff --git a/quiche/quic/core/quic_config.h b/quiche/quic/core/quic_config.h
index 152994b..bf1cc6c 100644
--- a/quiche/quic/core/quic_config.h
+++ b/quiche/quic/core/quic_config.h
@@ -7,9 +7,9 @@
#include <cstddef>
#include <cstdint>
+#include <optional>
#include <string>
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/transport_parameters.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_packets.h"
@@ -250,7 +250,7 @@
void SetGoogleHandshakeMessageToSend(std::string message);
- const absl::optional<std::string>& GetReceivedGoogleHandshakeMessage() const;
+ const std::optional<std::string>& GetReceivedGoogleHandshakeMessage() const;
// Sets initial received connection options. All received connection options
// will be initialized with these fields. Initial received options may only be
@@ -413,7 +413,7 @@
bool HasReceivedPreferredAddressConnectionIdAndToken() const;
const std::pair<QuicConnectionId, StatelessResetToken>&
ReceivedPreferredAddressConnectionIdAndToken() const;
- absl::optional<QuicSocketAddress> GetPreferredAddressToSend(
+ std::optional<QuicSocketAddress> GetPreferredAddressToSend(
quiche::IpAddressFamily address_family) const;
void ClearAlternateServerAddressToSend(
quiche::IpAddressFamily address_family);
@@ -552,7 +552,7 @@
// Note that received_max_idle_timeout_ is only populated if we receive the
// peer's value, which isn't guaranteed in IETF QUIC as sending is optional.
QuicTime::Delta max_idle_timeout_to_send_;
- absl::optional<QuicTime::Delta> received_max_idle_timeout_;
+ std::optional<QuicTime::Delta> received_max_idle_timeout_;
// Maximum number of dynamic streams that a Google QUIC connection
// can support or the maximum number of bidirectional streams that
// an IETF QUIC connection can support.
@@ -607,7 +607,7 @@
QuicFixedSocketAddress alternate_server_address_ipv4_;
// Connection Id data to send from the server or receive at the client as part
// of the preferred address transport parameter.
- absl::optional<std::pair<QuicConnectionId, StatelessResetToken>>
+ std::optional<std::pair<QuicConnectionId, StatelessResetToken>>
preferred_address_connection_id_and_token_;
// Stateless reset token used in IETF public reset packet.
@@ -652,20 +652,20 @@
// Initial packet sent by the client.
// Uses the original_destination_connection_id transport parameter in
// IETF QUIC.
- absl::optional<QuicConnectionId> original_destination_connection_id_to_send_;
- absl::optional<QuicConnectionId> received_original_destination_connection_id_;
+ std::optional<QuicConnectionId> original_destination_connection_id_to_send_;
+ std::optional<QuicConnectionId> received_original_destination_connection_id_;
// The value that the endpoint included in the Source Connection ID field of
// the first Initial packet it sent.
// Uses the initial_source_connection_id transport parameter in IETF QUIC.
- absl::optional<QuicConnectionId> initial_source_connection_id_to_send_;
- absl::optional<QuicConnectionId> received_initial_source_connection_id_;
+ std::optional<QuicConnectionId> initial_source_connection_id_to_send_;
+ std::optional<QuicConnectionId> received_initial_source_connection_id_;
// The value that the server included in the Source Connection ID field of a
// Retry packet it sent.
// Uses the retry_source_connection_id transport parameter in IETF QUIC.
- absl::optional<QuicConnectionId> retry_source_connection_id_to_send_;
- absl::optional<QuicConnectionId> received_retry_source_connection_id_;
+ std::optional<QuicConnectionId> retry_source_connection_id_to_send_;
+ std::optional<QuicConnectionId> received_retry_source_connection_id_;
// Custom transport parameters that can be sent and received in the TLS
// handshake.
@@ -673,8 +673,8 @@
TransportParameters::ParameterMap received_custom_transport_parameters_;
// Google internal handshake message.
- absl::optional<std::string> google_handshake_message_to_send_;
- absl::optional<std::string> received_google_handshake_message_;
+ std::optional<std::string> google_handshake_message_to_send_;
+ std::optional<std::string> received_google_handshake_message_;
};
} // namespace quic
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index 838d48d..48e5085 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -281,7 +281,7 @@
default_path_(initial_self_address, QuicSocketAddress(),
/*client_connection_id=*/EmptyQuicConnectionId(),
server_connection_id,
- /*stateless_reset_token=*/absl::nullopt),
+ /*stateless_reset_token=*/std::nullopt),
active_effective_peer_migration_type_(NO_CHANGE),
support_key_update_for_connection_(false),
current_packet_data_(nullptr),
@@ -1497,7 +1497,7 @@
}
bool QuicConnection::OnAckFrameEnd(
- QuicPacketNumber start, const absl::optional<QuicEcnCounts>& ecn_counts) {
+ QuicPacketNumber start, const std::optional<QuicEcnCounts>& ecn_counts) {
QUIC_BUG_IF(quic_bug_12714_7, !connected_)
<< "Processing ACK frame end when connection is closed. Received packet "
"info: "
@@ -2869,7 +2869,7 @@
const PathState& default_path, const PathState& alternative_path,
const QuicConnectionId& server_connection_id,
QuicConnectionId* client_connection_id,
- absl::optional<StatelessResetToken>* stateless_reset_token) {
+ std::optional<StatelessResetToken>* stateless_reset_token) {
QUICHE_DCHECK(perspective_ == Perspective::IS_SERVER &&
version().HasIetfQuicFrames());
if (peer_issued_cid_manager_ == nullptr ||
@@ -3814,7 +3814,7 @@
bool QuicConnection::IsMsgTooBig(const QuicPacketWriter* writer,
const WriteResult& result) {
- absl::optional<int> writer_error_code = writer->MessageTooBigErrorCode();
+ std::optional<int> writer_error_code = writer->MessageTooBigErrorCode();
return (result.status == WRITE_STATUS_MSG_TOO_BIG) ||
(writer_error_code.has_value() && IsWriteError(result.status) &&
result.error_code == *writer_error_code);
@@ -3874,7 +3874,7 @@
const std::string error_details = absl::StrCat(
"Write failed with error: ", error_code, " (", strerror(error_code), ")");
QUIC_LOG_FIRST_N(ERROR, 2) << ENDPOINT << error_details;
- absl::optional<int> writer_error_code = writer_->MessageTooBigErrorCode();
+ std::optional<int> writer_error_code = writer_->MessageTooBigErrorCode();
if (writer_error_code.has_value() && error_code == *writer_error_code) {
CloseConnection(QUIC_PACKET_WRITE_ERROR, error_details,
ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
@@ -5291,7 +5291,7 @@
sent_packet_manager_.SetRttStats(*alternative_path_.rtt_stats);
// Explicitly clear alternative_path_.rtt_stats
- alternative_path_.rtt_stats = absl::nullopt;
+ alternative_path_.rtt_stats = std::nullopt;
}
}
// Update to the new peer address.
@@ -5302,7 +5302,7 @@
SetDefaultPathState(std::move(alternative_path_));
} else {
QuicConnectionId client_connection_id;
- absl::optional<StatelessResetToken> stateless_reset_token;
+ std::optional<StatelessResetToken> stateless_reset_token;
FindMatchingOrNewClientConnectionIdOrToken(
previous_default_path, alternative_path_,
last_received_packet_info_.destination_connection_id,
@@ -5509,7 +5509,7 @@
<< "No validated peer address to send after handshake comfirmed.";
} else if (!IsReceivedPeerAddressValidated()) {
QuicConnectionId client_connection_id;
- absl::optional<StatelessResetToken> stateless_reset_token;
+ std::optional<StatelessResetToken> stateless_reset_token;
FindMatchingOrNewClientConnectionIdOrToken(
default_path_, alternative_path_,
last_received_packet_info_.destination_connection_id,
@@ -6537,10 +6537,10 @@
known_server_addresses_.push_back(address);
}
-absl::optional<QuicNewConnectionIdFrame>
+std::optional<QuicNewConnectionIdFrame>
QuicConnection::MaybeIssueNewConnectionIdForPreferredAddress() {
if (self_issued_cid_manager_ == nullptr) {
- return absl::nullopt;
+ return std::nullopt;
}
return self_issued_cid_manager_
->MaybeIssueNewConnectionIdForPreferredAddress();
@@ -6673,7 +6673,7 @@
return;
}
QuicConnectionId client_connection_id, server_connection_id;
- absl::optional<StatelessResetToken> stateless_reset_token;
+ std::optional<StatelessResetToken> stateless_reset_token;
if (self_issued_cid_manager_ != nullptr) {
client_connection_id =
*self_issued_cid_manager_->ConsumeOneConnectionId();
@@ -7061,7 +7061,7 @@
bytes_received_before_address_validation = 0;
bytes_sent_before_address_validation = 0;
send_algorithm = nullptr;
- rtt_stats = absl::nullopt;
+ rtt_stats = std::nullopt;
stateless_reset_token.reset();
ecn_marked_packet_acked = false;
ecn_pto_count = 0;
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index d9b5242..713193b 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -21,11 +21,11 @@
#include <list>
#include <map>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/congestion_control/rtt_stats.h"
#include "quiche/quic/core/crypto/quic_decrypter.h"
#include "quiche/quic/core/crypto/quic_encrypter.h"
@@ -689,7 +689,7 @@
bool OnAckTimestamp(QuicPacketNumber packet_number,
QuicTime timestamp) override;
bool OnAckFrameEnd(QuicPacketNumber start,
- const absl::optional<QuicEcnCounts>& ecn_counts) override;
+ const std::optional<QuicEcnCounts>& ecn_counts) override;
bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override;
bool OnPaddingFrame(const QuicPaddingFrame& frame) override;
bool OnPingFrame(const QuicPingFrame& frame) override;
@@ -1294,7 +1294,7 @@
void AddKnownServerAddress(const QuicSocketAddress& address);
- absl::optional<QuicNewConnectionIdFrame>
+ std::optional<QuicNewConnectionIdFrame>
MaybeIssueNewConnectionIdForPreferredAddress();
// Kicks off validation of received server preferred address.
@@ -1458,7 +1458,7 @@
const QuicSocketAddress& alternative_peer_address,
const QuicConnectionId& client_connection_id,
const QuicConnectionId& server_connection_id,
- absl::optional<StatelessResetToken> stateless_reset_token)
+ std::optional<StatelessResetToken> stateless_reset_token)
: self_address(alternative_self_address),
peer_address(alternative_peer_address),
client_connection_id(client_connection_id),
@@ -1477,7 +1477,7 @@
QuicSocketAddress peer_address;
QuicConnectionId client_connection_id;
QuicConnectionId server_connection_id;
- absl::optional<StatelessResetToken> stateless_reset_token;
+ std::optional<StatelessResetToken> stateless_reset_token;
// True if the peer address has been validated. Address is considered
// validated when 1) an address token of the peer address is received and
// validated, or 2) a HANDSHAKE packet has been successfully processed on
@@ -1490,7 +1490,7 @@
// Points to the send algorithm on the old default path while connection is
// validating migrated peer address. Nullptr otherwise.
std::unique_ptr<SendAlgorithmInterface> send_algorithm;
- absl::optional<RttStats> rtt_stats;
+ std::optional<RttStats> rtt_stats;
// If true, an ECN packet was acked on this path, so the path probably isn't
// dropping ECN-marked packets.
bool ecn_marked_packet_acked = false;
@@ -1549,7 +1549,7 @@
QuicByteCount length = 0;
QuicConnectionId destination_connection_id;
// Fields below are only populated if packet gets decrypted successfully.
- // TODO(fayang): consider using absl::optional for following fields.
+ // TODO(fayang): consider using std::optional for following fields.
bool decrypted = false;
EncryptionLevel decrypted_level = ENCRYPTION_INITIAL;
QuicPacketHeader header;
@@ -1679,7 +1679,7 @@
const PathState& default_path, const PathState& alternative_path,
const QuicConnectionId& server_connection_id,
QuicConnectionId* client_connection_id,
- absl::optional<StatelessResetToken>* stateless_reset_token);
+ std::optional<StatelessResetToken>* stateless_reset_token);
// Returns true and sets connection IDs if (self_address, peer_address)
// corresponds to either the default path or alternative path. Returns false
@@ -2255,14 +2255,14 @@
// |server_connection_id_| with the value from that packet and save off the
// original value of |server_connection_id_| into
// |original_destination_connection_id_| for validation.
- absl::optional<QuicConnectionId> original_destination_connection_id_;
+ std::optional<QuicConnectionId> original_destination_connection_id_;
// The connection ID that replaces original_destination_connection_id_.
QuicConnectionId original_destination_connection_id_replacement_;
// After we receive a RETRY packet, |retry_source_connection_id_| contains
// the source connection ID from that packet.
- absl::optional<QuicConnectionId> retry_source_connection_id_;
+ std::optional<QuicConnectionId> retry_source_connection_id_;
// Used to store content of packets which cannot be sent because of write
// blocked. Packets' encrypted buffers are copied and owned by
diff --git a/quiche/quic/core/quic_connection_id_manager.cc b/quiche/quic/core/quic_connection_id_manager.cc
index b8524d1..9c0d3bd 100644
--- a/quiche/quic/core/quic_connection_id_manager.cc
+++ b/quiche/quic/core/quic_connection_id_manager.cc
@@ -298,9 +298,9 @@
retire_connection_id_alarm_->Cancel();
}
-absl::optional<QuicNewConnectionIdFrame>
+std::optional<QuicNewConnectionIdFrame>
QuicSelfIssuedConnectionIdManager::MaybeIssueNewConnectionId() {
- absl::optional<QuicConnectionId> new_cid =
+ std::optional<QuicConnectionId> new_cid =
connection_id_generator_.GenerateNextConnectionId(last_connection_id_);
if (!new_cid.has_value()) {
return {};
@@ -320,9 +320,9 @@
return frame;
}
-absl::optional<QuicNewConnectionIdFrame> QuicSelfIssuedConnectionIdManager::
+std::optional<QuicNewConnectionIdFrame> QuicSelfIssuedConnectionIdManager::
MaybeIssueNewConnectionIdForPreferredAddress() {
- absl::optional<QuicNewConnectionIdFrame> frame = MaybeIssueNewConnectionId();
+ std::optional<QuicNewConnectionIdFrame> frame = MaybeIssueNewConnectionId();
QUICHE_DCHECK(!frame.has_value() || (frame->sequence_number == 1u));
return frame;
}
@@ -413,8 +413,7 @@
void QuicSelfIssuedConnectionIdManager::MaybeSendNewConnectionIds() {
while (active_connection_ids_.size() < active_connection_id_limit_) {
- absl::optional<QuicNewConnectionIdFrame> frame =
- MaybeIssueNewConnectionId();
+ std::optional<QuicNewConnectionIdFrame> frame = MaybeIssueNewConnectionId();
if (!frame.has_value()) {
break;
}
@@ -434,7 +433,7 @@
return false;
}
-absl::optional<QuicConnectionId>
+std::optional<QuicConnectionId>
QuicSelfIssuedConnectionIdManager::ConsumeOneConnectionId() {
for (const auto& active_cid_data : active_connection_ids_) {
if (active_cid_data.second >
@@ -447,7 +446,7 @@
return active_cid_data.first;
}
}
- return absl::nullopt;
+ return std::nullopt;
}
bool QuicSelfIssuedConnectionIdManager::IsConnectionIdInUse(
diff --git a/quiche/quic/core/quic_connection_id_manager.h b/quiche/quic/core/quic_connection_id_manager.h
index 96c4c97..80f1a6f 100644
--- a/quiche/quic/core/quic_connection_id_manager.h
+++ b/quiche/quic/core/quic_connection_id_manager.h
@@ -12,8 +12,8 @@
#include <cstddef>
#include <memory>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/frames/quic_new_connection_id_frame.h"
#include "quiche/quic/core/frames/quic_retire_connection_id_frame.h"
@@ -133,7 +133,7 @@
virtual ~QuicSelfIssuedConnectionIdManager();
- absl::optional<QuicNewConnectionIdFrame>
+ std::optional<QuicNewConnectionIdFrame>
MaybeIssueNewConnectionIdForPreferredAddress();
QuicErrorCode OnRetireConnectionIdFrame(
@@ -155,7 +155,7 @@
// connection ID with a new probing/migration path when client uses
// non-empty connection ID.
bool HasConnectionIdToConsume() const;
- absl::optional<QuicConnectionId> ConsumeOneConnectionId();
+ std::optional<QuicConnectionId> ConsumeOneConnectionId();
// Returns true if the given connection ID is issued by the
// QuicSelfIssuedConnectionIdManager and not retired locally yet. Called to
@@ -166,7 +166,7 @@
friend class test::QuicConnectionIdManagerPeer;
// Issue a new connection ID. Can return nullopt.
- absl::optional<QuicNewConnectionIdFrame> MaybeIssueNewConnectionId();
+ std::optional<QuicNewConnectionIdFrame> MaybeIssueNewConnectionId();
// This should be set to the min of:
// (1) # of active connection IDs that peer can maintain.
diff --git a/quiche/quic/core/quic_connection_id_manager_test.cc b/quiche/quic/core/quic_connection_id_manager_test.cc
index 466ba27..eba37f1 100644
--- a/quiche/quic/core/quic_connection_id_manager_test.cc
+++ b/quiche/quic/core/quic_connection_id_manager_test.cc
@@ -1013,7 +1013,7 @@
QuicConnectionId cid1 = CheckGenerate(cid0);
EXPECT_CALL(cid_manager_visitor_, MaybeReserveConnectionId(cid1))
.WillOnce(Return(true));
- absl::optional<QuicNewConnectionIdFrame> new_cid_frame =
+ std::optional<QuicNewConnectionIdFrame> new_cid_frame =
cid_manager_.MaybeIssueNewConnectionIdForPreferredAddress();
ASSERT_TRUE(new_cid_frame.has_value());
ASSERT_THAT(*new_cid_frame, ExpectedNewConnectionIdFrame(cid1, 1u, 0u));
diff --git a/quiche/quic/core/quic_connection_stats.h b/quiche/quic/core/quic_connection_stats.h
index 5551659..67a3884 100644
--- a/quiche/quic/core/quic_connection_stats.h
+++ b/quiche/quic/core/quic_connection_stats.h
@@ -247,9 +247,9 @@
// is performed by TlsServerHandshaker. If an operation is done within
// BoringSSL, e.g. ticket decrypted without using
// TlsServerHandshaker::SessionTicketOpen, it will not be recorded here.
- absl::optional<TlsServerOperationStats> tls_server_select_cert_stats;
- absl::optional<TlsServerOperationStats> tls_server_compute_signature_stats;
- absl::optional<TlsServerOperationStats> tls_server_decrypt_ticket_stats;
+ std::optional<TlsServerOperationStats> tls_server_select_cert_stats;
+ std::optional<TlsServerOperationStats> tls_server_compute_signature_stats;
+ std::optional<TlsServerOperationStats> tls_server_decrypt_ticket_stats;
};
} // namespace quic
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index b7f6e1a..ecfb82b 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -17126,7 +17126,7 @@
GenerateNextConnectionId(connection_id_))
.WillOnce(Return(server_issued_cid_for_preferred_address));
EXPECT_CALL(visitor_, MaybeReserveConnectionId(_)).WillOnce(Return(true));
- absl::optional<QuicNewConnectionIdFrame> frame =
+ std::optional<QuicNewConnectionIdFrame> frame =
connection_.MaybeIssueNewConnectionIdForPreferredAddress();
ASSERT_TRUE(frame.has_value());
@@ -17179,7 +17179,7 @@
GenerateNextConnectionId(connection_id_))
.WillOnce(Return(server_issued_cid_for_preferred_address));
EXPECT_CALL(visitor_, MaybeReserveConnectionId(_)).WillOnce(Return(true));
- absl::optional<QuicNewConnectionIdFrame> frame =
+ std::optional<QuicNewConnectionIdFrame> frame =
connection_.MaybeIssueNewConnectionIdForPreferredAddress();
ASSERT_TRUE(frame.has_value());
diff --git a/quiche/quic/core/quic_crypto_stream.cc b/quiche/quic/core/quic_crypto_stream.cc
index 925baa6..a3df09b 100644
--- a/quiche/quic/core/quic_crypto_stream.cc
+++ b/quiche/quic/core/quic_crypto_stream.cc
@@ -4,11 +4,11 @@
#include "quiche/quic/core/quic_crypto_stream.h"
+#include <optional>
#include <string>
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/crypto_handshake.h"
#include "quiche/quic/core/frames/quic_crypto_frame.h"
#include "quiche/quic/core/quic_connection.h"
diff --git a/quiche/quic/core/quic_crypto_stream_test.cc b/quiche/quic/core/quic_crypto_stream_test.cc
index 70928ae..9aa747f 100644
--- a/quiche/quic/core/quic_crypto_stream_test.cc
+++ b/quiche/quic/core/quic_crypto_stream_test.cc
@@ -500,7 +500,7 @@
.WillOnce(InvokeWithoutArgs([this]() {
return session_.ConsumeData(
QuicUtils::GetCryptoStreamId(connection_->transport_version()), 150,
- 1350, NO_FIN, HANDSHAKE_RETRANSMISSION, absl::nullopt);
+ 1350, NO_FIN, HANDSHAKE_RETRANSMISSION, std::nullopt);
}));
EXPECT_FALSE(stream_->RetransmitStreamData(1350, 1350, false,
diff --git a/quiche/quic/core/quic_datagram_queue.cc b/quiche/quic/core/quic_datagram_queue.cc
index 0b7b3f5..d2137ef 100644
--- a/quiche/quic/core/quic_datagram_queue.cc
+++ b/quiche/quic/core/quic_datagram_queue.cc
@@ -45,10 +45,10 @@
return MESSAGE_STATUS_BLOCKED;
}
-absl::optional<MessageStatus> QuicDatagramQueue::TrySendingNextDatagram() {
+std::optional<MessageStatus> QuicDatagramQueue::TrySendingNextDatagram() {
RemoveExpiredDatagrams();
if (queue_.empty()) {
- return absl::nullopt;
+ return std::nullopt;
}
MessageResult result =
@@ -65,7 +65,7 @@
size_t QuicDatagramQueue::SendDatagrams() {
size_t num_datagrams = 0;
for (;;) {
- absl::optional<MessageStatus> status = TrySendingNextDatagram();
+ std::optional<MessageStatus> status = TrySendingNextDatagram();
if (!status.has_value()) {
break;
}
@@ -94,7 +94,7 @@
++expired_datagram_count_;
queue_.pop_front();
if (observer_) {
- observer_->OnDatagramProcessed(absl::nullopt);
+ observer_->OnDatagramProcessed(std::nullopt);
}
}
}
diff --git a/quiche/quic/core/quic_datagram_queue.h b/quiche/quic/core/quic_datagram_queue.h
index ca79265..9f4428b 100644
--- a/quiche/quic/core/quic_datagram_queue.h
+++ b/quiche/quic/core/quic_datagram_queue.h
@@ -7,8 +7,8 @@
#include <cstdint>
#include <memory>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/common/platform/api/quiche_mem_slice.h"
@@ -34,7 +34,7 @@
// This function is called synchronously in `QuicDatagramQueue` methods.
// `status` is nullopt when the datagram is dropped due to being in the
// queue for too long.
- virtual void OnDatagramProcessed(absl::optional<MessageStatus> status) = 0;
+ virtual void OnDatagramProcessed(std::optional<MessageStatus> status) = 0;
};
// |session| is not owned and must outlive this object.
@@ -49,7 +49,7 @@
// Attempts to send a single datagram from the queue. Returns the result of
// SendMessage(), or nullopt if there were no unexpired datagrams to send.
- absl::optional<MessageStatus> TrySendingNextDatagram();
+ std::optional<MessageStatus> TrySendingNextDatagram();
// Sends all of the unexpired datagrams until either the connection becomes
// write-blocked or the queue is empty. Returns the number of datagrams sent.
diff --git a/quiche/quic/core/quic_datagram_queue_test.cc b/quiche/quic/core/quic_datagram_queue_test.cc
index 7895941..6cbf09f 100644
--- a/quiche/quic/core/quic_datagram_queue_test.cc
+++ b/quiche/quic/core/quic_datagram_queue_test.cc
@@ -4,10 +4,10 @@
#include "quiche/quic/core/quic_datagram_queue.h"
+#include <optional>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/null_encrypter.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/core/quic_types.h"
@@ -36,7 +36,7 @@
public:
class Context : public quiche::QuicheReferenceCounted {
public:
- std::vector<absl::optional<MessageStatus>> statuses;
+ std::vector<std::optional<MessageStatus>> statuses;
};
QuicDatagramQueueObserver() : context_(new Context()) {}
@@ -44,7 +44,7 @@
QuicDatagramQueueObserver& operator=(const QuicDatagramQueueObserver&) =
delete;
- void OnDatagramProcessed(absl::optional<MessageStatus> status) override {
+ void OnDatagramProcessed(std::optional<MessageStatus> status) override {
context_->statuses.push_back(std::move(status));
}
@@ -108,7 +108,7 @@
// Verify getting write blocked does not remove the datagram from the queue.
EXPECT_CALL(*connection_, SendMessage(_, _, _))
.WillOnce(Return(MESSAGE_STATUS_BLOCKED));
- absl::optional<MessageStatus> status = queue_.TrySendingNextDatagram();
+ std::optional<MessageStatus> status = queue_.TrySendingNextDatagram();
ASSERT_TRUE(status.has_value());
EXPECT_EQ(MESSAGE_STATUS_BLOCKED, *status);
EXPECT_EQ(1u, queue_.queue_size());
@@ -122,7 +122,7 @@
}
TEST_F(QuicDatagramQueueTest, EmptyBuffer) {
- absl::optional<MessageStatus> status = queue_.TrySendingNextDatagram();
+ std::optional<MessageStatus> status = queue_.TrySendingNextDatagram();
EXPECT_FALSE(status.has_value());
size_t num_messages = queue_.SendDatagrams();
@@ -289,7 +289,7 @@
EXPECT_TRUE(context_->statuses.empty());
EXPECT_EQ(0u, queue_.SendDatagrams());
- EXPECT_THAT(context_->statuses, ElementsAre(absl::nullopt));
+ EXPECT_THAT(context_->statuses, ElementsAre(std::nullopt));
}
} // namespace
diff --git a/quiche/quic/core/quic_default_packet_writer.cc b/quiche/quic/core/quic_default_packet_writer.cc
index 6d45217..7fd7400 100644
--- a/quiche/quic/core/quic_default_packet_writer.cc
+++ b/quiche/quic/core/quic_default_packet_writer.cc
@@ -34,7 +34,7 @@
void QuicDefaultPacketWriter::SetWritable() { write_blocked_ = false; }
-absl::optional<int> QuicDefaultPacketWriter::MessageTooBigErrorCode() const {
+std::optional<int> QuicDefaultPacketWriter::MessageTooBigErrorCode() const {
return kSocketErrorMsgSize;
}
diff --git a/quiche/quic/core/quic_default_packet_writer.h b/quiche/quic/core/quic_default_packet_writer.h
index ab41c91..cb26266 100644
--- a/quiche/quic/core/quic_default_packet_writer.h
+++ b/quiche/quic/core/quic_default_packet_writer.h
@@ -32,7 +32,7 @@
const QuicPacketWriterParams& params) override;
bool IsWriteBlocked() const override;
void SetWritable() override;
- absl::optional<int> MessageTooBigErrorCode() const override;
+ std::optional<int> MessageTooBigErrorCode() const override;
QuicByteCount GetMaxPacketSize(
const QuicSocketAddress& peer_address) const override;
bool SupportsReleaseTime() const override;
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc
index 9ca0d82..3984426 100644
--- a/quiche/quic/core/quic_dispatcher.cc
+++ b/quiche/quic/core/quic_dispatcher.cc
@@ -11,6 +11,7 @@
#include <cstdint>
#include <list>
#include <memory>
+#include <optional>
#include <ostream>
#include <string>
#include <utility>
@@ -21,7 +22,6 @@
#include "absl/container/flat_hash_set.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/chlo_extractor.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/crypto/crypto_handshake_message.h"
@@ -1187,7 +1187,7 @@
packet_info.destination_connection_id,
packet_info.form != GOOGLE_QUIC_PACKET, packet_info.packet,
packet_info.self_address, packet_info.peer_address, packet_info.version,
- /*parsed_chlo=*/absl::nullopt, /*connection_id_generator=*/nullptr);
+ /*parsed_chlo=*/std::nullopt, /*connection_id_generator=*/nullptr);
if (rs != EnqueuePacketResult::SUCCESS) {
OnBufferPacketFailure(rs, packet_info.destination_connection_id);
}
@@ -1291,7 +1291,7 @@
if (connection_id_generator == nullptr) {
connection_id_generator = &ConnectionIdGenerator();
}
- absl::optional<QuicConnectionId> server_connection_id =
+ std::optional<QuicConnectionId> server_connection_id =
connection_id_generator->MaybeReplaceConnectionId(original_connection_id,
version);
const bool replaced_connection_id = server_connection_id.has_value();
diff --git a/quiche/quic/core/quic_dispatcher.h b/quiche/quic/core/quic_dispatcher.h
index 7224712..151c582 100644
--- a/quiche/quic/core/quic_dispatcher.h
+++ b/quiche/quic/core/quic_dispatcher.h
@@ -12,13 +12,13 @@
#include <cstdint>
#include <list>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/crypto/quic_compressed_certs_cache.h"
#include "quiche/quic/core/frames/quic_rst_stream_frame.h"
@@ -371,10 +371,10 @@
struct ExtractChloResult {
// If set, a full client hello has been successfully parsed.
- absl::optional<ParsedClientHello> parsed_chlo;
+ std::optional<ParsedClientHello> parsed_chlo;
// If set, the TLS alert that will cause a connection close.
// Always empty for Google QUIC.
- absl::optional<uint8_t> tls_alert;
+ std::optional<uint8_t> tls_alert;
};
// Try to extract information(sni, alpns, ...) if the full Client Hello has
diff --git a/quiche/quic/core/quic_dispatcher_test.cc b/quiche/quic/core/quic_dispatcher_test.cc
index 03e68c4..f921147 100644
--- a/quiche/quic/core/quic_dispatcher_test.cc
+++ b/quiche/quic/core/quic_dispatcher_test.cc
@@ -8,6 +8,7 @@
#include <cstdint>
#include <map>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
#include <vector>
@@ -16,7 +17,6 @@
#include "absl/base/macros.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/chlo_extractor.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/crypto/crypto_protocol.h"
@@ -487,7 +487,7 @@
} else {
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(server_connection_id, version))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
}
}
std::vector<std::unique_ptr<QuicReceivedPacket>> packets =
@@ -590,7 +590,7 @@
bool expect_generator_is_called_ = true;
// Set in conditions where the generator should return a different connection
// ID.
- absl::optional<QuicConnectionId> generated_connection_id_;
+ std::optional<QuicConnectionId> generated_connection_id_;
MockConnectionIdGenerator connection_id_generator_;
std::unique_ptr<NiceMock<TestDispatcher>> dispatcher_;
MockTimeWaitListManager* time_wait_list_manager_;
@@ -599,7 +599,7 @@
std::map<QuicConnectionId, std::list<std::string>> data_connection_map_;
QuicBufferedPacketStore* store_;
uint64_t connection_id_;
- absl::optional<std::string> address_token_;
+ std::optional<std::string> address_token_;
};
class QuicDispatcherTestAllVersions : public QuicDispatcherTestBase {};
@@ -655,7 +655,7 @@
mock_connection_id_generator;
EXPECT_CALL(mock_connection_id_generator,
MaybeReplaceConnectionId(TestConnectionId(1), version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(*dispatcher_,
CreateQuicSession(TestConnectionId(1), _, client_address,
Eq(ExpectedAlpn()), _, MatchParsedClientHello(),
@@ -721,7 +721,7 @@
new_connection_id = original_connection_id;
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(original_connection_id, version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
}
QuicConfig client_config = DefaultQuicConfig();
// Add a 2000-byte custom parameter to increase the length of the CHLO.
@@ -2565,7 +2565,7 @@
// buffered should be delivered to the session.
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(conn_id, version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(*dispatcher_,
CreateQuicSession(conn_id, _, client_addr_, Eq(ExpectedAlpn()), _,
MatchParsedClientHello(), _))
@@ -2601,7 +2601,7 @@
// buffered should be delivered to the session.
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(conn_id, version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(*dispatcher_, CreateQuicSession(conn_id, _, client_addr_,
Eq(ExpectedAlpn()), _, _, _))
.WillOnce(Return(ByMove(CreateSession(
@@ -2652,7 +2652,7 @@
QuicConnectionId conn_id = TestConnectionId(i);
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(conn_id, version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(*dispatcher_, CreateQuicSession(conn_id, _, client_address,
Eq(ExpectedAlpn()), _, _, _))
.WillOnce(Return(ByMove(CreateSession(
@@ -2700,7 +2700,7 @@
// buffered should be delivered to the session.
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(conn_id, version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(*dispatcher_, CreateQuicSession(conn_id, _, client_addr_,
Eq(ExpectedAlpn()), _, _, _))
.Times(1) // Only triggered by 1st CHLO.
@@ -2768,7 +2768,7 @@
if (conn_id <= kMaxNumSessionsToCreate) {
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(TestConnectionId(conn_id), version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(
*dispatcher_,
CreateQuicSession(TestConnectionId(conn_id), _, client_addr_,
@@ -2808,7 +2808,7 @@
++conn_id) {
EXPECT_CALL(connection_id_generator_,
MaybeReplaceConnectionId(TestConnectionId(conn_id), version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(
*dispatcher_,
CreateQuicSession(TestConnectionId(conn_id), _, client_addr_,
@@ -2886,7 +2886,7 @@
// created using generator2.
EXPECT_CALL(generator2,
MaybeReplaceConnectionId(TestConnectionId(conn_id), version_))
- .WillOnce(Return(absl::nullopt));
+ .WillOnce(Return(std::nullopt));
EXPECT_CALL(*dispatcher_, CreateQuicSession(TestConnectionId(conn_id), _,
client_addr_, Eq(ExpectedAlpn()),
_, MatchParsedClientHello(), _))
diff --git a/quiche/quic/core/quic_framer.cc b/quiche/quic/core/quic_framer.cc
index b17b8c9..b967645 100644
--- a/quiche/quic/core/quic_framer.cc
+++ b/quiche/quic/core/quic_framer.cc
@@ -10,6 +10,7 @@
#include <cstdint>
#include <limits>
#include <memory>
+#include <optional>
#include <string>
#include <type_traits>
#include <utility>
@@ -23,7 +24,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/crypto_framer.h"
#include "quiche/quic/core/crypto/crypto_handshake.h"
#include "quiche/quic/core/crypto/crypto_handshake_message.h"
@@ -3481,7 +3481,7 @@
}
// Done processing the ACK frame.
- absl::optional<QuicEcnCounts> ecn_counts = absl::nullopt;
+ std::optional<QuicEcnCounts> ecn_counts = std::nullopt;
if (!visitor_->OnAckFrameEnd(QuicPacketNumber(first_received), ecn_counts)) {
set_detailed_error(
"Error occurs when visitor finishes processing the ACK frame.");
@@ -5499,7 +5499,7 @@
// |effective_prev_time| is the exponent-encoded timestamp of the previous
// packet.
- absl::optional<QuicTime> effective_prev_time;
+ std::optional<QuicTime> effective_prev_time;
for (const AckTimestampRange& range : timestamp_ranges) {
QUIC_DVLOG(3) << "Range: gap:" << range.gap << ", beg:" << range.range_begin
<< ", end:" << range.range_end;
@@ -6341,7 +6341,7 @@
QuicVersionLabel* version_label, ParsedQuicVersion* parsed_version,
QuicConnectionId* destination_connection_id,
QuicConnectionId* source_connection_id,
- absl::optional<absl::string_view>* retry_token,
+ std::optional<absl::string_view>* retry_token,
std::string* detailed_error) {
QuicDataReader reader(packet.data(), packet.length());
if (reader.IsDoneReading()) {
@@ -6393,7 +6393,7 @@
ParsedQuicVersion* parsed_version,
QuicConnectionId* destination_connection_id,
QuicConnectionId* source_connection_id,
- absl::optional<absl::string_view>* retry_token, std::string* detailed_error,
+ std::optional<absl::string_view>* retry_token, std::string* detailed_error,
ConnectionIdGeneratorInterface& generator) {
QuicDataReader reader(packet.data(), packet.length());
// Get the first two bytes.
diff --git a/quiche/quic/core/quic_framer.h b/quiche/quic/core/quic_framer.h
index c173925..62c4ce8 100644
--- a/quiche/quic/core/quic_framer.h
+++ b/quiche/quic/core/quic_framer.h
@@ -165,7 +165,7 @@
// the reported ECN counts in the ack frame, if present.
virtual bool OnAckFrameEnd(
QuicPacketNumber start,
- const absl::optional<QuicEcnCounts>& ecn_counts) = 0;
+ const std::optional<QuicEcnCounts>& ecn_counts) = 0;
// Called when a StopWaitingFrame has been parsed.
virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) = 0;
@@ -457,7 +457,7 @@
QuicVersionLabel* version_label, ParsedQuicVersion* parsed_version,
QuicConnectionId* destination_connection_id,
QuicConnectionId* source_connection_id,
- absl::optional<absl::string_view>* retry_token,
+ std::optional<absl::string_view>* retry_token,
std::string* detailed_error);
// Parses the unencrypted fields in |packet| and stores them in the other
@@ -475,7 +475,7 @@
ParsedQuicVersion* parsed_version,
QuicConnectionId* destination_connection_id,
QuicConnectionId* source_connection_id,
- absl::optional<absl::string_view>* retry_token,
+ std::optional<absl::string_view>* retry_token,
std::string* detailed_error, ConnectionIdGeneratorInterface& generator);
// Serializes a packet containing |frames| into |buffer|.
diff --git a/quiche/quic/core/quic_framer_test.cc b/quiche/quic/core/quic_framer_test.cc
index 9e200ba..e9dded2 100644
--- a/quiche/quic/core/quic_framer_test.cc
+++ b/quiche/quic/core/quic_framer_test.cc
@@ -394,7 +394,7 @@
bool OnAckFrameEnd(
QuicPacketNumber /*start*/,
- const absl::optional<QuicEcnCounts>& /*ecn_counts*/) override {
+ const std::optional<QuicEcnCounts>& /*ecn_counts*/) override {
return true;
}
@@ -1132,7 +1132,7 @@
QuicVersionLabel version_label;
std::string detailed_error;
bool use_length_prefix;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
*encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
@@ -1209,7 +1209,7 @@
QuicVersionLabel version_label = 0;
std::string detailed_error = "";
bool use_length_prefix;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
@@ -1237,7 +1237,7 @@
QuicVersionLabel version_label = 0;
std::string detailed_error = "";
bool use_length_prefix;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
@@ -13043,7 +13043,7 @@
ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
QuicConnectionId destination_connection_id = TestConnectionId(1);
QuicConnectionId source_connection_id = TestConnectionId(2);
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
std::string detailed_error = "foobar";
QuicErrorCode header_parse_result = QuicFramer::ParsePublicHeaderDispatcher(
encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
@@ -13121,7 +13121,7 @@
ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
QuicConnectionId destination_connection_id = TestConnectionId(1);
QuicConnectionId source_connection_id = TestConnectionId(2);
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
std::string detailed_error = "foobar";
QuicErrorCode header_parse_result = QuicFramer::ParsePublicHeaderDispatcher(
encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
@@ -14206,7 +14206,7 @@
QuicVersionLabel version_label;
std::string detailed_error;
bool use_length_prefix;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
EXPECT_EQ(QUIC_NO_ERROR,
QuicFramer::ParsePublicHeaderDispatcherShortHeaderLengthUnknown(
@@ -14248,7 +14248,7 @@
if (ecn_marks) {
ack_frame.ecn_counters = QuicEcnCounts(100, 10000, 1000000);
} else {
- ack_frame.ecn_counters = absl::nullopt;
+ ack_frame.ecn_counters = std::nullopt;
}
QuicFrames frames = {QuicFrame(padding_frame), QuicFrame(&ack_frame)};
// Build an ACK packet.
diff --git a/quiche/quic/core/quic_generic_session_test.cc b/quiche/quic/core/quic_generic_session_test.cc
index ce5d184..52812e9 100644
--- a/quiche/quic/core/quic_generic_session_test.cc
+++ b/quiche/quic/core/quic_generic_session_test.cc
@@ -10,11 +10,11 @@
#include <cstddef>
#include <cstring>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/quic_compressed_certs_cache.h"
#include "quiche/quic/core/crypto/quic_crypto_client_config.h"
#include "quiche/quic/core/crypto/quic_crypto_server_config.h"
@@ -51,7 +51,7 @@
class CountingDatagramObserver : public QuicDatagramQueue::Observer {
public:
CountingDatagramObserver(int& total) : total_(total) {}
- void OnDatagramProcessed(absl::optional<MessageStatus>) { ++total_; }
+ void OnDatagramProcessed(std::optional<MessageStatus>) { ++total_; }
private:
int& total_;
diff --git a/quiche/quic/core/quic_interval_deque.h b/quiche/quic/core/quic_interval_deque.h
index c4bd49c..0aa4543 100644
--- a/quiche/quic/core/quic_interval_deque.h
+++ b/quiche/quic/core/quic_interval_deque.h
@@ -6,8 +6,8 @@
#define QUICHE_QUIC_CORE_QUIC_INTERVAL_DEQUE_H_
#include <algorithm>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_interval.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
@@ -259,7 +259,7 @@
friend class test::QuicIntervalDequePeer;
C container_;
- absl::optional<std::size_t> cached_index_;
+ std::optional<std::size_t> cached_index_;
};
template <class T, class C>
diff --git a/quiche/quic/core/quic_packet_creator.cc b/quiche/quic/core/quic_packet_creator.cc
index f8ae6c6..eacc0c2 100644
--- a/quiche/quic/core/quic_packet_creator.cc
+++ b/quiche/quic/core/quic_packet_creator.cc
@@ -8,6 +8,7 @@
#include <cstddef>
#include <cstdint>
#include <limits>
+#include <optional>
#include <string>
#include <utility>
@@ -16,7 +17,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/str_join.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/crypto_protocol.h"
#include "quiche/quic/core/frames/quic_frame.h"
#include "quiche/quic/core/frames/quic_padding_frame.h"
@@ -756,7 +756,7 @@
return false;
}
-absl::optional<size_t>
+std::optional<size_t>
QuicPacketCreator::MaybeBuildDataPacketWithChaosProtection(
const QuicPacketHeader& header, char* buffer) {
if (!GetQuicFlag(quic_enable_chaos_protection) ||
@@ -771,13 +771,13 @@
// Chaos protection relies on the framer using a crypto data producer,
// which is always the case in practice.
framer_->data_producer() == nullptr) {
- return absl::nullopt;
+ return std::nullopt;
}
const QuicCryptoFrame& crypto_frame = *queued_frames_[0].crypto_frame;
if (packet_.encryption_level != crypto_frame.level) {
QUIC_BUG(chaos frame level)
<< ENDPOINT << packet_.encryption_level << " != " << crypto_frame.level;
- return absl::nullopt;
+ return std::nullopt;
}
QuicChaosProtector chaos_protector(
crypto_frame, queued_frames_[1].padding_frame.num_padding_bytes,
@@ -843,7 +843,7 @@
// packet sizes are properly used.
size_t length;
- absl::optional<size_t> length_with_chaos_protection =
+ std::optional<size_t> length_with_chaos_protection =
MaybeBuildDataPacketWithChaosProtection(header, encrypted_buffer.buffer);
if (length_with_chaos_protection.has_value()) {
length = *length_with_chaos_protection;
diff --git a/quiche/quic/core/quic_packet_creator.h b/quiche/quic/core/quic_packet_creator.h
index 0e0bc82..4cfd566 100644
--- a/quiche/quic/core/quic_packet_creator.h
+++ b/quiche/quic/core/quic_packet_creator.h
@@ -17,12 +17,12 @@
#include <cstddef>
#include <memory>
+#include <optional>
#include <utility>
#include <vector>
#include "absl/base/attributes.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/frames/quic_stream_frame.h"
#include "quiche/quic/core/quic_coalesced_packet.h"
#include "quiche/quic/core/quic_connection_id.h"
@@ -488,9 +488,9 @@
};
// Attempts to build a data packet with chaos protection. If this packet isn't
- // supposed to be protected or if serialization fails then absl::nullopt is
+ // supposed to be protected or if serialization fails then std::nullopt is
// returned. Otherwise returns the serialized length.
- absl::optional<size_t> MaybeBuildDataPacketWithChaosProtection(
+ std::optional<size_t> MaybeBuildDataPacketWithChaosProtection(
const QuicPacketHeader& header, char* buffer);
// Creates a stream frame which fits into the current open packet. If
diff --git a/quiche/quic/core/quic_packet_writer.h b/quiche/quic/core/quic_packet_writer.h
index dfca5a8..c2b92c6 100644
--- a/quiche/quic/core/quic_packet_writer.h
+++ b/quiche/quic/core/quic_packet_writer.h
@@ -6,9 +6,9 @@
#define QUICHE_QUIC_CORE_QUIC_PACKET_WRITER_H_
#include <cstddef>
+#include <optional>
#include <utility>
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_packets.h"
#include "quiche/quic/platform/api/quic_export.h"
#include "quiche/quic/platform/api/quic_ip_address.h"
@@ -127,7 +127,7 @@
// The error code used by the writer to indicate that the write failed due to
// supplied packet being too big. This is equivalent to returning
// WRITE_STATUS_MSG_TOO_BIG as a status.
- virtual absl::optional<int> MessageTooBigErrorCode() const = 0;
+ virtual std::optional<int> MessageTooBigErrorCode() const = 0;
// Returns the maximum size of the packet which can be written using this
// writer for the supplied peer address. This size may actually exceed the
diff --git a/quiche/quic/core/quic_packet_writer_wrapper.cc b/quiche/quic/core/quic_packet_writer_wrapper.cc
index c3b4b28..930d4fc 100644
--- a/quiche/quic/core/quic_packet_writer_wrapper.cc
+++ b/quiche/quic/core/quic_packet_writer_wrapper.cc
@@ -26,7 +26,7 @@
void QuicPacketWriterWrapper::SetWritable() { writer_->SetWritable(); }
-absl::optional<int> QuicPacketWriterWrapper::MessageTooBigErrorCode() const {
+std::optional<int> QuicPacketWriterWrapper::MessageTooBigErrorCode() const {
return writer_->MessageTooBigErrorCode();
}
diff --git a/quiche/quic/core/quic_packet_writer_wrapper.h b/quiche/quic/core/quic_packet_writer_wrapper.h
index 901aa6c..898a0e0 100644
--- a/quiche/quic/core/quic_packet_writer_wrapper.h
+++ b/quiche/quic/core/quic_packet_writer_wrapper.h
@@ -31,7 +31,7 @@
const QuicPacketWriterParams& params) override;
bool IsWriteBlocked() const override;
void SetWritable() override;
- absl::optional<int> MessageTooBigErrorCode() const override;
+ std::optional<int> MessageTooBigErrorCode() const override;
QuicByteCount GetMaxPacketSize(
const QuicSocketAddress& peer_address) const override;
bool SupportsReleaseTime() const override;
diff --git a/quiche/quic/core/quic_packets.h b/quiche/quic/core/quic_packets.h
index 9bd17f9..3d70fec 100644
--- a/quiche/quic/core/quic_packets.h
+++ b/quiche/quic/core/quic_packets.h
@@ -389,10 +389,10 @@
// Sum of bytes from frames that are not retransmissions. This field is only
// populated for packets with "mixed frames": at least one frame of a
// retransmission type and at least one frame of NOT_RETRANSMISSION type.
- absl::optional<QuicByteCount> bytes_not_retransmitted;
+ std::optional<QuicByteCount> bytes_not_retransmitted;
// Only populated if encryption_level is ENCRYPTION_INITIAL.
// TODO(b/265777524): remove this.
- absl::optional<QuicPacketHeader> initial_header;
+ std::optional<QuicPacketHeader> initial_header;
};
// Make a copy of |serialized| (including the underlying frames). |copy_buffer|
@@ -442,7 +442,7 @@
ParsedQuicVersion version;
QuicConnectionId destination_connection_id;
QuicConnectionId source_connection_id;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
};
} // namespace quic
diff --git a/quiche/quic/core/quic_sent_packet_manager.cc b/quiche/quic/core/quic_sent_packet_manager.cc
index 5786764..1a40e99 100644
--- a/quiche/quic/core/quic_sent_packet_manager.cc
+++ b/quiche/quic/core/quic_sent_packet_manager.cc
@@ -223,7 +223,7 @@
void QuicSentPacketManager::ApplyConnectionOptions(
const QuicTagVector& connection_options) {
- absl::optional<CongestionControlType> cc_type;
+ std::optional<CongestionControlType> cc_type;
if (ContainsQuicTag(connection_options, kB2ON)) {
cc_type = kBBRv2;
} else if (ContainsQuicTag(connection_options, kTBBR)) {
@@ -316,7 +316,7 @@
QuicPacketNumber ack_packet_number, EncryptionLevel ack_decrypted_level,
const QuicAckFrame& ack_frame, QuicTime ack_receive_time, bool rtt_updated,
QuicByteCount prior_bytes_in_flight,
- absl::optional<QuicEcnCounts> ecn_counts) {
+ std::optional<QuicEcnCounts> ecn_counts) {
unacked_packets_.NotifyAggregatedStreamFrameAcked(
last_ack_frame_.ack_delay_time);
InvokeLossDetection(ack_receive_time);
@@ -358,7 +358,7 @@
void QuicSentPacketManager::MaybeInvokeCongestionEvent(
bool rtt_updated, QuicByteCount prior_in_flight, QuicTime event_time,
- absl::optional<QuicEcnCounts> ecn_counts,
+ std::optional<QuicEcnCounts> ecn_counts,
const QuicEcnCounts& previous_counts) {
if (!rtt_updated && packets_acked_.empty() && packets_lost_.empty()) {
return;
@@ -745,7 +745,7 @@
const QuicTime now = clock_->Now();
InvokeLossDetection(now);
MaybeInvokeCongestionEvent(false, prior_in_flight, now,
- absl::optional<QuicEcnCounts>(),
+ std::optional<QuicEcnCounts>(),
peer_ack_ecn_counts_[APPLICATION_DATA]);
return LOSS_MODE;
}
@@ -1278,7 +1278,7 @@
}
bool QuicSentPacketManager::IsEcnFeedbackValid(
- PacketNumberSpace space, const absl::optional<QuicEcnCounts>& ecn_counts,
+ PacketNumberSpace space, const std::optional<QuicEcnCounts>& ecn_counts,
QuicPacketCount newly_acked_ect0, QuicPacketCount newly_acked_ect1) {
if (!ecn_counts.has_value()) {
if (newly_acked_ect0 > 0 || newly_acked_ect1 > 0) {
@@ -1325,7 +1325,7 @@
AckResult QuicSentPacketManager::OnAckFrameEnd(
QuicTime ack_receive_time, QuicPacketNumber ack_packet_number,
EncryptionLevel ack_decrypted_level,
- const absl::optional<QuicEcnCounts>& ecn_counts) {
+ const std::optional<QuicEcnCounts>& ecn_counts) {
QuicByteCount prior_bytes_in_flight = unacked_packets_.bytes_in_flight();
QuicPacketCount newly_acked_ect0 = 0;
QuicPacketCount newly_acked_ect1 = 0;
@@ -1423,7 +1423,7 @@
acked_packet.receive_timestamp);
}
// Validate ECN feedback.
- absl::optional<QuicEcnCounts> valid_ecn_counts;
+ std::optional<QuicEcnCounts> valid_ecn_counts;
if (GetQuicReloadableFlag(quic_send_ect1)) {
QUIC_RELOADABLE_FLAG_COUNT_N(quic_send_ect1, 1, 8);
if (IsEcnFeedbackValid(acked_packet_number_space, ecn_counts,
diff --git a/quiche/quic/core/quic_sent_packet_manager.h b/quiche/quic/core/quic_sent_packet_manager.h
index 133b7ae..fe1aa0b 100644
--- a/quiche/quic/core/quic_sent_packet_manager.h
+++ b/quiche/quic/core/quic_sent_packet_manager.h
@@ -352,7 +352,7 @@
AckResult OnAckFrameEnd(QuicTime ack_receive_time,
QuicPacketNumber ack_packet_number,
EncryptionLevel ack_decrypted_level,
- const absl::optional<QuicEcnCounts>& ecn_counts);
+ const std::optional<QuicEcnCounts>& ecn_counts);
void EnableMultiplePacketNumberSpacesSupport();
@@ -523,7 +523,7 @@
void MaybeInvokeCongestionEvent(bool rtt_updated,
QuicByteCount prior_in_flight,
QuicTime event_time,
- absl::optional<QuicEcnCounts> ecn_counts,
+ std::optional<QuicEcnCounts> ecn_counts,
const QuicEcnCounts& previous_counts);
// Removes the retransmittability and in flight properties from the packet at
@@ -546,7 +546,7 @@
const QuicAckFrame& ack_frame,
QuicTime ack_receive_time, bool rtt_updated,
QuicByteCount prior_bytes_in_flight,
- absl::optional<QuicEcnCounts> ecn_counts);
+ std::optional<QuicEcnCounts> ecn_counts);
// Notify observers that packet with QuicTransmissionInfo |info| is a spurious
// retransmission. It is caller's responsibility to guarantee the packet with
@@ -587,7 +587,7 @@
// |newly_acked_ect1| count the number of previously unacked packets with
// those markings that appeared in an ack block for the first time.
bool IsEcnFeedbackValid(PacketNumberSpace space,
- const absl::optional<QuicEcnCounts>& ecn_counts,
+ const std::optional<QuicEcnCounts>& ecn_counts,
QuicPacketCount newly_acked_ect0,
QuicPacketCount newly_acked_ect1);
@@ -718,7 +718,7 @@
// Most recent ECN codepoint counts received in an ACK frame sent by the peer.
QuicEcnCounts peer_ack_ecn_counts_[NUM_PACKET_NUMBER_SPACES];
- absl::optional<QuicTime::Delta> deferred_send_alarm_delay_;
+ std::optional<QuicTime::Delta> deferred_send_alarm_delay_;
};
} // namespace quic
diff --git a/quiche/quic/core/quic_sent_packet_manager_test.cc b/quiche/quic/core/quic_sent_packet_manager_test.cc
index d222b6b..13caeba 100644
--- a/quiche/quic/core/quic_sent_packet_manager_test.cc
+++ b/quiche/quic/core/quic_sent_packet_manager_test.cc
@@ -40,8 +40,8 @@
// Stream ID for data sent in CreatePacket().
const QuicStreamId kStreamId = 7;
-// The compiler won't allow absl::nullopt as an argument.
-const absl::optional<QuicEcnCounts> kEmptyCounts = absl::nullopt;
+// The compiler won't allow std::nullopt as an argument.
+const std::optional<QuicEcnCounts> kEmptyCounts = std::nullopt;
// Matcher to check that the packet number matches the second argument.
MATCHER(PacketNumberEq, "") {
@@ -3198,7 +3198,7 @@
if (!GetQuicReloadableFlag(quic_send_ect1)) {
return;
}
- absl::optional<QuicEcnCounts> ecn_counts1, ecn_counts2, ecn_counts3;
+ std::optional<QuicEcnCounts> ecn_counts1, ecn_counts2, ecn_counts3;
ecn_counts1 = {1, 0, 3};
ecn_counts2 = {0, 3, 1};
ecn_counts3 = {0, 2, 0};
@@ -3249,7 +3249,7 @@
IsEmpty(), 2, 1))
.Times(1);
EXPECT_CALL(*network_change_visitor_, OnCongestionChange()).Times(1);
- absl::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
+ std::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
ecn_counts->ect1 = QuicPacketCount(2);
ecn_counts->ce = QuicPacketCount(1);
EXPECT_EQ(PACKETS_NEWLY_ACKED,
@@ -3274,7 +3274,7 @@
IsEmpty(), 2, 1))
.Times(1);
EXPECT_CALL(*network_change_visitor_, OnCongestionChange()).Times(1);
- absl::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
+ std::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
ecn_counts->ect1 = QuicPacketCount(2);
ecn_counts->ce = QuicPacketCount(1);
EXPECT_EQ(PACKETS_NEWLY_ACKED,
@@ -3311,7 +3311,7 @@
manager_.OnAckFrameStart(QuicPacketNumber(3), QuicTime::Delta::Infinite(),
clock_.Now());
manager_.OnAckRange(QuicPacketNumber(2), QuicPacketNumber(4));
- absl::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
+ std::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
// Report 4 counts, but only 3 packets were sent.
ecn_counts->ect1 = QuicPacketCount(3);
ecn_counts->ce = QuicPacketCount(1);
@@ -3339,7 +3339,7 @@
manager_.OnAckFrameStart(QuicPacketNumber(3), QuicTime::Delta::Infinite(),
clock_.Now());
manager_.OnAckRange(QuicPacketNumber(2), QuicPacketNumber(4));
- absl::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
+ std::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
// Report the wrong codepoint.
ecn_counts->ect0 = QuicPacketCount(2);
ecn_counts->ce = QuicPacketCount(1);
@@ -3373,7 +3373,7 @@
IsEmpty(), 0, 0))
.Times(1);
EXPECT_CALL(*network_change_visitor_, OnCongestionChange()).Times(1);
- absl::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
+ std::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
// 2 ECN packets were newly acked, but only one count was reported.
ecn_counts->ect1 = QuicPacketCount(1);
ecn_counts->ce = QuicPacketCount(0);
@@ -3400,7 +3400,7 @@
IsEmpty(), 2, 1))
.Times(1);
EXPECT_CALL(*network_change_visitor_, OnCongestionChange()).Times(1);
- absl::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
+ std::optional<QuicEcnCounts> ecn_counts = QuicEcnCounts();
ecn_counts->ect1 = QuicPacketCount(2);
ecn_counts->ce = QuicPacketCount(1);
EXPECT_EQ(PACKETS_NEWLY_ACKED,
@@ -3444,7 +3444,7 @@
IsEmpty(), 0, 0))
.Times(1);
EXPECT_CALL(*network_change_visitor_, OnCongestionChange()).Times(1);
- absl::optional<QuicEcnCounts> ecn_counts = absl::nullopt;
+ std::optional<QuicEcnCounts> ecn_counts = std::nullopt;
EXPECT_EQ(PACKETS_NEWLY_ACKED,
manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(1),
ENCRYPTION_FORWARD_SECURE, ecn_counts));
diff --git a/quiche/quic/core/quic_server_id.cc b/quiche/quic/core/quic_server_id.cc
index 45849f5..4a5d8f7 100644
--- a/quiche/quic/core/quic_server_id.cc
+++ b/quiche/quic/core/quic_server_id.cc
@@ -4,6 +4,7 @@
#include "quiche/quic/core/quic_server_id.h"
+#include <optional>
#include <string>
#include <tuple>
#include <utility>
@@ -11,14 +12,13 @@
#include "absl/strings/match.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/common/platform/api/quiche_googleurl.h"
#include "quiche/common/platform/api/quiche_logging.h"
namespace quic {
// static
-absl::optional<QuicServerId> QuicServerId::ParseFromHostPortString(
+std::optional<QuicServerId> QuicServerId::ParseFromHostPortString(
absl::string_view host_port_string) {
url::Component username_component;
url::Component password_component;
@@ -34,7 +34,7 @@
if (username_component.is_valid() || password_component.is_valid() ||
!host_component.is_nonempty() || !port_component.is_nonempty()) {
QUICHE_DVLOG(1) << "QuicServerId could not be parsed: " << host_port_string;
- return absl::nullopt;
+ return std::nullopt;
}
std::string hostname(host_port_string.data() + host_component.begin,
@@ -49,7 +49,7 @@
QUICHE_DVLOG(1)
<< "Port could not be parsed while parsing QuicServerId from: "
<< host_port_string;
- return absl::nullopt;
+ return std::nullopt;
}
QUICHE_DCHECK_LE(parsed_port_number, std::numeric_limits<uint16_t>::max());
diff --git a/quiche/quic/core/quic_server_id.h b/quiche/quic/core/quic_server_id.h
index ecbf3aa..7949a9d 100644
--- a/quiche/quic/core/quic_server_id.h
+++ b/quiche/quic/core/quic_server_id.h
@@ -6,11 +6,11 @@
#define QUICHE_QUIC_CORE_QUIC_SERVER_ID_H_
#include <cstdint>
+#include <optional>
#include <string>
#include "absl/hash/hash.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/platform/api/quic_export.h"
namespace quic {
@@ -22,7 +22,7 @@
// Attempts to parse a QuicServerId from a "host:port" string. Returns nullopt
// if input could not be parsed. Requires input to contain both host and port
// and no other components of a URL authority.
- static absl::optional<QuicServerId> ParseFromHostPortString(
+ static std::optional<QuicServerId> ParseFromHostPortString(
absl::string_view host_port_string);
QuicServerId();
diff --git a/quiche/quic/core/quic_server_id_test.cc b/quiche/quic/core/quic_server_id_test.cc
index 1ca7a70..cbcadb6 100644
--- a/quiche/quic/core/quic_server_id_test.cc
+++ b/quiche/quic/core/quic_server_id_test.cc
@@ -4,9 +4,9 @@
#include "quiche/quic/core/quic_server_id.h"
+#include <optional>
#include <string>
-#include "absl/types/optional.h"
#include "quiche/quic/platform/api/quic_test.h"
namespace quic::test {
@@ -124,7 +124,7 @@
}
TEST_F(QuicServerIdTest, Parse) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString("host.test:500");
EXPECT_THAT(server_id, Optional(Property(&QuicServerId::host, "host.test")));
@@ -134,35 +134,35 @@
}
TEST_F(QuicServerIdTest, CannotParseMissingPort) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString("host.test");
- EXPECT_EQ(server_id, absl::nullopt);
+ EXPECT_EQ(server_id, std::nullopt);
}
TEST_F(QuicServerIdTest, CannotParseEmptyPort) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString("host.test:");
- EXPECT_EQ(server_id, absl::nullopt);
+ EXPECT_EQ(server_id, std::nullopt);
}
TEST_F(QuicServerIdTest, CannotParseEmptyHost) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString(":500");
- EXPECT_EQ(server_id, absl::nullopt);
+ EXPECT_EQ(server_id, std::nullopt);
}
TEST_F(QuicServerIdTest, CannotParseUserInfo) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString("userinfo@host.test:500");
- EXPECT_EQ(server_id, absl::nullopt);
+ EXPECT_EQ(server_id, std::nullopt);
}
TEST_F(QuicServerIdTest, ParseIpv6Literal) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString("[::1]:400");
EXPECT_THAT(server_id, Optional(Property(&QuicServerId::host, "[::1]")));
@@ -172,7 +172,7 @@
}
TEST_F(QuicServerIdTest, ParseUnbracketedIpv6Literal) {
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString("::1:400");
EXPECT_THAT(server_id, Optional(Property(&QuicServerId::host, "::1")));
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index 1ec3c57..ddb0914 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -187,7 +187,7 @@
void QuicSession::MaybeProcessPendingStream(PendingStream* pending) {
QUICHE_DCHECK(pending != nullptr);
QuicStreamId stream_id = pending->id();
- absl::optional<QuicResetStreamError> stop_sending_error_code =
+ std::optional<QuicResetStreamError> stop_sending_error_code =
pending->GetStopSendingErrorCode();
QuicStream* stream = ProcessPendingStream(pending);
if (stream != nullptr) {
@@ -1349,12 +1349,12 @@
.Normalized()
.host()
.address_family();
- absl::optional<QuicSocketAddress> preferred_address =
+ std::optional<QuicSocketAddress> preferred_address =
config_.GetPreferredAddressToSend(address_family);
if (preferred_address.has_value()) {
// Set connection ID and token if SPAD has received and a preferred
// address of the same address family is configured.
- absl::optional<QuicNewConnectionIdFrame> frame =
+ std::optional<QuicNewConnectionIdFrame> frame =
connection_->MaybeIssueNewConnectionIdForPreferredAddress();
if (frame.has_value()) {
config_.SetPreferredAddressConnectionIdAndTokenToSend(
@@ -1391,9 +1391,9 @@
}
}
-absl::optional<std::string> QuicSession::OnAlpsData(
- const uint8_t* /*alps_data*/, size_t /*alps_length*/) {
- return absl::nullopt;
+std::optional<std::string> QuicSession::OnAlpsData(const uint8_t* /*alps_data*/,
+ size_t /*alps_length*/) {
+ return std::nullopt;
}
void QuicSession::AdjustInitialFlowControlWindows(size_t stream_window) {
@@ -1731,7 +1731,7 @@
bool QuicSession::MaybeSendAddressToken() {
QUICHE_DCHECK(perspective_ == Perspective::IS_SERVER &&
connection()->version().HasIetfQuicFrames());
- absl::optional<CachedNetworkParameters> cached_network_params =
+ std::optional<CachedNetworkParameters> cached_network_params =
GenerateCachedNetworkParameters();
std::string address_token = GetCryptoStream()->GetAddressToken(
diff --git a/quiche/quic/core/quic_session.h b/quiche/quic/core/quic_session.h
index 71dae7b..1a20486 100644
--- a/quiche/quic/core/quic_session.h
+++ b/quiche/quic/core/quic_session.h
@@ -11,12 +11,12 @@
#include <cstdint>
#include <map>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include "absl/container/flat_hash_map.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/crypto/tls_connection.h"
#include "quiche/quic/core/frames/quic_ack_frequency_frame.h"
@@ -304,8 +304,8 @@
// Called by the TLS handshaker when ALPS data is received.
// Returns an error message if an error has occurred, or nullopt otherwise.
- virtual absl::optional<std::string> OnAlpsData(const uint8_t* alps_data,
- size_t alps_length);
+ virtual std::optional<std::string> OnAlpsData(const uint8_t* alps_data,
+ size_t alps_length);
// From HandshakerDelegateInterface
bool OnNewDecryptionKeyAvailable(EncryptionLevel level,
@@ -613,7 +613,7 @@
// Returns the encryption level to send application data.
EncryptionLevel GetEncryptionLevelToSendApplicationData() const;
- const absl::optional<std::string> user_agent_id() const {
+ const std::optional<std::string> user_agent_id() const {
return user_agent_id_;
}
@@ -846,11 +846,11 @@
// Only called at a server session. Generate a CachedNetworkParameters that
// can be sent to the client as part of the address token, based on the latest
- // bandwidth/rtt information. If return absl::nullopt, address token will not
+ // bandwidth/rtt information. If return std::nullopt, address token will not
// contain the CachedNetworkParameters.
- virtual absl::optional<CachedNetworkParameters>
+ virtual std::optional<CachedNetworkParameters>
GenerateCachedNetworkParameters() const {
- return absl::nullopt;
+ return std::nullopt;
}
// Debug helper for OnCanWrite. Check that after QuicStream::OnCanWrite(),
@@ -994,7 +994,7 @@
// Received information for a connection close.
QuicConnectionCloseFrame on_closed_frame_;
- absl::optional<ConnectionCloseSource> source_;
+ std::optional<ConnectionCloseSource> source_;
// Used for connection-level flow control.
QuicFlowController flow_controller_;
@@ -1042,7 +1042,7 @@
// negotiation was received.
ParsedQuicVersionVector client_original_supported_versions_;
- absl::optional<std::string> user_agent_id_;
+ std::optional<std::string> user_agent_id_;
// Initialized to false. Set to true when the session has been properly
// configured and is ready for general operation.
diff --git a/quiche/quic/core/quic_session_test.cc b/quiche/quic/core/quic_session_test.cc
index e7e304d..079db36 100644
--- a/quiche/quic/core/quic_session_test.cc
+++ b/quiche/quic/core/quic_session_test.cc
@@ -5,6 +5,7 @@
#include "quiche/quic/core/quic_session.h"
#include <cstdint>
+#include <optional>
#include <set>
#include <string>
#include <utility>
@@ -13,7 +14,6 @@
#include "absl/memory/memory.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/crypto_protocol.h"
#include "quiche/quic/core/crypto/null_decrypter.h"
#include "quiche/quic/core/crypto/null_encrypter.h"
diff --git a/quiche/quic/core/quic_stream.cc b/quiche/quic/core/quic_stream.cc
index f2a2645..3f8fbe0 100644
--- a/quiche/quic/core/quic_stream.cc
+++ b/quiche/quic/core/quic_stream.cc
@@ -5,11 +5,11 @@
#include "quiche/quic/core/quic_stream.h"
#include <limits>
+#include <optional>
#include <string>
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_flow_controller.h"
#include "quiche/quic/core/quic_session.h"
@@ -298,15 +298,15 @@
namespace {
-absl::optional<QuicFlowController> FlowController(QuicStreamId id,
- QuicSession* session,
- StreamType type) {
+std::optional<QuicFlowController> FlowController(QuicStreamId id,
+ QuicSession* session,
+ StreamType type) {
if (type == CRYPTO) {
// The only QuicStream with a StreamType of CRYPTO is QuicCryptoStream, when
// it is using crypto frames instead of stream frames. The QuicCryptoStream
// doesn't have any flow control in that case, so we don't create a
// QuicFlowController for it.
- return absl::nullopt;
+ return std::nullopt;
}
return QuicFlowController(
session, id,
@@ -330,7 +330,7 @@
QuicStreamSequencer sequencer, bool is_static,
StreamType type, uint64_t stream_bytes_read,
bool fin_received,
- absl::optional<QuicFlowController> flow_controller,
+ std::optional<QuicFlowController> flow_controller,
QuicFlowController* connection_flow_controller)
: sequencer_(std::move(sequencer)),
id_(id),
@@ -1414,17 +1414,17 @@
flow_controller_->UpdateReceiveWindowSize(size);
}
-absl::optional<QuicByteCount> QuicStream::GetSendWindow() const {
+std::optional<QuicByteCount> QuicStream::GetSendWindow() const {
return flow_controller_.has_value()
- ? absl::optional<QuicByteCount>(flow_controller_->SendWindowSize())
- : absl::nullopt;
+ ? std::optional<QuicByteCount>(flow_controller_->SendWindowSize())
+ : std::nullopt;
}
-absl::optional<QuicByteCount> QuicStream::GetReceiveWindow() const {
+std::optional<QuicByteCount> QuicStream::GetReceiveWindow() const {
return flow_controller_.has_value()
- ? absl::optional<QuicByteCount>(
+ ? std::optional<QuicByteCount>(
flow_controller_->receive_window_size())
- : absl::nullopt;
+ : std::nullopt;
}
void QuicStream::OnStreamCreatedFromPendingStream() {
diff --git a/quiche/quic/core/quic_stream.h b/quiche/quic/core/quic_stream.h
index 69abe7d..42f1775 100644
--- a/quiche/quic/core/quic_stream.h
+++ b/quiche/quic/core/quic_stream.h
@@ -20,10 +20,10 @@
#include <cstddef>
#include <cstdint>
#include <list>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/frames/quic_rst_stream_frame.h"
#include "quiche/quic/core/quic_error_codes.h"
@@ -86,7 +86,7 @@
void OnStopSending(QuicResetStreamError stop_sending_error_code);
// The error code received from QuicStopSendingFrame (if any).
- const absl::optional<QuicResetStreamError>& GetStopSendingErrorCode() const {
+ const std::optional<QuicResetStreamError>& GetStopSendingErrorCode() const {
return stop_sending_error_code_;
}
@@ -132,7 +132,7 @@
// Stores the buffered frames.
QuicStreamSequencer sequencer_;
// The error code received from QuicStopSendingFrame (if any).
- absl::optional<QuicResetStreamError> stop_sending_error_code_;
+ std::optional<QuicResetStreamError> stop_sending_error_code_;
};
class QUICHE_EXPORT QuicStream : public QuicStreamSequencer::StreamInterface {
@@ -475,8 +475,8 @@
virtual void OnWriteSideInDataRecvdState() {}
// Return the current flow control send window in bytes.
- absl::optional<QuicByteCount> GetSendWindow() const;
- absl::optional<QuicByteCount> GetReceiveWindow() const;
+ std::optional<QuicByteCount> GetSendWindow() const;
+ std::optional<QuicByteCount> GetReceiveWindow() const;
private:
friend class test::QuicStreamPeer;
@@ -485,7 +485,7 @@
QuicStream(QuicStreamId id, QuicSession* session,
QuicStreamSequencer sequencer, bool is_static, StreamType type,
uint64_t stream_bytes_read, bool fin_received,
- absl::optional<QuicFlowController> flow_controller,
+ std::optional<QuicFlowController> flow_controller,
QuicFlowController* connection_flow_controller);
// Calls MaybeSendBlocked on the stream's flow controller and the connection
@@ -556,7 +556,7 @@
// True if the stream has sent STOP_SENDING to the session.
bool stop_sending_sent_;
- absl::optional<QuicFlowController> flow_controller_;
+ std::optional<QuicFlowController> flow_controller_;
// The connection level flow controller. Not owned.
QuicFlowController* connection_flow_controller_;
diff --git a/quiche/quic/core/quic_stream_priority.cc b/quiche/quic/core/quic_stream_priority.cc
index 5199a43..42e4be4 100644
--- a/quiche/quic/core/quic_stream_priority.cc
+++ b/quiche/quic/core/quic_stream_priority.cc
@@ -30,7 +30,7 @@
quiche::structured_headers::Item(priority.incremental), {});
}
- absl::optional<std::string> priority_field_value =
+ std::optional<std::string> priority_field_value =
quiche::structured_headers::SerializeDictionary(dictionary);
if (!priority_field_value.has_value()) {
QUICHE_BUG(priority_field_value_serialization_failed);
@@ -40,12 +40,12 @@
return *priority_field_value;
}
-absl::optional<HttpStreamPriority> ParsePriorityFieldValue(
+std::optional<HttpStreamPriority> ParsePriorityFieldValue(
absl::string_view priority_field_value) {
- absl::optional<quiche::structured_headers::Dictionary> parsed_dictionary =
+ std::optional<quiche::structured_headers::Dictionary> parsed_dictionary =
quiche::structured_headers::ParseDictionary(priority_field_value);
if (!parsed_dictionary.has_value()) {
- return absl::nullopt;
+ return std::nullopt;
}
uint8_t urgency = HttpStreamPriority::kDefaultUrgency;
diff --git a/quiche/quic/core/quic_stream_priority.h b/quiche/quic/core/quic_stream_priority.h
index 7a4b9d0..8b1df3c 100644
--- a/quiche/quic/core/quic_stream_priority.h
+++ b/quiche/quic/core/quic_stream_priority.h
@@ -6,11 +6,11 @@
#define QUICHE_QUIC_CORE_QUIC_STREAM_PRIORITY_H_
#include <cstdint>
+#include <optional>
#include <string>
#include <tuple>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/variant.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/common/platform/api/quiche_bug_tracker.h"
@@ -134,7 +134,7 @@
// Parses the Priority Field Value field of a PRIORITY_UPDATE frame.
// Returns nullopt on failure.
-QUICHE_EXPORT absl::optional<HttpStreamPriority> ParsePriorityFieldValue(
+QUICHE_EXPORT std::optional<HttpStreamPriority> ParsePriorityFieldValue(
absl::string_view priority_field_value);
} // namespace quic
diff --git a/quiche/quic/core/quic_stream_priority_test.cc b/quiche/quic/core/quic_stream_priority_test.cc
index db5d1a9..e5d4f1c 100644
--- a/quiche/quic/core/quic_stream_priority_test.cc
+++ b/quiche/quic/core/quic_stream_priority_test.cc
@@ -91,7 +91,7 @@
TEST(ParsePriorityFieldValueTest, ParsePriorityFieldValue) {
// Default values
- absl::optional<HttpStreamPriority> result = ParsePriorityFieldValue("");
+ std::optional<HttpStreamPriority> result = ParsePriorityFieldValue("");
ASSERT_TRUE(result.has_value());
EXPECT_EQ(3, result->urgency);
EXPECT_FALSE(result->incremental);
diff --git a/quiche/quic/core/quic_stream_test.cc b/quiche/quic/core/quic_stream_test.cc
index 7afbb19..e1e607d 100644
--- a/quiche/quic/core/quic_stream_test.cc
+++ b/quiche/quic/core/quic_stream_test.cc
@@ -5,13 +5,13 @@
#include "quiche/quic/core/quic_stream.h"
#include <memory>
+#include <optional>
#include <string>
#include <utility>
#include "absl/base/macros.h"
#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/null_encrypter.h"
#include "quiche/quic/core/frames/quic_rst_stream_frame.h"
#include "quiche/quic/core/quic_connection.h"
@@ -137,7 +137,7 @@
QuicConsumedData CloseStreamOnWriteError(
QuicStreamId id, QuicByteCount /*write_length*/,
QuicStreamOffset /*offset*/, StreamSendingState /*state*/,
- TransmissionType /*type*/, absl::optional<EncryptionLevel> /*level*/) {
+ TransmissionType /*type*/, std::optional<EncryptionLevel> /*level*/) {
session_->ResetStream(id, QUIC_STREAM_CANCELLED);
return QuicConsumedData(1, false);
}
@@ -378,7 +378,7 @@
EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 1u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(absl::string_view(kData1, 2), false, nullptr);
EXPECT_TRUE(session_->HasUnackedStreamData());
@@ -396,7 +396,7 @@
EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 2u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(absl::string_view(kData1, 2), true, nullptr);
EXPECT_TRUE(session_->HasUnackedStreamData());
@@ -442,7 +442,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), kDataLen - 1, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(kData1, false, nullptr);
@@ -458,7 +458,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), kDataLen - 1, kDataLen - 1,
- NO_FIN, NOT_RETRANSMISSION, absl::nullopt);
+ NO_FIN, NOT_RETRANSMISSION, std::nullopt);
}));
EXPECT_CALL(*stream_, OnCanWriteNewData());
stream_->OnCanWrite();
@@ -468,7 +468,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 2u, 2 * kDataLen - 2,
- NO_FIN, NOT_RETRANSMISSION, absl::nullopt);
+ NO_FIN, NOT_RETRANSMISSION, std::nullopt);
}));
EXPECT_CALL(*stream_, OnCanWriteNewData());
stream_->OnCanWrite();
@@ -527,7 +527,7 @@
EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 1u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(absl::string_view(kData1, 1), false, nullptr);
EXPECT_TRUE(session_->HasUnackedStreamData());
@@ -564,7 +564,7 @@
EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 1u, 0u, FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(absl::string_view(kData1, 1), true, nullptr);
EXPECT_TRUE(fin_sent());
@@ -827,7 +827,7 @@
EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 2u, 0u, FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(absl::string_view(kData1, 2), true, nullptr);
EXPECT_TRUE(stream_->write_side_closed());
@@ -844,7 +844,7 @@
EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 2u, 0u, FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(absl::string_view(kData1, 2), true, nullptr);
EXPECT_TRUE(stream_->write_side_closed());
@@ -1130,7 +1130,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 100u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->WriteOrBufferData(data, false, nullptr);
stream_->WriteOrBufferData(data, false, nullptr);
@@ -1143,7 +1143,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 100, 100u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
// Buffered data size > threshold, do not ask upper layer for more data.
EXPECT_CALL(*stream_, OnCanWriteNewData()).Times(0);
@@ -1157,7 +1157,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this, data_to_write]() {
return session_->ConsumeData(stream_->id(), data_to_write, 200u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
// Buffered data size < threshold, ask upper layer for more data.
EXPECT_CALL(*stream_, OnCanWriteNewData()).Times(1);
@@ -1206,7 +1206,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this, data_to_write]() {
return session_->ConsumeData(stream_->id(), data_to_write, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
EXPECT_CALL(*stream_, OnCanWriteNewData()).Times(1);
@@ -1279,7 +1279,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 100u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
// There is no buffered data before, all data should be consumed.
QuicConsumedData consumed = stream_->WriteMemSlices(span1, false);
@@ -1301,7 +1301,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this, data_to_write]() {
return session_->ConsumeData(stream_->id(), data_to_write, 100u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
EXPECT_CALL(*stream_, OnCanWriteNewData()).Times(1);
stream_->OnCanWrite();
@@ -1334,7 +1334,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 5u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
// There is no buffered data before, all data should be consumed.
QuicConsumedData consumed = stream_->WriteMemSlice(std::move(slice1), false);
@@ -1474,7 +1474,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 9u, 18u, FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
stream_->OnCanWrite();
EXPECT_FALSE(stream_->HasPendingRetransmission());
@@ -1504,7 +1504,7 @@
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 9u, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
.WillOnce(Return(QuicConsumedData(0, true)));
@@ -1591,7 +1591,7 @@
EXPECT_CALL(*session_, WritevData(stream_->id(), 10, 0, NO_FIN, _, _))
.WillOnce(InvokeWithoutArgs([this]() {
return session_->ConsumeData(stream_->id(), 8, 0u, NO_FIN,
- NOT_RETRANSMISSION, absl::nullopt);
+ NOT_RETRANSMISSION, std::nullopt);
}));
EXPECT_FALSE(stream_->RetransmitStreamData(0, 18, true, PTO_RETRANSMISSION));
diff --git a/quiche/quic/core/quic_types.h b/quiche/quic/core/quic_types.h
index 727eb73..0389e74 100644
--- a/quiche/quic/core/quic_types.h
+++ b/quiche/quic/core/quic_types.h
@@ -9,13 +9,13 @@
#include <cstddef>
#include <cstdint>
#include <map>
+#include <optional>
#include <ostream>
#include <vector>
#include "absl/container/inlined_vector.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_packet_number.h"
@@ -830,13 +830,13 @@
// overrides the configurations in SSL_CTX.
struct QUICHE_EXPORT QuicSSLConfig {
// Whether TLS early data should be enabled. If not set, default to enabled.
- absl::optional<bool> early_data_enabled;
+ std::optional<bool> early_data_enabled;
// Whether TLS session tickets are supported. If not set, default to
// supported.
- absl::optional<bool> disable_ticket_support;
+ std::optional<bool> disable_ticket_support;
// If set, used to configure the SSL object with
// SSL_set_signing_algorithm_prefs.
- absl::optional<QuicSignatureAlgorithmVector> signing_algorithm_prefs;
+ std::optional<QuicSignatureAlgorithmVector> signing_algorithm_prefs;
// Client certificate mode for mTLS support. Only used at server side.
ClientCertMode client_cert_mode = ClientCertMode::kNone;
// As a client, the ECHConfigList to use with ECH. If empty, ECH is not
@@ -852,10 +852,10 @@
// configs applied before cert selection.
struct QUICHE_EXPORT QuicDelayedSSLConfig {
// Client certificate mode for mTLS support. Only used at server side.
- // absl::nullopt means do not change client certificate mode.
- absl::optional<ClientCertMode> client_cert_mode;
+ // std::nullopt means do not change client certificate mode.
+ std::optional<ClientCertMode> client_cert_mode;
// QUIC transport parameters as serialized by ProofSourceHandle.
- absl::optional<std::vector<uint8_t>> quic_transport_parameters;
+ std::optional<std::vector<uint8_t>> quic_transport_parameters;
};
// ParsedClientHello contains client hello information extracted from a fully
diff --git a/quiche/quic/core/quic_utils.h b/quiche/quic/core/quic_utils.h
index 761914e..2c39781 100644
--- a/quiche/quic/core/quic_utils.h
+++ b/quiche/quic/core/quic_utils.h
@@ -8,6 +8,7 @@
#include <cstddef>
#include <cstdint>
#include <initializer_list>
+#include <optional>
#include <string>
#include <type_traits>
@@ -15,7 +16,6 @@
#include "absl/numeric/int128.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/frames/quic_frame.h"
@@ -259,9 +259,9 @@
bool Any() const { return mask_ != 0; }
// Returns the highest bit set, or nullopt if the mask is all zeroes.
- absl::optional<Index> Max() const {
+ std::optional<Index> Max() const {
if (!Any()) {
- return absl::nullopt;
+ return std::nullopt;
}
return static_cast<Index>(NumBits() - absl::countl_zero(mask_) - 1);
}
diff --git a/quiche/quic/core/quic_write_blocked_list_test.cc b/quiche/quic/core/quic_write_blocked_list_test.cc
index ba6569e..cd60e07 100644
--- a/quiche/quic/core/quic_write_blocked_list_test.cc
+++ b/quiche/quic/core/quic_write_blocked_list_test.cc
@@ -85,7 +85,7 @@
}
private:
- absl::optional<QuicWriteBlockedList> write_blocked_list_;
+ std::optional<QuicWriteBlockedList> write_blocked_list_;
};
TEST_F(QuicWriteBlockedListTest, PriorityOrder) {
diff --git a/quiche/quic/core/stream_delegate_interface.h b/quiche/quic/core/stream_delegate_interface.h
index 5a89f82..7ee161d 100644
--- a/quiche/quic/core/stream_delegate_interface.h
+++ b/quiche/quic/core/stream_delegate_interface.h
@@ -6,8 +6,8 @@
#define QUICHE_QUIC_CORE_STREAM_DELEGATE_INTERFACE_H_
#include <cstddef>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_stream_priority.h"
#include "quiche/quic/core/quic_types.h"
diff --git a/quiche/quic/core/tls_chlo_extractor.h b/quiche/quic/core/tls_chlo_extractor.h
index 324365e..c8d7810 100644
--- a/quiche/quic/core/tls_chlo_extractor.h
+++ b/quiche/quic/core/tls_chlo_extractor.h
@@ -71,7 +71,7 @@
}
// Returns the TLS alert that caused the unrecoverable error, if any.
- absl::optional<uint8_t> tls_alert() const {
+ std::optional<uint8_t> tls_alert() const {
QUICHE_DCHECK(!tls_alert_.has_value() ||
state_ == State::kUnrecoverableFailure);
return tls_alert_;
@@ -117,7 +117,7 @@
}
bool OnAckFrameEnd(
QuicPacketNumber /*start*/,
- const absl::optional<QuicEcnCounts>& /*ecn_counts*/) override {
+ const std::optional<QuicEcnCounts>& /*ecn_counts*/) override {
return true;
}
bool OnStopWaitingFrame(const QuicStopWaitingFrame& /*frame*/) override {
@@ -271,7 +271,7 @@
bool early_data_attempted_ = false;
// If set, contains the TLS alert that caused an unrecoverable error, which is
// an AlertDescription value defined in go/rfc/8446#appendix-B.2.
- absl::optional<uint8_t> tls_alert_;
+ std::optional<uint8_t> tls_alert_;
// Exact TLS message bytes.
std::vector<uint8_t> client_hello_bytes_;
};
diff --git a/quiche/quic/core/tls_chlo_extractor_test.cc b/quiche/quic/core/tls_chlo_extractor_test.cc
index f08c794..4874689 100644
--- a/quiche/quic/core/tls_chlo_extractor_test.cc
+++ b/quiche/quic/core/tls_chlo_extractor_test.cc
@@ -105,7 +105,7 @@
QuicSocketAddress(TestPeerIPAddress(), kTestPort),
QuicSocketAddress(TestPeerIPAddress(), kTestPort), *packet);
std::string detailed_error;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
const QuicErrorCode error = QuicFramer::ParsePublicHeaderDispatcher(
*packet, /*expected_destination_connection_id_length=*/0,
&packet_info.form, &packet_info.long_packet_type,
@@ -289,7 +289,7 @@
QuicSocketAddress(TestPeerIPAddress(), kTestPort),
QuicSocketAddress(TestPeerIPAddress(), kTestPort), *packets_[0]);
std::string detailed_error;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
const QuicErrorCode error = QuicFramer::ParsePublicHeaderDispatcher(
*packets_[0], /*expected_destination_connection_id_length=*/0,
&packet_info.form, &packet_info.long_packet_type,
diff --git a/quiche/quic/core/tls_client_handshaker_test.cc b/quiche/quic/core/tls_client_handshaker_test.cc
index 414ecf2..8b2ea68 100644
--- a/quiche/quic/core/tls_client_handshaker_test.cc
+++ b/quiche/quic/core/tls_client_handshaker_test.cc
@@ -275,7 +275,7 @@
QuicServerId server_id_;
CryptoHandshakeMessage message_;
std::unique_ptr<QuicCryptoClientConfig> crypto_config_;
- absl::optional<QuicSSLConfig> ssl_config_;
+ std::optional<QuicSSLConfig> ssl_config_;
// Server state.
std::unique_ptr<QuicCryptoServerConfig> server_crypto_config_;
diff --git a/quiche/quic/core/tls_handshaker.h b/quiche/quic/core/tls_handshaker.h
index e2ee604..c14e12e 100644
--- a/quiche/quic/core/tls_handshaker.h
+++ b/quiche/quic/core/tls_handshaker.h
@@ -225,7 +225,7 @@
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-6
uint8_t desc;
};
- absl::optional<TlsAlert> last_tls_alert_;
+ std::optional<TlsAlert> last_tls_alert_;
};
} // namespace quic
diff --git a/quiche/quic/core/tls_server_handshaker.cc b/quiche/quic/core/tls_server_handshaker.cc
index 5a8cb92..8173a5a 100644
--- a/quiche/quic/core/tls_server_handshaker.cc
+++ b/quiche/quic/core/tls_server_handshaker.cc
@@ -65,9 +65,9 @@
const QuicConnectionId& /*original_connection_id*/,
absl::string_view /*ssl_capabilities*/, const std::string& hostname,
absl::string_view /*client_hello*/, const std::string& /*alpn*/,
- absl::optional<std::string> /*alps*/,
+ std::optional<std::string> /*alps*/,
const std::vector<uint8_t>& /*quic_transport_params*/,
- const absl::optional<std::vector<uint8_t>>& /*early_data_context*/,
+ const std::optional<std::vector<uint8_t>>& /*early_data_context*/,
const QuicSSLConfig& /*ssl_config*/) {
if (!handshaker_ || !proof_source_) {
QUIC_BUG(quic_bug_10341_1)
@@ -145,7 +145,7 @@
const bool is_async =
(handshaker->expected_ssl_error() == SSL_ERROR_PENDING_TICKET);
- absl::optional<QuicConnectionContextSwitcher> context_switcher;
+ std::optional<QuicConnectionContextSwitcher> context_switcher;
if (is_async) {
context_switcher.emplace(handshaker->connection_context());
@@ -704,7 +704,7 @@
QUIC_DVLOG(1) << "OnComputeSignatureDone. ok:" << ok
<< ", is_sync:" << is_sync
<< ", len(signature):" << signature.size();
- absl::optional<QuicConnectionContextSwitcher> context_switcher;
+ std::optional<QuicConnectionContextSwitcher> context_switcher;
if (!is_sync) {
context_switcher.emplace(connection_context());
@@ -986,7 +986,7 @@
<< ", len(handshake_hints):" << handshake_hints.size()
<< ", len(ticket_encryption_key):"
<< ticket_encryption_key.size();
- absl::optional<QuicConnectionContextSwitcher> context_switcher;
+ std::optional<QuicConnectionContextSwitcher> context_switcher;
if (!is_sync) {
context_switcher.emplace(connection_context());
}
diff --git a/quiche/quic/core/tls_server_handshaker.h b/quiche/quic/core/tls_server_handshaker.h
index 4506369..682c9f8 100644
--- a/quiche/quic/core/tls_server_handshaker.h
+++ b/quiche/quic/core/tls_server_handshaker.h
@@ -163,7 +163,7 @@
TlsConnection::Delegate* ConnectionDelegate() override { return this; }
// The status of cert selection. nullopt means it hasn't started.
- const absl::optional<QuicAsyncStatus>& select_cert_status() const {
+ const std::optional<QuicAsyncStatus>& select_cert_status() const {
return select_cert_status_;
}
// Whether |cert_verify_sig_| contains a valid signature.
@@ -230,9 +230,9 @@
const QuicConnectionId& original_connection_id,
absl::string_view ssl_capabilities, const std::string& hostname,
absl::string_view client_hello, const std::string& alpn,
- absl::optional<std::string> alps,
+ std::optional<std::string> alps,
const std::vector<uint8_t>& quic_transport_params,
- const absl::optional<std::vector<uint8_t>>& early_data_context,
+ const std::optional<std::vector<uint8_t>>& early_data_context,
const QuicSSLConfig& ssl_config) override;
// Delegates to proof_source_->ComputeTlsSignature.
@@ -292,9 +292,9 @@
bool success = false;
// Empty vector if QUIC transport params are not set successfully.
std::vector<uint8_t> quic_transport_params;
- // absl::nullopt if there is no application state to begin with.
+ // std::nullopt if there is no application state to begin with.
// Empty vector if application state is not set successfully.
- absl::optional<std::vector<uint8_t>> early_data_context;
+ std::optional<std::vector<uint8_t>> early_data_context;
};
SetTransportParametersResult SetTransportParameters();
@@ -307,7 +307,7 @@
struct QUICHE_EXPORT SetApplicationSettingsResult {
bool success = false;
- // TODO(b/239676439): Change type to absl::optional<std::string> and make
+ // TODO(b/239676439): Change type to std::optional<std::string> and make
// sure SetApplicationSettings() returns nullopt if no ALPS data.
std::string alps_buffer;
};
@@ -346,13 +346,13 @@
bool ignore_ticket_open_ = false;
// nullopt means select cert hasn't started.
- absl::optional<QuicAsyncStatus> select_cert_status_;
+ std::optional<QuicAsyncStatus> select_cert_status_;
std::string cert_verify_sig_;
std::unique_ptr<ProofSource::Details> proof_source_details_;
// Count the duration of the current async operation, if any.
- absl::optional<QuicTimeAccumulator> async_op_timer_;
+ std::optional<QuicTimeAccumulator> async_op_timer_;
std::unique_ptr<ApplicationState> application_state_;
diff --git a/quiche/quic/load_balancer/load_balancer_config.cc b/quiche/quic/load_balancer/load_balancer_config.cc
index 5469a1a..6f25c90 100644
--- a/quiche/quic/load_balancer/load_balancer_config.cc
+++ b/quiche/quic/load_balancer/load_balancer_config.cc
@@ -6,9 +6,9 @@
#include <cstdint>
#include <cstring>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "openssl/aes.h"
#include "quiche/quic/core/quic_connection_id.h"
@@ -37,19 +37,19 @@
}
// Initialize the key in the constructor
-absl::optional<AES_KEY> BuildKey(absl::string_view key, bool encrypt) {
+std::optional<AES_KEY> BuildKey(absl::string_view key, bool encrypt) {
if (key.empty()) {
- return absl::optional<AES_KEY>();
+ return std::optional<AES_KEY>();
}
AES_KEY raw_key;
if (encrypt) {
if (AES_set_encrypt_key(reinterpret_cast<const uint8_t *>(key.data()),
key.size() * 8, &raw_key) < 0) {
- return absl::optional<AES_KEY>();
+ return std::optional<AES_KEY>();
}
} else if (AES_set_decrypt_key(reinterpret_cast<const uint8_t *>(key.data()),
key.size() * 8, &raw_key) < 0) {
- return absl::optional<AES_KEY>();
+ return std::optional<AES_KEY>();
}
return raw_key;
}
@@ -116,17 +116,17 @@
} // namespace
-absl::optional<LoadBalancerConfig> LoadBalancerConfig::Create(
+std::optional<LoadBalancerConfig> LoadBalancerConfig::Create(
const uint8_t config_id, const uint8_t server_id_len,
const uint8_t nonce_len, const absl::string_view key) {
// Check for valid parameters.
if (key.size() != kLoadBalancerKeyLen) {
QUIC_BUG(quic_bug_433862549_02)
<< "Invalid LoadBalancerConfig Key Length: " << key.size();
- return absl::optional<LoadBalancerConfig>();
+ return std::optional<LoadBalancerConfig>();
}
if (!CommonValidation(config_id, server_id_len, nonce_len)) {
- return absl::optional<LoadBalancerConfig>();
+ return std::optional<LoadBalancerConfig>();
}
auto new_config =
LoadBalancerConfig(config_id, server_id_len, nonce_len, key);
@@ -134,18 +134,18 @@
// Something went wrong in assigning the key!
QUIC_BUG(quic_bug_433862549_03) << "Something went wrong in initializing "
"the load balancing key.";
- return absl::optional<LoadBalancerConfig>();
+ return std::optional<LoadBalancerConfig>();
}
return new_config;
}
// Creates an unencrypted config.
-absl::optional<LoadBalancerConfig> LoadBalancerConfig::CreateUnencrypted(
+std::optional<LoadBalancerConfig> LoadBalancerConfig::CreateUnencrypted(
const uint8_t config_id, const uint8_t server_id_len,
const uint8_t nonce_len) {
return CommonValidation(config_id, server_id_len, nonce_len)
? LoadBalancerConfig(config_id, server_id_len, nonce_len, "")
- : absl::optional<LoadBalancerConfig>();
+ : std::optional<LoadBalancerConfig>();
}
bool LoadBalancerConfig::EncryptionPass(absl::Span<uint8_t> target,
@@ -201,6 +201,6 @@
key_(BuildKey(key, /* encrypt = */ true)),
block_decrypt_key_((server_id_len + nonce_len == kLoadBalancerBlockSize)
? BuildKey(key, /* encrypt = */ false)
- : absl::optional<AES_KEY>()) {}
+ : std::optional<AES_KEY>()) {}
} // namespace quic
diff --git a/quiche/quic/load_balancer/load_balancer_config.h b/quiche/quic/load_balancer/load_balancer_config.h
index 7f63edd..f3ca75c 100644
--- a/quiche/quic/load_balancer/load_balancer_config.h
+++ b/quiche/quic/load_balancer/load_balancer_config.h
@@ -6,9 +6,9 @@
#define QUICHE_QUIC_LOAD_BALANCER_LOAD_BALANCER_CONFIG_H_
#include <cstdint>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "openssl/aes.h"
#include "quiche/quic/platform/api/quic_export.h"
@@ -38,7 +38,7 @@
class QUIC_EXPORT_PRIVATE LoadBalancerConfig {
public:
// This factory function initializes an encrypted LoadBalancerConfig and
- // returns it in absl::optional, which is empty if the config is invalid.
+ // returns it in std::optional, which is empty if the config is invalid.
// config_id: The first two bits of the Connection Id. Must be no larger than
// 2.
// server_id_len: Expected length of the server ids associated with this
@@ -46,13 +46,13 @@
// nonce_len: Length of the nonce. Must be at least 4 and no larger than 16.
// Further the server_id_len + nonce_len must be no larger than 19.
// key: The encryption key must be 16B long.
- static absl::optional<LoadBalancerConfig> Create(uint8_t config_id,
- uint8_t server_id_len,
- uint8_t nonce_len,
- absl::string_view key);
+ static std::optional<LoadBalancerConfig> Create(uint8_t config_id,
+ uint8_t server_id_len,
+ uint8_t nonce_len,
+ absl::string_view key);
// Creates an unencrypted config.
- static absl::optional<LoadBalancerConfig> CreateUnencrypted(
+ static std::optional<LoadBalancerConfig> CreateUnencrypted(
uint8_t config_id, uint8_t server_id_len, uint8_t nonce_len);
// Handles one pass of 4-pass encryption. Encoder and decoder use of this
@@ -91,12 +91,12 @@
// All Connection ID encryption and decryption uses the AES_encrypt function
// at root, so there is a single key for all of it. This is empty if the
// config is not encrypted.
- absl::optional<AES_KEY> key_;
+ std::optional<AES_KEY> key_;
// The one exception is that when total_len == 16, connection ID decryption
// uses AES_decrypt. The bytes that comprise the key are the same, but
// AES_decrypt requires an AES_KEY that is initialized differently. In all
// other cases, block_decrypt_key_ is empty.
- absl::optional<AES_KEY> block_decrypt_key_;
+ std::optional<AES_KEY> block_decrypt_key_;
};
} // namespace quic
diff --git a/quiche/quic/load_balancer/load_balancer_decoder.cc b/quiche/quic/load_balancer/load_balancer_decoder.cc
index a475ada..b1748d6 100644
--- a/quiche/quic/load_balancer/load_balancer_decoder.cc
+++ b/quiche/quic/load_balancer/load_balancer_decoder.cc
@@ -6,8 +6,8 @@
#include <cstdint>
#include <cstring>
+#include <optional>
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/load_balancer/load_balancer_config.h"
@@ -36,19 +36,19 @@
// This is the core logic to extract a server ID given a valid config and
// connection ID of sufficient length.
-absl::optional<LoadBalancerServerId> LoadBalancerDecoder::GetServerId(
+std::optional<LoadBalancerServerId> LoadBalancerDecoder::GetServerId(
const QuicConnectionId& connection_id) const {
- absl::optional<uint8_t> config_id = GetConfigId(connection_id);
+ std::optional<uint8_t> config_id = GetConfigId(connection_id);
if (!config_id.has_value()) {
- return absl::optional<LoadBalancerServerId>();
+ return std::optional<LoadBalancerServerId>();
}
- absl::optional<LoadBalancerConfig> config = config_[*config_id];
+ std::optional<LoadBalancerConfig> config = config_[*config_id];
if (!config.has_value()) {
- return absl::optional<LoadBalancerServerId>();
+ return std::optional<LoadBalancerServerId>();
}
if (connection_id.length() < config->total_len()) {
// Connection ID wasn't long enough
- return absl::optional<LoadBalancerServerId>();
+ return std::optional<LoadBalancerServerId>();
}
// The first byte is complete. Finish the rest.
const uint8_t* data =
@@ -60,7 +60,7 @@
uint8_t result[kQuicMaxConnectionIdWithLengthPrefixLength];
if (config->plaintext_len() == kLoadBalancerKeyLen) { // single pass
if (!config->BlockDecrypt(data, result)) {
- return absl::optional<LoadBalancerServerId>();
+ return std::optional<LoadBalancerServerId>();
}
} else {
// Do 3 or 4 passes. Only 3 are necessary if the server_id is short enough
@@ -70,7 +70,7 @@
uint8_t end = (config->server_id_len() > config->nonce_len()) ? 1 : 2;
for (uint8_t i = kNumLoadBalancerCryptoPasses; i >= end; i--) {
if (!config->EncryptionPass(absl::Span<uint8_t>(result), i)) {
- return absl::optional<LoadBalancerServerId>();
+ return std::optional<LoadBalancerServerId>();
}
}
}
@@ -78,21 +78,21 @@
absl::Span<const uint8_t>(result, config->server_id_len()));
}
-absl::optional<uint8_t> LoadBalancerDecoder::GetConfigId(
+std::optional<uint8_t> LoadBalancerDecoder::GetConfigId(
const QuicConnectionId& connection_id) {
if (connection_id.IsEmpty()) {
- return absl::optional<uint8_t>();
+ return std::optional<uint8_t>();
}
return GetConfigId(*reinterpret_cast<const uint8_t*>(connection_id.data()));
}
-absl::optional<uint8_t> LoadBalancerDecoder::GetConfigId(
+std::optional<uint8_t> LoadBalancerDecoder::GetConfigId(
const uint8_t connection_id_first_byte) {
uint8_t codepoint = (connection_id_first_byte >> kConnectionIdLengthBits);
if (codepoint < kNumLoadBalancerConfigs) {
return codepoint;
}
- return absl::optional<uint8_t>();
+ return std::optional<uint8_t>();
}
} // namespace quic
diff --git a/quiche/quic/load_balancer/load_balancer_decoder.h b/quiche/quic/load_balancer/load_balancer_decoder.h
index f73f3a5..11852a3 100644
--- a/quiche/quic/load_balancer/load_balancer_decoder.h
+++ b/quiche/quic/load_balancer/load_balancer_decoder.h
@@ -6,8 +6,8 @@
#define QUICHE_QUIC_LOAD_BALANCER_LOAD_BALANCER_DECODER_H_
#include <cstdint>
+#include <optional>
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/load_balancer/load_balancer_config.h"
#include "quiche/quic/load_balancer/load_balancer_server_id.h"
@@ -40,22 +40,22 @@
// codepoint, |connection_id| is too short, or there's a decrypt error,
// returns empty. Will accept |connection_id| that is longer than necessary
// without error.
- absl::optional<LoadBalancerServerId> GetServerId(
+ std::optional<LoadBalancerServerId> GetServerId(
const QuicConnectionId& connection_id) const;
// Returns the config ID stored in the first two bits of |connection_id|, or
// empty if |connection_id| is empty, or the first two bits of the first byte
// of |connection_id| are 0b11.
- static absl::optional<uint8_t> GetConfigId(
+ static std::optional<uint8_t> GetConfigId(
const QuicConnectionId& connection_id);
// Returns the config ID stored in the first two bits of
// |connection_id_first_byte|, or empty if the first two bits are 0b11.
- static absl::optional<uint8_t> GetConfigId(uint8_t connection_id_first_byte);
+ static std::optional<uint8_t> GetConfigId(uint8_t connection_id_first_byte);
private:
// Decoders can support up to 3 configs at once.
- absl::optional<LoadBalancerConfig> config_[kNumLoadBalancerConfigs];
+ std::optional<LoadBalancerConfig> config_[kNumLoadBalancerConfigs];
};
} // namespace quic
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.cc b/quiche/quic/load_balancer/load_balancer_encoder.cc
index 2d3f15b..e956df2 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder.cc
@@ -5,9 +5,9 @@
#include "quiche/quic/load_balancer/load_balancer_encoder.h"
#include <cstdint>
+#include <optional>
#include "absl/numeric/int128.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_data_writer.h"
@@ -49,7 +49,7 @@
} // namespace
-absl::optional<LoadBalancerEncoder> LoadBalancerEncoder::Create(
+std::optional<LoadBalancerEncoder> LoadBalancerEncoder::Create(
QuicRandom &random, LoadBalancerEncoderVisitorInterface *const visitor,
const bool len_self_encoded, const uint8_t unroutable_connection_id_len) {
if (unroutable_connection_id_len == 0 ||
@@ -58,7 +58,7 @@
QUIC_BUG(quic_bug_435375038_01)
<< "Invalid unroutable_connection_id_len = "
<< static_cast<int>(unroutable_connection_id_len);
- return absl::optional<LoadBalancerEncoder>();
+ return std::optional<LoadBalancerEncoder>();
}
return LoadBalancerEncoder(random, visitor, len_self_encoded,
unroutable_connection_id_len);
@@ -170,14 +170,14 @@
return id;
}
-absl::optional<QuicConnectionId> LoadBalancerEncoder::GenerateNextConnectionId(
+std::optional<QuicConnectionId> LoadBalancerEncoder::GenerateNextConnectionId(
[[maybe_unused]] const QuicConnectionId &original) {
// Do not allow new connection IDs if linkable.
- return (IsEncoding() && !IsEncrypted()) ? absl::optional<QuicConnectionId>()
+ return (IsEncoding() && !IsEncrypted()) ? std::optional<QuicConnectionId>()
: GenerateConnectionId();
}
-absl::optional<QuicConnectionId> LoadBalancerEncoder::MaybeReplaceConnectionId(
+std::optional<QuicConnectionId> LoadBalancerEncoder::MaybeReplaceConnectionId(
const QuicConnectionId &original, const ParsedQuicVersion &version) {
// Pre-IETF versions of QUIC can respond poorly to new connection IDs issued
// during the handshake.
@@ -185,7 +185,7 @@
? config_->total_len()
: connection_id_lengths_[kNumLoadBalancerConfigs];
return (!version.HasIetfQuicFrames() && original.length() == needed_length)
- ? absl::optional<QuicConnectionId>()
+ ? std::optional<QuicConnectionId>()
: GenerateConnectionId();
}
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.h b/quiche/quic/load_balancer/load_balancer_encoder.h
index 2d70a7c..2c3dd7e 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.h
+++ b/quiche/quic/load_balancer/load_balancer_encoder.h
@@ -7,9 +7,9 @@
#include <algorithm>
#include <cstdint>
+#include <optional>
#include "absl/numeric/int128.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/connection_id_generator.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/quic_connection_id.h"
@@ -89,7 +89,7 @@
// random. |unroutable_connection_id_length| specifies the length of
// connection IDs to be generated when there is no active config. It must not
// be 0 and must not be larger than the RFC9000 maximum of 20.
- static absl::optional<LoadBalancerEncoder> Create(
+ static std::optional<LoadBalancerEncoder> Create(
QuicRandom& random, LoadBalancerEncoderVisitorInterface* visitor,
bool len_self_encoded,
uint8_t unroutable_connection_id_len = kLoadBalancerUnroutableLen);
@@ -126,9 +126,9 @@
QuicConnectionId GenerateConnectionId();
// Functions from ConnectionIdGeneratorInterface
- absl::optional<QuicConnectionId> GenerateNextConnectionId(
+ std::optional<QuicConnectionId> GenerateNextConnectionId(
const QuicConnectionId& original) override;
- absl::optional<QuicConnectionId> MaybeReplaceConnectionId(
+ std::optional<QuicConnectionId> MaybeReplaceConnectionId(
const QuicConnectionId& original,
const ParsedQuicVersion& version) override;
uint8_t ConnectionIdLength(uint8_t first_byte) const override;
@@ -154,9 +154,9 @@
const bool len_self_encoded_;
LoadBalancerEncoderVisitorInterface* const visitor_;
- absl::optional<LoadBalancerConfig> config_;
+ std::optional<LoadBalancerConfig> config_;
absl::uint128 seed_, num_nonces_left_ = 0;
- absl::optional<LoadBalancerServerId> server_id_;
+ std::optional<LoadBalancerServerId> server_id_;
uint8_t connection_id_lengths_[kNumLoadBalancerConfigs + 1];
};
diff --git a/quiche/quic/load_balancer/load_balancer_encoder_test.cc b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
index 5566df6..929832b 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder_test.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
@@ -7,11 +7,11 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
+#include <optional>
#include <queue>
#include "absl/numeric/int128.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/quic_connection_id.h"
@@ -65,7 +65,7 @@
private:
uint32_t num_adds_ = 0, num_deletes_ = 0;
- absl::optional<uint8_t> current_config_id_ = absl::optional<uint8_t>();
+ std::optional<uint8_t> current_config_id_ = std::optional<uint8_t>();
};
// Allows the caller to specify the exact results in 64-bit chunks.
@@ -374,7 +374,7 @@
ASSERT_TRUE(encoder.has_value());
EXPECT_EQ(encoder->MaybeReplaceConnectionId(TestConnectionId(1),
ParsedQuicVersion::Q050()),
- absl::nullopt);
+ std::nullopt);
}
TEST_F(LoadBalancerEncoderTest, MaybeReplaceConnectionIdReturnsChange) {
@@ -395,7 +395,7 @@
auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true);
EXPECT_TRUE(encoder->UpdateConfig(*config, MakeServerId(kServerId, 3)));
EXPECT_EQ(encoder->GenerateNextConnectionId(TestConnectionId(1)),
- absl::nullopt);
+ std::nullopt);
}
TEST_F(LoadBalancerEncoderTest, GenerateNextConnectionIdReturnsChange) {
diff --git a/quiche/quic/load_balancer/load_balancer_server_id.cc b/quiche/quic/load_balancer/load_balancer_server_id.cc
index 7b91b7f..c3cd326 100644
--- a/quiche/quic/load_balancer/load_balancer_server_id.cc
+++ b/quiche/quic/load_balancer/load_balancer_server_id.cc
@@ -7,11 +7,11 @@
#include <array>
#include <cstdint>
#include <cstring>
+#include <optional>
#include <string>
#include "absl/strings/escaping.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
@@ -29,13 +29,13 @@
} // namespace
-absl::optional<LoadBalancerServerId> LoadBalancerServerId::Create(
+std::optional<LoadBalancerServerId> LoadBalancerServerId::Create(
const absl::Span<const uint8_t> data) {
if (data.length() == 0 || data.length() > kLoadBalancerMaxServerIdLen) {
QUIC_BUG(quic_bug_433312504_01)
<< "Attempted to create LoadBalancerServerId with length "
<< data.length();
- return absl::optional<LoadBalancerServerId>();
+ return std::optional<LoadBalancerServerId>();
}
return LoadBalancerServerId(data);
}
diff --git a/quiche/quic/load_balancer/load_balancer_server_id.h b/quiche/quic/load_balancer/load_balancer_server_id.h
index fdb4604..1a42f9c 100644
--- a/quiche/quic/load_balancer/load_balancer_server_id.h
+++ b/quiche/quic/load_balancer/load_balancer_server_id.h
@@ -7,10 +7,10 @@
#include <array>
#include <cstdint>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/platform/api/quic_export.h"
@@ -29,11 +29,11 @@
class QUIC_EXPORT_PRIVATE LoadBalancerServerId {
public:
// Copies all the bytes from |data| into a new LoadBalancerServerId.
- static absl::optional<LoadBalancerServerId> Create(
+ static std::optional<LoadBalancerServerId> Create(
absl::Span<const uint8_t> data);
// For callers with a string_view at hand.
- static absl::optional<LoadBalancerServerId> Create(absl::string_view data) {
+ static std::optional<LoadBalancerServerId> Create(absl::string_view data) {
return Create(absl::MakeSpan(reinterpret_cast<const uint8_t*>(data.data()),
data.length()));
}
diff --git a/quiche/quic/load_balancer/load_balancer_server_id_map.h b/quiche/quic/load_balancer/load_balancer_server_id_map.h
index 1b108fc..6110775 100644
--- a/quiche/quic/load_balancer/load_balancer_server_id_map.h
+++ b/quiche/quic/load_balancer/load_balancer_server_id_map.h
@@ -7,9 +7,9 @@
#include <cstdint>
#include <memory>
+#include <optional>
#include "absl/container/flat_hash_map.h"
-#include "absl/types/optional.h"
#include "quiche/quic/load_balancer/load_balancer_server_id.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
@@ -28,7 +28,7 @@
// Returns the entry associated with |server_id|, if present. For small |T|,
// use Lookup. For large |T|, use LookupNoCopy.
- absl::optional<const T> Lookup(LoadBalancerServerId server_id) const;
+ std::optional<const T> Lookup(LoadBalancerServerId server_id) const;
const T* LookupNoCopy(LoadBalancerServerId server_id) const;
// Updates the table so that |value| is associated with |server_id|. Sets
@@ -64,17 +64,16 @@
}
template <typename T>
-absl::optional<const T> LoadBalancerServerIdMap<T>::Lookup(
+std::optional<const T> LoadBalancerServerIdMap<T>::Lookup(
const LoadBalancerServerId server_id) const {
if (server_id.length() != server_id_len_) {
QUIC_BUG(quic_bug_434893339_02)
<< "Lookup with a " << static_cast<int>(server_id.length())
<< " byte server ID, map requires " << static_cast<int>(server_id_len_);
- return absl::optional<T>();
+ return std::optional<T>();
}
auto it = server_id_table_.find(server_id);
- return (it != server_id_table_.end()) ? it->second
- : absl::optional<const T>();
+ return (it != server_id_table_.end()) ? it->second : std::optional<const T>();
}
template <typename T>
diff --git a/quiche/quic/load_balancer/load_balancer_server_id_map_test.cc b/quiche/quic/load_balancer/load_balancer_server_id_map_test.cc
index 6fe680f..0b78ab5 100644
--- a/quiche/quic/load_balancer/load_balancer_server_id_map_test.cc
+++ b/quiche/quic/load_balancer/load_balancer_server_id_map_test.cc
@@ -5,8 +5,8 @@
#include "quiche/quic/load_balancer/load_balancer_server_id_map.h"
#include <cstdint>
+#include <optional>
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/load_balancer/load_balancer_server_id.h"
#include "quiche/quic/platform/api/quic_expect_bug.h"
@@ -58,7 +58,7 @@
auto pool = LoadBalancerServerIdMap<int>::Create(4);
EXPECT_NE(pool, nullptr);
EXPECT_EQ(pool->LookupNoCopy(valid_server_id_), nullptr);
- absl::optional<int> result = pool->Lookup(valid_server_id_);
+ std::optional<int> result = pool->Lookup(valid_server_id_);
EXPECT_FALSE(result.has_value());
}
@@ -70,7 +70,7 @@
EXPECT_TRUE(other_server_id.has_value());
pool->AddOrReplace(valid_server_id_, record1);
pool->AddOrReplace(*other_server_id, record2);
- absl::optional<int> result = pool->Lookup(valid_server_id_);
+ std::optional<int> result = pool->Lookup(valid_server_id_);
EXPECT_TRUE(result.has_value());
EXPECT_EQ(*result, record1);
auto result_ptr = pool->LookupNoCopy(valid_server_id_);
diff --git a/quiche/quic/masque/masque_client_tools.cc b/quiche/quic/masque/masque_client_tools.cc
index 8410529..318cb78 100644
--- a/quiche/quic/masque/masque_client_tools.cc
+++ b/quiche/quic/masque/masque_client_tools.cc
@@ -4,7 +4,8 @@
#include "quiche/quic/masque/masque_client_tools.h"
-#include "absl/types/optional.h"
+#include <optional>
+
#include "quiche/quic/masque/masque_encapsulated_client.h"
#include "quiche/quic/masque/masque_utils.h"
#include "quiche/quic/platform/api/quic_default_proof_providers.h"
@@ -37,7 +38,7 @@
}
private:
- absl::optional<quiche::QuicheIpAddress> fake_address_;
+ std::optional<quiche::QuicheIpAddress> fake_address_;
MasqueClientSession* masque_client_session_ = nullptr;
};
diff --git a/quiche/quic/masque/masque_encapsulated_client.cc b/quiche/quic/masque/masque_encapsulated_client.cc
index f24143e..6afdb0e 100644
--- a/quiche/quic/masque/masque_encapsulated_client.cc
+++ b/quiche/quic/masque/masque_encapsulated_client.cc
@@ -187,8 +187,8 @@
void SetWritable() override {}
- absl::optional<int> MessageTooBigErrorCode() const override {
- return absl::nullopt;
+ std::optional<int> MessageTooBigErrorCode() const override {
+ return std::nullopt;
}
QuicByteCount GetMaxPacketSize(
diff --git a/quiche/quic/masque/masque_server_session.cc b/quiche/quic/masque/masque_server_session.cc
index 2cd15df..4e7fcdf 100644
--- a/quiche/quic/masque/masque_server_session.cc
+++ b/quiche/quic/masque/masque_server_session.cc
@@ -13,13 +13,13 @@
#include <cstddef>
#include <cstdint>
#include <limits>
+#include <optional>
#include "absl/cleanup/cleanup.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/spdy_utils.h"
#include "quiche/quic/core/io/quic_event_loop.h"
#include "quiche/quic/core/quic_data_reader.h"
@@ -282,12 +282,12 @@
QUIC_DLOG(ERROR) << "MASQUE request with bad path \"" << path << "\"";
return CreateBackendErrorResponse("400", "Bad path");
}
- absl::optional<std::string> host = quiche::AsciiUrlDecode(path_split[4]);
+ std::optional<std::string> host = quiche::AsciiUrlDecode(path_split[4]);
if (!host.has_value()) {
QUIC_DLOG(ERROR) << "Failed to decode host \"" << path_split[4] << "\"";
return CreateBackendErrorResponse("500", "Failed to decode host");
}
- absl::optional<std::string> port = quiche::AsciiUrlDecode(path_split[5]);
+ std::optional<std::string> port = quiche::AsciiUrlDecode(path_split[5]);
if (!port.has_value()) {
QUIC_DLOG(ERROR) << "Failed to decode port \"" << path_split[5] << "\"";
return CreateBackendErrorResponse("500", "Failed to decode port");
diff --git a/quiche/quic/moqt/moqt_framer.cc b/quiche/quic/moqt/moqt_framer.cc
index 1e00c85..4111d78 100644
--- a/quiche/quic/moqt/moqt_framer.cc
+++ b/quiche/quic/moqt/moqt_framer.cc
@@ -6,9 +6,9 @@
#include <cstddef>
#include <cstdint>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_data_writer.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/core/quic_types.h"
@@ -37,7 +37,7 @@
inline size_t ParameterLen(const uint64_t type, const uint64_t value_len) {
return NeededVarIntLen(type) + NeededVarIntLen(value_len) + value_len;
}
-inline size_t LocationLength(const absl::optional<MoqtSubscribeLocation> loc) {
+inline size_t LocationLength(const std::optional<MoqtSubscribeLocation> loc) {
if (!loc.has_value()) {
return NeededVarIntLen(MoqtSubscribeLocationMode::kNone);
}
@@ -79,7 +79,7 @@
}
inline bool WriteLocation(quic::QuicDataWriter& writer,
- absl::optional<MoqtSubscribeLocation> loc) {
+ std::optional<MoqtSubscribeLocation> loc) {
if (!loc.has_value()) {
return writer.WriteVarInt62(
static_cast<uint64_t>(MoqtSubscribeLocationMode::kNone));
diff --git a/quiche/quic/moqt/moqt_framer.h b/quiche/quic/moqt/moqt_framer.h
index 6d0356b..a5f741b 100644
--- a/quiche/quic/moqt/moqt_framer.h
+++ b/quiche/quic/moqt/moqt_framer.h
@@ -6,9 +6,9 @@
#define QUICHE_QUIC_MOQT_MOQT_FRAMER_H_
#include <cstddef>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/common/platform/api/quiche_export.h"
diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index 7be848b..15948a1 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -9,11 +9,11 @@
#include <cstddef>
#include <cstdint>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/common/platform/api/quiche_export.h"
@@ -76,13 +76,13 @@
struct QUICHE_EXPORT MoqtClientSetup {
std::vector<MoqtVersion> supported_versions;
- absl::optional<MoqtRole> role;
- absl::optional<absl::string_view> path;
+ std::optional<MoqtRole> role;
+ std::optional<absl::string_view> path;
};
struct QUICHE_EXPORT MoqtServerSetup {
MoqtVersion selected_version;
- absl::optional<MoqtRole> role;
+ std::optional<MoqtRole> role;
};
struct QUICHE_EXPORT MoqtObject {
@@ -90,7 +90,7 @@
uint64_t group_sequence;
uint64_t object_sequence;
uint64_t object_send_order;
- absl::optional<uint64_t> payload_length;
+ std::optional<uint64_t> payload_length;
// Message also includes the object payload.
};
@@ -101,7 +101,7 @@
kRelativeNext = 0x3,
};
-// kNone: absl::optional<MoqtSubscribeLocation> is nullopt.
+// kNone: std::optional<MoqtSubscribeLocation> is nullopt.
// kAbsolute: absolute = true
// kRelativePrevious: absolute is false; relative_value is negative
// kRelativeNext: absolute is true; relative_value is positive
@@ -125,12 +125,12 @@
struct QUICHE_EXPORT MoqtSubscribeRequest {
absl::string_view track_namespace;
absl::string_view track_name;
- // If the mode is kNone, the these are absl::nullopt.
- absl::optional<MoqtSubscribeLocation> start_group;
- absl::optional<MoqtSubscribeLocation> start_object;
- absl::optional<MoqtSubscribeLocation> end_group;
- absl::optional<MoqtSubscribeLocation> end_object;
- absl::optional<absl::string_view> authorization_info;
+ // If the mode is kNone, the these are std::nullopt.
+ std::optional<MoqtSubscribeLocation> start_group;
+ std::optional<MoqtSubscribeLocation> start_object;
+ std::optional<MoqtSubscribeLocation> end_group;
+ std::optional<MoqtSubscribeLocation> end_object;
+ std::optional<absl::string_view> authorization_info;
};
struct QUICHE_EXPORT MoqtSubscribeOk {
@@ -171,7 +171,7 @@
struct QUICHE_EXPORT MoqtAnnounce {
absl::string_view track_namespace;
- absl::optional<absl::string_view> authorization_info;
+ std::optional<absl::string_view> authorization_info;
};
struct QUICHE_EXPORT MoqtAnnounceOk {
diff --git a/quiche/quic/moqt/moqt_parser.cc b/quiche/quic/moqt/moqt_parser.cc
index 2c76502..b672489 100644
--- a/quiche/quic/moqt/moqt_parser.cc
+++ b/quiche/quic/moqt/moqt_parser.cc
@@ -8,12 +8,12 @@
#include <cstdint>
#include <cstring>
#include <memory>
+#include <optional>
#include <string>
#include "absl/cleanup/cleanup.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_data_reader.h"
#include "quiche/quic/core/quic_time.h"
#include "quiche/quic/moqt/moqt_messages.h"
@@ -52,7 +52,7 @@
return;
}
}
- absl::optional<quic::QuicDataReader> reader = absl::nullopt;
+ std::optional<quic::QuicDataReader> reader = std::nullopt;
size_t original_buffer_size = buffered_message_.size();
// There are three cases: the parser has already delivered an OBJECT header
// and is now delivering payload; part of a message is in the buffer; or
@@ -561,14 +561,14 @@
}
bool MoqtParser::ReadLocation(quic::QuicDataReader& reader,
- absl::optional<MoqtSubscribeLocation>& loc) {
+ std::optional<MoqtSubscribeLocation>& loc) {
uint64_t ui64;
if (!reader.ReadVarInt62(&ui64)) {
return false;
}
auto mode = static_cast<MoqtSubscribeLocationMode>(ui64);
if (mode == MoqtSubscribeLocationMode::kNone) {
- loc = absl::nullopt;
+ loc = std::nullopt;
return true;
}
if (!reader.ReadVarInt62(&ui64)) {
diff --git a/quiche/quic/moqt/moqt_parser.h b/quiche/quic/moqt/moqt_parser.h
index b45a707..9dd63b5 100644
--- a/quiche/quic/moqt/moqt_parser.h
+++ b/quiche/quic/moqt/moqt_parser.h
@@ -9,10 +9,10 @@
#include <cstddef>
#include <cstdint>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_data_reader.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/common/platform/api/quiche_export.h"
@@ -97,7 +97,7 @@
bool ReadVarIntPieceVarInt62(quic::QuicDataReader& reader, uint64_t& result);
// Read a Location field from SUBSCRIBE REQUEST
bool ReadLocation(quic::QuicDataReader& reader,
- absl::optional<MoqtSubscribeLocation>& loc);
+ std::optional<MoqtSubscribeLocation>& loc);
// Read a parameter and return the value as a string_view. Returns false if
// |reader| does not have enough data.
bool ReadParameter(quic::QuicDataReader& reader, uint64_t& type,
@@ -114,7 +114,7 @@
std::string buffered_message_;
// Metadata for an object which is delivered in parts.
- absl::optional<MoqtObject> object_metadata_ = absl::nullopt;
+ std::optional<MoqtObject> object_metadata_ = std::nullopt;
size_t payload_length_remaining_;
bool processing_ = false; // True if currently in ProcessData(), to prevent
diff --git a/quiche/quic/moqt/moqt_parser_test.cc b/quiche/quic/moqt/moqt_parser_test.cc
index b91768e..50a0357 100644
--- a/quiche/quic/moqt/moqt_parser_test.cc
+++ b/quiche/quic/moqt/moqt_parser_test.cc
@@ -8,11 +8,11 @@
#include <cstdint>
#include <cstring>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_data_writer.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/quic/moqt/test_tools/moqt_test_message.h"
@@ -230,12 +230,12 @@
parsing_error_ = reason;
}
- absl::optional<absl::string_view> object_payload_;
+ std::optional<absl::string_view> object_payload_;
bool end_of_message_ = false;
bool got_goaway_ = false;
- absl::optional<absl::string_view> parsing_error_;
+ std::optional<absl::string_view> parsing_error_;
uint64_t messages_received_ = 0;
- absl::optional<TestMessageBase::MessageStructuredData> last_message_;
+ std::optional<TestMessageBase::MessageStructuredData> last_message_;
// Stored strings for last_message_. The visitor API does not promise the
// memory pointed to by string_views is persistent.
std::string string0_, string1_, string2_;
diff --git a/quiche/quic/moqt/moqt_session.h b/quiche/quic/moqt/moqt_session.h
index dc98b2c..f33c753 100644
--- a/quiche/quic/moqt/moqt_session.h
+++ b/quiche/quic/moqt/moqt_session.h
@@ -5,11 +5,11 @@
#ifndef QUICHE_QUIC_MOQT_MOQT_SESSION_H_
#define QUICHE_QUIC_MOQT_MOQT_SESSION_H_
+#include <optional>
#include <string>
#include <utility>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/moqt/moqt_framer.h"
#include "quiche/quic/moqt/moqt_messages.h"
@@ -102,7 +102,7 @@
MoqtParser parser_;
// nullopt means "incoming stream, and we don't know if it's the control
// stream or a data stream yet".
- absl::optional<bool> is_control_stream_;
+ std::optional<bool> is_control_stream_;
};
webtransport::Session* session_;
@@ -111,7 +111,7 @@
MoqtSessionTerminatedCallback session_terminated_callback_;
MoqtFramer framer_;
- absl::optional<webtransport::StreamId> control_stream_;
+ std::optional<webtransport::StreamId> control_stream_;
std::string error_;
};
diff --git a/quiche/quic/moqt/test_tools/moqt_test_message.h b/quiche/quic/moqt/test_tools/moqt_test_message.h
index b25c998..ada4dea 100644
--- a/quiche/quic/moqt/test_tools/moqt_test_message.h
+++ b/quiche/quic/moqt/test_tools/moqt_test_message.h
@@ -8,10 +8,10 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
+#include <optional>
#include <vector>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/variant.h"
#include "quiche/quic/core/quic_data_reader.h"
#include "quiche/quic/core/quic_data_writer.h"
@@ -149,7 +149,7 @@
/*group_sequence=*/5,
/*object_sequence=*/6,
/*object_send_order=*/7,
- /*payload_length=*/absl::nullopt,
+ /*payload_length=*/std::nullopt,
};
};
@@ -183,7 +183,7 @@
0x00, 0x04, 0x05, 0x06, 0x07, // varints
0x03, 0x66, 0x6f, 0x6f, // payload = "foo"
};
- absl::optional<uint64_t> payload_length_ = 3;
+ std::optional<uint64_t> payload_length_ = 3;
};
class QUICHE_NO_EXPORT ObjectMessageWithoutLength : public ObjectMessage {
@@ -195,7 +195,7 @@
bool EqualFieldValues(MessageStructuredData& values) const override {
auto cast = std::get<MoqtObject>(values);
- if (cast.payload_length != absl::nullopt) {
+ if (cast.payload_length != std::nullopt) {
QUIC_LOG(INFO) << "OBJECT Payload Length mismatch";
return false;
}
@@ -223,7 +223,7 @@
: TestMessageBase(MoqtMessageType::kClientSetup) {
if (webtrans) {
// Should not send PATH.
- client_setup_.path = absl::nullopt;
+ client_setup_.path = std::nullopt;
raw_packet_[5] = 0x01; // only one parameter
SetWireImage(raw_packet_, sizeof(raw_packet_) - 5);
} else {
@@ -321,7 +321,7 @@
};
MoqtServerSetup server_setup_ = {
/*selected_version=*/static_cast<MoqtVersion>(1),
- /*role=*/absl::nullopt,
+ /*role=*/std::nullopt,
};
};
@@ -388,8 +388,8 @@
/*track_name=*/"abcd",
/*start_group=*/MoqtSubscribeLocation(false, (int64_t)(-4)),
/*start_object=*/MoqtSubscribeLocation(true, (uint64_t)1),
- /*end_group=*/absl::nullopt,
- /*end_object=*/absl::nullopt,
+ /*end_group=*/std::nullopt,
+ /*end_object=*/std::nullopt,
/*authorization_info=*/"bar",
};
};
diff --git a/quiche/quic/qbone/qbone_stream_test.cc b/quiche/quic/qbone/qbone_stream_test.cc
index 00e854f..7ab4dad 100644
--- a/quiche/quic/qbone/qbone_stream_test.cc
+++ b/quiche/quic/qbone/qbone_stream_test.cc
@@ -110,8 +110,8 @@
void SetWritable() override {}
- absl::optional<int> MessageTooBigErrorCode() const override {
- return absl::nullopt;
+ std::optional<int> MessageTooBigErrorCode() const override {
+ return std::nullopt;
}
QuicByteCount GetMaxPacketSize(
diff --git a/quiche/quic/test_tools/crypto_test_utils.cc b/quiche/quic/test_tools/crypto_test_utils.cc
index 660f186..62c3a92 100644
--- a/quiche/quic/test_tools/crypto_test_utils.cc
+++ b/quiche/quic/test_tools/crypto_test_utils.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <cstddef>
#include <memory>
+#include <optional>
#include <string>
#include <utility>
#include <vector>
@@ -14,7 +15,6 @@
#include "absl/strings/escaping.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/crypto/certificate_view.h"
#include "quiche/quic/core/crypto/crypto_handshake.h"
@@ -937,7 +937,7 @@
const std::string& signature, const ProofVerifyContext* context,
std::string* error_details, std::unique_ptr<ProofVerifyDetails>* details,
std::unique_ptr<ProofVerifierCallback> callback) override {
- absl::optional<std::string> payload =
+ std::optional<std::string> payload =
CryptoUtils::GenerateProofPayloadToBeSigned(chlo_hash, server_config);
if (!payload.has_value()) {
*error_details = "Failed to serialize signed payload";
diff --git a/quiche/quic/test_tools/fake_proof_source_handle.cc b/quiche/quic/test_tools/fake_proof_source_handle.cc
index ceebb30..18d93d9 100644
--- a/quiche/quic/test_tools/fake_proof_source_handle.cc
+++ b/quiche/quic/test_tools/fake_proof_source_handle.cc
@@ -21,7 +21,7 @@
class ResultSavingSignatureCallback : public ProofSource::SignatureCallback {
public:
explicit ResultSavingSignatureCallback(
- absl::optional<ComputeSignatureResult>* result)
+ std::optional<ComputeSignatureResult>* result)
: result_(result) {
QUICHE_DCHECK(!result_->has_value());
}
@@ -32,14 +32,14 @@
}
private:
- absl::optional<ComputeSignatureResult>* result_;
+ std::optional<ComputeSignatureResult>* result_;
};
ComputeSignatureResult ComputeSignatureNow(
ProofSource* delegate, const QuicSocketAddress& server_address,
const QuicSocketAddress& client_address, const std::string& hostname,
uint16_t signature_algorithm, absl::string_view in) {
- absl::optional<ComputeSignatureResult> result;
+ std::optional<ComputeSignatureResult> result;
delegate->ComputeTlsSignature(
server_address, client_address, hostname, signature_algorithm, in,
std::make_unique<ResultSavingSignatureCallback>(&result));
@@ -72,9 +72,9 @@
const QuicConnectionId& original_connection_id,
absl::string_view ssl_capabilities, const std::string& hostname,
absl::string_view client_hello, const std::string& alpn,
- absl::optional<std::string> alps,
+ std::optional<std::string> alps,
const std::vector<uint8_t>& quic_transport_params,
- const absl::optional<std::vector<uint8_t>>& early_data_context,
+ const std::optional<std::vector<uint8_t>>& early_data_context,
const QuicSSLConfig& ssl_config) {
if (select_cert_action_ != Action::FAIL_SYNC_DO_NOT_CHECK_CLOSED) {
QUICHE_CHECK(!closed_);
diff --git a/quiche/quic/test_tools/fake_proof_source_handle.h b/quiche/quic/test_tools/fake_proof_source_handle.h
index 599a1fa..960544a 100644
--- a/quiche/quic/test_tools/fake_proof_source_handle.h
+++ b/quiche/quic/test_tools/fake_proof_source_handle.h
@@ -47,9 +47,9 @@
const QuicConnectionId& original_connection_id,
absl::string_view ssl_capabilities, const std::string& hostname,
absl::string_view client_hello, const std::string& alpn,
- absl::optional<std::string> alps,
+ std::optional<std::string> alps,
const std::vector<uint8_t>& quic_transport_params,
- const absl::optional<std::vector<uint8_t>>& early_data_context,
+ const std::optional<std::vector<uint8_t>>& early_data_context,
const QuicSSLConfig& ssl_config) override;
QuicAsyncStatus ComputeSignature(const QuicSocketAddress& server_address,
@@ -71,9 +71,9 @@
QuicConnectionId original_connection_id,
absl::string_view ssl_capabilities, std::string hostname,
absl::string_view client_hello, std::string alpn,
- absl::optional<std::string> alps,
+ std::optional<std::string> alps,
std::vector<uint8_t> quic_transport_params,
- absl::optional<std::vector<uint8_t>> early_data_context,
+ std::optional<std::vector<uint8_t>> early_data_context,
QuicSSLConfig ssl_config)
: server_address(server_address),
client_address(client_address),
@@ -94,9 +94,9 @@
std::string hostname;
std::string client_hello;
std::string alpn;
- absl::optional<std::string> alps;
+ std::optional<std::string> alps;
std::vector<uint8_t> quic_transport_params;
- absl::optional<std::vector<uint8_t>> early_data_context;
+ std::optional<std::vector<uint8_t>> early_data_context;
QuicSSLConfig ssl_config;
};
@@ -184,8 +184,8 @@
// Action for the next compute signature operation.
Action compute_signature_action_ = Action::DELEGATE_SYNC;
const QuicDelayedSSLConfig dealyed_ssl_config_;
- absl::optional<SelectCertOperation> select_cert_op_;
- absl::optional<ComputeSignatureOperation> compute_signature_op_;
+ std::optional<SelectCertOperation> select_cert_op_;
+ std::optional<ComputeSignatureOperation> compute_signature_op_;
// Save all the select cert and compute signature args for tests to inspect.
std::vector<SelectCertArgs> all_select_cert_args_;
diff --git a/quiche/quic/test_tools/first_flight.h b/quiche/quic/test_tools/first_flight.h
index cd16f94..7360cf3 100644
--- a/quiche/quic/test_tools/first_flight.h
+++ b/quiche/quic/test_tools/first_flight.h
@@ -44,8 +44,8 @@
// Overrides for QuicPacketWriter.
bool IsWriteBlocked() const override { return false; }
void SetWritable() override {}
- absl::optional<int> MessageTooBigErrorCode() const override {
- return absl::nullopt;
+ std::optional<int> MessageTooBigErrorCode() const override {
+ return std::nullopt;
}
QuicByteCount GetMaxPacketSize(
const QuicSocketAddress& /*peer_address*/) const override {
diff --git a/quiche/quic/test_tools/mock_connection_id_generator.h b/quiche/quic/test_tools/mock_connection_id_generator.h
index 42209d6..4ea34b9 100644
--- a/quiche/quic/test_tools/mock_connection_id_generator.h
+++ b/quiche/quic/test_tools/mock_connection_id_generator.h
@@ -13,10 +13,10 @@
class MockConnectionIdGenerator : public quic::ConnectionIdGeneratorInterface {
public:
- MOCK_METHOD(absl::optional<quic::QuicConnectionId>, GenerateNextConnectionId,
+ MOCK_METHOD(std::optional<quic::QuicConnectionId>, GenerateNextConnectionId,
(const quic::QuicConnectionId& original), (override));
- MOCK_METHOD(absl::optional<quic::QuicConnectionId>, MaybeReplaceConnectionId,
+ MOCK_METHOD(std::optional<quic::QuicConnectionId>, MaybeReplaceConnectionId,
(const quic::QuicConnectionId& original,
const quic::ParsedQuicVersion& version),
(override));
diff --git a/quiche/quic/test_tools/mock_load_balancer_encoder.h b/quiche/quic/test_tools/mock_load_balancer_encoder.h
index f40047e..d313748 100644
--- a/quiche/quic/test_tools/mock_load_balancer_encoder.h
+++ b/quiche/quic/test_tools/mock_load_balancer_encoder.h
@@ -19,9 +19,9 @@
MOCK_METHOD(bool, IsEncoding, (), (const, override));
MOCK_METHOD(bool, IsEncrypted, (), (const, override));
MOCK_METHOD(bool, len_self_encoded, (), (const, override));
- MOCK_METHOD(absl::optional<QuicConnectionId>, GenerateNextConnectionId,
+ MOCK_METHOD(std::optional<QuicConnectionId>, GenerateNextConnectionId,
(const QuicConnectionId& original), (override));
- MOCK_METHOD(absl::optional<QuicConnectionId>, MaybeReplaceConnectionId,
+ MOCK_METHOD(std::optional<QuicConnectionId>, MaybeReplaceConnectionId,
(const QuicConnectionId& original,
const ParsedQuicVersion& version),
(override));
diff --git a/quiche/quic/test_tools/qpack/qpack_offline_decoder.cc b/quiche/quic/test_tools/qpack/qpack_offline_decoder.cc
index 282e33f..da7a865 100644
--- a/quiche/quic/test_tools/qpack/qpack_offline_decoder.cc
+++ b/quiche/quic/test_tools/qpack/qpack_offline_decoder.cc
@@ -130,7 +130,7 @@
absl::string_view input_filename) {
// Store data in |input_data_storage|; use a absl::string_view to
// efficiently keep track of remaining portion yet to be decoded.
- absl::optional<std::string> input_data_storage =
+ std::optional<std::string> input_data_storage =
quiche::ReadFileContents(input_filename);
QUICHE_DCHECK(input_data_storage.has_value());
absl::string_view input_data(*input_data_storage);
@@ -228,7 +228,7 @@
// Store data in |expected_headers_data_storage|; use a
// absl::string_view to efficiently keep track of remaining portion
// yet to be decoded.
- absl::optional<std::string> expected_headers_data_storage =
+ std::optional<std::string> expected_headers_data_storage =
quiche::ReadFileContents(expected_headers_filename);
QUICHE_DCHECK(expected_headers_data_storage.has_value());
absl::string_view expected_headers_data(*expected_headers_data_storage);
diff --git a/quiche/quic/test_tools/quic_test_client.cc b/quiche/quic/test_tools/quic_test_client.cc
index 601a2bb..5b66785 100644
--- a/quiche/quic/test_tools/quic_test_client.cc
+++ b/quiche/quic/test_tools/quic_test_client.cc
@@ -614,8 +614,7 @@
bool QuicTestClient::HaveActiveStream() { return !open_streams_.empty(); }
bool QuicTestClient::WaitUntil(
- int timeout_ms,
- absl::optional<quiche::UnretainedCallback<bool()>> trigger) {
+ int timeout_ms, std::optional<quiche::UnretainedCallback<bool()>> trigger) {
QuicTime::Delta timeout = QuicTime::Delta::FromMilliseconds(timeout_ms);
const QuicClock* clock = client()->session()->connection()->clock();
QuicTime end_waiting_time = clock->Now() + timeout;
diff --git a/quiche/quic/test_tools/quic_test_client.h b/quiche/quic/test_tools/quic_test_client.h
index 9ea9cfa..3dbd524 100644
--- a/quiche/quic/test_tools/quic_test_client.h
+++ b/quiche/quic/test_tools/quic_test_client.h
@@ -161,7 +161,7 @@
QuicSocketAddress local_address() const;
void ClearPerRequestState();
bool WaitUntil(int timeout_ms,
- absl::optional<quiche::UnretainedCallback<bool()>> trigger);
+ std::optional<quiche::UnretainedCallback<bool()>> trigger);
int64_t Send(absl::string_view data);
bool connected() const;
bool buffer_body() const;
diff --git a/quiche/quic/test_tools/quic_test_utils.cc b/quiche/quic/test_tools/quic_test_utils.cc
index 4647c98..c5ae06f 100644
--- a/quiche/quic/test_tools/quic_test_utils.cc
+++ b/quiche/quic/test_tools/quic_test_utils.cc
@@ -352,7 +352,7 @@
bool NoOpFramerVisitor::OnAckFrameEnd(
QuicPacketNumber /*start*/,
- const absl::optional<QuicEcnCounts>& /*ecn_counts*/) {
+ const std::optional<QuicEcnCounts>& /*ecn_counts*/) {
return true;
}
@@ -632,7 +632,7 @@
QuicConsumedData MockQuicSession::ConsumeData(
QuicStreamId id, size_t write_length, QuicStreamOffset offset,
StreamSendingState state, TransmissionType /*type*/,
- absl::optional<EncryptionLevel> /*level*/) {
+ std::optional<EncryptionLevel> /*level*/) {
if (write_length > 0) {
auto buf = std::make_unique<char[]>(write_length);
QuicStream* stream = GetOrCreateStream(id);
@@ -709,7 +709,7 @@
QuicConsumedData MockQuicSpdySession::ConsumeData(
QuicStreamId id, size_t write_length, QuicStreamOffset offset,
StreamSendingState state, TransmissionType /*type*/,
- absl::optional<EncryptionLevel> /*level*/) {
+ std::optional<EncryptionLevel> /*level*/) {
if (write_length > 0) {
auto buf = std::make_unique<char[]>(write_length);
QuicStream* stream = GetOrCreateStream(id);
@@ -757,7 +757,7 @@
QuicConnection* connection, const QuicConfig& config,
const ParsedQuicVersionVector& supported_versions,
const QuicServerId& server_id, QuicCryptoClientConfig* crypto_config,
- absl::optional<QuicSSLConfig> ssl_config)
+ std::optional<QuicSSLConfig> ssl_config)
: QuicSpdyClientSessionBase(connection, nullptr, config,
supported_versions),
ssl_config_(std::move(ssl_config)) {
@@ -1480,7 +1480,7 @@
QuicVersionLabel version_label;
ParsedQuicVersion parsed_version = ParsedQuicVersion::Unsupported();
QuicConnectionId destination_connection_id, source_connection_id;
- absl::optional<absl::string_view> retry_token;
+ std::optional<absl::string_view> retry_token;
std::string detailed_error;
QuicErrorCode error = QuicFramer::ParsePublicHeaderDispatcher(
encrypted_packet,
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h
index 37566f4..55b867f 100644
--- a/quiche/quic/test_tools/quic_test_utils.h
+++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -311,7 +311,7 @@
(override));
MOCK_METHOD(bool, OnAckTimestamp, (QuicPacketNumber, QuicTime), (override));
MOCK_METHOD(bool, OnAckFrameEnd,
- (QuicPacketNumber, const absl::optional<QuicEcnCounts>&),
+ (QuicPacketNumber, const std::optional<QuicEcnCounts>&),
(override));
MOCK_METHOD(bool, OnStopWaitingFrame, (const QuicStopWaitingFrame& frame),
(override));
@@ -395,7 +395,7 @@
bool OnAckTimestamp(QuicPacketNumber packet_number,
QuicTime timestamp) override;
bool OnAckFrameEnd(QuicPacketNumber start,
- const absl::optional<QuicEcnCounts>& ecn_counts) override;
+ const std::optional<QuicEcnCounts>& ecn_counts) override;
bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override;
bool OnPaddingFrame(const QuicPaddingFrame& frame) override;
bool OnPingFrame(const QuicPingFrame& frame) override;
@@ -830,7 +830,7 @@
QuicConsumedData ConsumeData(QuicStreamId id, size_t write_length,
QuicStreamOffset offset,
StreamSendingState state, TransmissionType type,
- absl::optional<EncryptionLevel> level);
+ std::optional<EncryptionLevel> level);
void ReallyMaybeSendRstStreamFrame(QuicStreamId id,
QuicRstStreamErrorCode error,
@@ -986,7 +986,7 @@
QuicConsumedData ConsumeData(QuicStreamId id, size_t write_length,
QuicStreamOffset offset,
StreamSendingState state, TransmissionType type,
- absl::optional<EncryptionLevel> level);
+ std::optional<EncryptionLevel> level);
using QuicSession::ActivateStream;
@@ -1094,10 +1094,10 @@
MockQuicCryptoServerStreamHelper helper_;
// If not nullopt, override the early_data_enabled value from base class'
// ssl_config.
- absl::optional<bool> early_data_enabled_;
+ std::optional<bool> early_data_enabled_;
// If not nullopt, override the client_cert_mode value from base class'
// ssl_config.
- absl::optional<ClientCertMode> client_cert_mode_;
+ std::optional<ClientCertMode> client_cert_mode_;
};
class TestQuicSpdyClientSession : public QuicSpdyClientSessionBase {
@@ -1106,7 +1106,7 @@
QuicConnection* connection, const QuicConfig& config,
const ParsedQuicVersionVector& supported_versions,
const QuicServerId& server_id, QuicCryptoClientConfig* crypto_config,
- absl::optional<QuicSSLConfig> ssl_config = absl::nullopt);
+ std::optional<QuicSSLConfig> ssl_config = std::nullopt);
TestQuicSpdyClientSession(const TestQuicSpdyClientSession&) = delete;
TestQuicSpdyClientSession& operator=(const TestQuicSpdyClientSession&) =
delete;
@@ -1160,7 +1160,7 @@
std::unique_ptr<QuicCryptoClientStream> crypto_stream_;
std::vector<CryptoHandshakeMessage> sent_crypto_handshake_messages_;
- absl::optional<QuicSSLConfig> ssl_config_;
+ std::optional<QuicSSLConfig> ssl_config_;
};
class MockPacketWriter : public QuicPacketWriter {
@@ -1177,7 +1177,7 @@
(override));
MOCK_METHOD(bool, IsWriteBlocked, (), (const, override));
MOCK_METHOD(void, SetWritable, (), (override));
- MOCK_METHOD(absl::optional<int>, MessageTooBigErrorCode, (),
+ MOCK_METHOD(std::optional<int>, MessageTooBigErrorCode, (),
(const, override));
MOCK_METHOD(QuicByteCount, GetMaxPacketSize,
(const QuicSocketAddress& peer_address), (const, override));
@@ -1828,7 +1828,7 @@
bool IsWriteBlocked() const override { return write_blocked_; }
- absl::optional<int> MessageTooBigErrorCode() const override { return 0x1234; }
+ std::optional<int> MessageTooBigErrorCode() const override { return 0x1234; }
void SetWriteBlocked() { write_blocked_ = true; }
diff --git a/quiche/quic/test_tools/simple_quic_framer.cc b/quiche/quic/test_tools/simple_quic_framer.cc
index b13fec4..fc50251 100644
--- a/quiche/quic/test_tools/simple_quic_framer.cc
+++ b/quiche/quic/test_tools/simple_quic_framer.cc
@@ -111,7 +111,7 @@
bool OnAckFrameEnd(
QuicPacketNumber /*start*/,
- const absl::optional<QuicEcnCounts>& /*ecn_counts*/) override {
+ const std::optional<QuicEcnCounts>& /*ecn_counts*/) override {
return true;
}
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint_base.cc b/quiche/quic/test_tools/simulator/quic_endpoint_base.cc
index 3ff517a..209994a 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint_base.cc
+++ b/quiche/quic/test_tools/simulator/quic_endpoint_base.cc
@@ -153,8 +153,8 @@
void QuicEndpointBase::Writer::SetWritable() { is_blocked_ = false; }
-absl::optional<int> QuicEndpointBase::Writer::MessageTooBigErrorCode() const {
- return absl::nullopt;
+std::optional<int> QuicEndpointBase::Writer::MessageTooBigErrorCode() const {
+ return std::nullopt;
}
QuicByteCount QuicEndpointBase::Writer::GetMaxPacketSize(
diff --git a/quiche/quic/test_tools/simulator/quic_endpoint_base.h b/quiche/quic/test_tools/simulator/quic_endpoint_base.h
index bb3ae10..fe753d5 100644
--- a/quiche/quic/test_tools/simulator/quic_endpoint_base.h
+++ b/quiche/quic/test_tools/simulator/quic_endpoint_base.h
@@ -83,7 +83,7 @@
const QuicPacketWriterParams& params) override;
bool IsWriteBlocked() const override;
void SetWritable() override;
- absl::optional<int> MessageTooBigErrorCode() const override;
+ std::optional<int> MessageTooBigErrorCode() const override;
QuicByteCount GetMaxPacketSize(
const QuicSocketAddress& peer_address) const override;
bool SupportsReleaseTime() const override;
diff --git a/quiche/quic/test_tools/simulator/test_harness.h b/quiche/quic/test_tools/simulator/test_harness.h
index 135d744..9c879fc 100644
--- a/quiche/quic/test_tools/simulator/test_harness.h
+++ b/quiche/quic/test_tools/simulator/test_harness.h
@@ -6,9 +6,9 @@
#define QUICHE_QUIC_TEST_TOOLS_SIMULATOR_TEST_HARNESS_H_
#include <memory>
+#include <optional>
#include <string>
-#include "absl/types/optional.h"
#include "quiche/quic/core/quic_bandwidth.h"
#include "quiche/quic/core/quic_constants.h"
#include "quiche/quic/core/quic_time.h"
@@ -79,8 +79,8 @@
private:
Simulator simulator_;
Switch switch_;
- absl::optional<SymmetricLink> client_link_;
- absl::optional<SymmetricLink> server_link_;
+ std::optional<SymmetricLink> client_link_;
+ std::optional<SymmetricLink> server_link_;
std::unique_ptr<PacketFilter> client_filter_;
std::unique_ptr<PacketFilter> server_filter_;
diff --git a/quiche/quic/tools/connect_tunnel.cc b/quiche/quic/tools/connect_tunnel.cc
index d31e540..22f6c3b 100644
--- a/quiche/quic/tools/connect_tunnel.cc
+++ b/quiche/quic/tools/connect_tunnel.cc
@@ -5,6 +5,7 @@
#include "quiche/quic/tools/connect_tunnel.h"
#include <cstdint>
+#include <optional>
#include <string>
#include <utility>
#include <vector>
@@ -14,7 +15,6 @@
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_server_id.h"
@@ -34,7 +34,7 @@
// Arbitrarily chosen. No effort has been made to figure out an optimal size.
constexpr size_t kReadSize = 4 * 1024;
-absl::optional<QuicServerId> ValidateHeadersAndGetAuthority(
+std::optional<QuicServerId> ValidateHeadersAndGetAuthority(
const spdy::Http2HeaderBlock& request_headers) {
QUICHE_DCHECK(request_headers.contains(":method"));
QUICHE_DCHECK(request_headers.find(":method")->second == "CONNECT");
@@ -44,31 +44,31 @@
if (scheme_it != request_headers.end()) {
QUICHE_DVLOG(1) << "CONNECT request contains unexpected scheme: "
<< scheme_it->second;
- return absl::nullopt;
+ return std::nullopt;
}
auto path_it = request_headers.find(":path");
if (path_it != request_headers.end()) {
QUICHE_DVLOG(1) << "CONNECT request contains unexpected path: "
<< path_it->second;
- return absl::nullopt;
+ return std::nullopt;
}
auto authority_it = request_headers.find(":authority");
if (authority_it == request_headers.end() || authority_it->second.empty()) {
QUICHE_DVLOG(1) << "CONNECT request missing authority";
- return absl::nullopt;
+ return std::nullopt;
}
// A valid CONNECT authority must contain host and port and nothing else, per
// https://www.rfc-editor.org/rfc/rfc9110.html#name-connect. This matches the
// host and port parsing rules for QuicServerId.
- absl::optional<QuicServerId> server_id =
+ std::optional<QuicServerId> server_id =
QuicServerId::ParseFromHostPortString(authority_it->second);
if (!server_id.has_value()) {
QUICHE_DVLOG(1) << "CONNECT request authority is malformed: "
<< authority_it->second;
- return absl::nullopt;
+ return std::nullopt;
}
return server_id;
@@ -111,7 +111,7 @@
void ConnectTunnel::OpenTunnel(const spdy::Http2HeaderBlock& request_headers) {
QUICHE_DCHECK(!IsConnectedToDestination());
- absl::optional<QuicServerId> authority =
+ std::optional<QuicServerId> authority =
ValidateHeadersAndGetAuthority(request_headers);
if (!authority.has_value()) {
TerminateClientStream(
diff --git a/quiche/quic/tools/connect_udp_tunnel.cc b/quiche/quic/tools/connect_udp_tunnel.cc
index d92f63b..4cec8b8 100644
--- a/quiche/quic/tools/connect_udp_tunnel.cc
+++ b/quiche/quic/tools/connect_udp_tunnel.cc
@@ -5,6 +5,7 @@
#include "quiche/quic/tools/connect_udp_tunnel.h"
#include <cstdint>
+#include <optional>
#include <string>
#include <utility>
#include <vector>
@@ -16,7 +17,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_server_id.h"
@@ -44,7 +44,7 @@
// Only support the default path
// ("/.well-known/masque/udp/{target_host}/{target_port}/")
-absl::optional<QuicServerId> ValidateAndParseTargetFromPath(
+std::optional<QuicServerId> ValidateAndParseTargetFromPath(
absl::string_view path) {
std::string canonicalized_path_str;
url::StdStringCanonOutput canon_output(&canonicalized_path_str);
@@ -54,7 +54,7 @@
if (!path_component.is_nonempty()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request with non-canonicalizable path: "
<< path;
- return absl::nullopt;
+ return std::nullopt;
}
canon_output.Complete();
absl::string_view canonicalized_path =
@@ -69,26 +69,26 @@
path_split[5].empty() || !path_split[6].empty()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request with bad path: "
<< canonicalized_path;
- return absl::nullopt;
+ return std::nullopt;
}
- absl::optional<std::string> decoded_host =
+ std::optional<std::string> decoded_host =
quiche::AsciiUrlDecode(path_split[4]);
if (!decoded_host.has_value()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request with undecodable host: "
<< path_split[4];
- return absl::nullopt;
+ return std::nullopt;
}
// Empty host checked above after path split. Expect decoding to never result
// in an empty decoded host from non-empty encoded host.
QUICHE_DCHECK(!decoded_host.value().empty());
- absl::optional<std::string> decoded_port =
+ std::optional<std::string> decoded_port =
quiche::AsciiUrlDecode(path_split[5]);
if (!decoded_port.has_value()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request with undecodable port: "
<< path_split[5];
- return absl::nullopt;
+ return std::nullopt;
}
// Empty port checked above after path split. Expect decoding to never result
// in an empty decoded port from non-empty encoded port.
@@ -103,7 +103,7 @@
if (parsed_port_number <= 0) {
QUICHE_DVLOG(1) << "CONNECT-UDP request with bad port: "
<< decoded_port.value();
- return absl::nullopt;
+ return std::nullopt;
}
// Expect url::ParsePort() to validate port is uint16_t and otherwise return
// negative number checked for above.
@@ -114,7 +114,7 @@
}
// Validate header expectations from RFC 9298, section 3.4.
-absl::optional<QuicServerId> ValidateHeadersAndGetTarget(
+std::optional<QuicServerId> ValidateHeadersAndGetTarget(
const spdy::Http2HeaderBlock& request_headers) {
QUICHE_DCHECK(request_headers.contains(":method"));
QUICHE_DCHECK(request_headers.find(":method")->second == "CONNECT");
@@ -124,7 +124,7 @@
auto authority_it = request_headers.find(":authority");
if (authority_it == request_headers.end() || authority_it->second.empty()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request missing authority";
- return absl::nullopt;
+ return std::nullopt;
}
// For toy server simplicity, skip validating that the authority matches the
// current server.
@@ -132,19 +132,19 @@
auto scheme_it = request_headers.find(":scheme");
if (scheme_it == request_headers.end() || scheme_it->second.empty()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request missing scheme";
- return absl::nullopt;
+ return std::nullopt;
} else if (scheme_it->second != "https") {
QUICHE_DVLOG(1) << "CONNECT-UDP request contains unexpected scheme: "
<< scheme_it->second;
- return absl::nullopt;
+ return std::nullopt;
}
auto path_it = request_headers.find(":path");
if (path_it == request_headers.end() || path_it->second.empty()) {
QUICHE_DVLOG(1) << "CONNECT-UDP request missing path";
- return absl::nullopt;
+ return std::nullopt;
}
- absl::optional<QuicServerId> target_server_id =
+ std::optional<QuicServerId> target_server_id =
ValidateAndParseTargetFromPath(path_it->second);
return target_server_id;
@@ -190,7 +190,7 @@
const spdy::Http2HeaderBlock& request_headers) {
QUICHE_DCHECK(!IsTunnelOpenToTarget());
- absl::optional<QuicServerId> target =
+ std::optional<QuicServerId> target =
ValidateHeadersAndGetTarget(request_headers);
if (!target.has_value()) {
// Malformed request.
@@ -351,7 +351,7 @@
spdy::Http2HeaderBlock response_headers;
response_headers[":status"] = "200";
- absl::optional<std::string> capsule_protocol_value =
+ std::optional<std::string> capsule_protocol_value =
structured_headers::SerializeItem(structured_headers::Item(true));
QUICHE_CHECK(capsule_protocol_value.has_value());
response_headers["Capsule-Protocol"] = capsule_protocol_value.value();
@@ -395,7 +395,7 @@
std::move(proxy_status_item),
{{"error", std::move(proxy_status_error_item)},
{"details", std::move(proxy_status_details_item)}});
- absl::optional<std::string> proxy_status_value =
+ std::optional<std::string> proxy_status_value =
structured_headers::SerializeList({proxy_status_member});
QUICHE_CHECK(proxy_status_value.has_value());
headers["Proxy-Status"] = proxy_status_value.value();
diff --git a/quiche/quic/tools/quic_client_base.h b/quiche/quic/tools/quic_client_base.h
index 955f83a..cf9e0e0 100644
--- a/quiche/quic/tools/quic_client_base.h
+++ b/quiche/quic/tools/quic_client_base.h
@@ -452,7 +452,7 @@
// If set,
// - GetNextConnectionId will use this as the next server connection id.
// - GenerateNewConnectionId will not be called.
- absl::optional<QuicConnectionId> server_connection_id_override_;
+ std::optional<QuicConnectionId> server_connection_id_override_;
// GenerateNewConnectionId creates a random connection ID of this length.
// Defaults to 8.
diff --git a/quiche/quic/tools/quic_client_default_network_helper.h b/quiche/quic/tools/quic_client_default_network_helper.h
index fbc42c2..9b9ba35 100644
--- a/quiche/quic/tools/quic_client_default_network_helper.h
+++ b/quiche/quic/tools/quic_client_default_network_helper.h
@@ -7,9 +7,9 @@
#include <cstdint>
#include <memory>
+#include <optional>
#include <string>
-#include "absl/types/optional.h"
#include "quiche/quic/core/io/quic_event_loop.h"
#include "quiche/quic/core/io/socket.h"
#include "quiche/quic/core/quic_default_packet_writer.h"
diff --git a/quiche/quic/tools/quic_memory_cache_backend.cc b/quiche/quic/tools/quic_memory_cache_backend.cc
index 95a8421..29434b3 100644
--- a/quiche/quic/tools/quic_memory_cache_backend.cc
+++ b/quiche/quic/tools/quic_memory_cache_backend.cc
@@ -28,7 +28,7 @@
QuicMemoryCacheBackend::ResourceFile::~ResourceFile() = default;
void QuicMemoryCacheBackend::ResourceFile::Read() {
- absl::optional<std::string> maybe_file_contents =
+ std::optional<std::string> maybe_file_contents =
quiche::ReadFileContents(file_name_);
if (!maybe_file_contents) {
QUIC_LOG(DFATAL) << "Failed to read file for the memory cache backend: "
diff --git a/quiche/quic/tools/quic_packet_printer_bin.cc b/quiche/quic/tools/quic_packet_printer_bin.cc
index ca1b433..e507c5e 100644
--- a/quiche/quic/tools/quic_packet_printer_bin.cc
+++ b/quiche/quic/tools/quic_packet_printer_bin.cc
@@ -126,7 +126,7 @@
return true;
}
bool OnAckFrameEnd(QuicPacketNumber start,
- const absl::optional<QuicEcnCounts>& ecn_counts) override {
+ const std::optional<QuicEcnCounts>& ecn_counts) override {
std::cerr << "OnAckFrameEnd, start: " << start;
if (ecn_counts.has_value()) {
std::cerr << " ECN counts: " << ecn_counts->ToString();
diff --git a/quiche/quic/tools/quic_simple_server_stream.cc b/quiche/quic/tools/quic_simple_server_stream.cc
index b0cb9cb..07c0def 100644
--- a/quiche/quic/tools/quic_simple_server_stream.cc
+++ b/quiche/quic/tools/quic_simple_server_stream.cc
@@ -6,12 +6,12 @@
#include <cstdint>
#include <list>
+#include <optional>
#include <utility>
#include "absl/strings/numbers.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/quic_spdy_stream.h"
#include "quiche/quic/core/http/spdy_utils.h"
#include "quiche/quic/core/http/web_transport_http3.h"
@@ -363,10 +363,10 @@
if (close_stream) {
SendHeadersAndBodyAndTrailers(
- /*response_headers=*/absl::nullopt, data,
+ /*response_headers=*/std::nullopt, data,
/*response_trailers=*/spdy::Http2HeaderBlock());
} else {
- SendIncompleteResponse(/*response_headers=*/absl::nullopt, data);
+ SendIncompleteResponse(/*response_headers=*/std::nullopt, data);
}
}
@@ -419,7 +419,7 @@
}
void QuicSimpleServerStream::SendIncompleteResponse(
- absl::optional<Http2HeaderBlock> response_headers, absl::string_view body) {
+ std::optional<Http2HeaderBlock> response_headers, absl::string_view body) {
// Headers should be sent iff not sent in a previous response.
QUICHE_DCHECK_NE(response_headers.has_value(), response_sent_);
@@ -449,7 +449,7 @@
}
void QuicSimpleServerStream::SendHeadersAndBodyAndTrailers(
- absl::optional<Http2HeaderBlock> response_headers, absl::string_view body,
+ std::optional<Http2HeaderBlock> response_headers, absl::string_view body,
Http2HeaderBlock response_trailers) {
// Headers should be sent iff not sent in a previous response.
QUICHE_DCHECK_NE(response_headers.has_value(), response_sent_);
diff --git a/quiche/quic/tools/quic_simple_server_stream.h b/quiche/quic/tools/quic_simple_server_stream.h
index fe12b70..998429a 100644
--- a/quiche/quic/tools/quic_simple_server_stream.h
+++ b/quiche/quic/tools/quic_simple_server_stream.h
@@ -6,9 +6,9 @@
#define QUICHE_QUIC_TOOLS_QUIC_SIMPLE_SERVER_STREAM_H_
#include <cstdint>
+#include <optional>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/http/quic_spdy_server_stream_base.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_packets.h"
@@ -76,16 +76,16 @@
// for the body.
void SendNotFoundResponse();
- // Sends the response header (if not `absl::nullopt`) and body, but not the
+ // Sends the response header (if not `std::nullopt`) and body, but not the
// fin.
void SendIncompleteResponse(
- absl::optional<spdy::Http2HeaderBlock> response_headers,
+ std::optional<spdy::Http2HeaderBlock> response_headers,
absl::string_view body);
void SendHeadersAndBody(spdy::Http2HeaderBlock response_headers,
absl::string_view body);
void SendHeadersAndBodyAndTrailers(
- absl::optional<spdy::Http2HeaderBlock> response_headers,
+ std::optional<spdy::Http2HeaderBlock> response_headers,
absl::string_view body, spdy::Http2HeaderBlock response_trailers);
spdy::Http2HeaderBlock* request_headers() { return &request_headers_; }
diff --git a/quiche/quic/tools/quic_simple_server_stream_test.cc b/quiche/quic/tools/quic_simple_server_stream_test.cc
index ab8b607..975a194 100644
--- a/quiche/quic/tools/quic_simple_server_stream_test.cc
+++ b/quiche/quic/tools/quic_simple_server_stream_test.cc
@@ -6,12 +6,12 @@
#include <list>
#include <memory>
+#include <optional>
#include <utility>
#include "absl/base/macros.h"
#include "absl/memory/memory.h"
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/quic/core/crypto/null_encrypter.h"
#include "quiche/quic/core/http/http_encoder.h"
#include "quiche/quic/core/http/spdy_utils.h"
@@ -189,7 +189,7 @@
QuicStreamOffset offset,
StreamSendingState state,
TransmissionType /*type*/,
- absl::optional<EncryptionLevel> /*level*/) {
+ std::optional<EncryptionLevel> /*level*/) {
if (write_length > 0) {
auto buf = std::make_unique<char[]>(write_length);
QuicStream* stream = GetOrCreateStream(id);
diff --git a/quiche/quic/tools/quic_spdy_client_base.cc b/quiche/quic/tools/quic_spdy_client_base.cc
index 9839534..55b6631 100644
--- a/quiche/quic/tools/quic_spdy_client_base.cc
+++ b/quiche/quic/tools/quic_spdy_client_base.cc
@@ -163,9 +163,9 @@
return client_session() && client_session()->goaway_received();
}
-absl::optional<uint64_t> QuicSpdyClientBase::last_received_http3_goaway_id() {
+std::optional<uint64_t> QuicSpdyClientBase::last_received_http3_goaway_id() {
return client_session() ? client_session()->last_received_http3_goaway_id()
- : absl::nullopt;
+ : std::nullopt;
}
bool QuicSpdyClientBase::EarlyDataAccepted() {
diff --git a/quiche/quic/tools/quic_spdy_client_base.h b/quiche/quic/tools/quic_spdy_client_base.h
index 717d92a..a6ef509 100644
--- a/quiche/quic/tools/quic_spdy_client_base.h
+++ b/quiche/quic/tools/quic_spdy_client_base.h
@@ -114,7 +114,7 @@
bool EarlyDataAccepted() override;
bool ReceivedInchoateReject() override;
- absl::optional<uint64_t> last_received_http3_goaway_id();
+ std::optional<uint64_t> last_received_http3_goaway_id();
void set_max_inbound_header_list_size(size_t size) {
max_inbound_header_list_size_ = size;
diff --git a/quiche/quic/tools/quic_toy_server.cc b/quiche/quic/tools/quic_toy_server.cc
index da4e4e9..419fb14 100644
--- a/quiche/quic/tools/quic_toy_server.cc
+++ b/quiche/quic/tools/quic_toy_server.cc
@@ -87,7 +87,7 @@
for (absl::string_view destination : absl::StrSplit(
quiche::GetQuicheCommandLineFlag(FLAGS_connect_proxy_destinations),
',', absl::SkipEmpty())) {
- absl::optional<QuicServerId> destination_server_id =
+ std::optional<QuicServerId> destination_server_id =
QuicServerId::ParseFromHostPortString(destination);
QUICHE_CHECK(destination_server_id.has_value());
connect_proxy_destinations.insert(
@@ -98,7 +98,7 @@
for (absl::string_view target : absl::StrSplit(
quiche::GetQuicheCommandLineFlag(FLAGS_connect_udp_proxy_targets),
',', absl::SkipEmpty())) {
- absl::optional<QuicServerId> target_server_id =
+ std::optional<QuicServerId> target_server_id =
QuicServerId::ParseFromHostPortString(target);
QUICHE_CHECK(target_server_id.has_value());
connect_udp_proxy_targets.insert(std::move(target_server_id).value());
diff --git a/quiche/spdy/core/http2_frame_decoder_adapter.h b/quiche/spdy/core/http2_frame_decoder_adapter.h
index e7bd420..87ab4c5 100644
--- a/quiche/spdy/core/http2_frame_decoder_adapter.h
+++ b/quiche/spdy/core/http2_frame_decoder_adapter.h
@@ -9,10 +9,10 @@
#include <cstdint>
#include <memory>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
#include "quiche/http2/decoder/decode_status.h"
#include "quiche/http2/decoder/http2_frame_decoder.h"
#include "quiche/http2/decoder/http2_frame_decoder_listener.h"
@@ -270,7 +270,7 @@
// Amount of trailing padding. Currently used just as an indicator of whether
// OnPadLength has been called.
- absl::optional<size_t> opt_pad_length_;
+ std::optional<size_t> opt_pad_length_;
// Temporary buffers for the AltSvc fields.
std::string alt_svc_origin_;
diff --git a/quiche/web_transport/complete_buffer_visitor.h b/quiche/web_transport/complete_buffer_visitor.h
index 498f148..2382b66 100644
--- a/quiche/web_transport/complete_buffer_visitor.h
+++ b/quiche/web_transport/complete_buffer_visitor.h
@@ -5,7 +5,8 @@
#ifndef QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_
#define QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_
-#include "absl/types/optional.h"
+#include <optional>
+
#include "absl/utility/utility.h"
#include "quiche/common/quiche_callbacks.h"
#include "quiche/web_transport/web_transport.h"
@@ -45,8 +46,8 @@
private:
webtransport::Stream* stream_;
- absl::optional<std::string> outgoing_data_;
- absl::optional<AllDataReadCallback> incoming_data_callback_;
+ std::optional<std::string> outgoing_data_;
+ std::optional<AllDataReadCallback> incoming_data_callback_;
std::string incoming_data_buffer_;
};