/src/node/deps/inspector_protocol/crdtp/span.h
Line | Count | Source |
1 | | // Copyright 2019 The Chromium Authors |
2 | | // Use of this source code is governed by a BSD-style license that can be |
3 | | // found in the LICENSE file. |
4 | | |
5 | | #ifndef CRDTP_SPAN_H_ |
6 | | #define CRDTP_SPAN_H_ |
7 | | |
8 | | #include <cstdint> |
9 | | #include <cstring> |
10 | | #include <span> |
11 | | #include <string> |
12 | | #include <type_traits> |
13 | | |
14 | | #include "export.h" |
15 | | |
16 | | namespace crdtp { |
17 | | |
18 | | // crdtp::span is a std::span which always holds const elements. |
19 | | template <typename T> |
20 | | using span = std::span<const T>; |
21 | | |
22 | | template <size_t N> |
23 | 0 | constexpr span<char> MakeSpan(const char (&str)[N]) { |
24 | 0 | return span<char>(str, N - 1); |
25 | 0 | } Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<9ul>(char const (&) [9ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<5ul>(char const (&) [5ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<6ul>(char const (&) [6ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<4ul>(char const (&) [4ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<10ul>(char const (&) [10ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<11ul>(char const (&) [11ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<19ul>(char const (&) [19ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<8ul>(char const (&) [8ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<23ul>(char const (&) [23ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<12ul>(char const (&) [12ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<13ul>(char const (&) [13ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<7ul>(char const (&) [7ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<18ul>(char const (&) [18ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<14ul>(char const (&) [14ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<22ul>(char const (&) [22ul]) Unexecuted instantiation: std::__1::span<char const, 18446744073709551615ul> crdtp::MakeSpan<16ul>(char const (&) [16ul]) |
26 | | |
27 | | template <size_t N> |
28 | | constexpr span<uint8_t> SpanFrom(const char (&str)[N]) { |
29 | | return span<uint8_t>(reinterpret_cast<const uint8_t*>(str), N - 1); |
30 | | } |
31 | | |
32 | 0 | constexpr inline span<uint8_t> SpanFrom(const char* str) { |
33 | 0 | return str ? span<uint8_t>(reinterpret_cast<const uint8_t*>(str), strlen(str)) |
34 | 0 | : span<uint8_t>(); |
35 | 0 | } |
36 | | |
37 | 0 | inline span<uint8_t> SpanFrom(const std::string& v) { |
38 | 0 | return span<uint8_t>(reinterpret_cast<const uint8_t*>(v.data()), v.size()); |
39 | 0 | } |
40 | | |
41 | | // This SpanFrom routine works for std::vector<uint8_t> and |
42 | | // std::vector<uint16_t>, but also for base::span<const uint8_t> in Chromium. |
43 | | template <typename C, |
44 | | typename = std::enable_if_t< |
45 | | std::is_unsigned<typename C::value_type>{} && |
46 | | std::is_member_function_pointer<decltype(&C::size)>{}>> |
47 | 0 | inline span<typename C::value_type> SpanFrom(const C& v) { |
48 | 0 | return span<typename C::value_type>(v.data(), v.size()); |
49 | 0 | } |
50 | | |
51 | | // Less than / equality comparison functions for sorting / searching for byte |
52 | | // spans. |
53 | | CRDTP_EXPORT bool SpanLessThan(span<uint8_t> x, span<uint8_t> y) noexcept; |
54 | | CRDTP_EXPORT bool SpanEquals(span<uint8_t> x, span<uint8_t> y) noexcept; |
55 | | |
56 | | // Less than / equality comparison functions for sorting / searching for byte |
57 | | // spans. |
58 | | CRDTP_EXPORT bool SpanLessThan(span<char> x, span<char> y) noexcept; |
59 | | CRDTP_EXPORT bool SpanEquals(span<char> x, span<char> y) noexcept; |
60 | | |
61 | | struct SpanLt { |
62 | 0 | bool operator()(span<uint8_t> l, span<uint8_t> r) const { |
63 | 0 | return SpanLessThan(l, r); |
64 | 0 | } |
65 | | }; |
66 | | } // namespace crdtp |
67 | | |
68 | | #endif // CRDTP_SPAN_H_ |