Coverage Report

Created: 2026-03-20 04:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exec/common/endian.h
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#pragma once
19
20
#include "core/extended_types.h"
21
#include "core/uint24.h"
22
#include "util/unaligned.h"
23
24
namespace doris {
25
#include "common/compile_check_begin.h"
26
8.11k
inline uint64_t gbswap_64(uint64_t host_int) {
27
8.11k
#if defined(__GNUC__) && defined(__x86_64__) && !defined(__APPLE__)
28
    // Adapted from /usr/include/byteswap.h.  Not available on Mac.
29
8.11k
    if (__builtin_constant_p(host_int)) {
30
0
        return __bswap_constant_64(host_int);
31
8.11k
    } else {
32
8.11k
        uint64_t result;
33
8.11k
        __asm__("bswap %0" : "=r"(result) : "0"(host_int));
34
8.11k
        return result;
35
8.11k
    }
36
#elif defined(bswap_64)
37
    return bswap_64(host_int);
38
#else
39
    return static_cast<uint64_t>(bswap_32(static_cast<uint32_t>(host_int >> 32))) |
40
           (static_cast<uint64_t>(bswap_32(static_cast<uint32_t>(host_int))) << 32);
41
#endif // bswap_64
42
8.11k
}
43
44
7.31M
inline unsigned __int128 gbswap_128(unsigned __int128 host_int) {
45
7.31M
    return static_cast<unsigned __int128>(bswap_64(static_cast<uint64_t>(host_int >> 64))) |
46
7.31M
           (static_cast<unsigned __int128>(bswap_64(static_cast<uint64_t>(host_int))) << 64);
47
7.31M
}
48
49
2.02k
inline wide::UInt256 gbswap_256(wide::UInt256 host_int) {
50
2.02k
    wide::UInt256 result {gbswap_64(host_int.items[3]), gbswap_64(host_int.items[2]),
51
2.02k
                          gbswap_64(host_int.items[1]), gbswap_64(host_int.items[0])};
52
2.02k
    return result;
53
2.02k
}
54
55
// Swap bytes of a 24-bit value.
56
401k
inline uint32_t bswap_24(uint32_t x) {
57
401k
    return uint32_t((x & 0x0000ffULL) << 16) | ((x & 0x00ff00ULL)) | ((x & 0xff0000ULL) >> 16);
58
401k
}
59
60
// use std::byteswap after doris enable cpp23
61
template <typename T>
62
54.1M
T byte_swap(T x) {
63
54.1M
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
2.02k
        return gbswap_256(x);
65
7.31M
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
7.31M
        return gbswap_128(x);
67
19.8M
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
19.8M
        return bswap_64(x);
69
24.5M
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
24.5M
        return bswap_32(x);
71
24.5M
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
402k
        return bswap_24(x);
73
620k
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
620k
        return bswap_16(x);
75
1.35M
    } else {
76
1.35M
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
1.35M
        return x; // No byte swap needed for unsupported types
78
1.35M
    }
79
54.1M
}
_ZN5doris9byte_swapItEET_S1_
Line
Count
Source
62
620k
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
620k
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
620k
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
620k
}
_ZN5doris9byte_swapIjEET_S1_
Line
Count
Source
62
24.5M
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
24.5M
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
24.5M
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
24.5M
}
_ZN5doris9byte_swapImEET_S1_
Line
Count
Source
62
17.8M
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
17.8M
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
17.8M
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
17.8M
}
_ZN5doris9byte_swapINS_8uint24_tEEET_S2_
Line
Count
Source
62
402k
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
402k
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
402k
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
402k
}
_ZN5doris9byte_swapIlEET_S1_
Line
Count
Source
62
1.97M
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
1.97M
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
1.97M
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
1.97M
}
_ZN5doris9byte_swapInEET_S1_
Line
Count
Source
62
5.40M
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
5.40M
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
5.40M
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
5.40M
}
_ZN5doris9byte_swapIN4wide7integerILm256EiEEEET_S4_
Line
Count
Source
62
20
T byte_swap(T x) {
63
20
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
20
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
20
}
_ZN5doris9byte_swapIiEET_S1_
Line
Count
Source
62
56
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
56
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
56
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
56
}
_ZN5doris9byte_swapIhEET_S1_
Line
Count
Source
62
1.35M
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
1.35M
    } else {
76
1.35M
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
1.35M
        return x; // No byte swap needed for unsupported types
78
1.35M
    }
