1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "span.h"
6
7 #include <algorithm>
8
9 namespace v8_crdtp {
10
SpanLessThan(span<uint8_t> x,span<uint8_t> y)11 bool SpanLessThan(span<uint8_t> x, span<uint8_t> y) noexcept {
12 auto min_size = std::min(x.size(), y.size());
13 const int r = min_size == 0 ? 0 : memcmp(x.data(), y.data(), min_size);
14 return (r < 0) || (r == 0 && x.size() < y.size());
15 }
16
SpanEquals(span<uint8_t> x,span<uint8_t> y)17 bool SpanEquals(span<uint8_t> x, span<uint8_t> y) noexcept {
18 auto len = x.size();
19 if (len != y.size())
20 return false;
21 return x.data() == y.data() || len == 0 ||
22 std::memcmp(x.data(), y.data(), len) == 0;
23 }
24
SpanLessThan(span<char> x,span<char> y)25 bool SpanLessThan(span<char> x, span<char> y) noexcept {
26 auto min_size = std::min(x.size(), y.size());
27 const int r = min_size == 0 ? 0 : memcmp(x.data(), y.data(), min_size);
28 return (r < 0) || (r == 0 && x.size() < y.size());
29 }
30
SpanEquals(span<char> x,span<char> y)31 bool SpanEquals(span<char> x, span<char> y) noexcept {
32 auto len = x.size();
33 if (len != y.size())
34 return false;
35 return x.data() == y.data() || len == 0 ||
36 std::memcmp(x.data(), y.data(), len) == 0;
37 }
38
39 } // namespace v8_crdtp
40