79
1.35M
}
_ZN5doris9byte_swapIoEET_S1_
Line
Count
Source
62
1.90M
T byte_swap(T x) {
63
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
        return gbswap_256(x);
65
1.90M
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
1.90M
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
1.90M
}
_ZN5doris9byte_swapIN4wide7integerILm256EjEEEET_S4_
Line
Count
Source
62
2.00k
T byte_swap(T x) {
63
2.00k
    if constexpr (sizeof(T) == sizeof(wide::Int256)) {
64
2.00k
        return gbswap_256(x);
65
    } else if constexpr (sizeof(T) == sizeof(__int128)) {
66
        return gbswap_128(x);
67
    } else if constexpr (sizeof(T) == sizeof(int64_t)) {
68
        return bswap_64(x);
69
    } else if constexpr (sizeof(T) == sizeof(int32_t)) {
70
        return bswap_32(x);
71
    } else if constexpr (sizeof(T) == sizeof(doris::uint24_t)) {
72
        return bswap_24(x);
73
    } else if constexpr (sizeof(T) == sizeof(int16_t)) {
74
        return bswap_16(x);
75
    } else {
76
        static_assert(sizeof(T) == 1, "Unsupported type size for byte_swap");
77
        return x; // No byte swap needed for unsupported types
78
    }
79
2.00k
}
80
81
template <std::endian target, typename T>
82
364M
T to_endian(T value) {
83
364M
    if constexpr (std::endian::native == target) {
84
310M
        return value; // No swap needed
85
310M
    } else {
86
54.1M
        static_assert(std::endian::native == std::endian::big ||
87
54.1M
                              std::endian::native == std::endian::little,
88
54.1M
                      "Unsupported endianness");
89
54.1M
        return byte_swap(value);
90
54.1M
    }
91
364M
}
_ZN5doris9to_endianILSt6endian1234EtEET0_S2_
Line
Count
Source
82
596k
T to_endian(T value) {
83
596k
    if constexpr (std::endian::native == target) {
84
596k
        return value; // No swap needed
85
    } else {
86
        static_assert(std::endian::native == std::endian::big ||
87
                              std::endian::native == std::endian::little,
88
                      "Unsupported endianness");
89
        return byte_swap(value);
90
    }
91
596k
}
_ZN5doris9to_endianILSt6endian1234EjEET0_S2_
Line
Count
Source
82
305M
T to_endian(T value) {
83
305M
    if constexpr (std::endian::native == target) {
84
305M
        return value; // No swap needed
85
    } else {
86
        static_assert(std::endian::native == std::endian::big ||
87
                              std::endian::native == std::endian::little,
88
                      "Unsupported endianness");
89
        return byte_swap(value);
90
    }
91
305M
}
_ZN5doris9to_endianILSt6endian1234EmEET0_S2_
Line
Count
Source
82
3.88M
T to_endian(T value) {
83
3.88M
    if constexpr (std::endian::native == target) {
84
3.88M
        return value; // No swap needed
85
    } else {
86
        static_assert(std::endian::native == std::endian::big ||
87
                              std::endian::native == std::endian::little,
88
                      "Unsupported endianness");
89
        return byte_swap(value);
90
    }
91
3.88M
}
_ZN5doris9to_endianILSt6endian4321EtEET0_S2_
Line
Count
Source
82
621k
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
621k
    } else {
86
621k
        static_assert(std::endian::native == std::endian::big ||
87
621k
                              std::endian::native == std::endian::little,
88
621k
                      "Unsupported endianness");
89
621k
        return byte_swap(value);
90
621k
    }
91
621k
}
_ZN5doris9to_endianILSt6endian4321EjEET0_S2_
Line
Count
Source
82
24.5M
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
24.5M
    } else {
86
24.5M
        static_assert(std::endian::native == std::endian::big ||
87
24.5M
                              std::endian::native == std::endian::little,
88
24.5M
                      "Unsupported endianness");
89
24.5M
        return byte_swap(value);
90
24.5M
    }
91
24.5M
}
_ZN5doris9to_endianILSt6endian4321EmEET0_S2_
Line
Count
Source
82
17.8M
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
17.8M
    } else {
86
17.8M
        static_assert(std::endian::native == std::endian::big ||
87
17.8M
                              std::endian::native == std::endian::little,
88
17.8M
                      "Unsupported endianness");
89
17.8M
        return byte_swap(value);
90
17.8M
    }
91
17.8M
}
_ZN5doris9to_endianILSt6endian1234EoEET0_S2_
Line
Count
Source
82
48.8k
T to_endian(T value) {
83
48.8k
    if constexpr (std::endian::native == target) {
84
48.8k
        return value; // No swap needed
85
    } else {
86
        static_assert(std::endian::native == std::endian::big ||
87
                              std::endian::native == std::endian::little,
88
                      "Unsupported endianness");
89
        return byte_swap(value);
90
    }
91
48.8k
}
_ZN5doris9to_endianILSt6endian4321ENS_8uint24_tEEET0_S3_
Line
Count
Source
82
402k
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
402k
    } else {
86
402k
        static_assert(std::endian::native == std::endian::big ||
87
402k
                              std::endian::native == std::endian::little,
88
402k
                      "Unsupported endianness");
89
402k
        return byte_swap(value);
90
402k
    }
91
402k
}
_ZN5doris9to_endianILSt6endian4321ElEET0_S2_
Line
Count
Source
82
1.97M
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
1.97M
    } else {
86
1.97M
        static_assert(std::endian::native == std::endian::big ||
87
1.97M
                              std::endian::native == std::endian::little,
88
1.97M
                      "Unsupported endianness");
89
1.97M
        return byte_swap(value);
90
1.97M
    }
91
1.97M
}
_ZN5doris9to_endianILSt6endian4321EnEET0_S2_
Line
Count
Source
82
5.40M
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
5.40M
    } else {
86
5.40M
        static_assert(std::endian::native == std::endian::big ||
87
5.40M
                              std::endian::native == std::endian::little,
88
5.40M
                      "Unsupported endianness");
89
5.40M
        return byte_swap(value);
90
5.40M
    }
91
5.40M
}
_ZN5doris9to_endianILSt6endian4321EN4wide7integerILm256EiEEEET0_S5_
Line
Count
Source
82
20
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
20
    } else {
86
20
        static_assert(std::endian::native == std::endian::big ||
87
20
                              std::endian::native == std::endian::little,
88
20
                      "Unsupported endianness");
89
20
        return byte_swap(value);
90
20
    }
91
20
}
_ZN5doris9to_endianILSt6endian4321EiEET0_S2_
Line
Count
Source
82
56
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
56
    } else {
86
56
        static_assert(std::endian::native == std::endian::big ||
87
56
                              std::endian::native == std::endian::little,
88
56
                      "Unsupported endianness");
89
56
        return byte_swap(value);
90
56
    }
91
56
}
_ZN5doris9to_endianILSt6endian4321EhEET0_S2_
Line
Count
Source
82
1.35M
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
1.35M
    } else {
86
1.35M
        static_assert(std::endian::native == std::endian::big ||
87
1.35M
                              std::endian::native == std::endian::little,
88
1.35M
                      "Unsupported endianness");
89
1.35M
        return byte_swap(value);
90
1.35M
    }
91
1.35M
}
_ZN5doris9to_endianILSt6endian4321EoEET0_S2_
Line
Count
Source
82
1.91M
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
1.91M
    } else {
86
1.91M
        static_assert(std::endian::native == std::endian::big ||
87
1.91M
                              std::endian::native == std::endian::little,
88
1.91M
                      "Unsupported endianness");
89
1.91M
        return byte_swap(value);
90
1.91M
    }
91
1.91M
}
_ZN5doris9to_endianILSt6endian4321EN4wide7integerILm256EjEEEET0_S5_
Line
Count
Source
82
2.00k
T to_endian(T value) {
83
    if constexpr (std::endian::native == target) {
84
        return value; // No swap needed
85
2.00k
    } else {
86
2.00k
        static_assert(std::endian::native == std::endian::big ||
87
2.00k
                              std::endian::native == std::endian::little,
88
2.00k
                      "Unsupported endianness");
89
2.00k
        return byte_swap(value);
90
2.00k
    }
91
2.00k
}
92
93
// Utilities to convert numbers between the current hosts's native byte
94
// order and little-endian byte order
95
//
96
// Load/Store methods are alignment safe
97
class LittleEndian {
98
public:
99
    // Functions to do unaligned loads and stores in little-endian order.
100
0
    static uint16_t Load16(const void* p) {
101
0
        return to_endian<std::endian::little>(unaligned_load<uint16_t>(p));
102
0
    }
103
104
0
    static void Store16(void* p, uint16_t v) {
105
0
        unaligned_store<uint16_t>(p, to_endian<std::endian::little>(v));
106
0
    }
107
108
16.5M
    static uint32_t Load32(const void* p) {
109
16.5M
        return to_endian<std::endian::little>(unaligned_load<uint32_t>(p));
110
16.5M
    }
111
112
0
    static void Store32(void* p, uint32_t v) {
113
0
        unaligned_store<uint32_t>(p, to_endian<std::endian::little>(v));
114
0
    }
115
116
3.06M
    static uint64_t Load64(const void* p) {
117
3.06M
        return to_endian<std::endian::little>(unaligned_load<uint64_t>(p));
118
3.06M
    }
119
120
0
    static void Store64(void* p, uint64_t v) {
121
0
        unaligned_store<uint64_t>(p, to_endian<std::endian::little>(v));
122
0
    }
123
};
124
125
// Utilities to convert numbers between the current hosts's native byte
126
// order and big-endian byte order (same as network byte order)
127
//
128
// Load/Store methods are alignment safe
129
class BigEndian {
130
public:
131
    // Functions to do unaligned loads and stores in little-endian order.
132
0
    static uint16_t Load16(const void* p) {
133
0
        return to_endian<std::endian::big>(unaligned_load<uint16_t>(p));
134
0
    }
135
136
0
    static void Store16(void* p, uint16_t v) {
137
0
        unaligned_store<uint16_t>(p, to_endian<std::endian::big>(v));
138
0
    }
139
140
21.7k
    static uint32_t Load32(const void* p) {
141
21.7k
        return to_endian<std::endian::big>(unaligned_load<uint32_t>(p));
142
21.7k
    }
143
144
2.37k
    static void Store32(void* p, uint32_t v) {
145
2.37k
        unaligned_store<uint32_t>(p, to_endian<std::endian::big>(v));
146
2.37k
    }
147
148
0
    static uint64_t Load64(const void* p) {
149
0
        return to_endian<std::endian::big>(unaligned_load<uint64_t>(p));
150
0
    }
151
152
0
    static void Store64(void* p, uint64_t v) {
153
0
        unaligned_store<uint64_t>(p, to_endian<std::endian::big>(v));
154
0
    }
155
}; // BigEndian
156
#include "common/compile_check_end.h"
157
} // namespace doris