• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

afxres / binary-cxx / 12989139270

27 Jan 2025 12:35PM UTC coverage: 94.521% (+0.2%) from 94.291%
12989139270

push

github

afxres
Add shared exception functions

17 of 19 new or added lines in 6 files covered. (89.47%)

483 of 511 relevant lines covered (94.52%)

65.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.96
/next/binary/src/ConverterExtensions.cpp
1
#include "binary/ConverterExtensions.hpp"
2

3
#include <cassert>
4
#include <cstddef>
5
#include <cstring>
6
#include <span>
7

8
#include "binary/Allocator.hpp"
9
#include "binary/internal/AllocatorUnsafeAccessor.hpp"
10
#include "binary/internal/Exception.hpp"
11
#include "binary/internal/Length.hpp"
12

13
namespace binary {
14
void Encode(Allocator& allocator, size_t number) {
9✔
15
    internal::EnsureLengthPrefixLength(number);
9✔
16
    size_t prefixLength = internal::EncodeLengthPrefixLength(number);
7✔
17
    std::byte* source = internal::AllocatorUnsafeAccessor::Assign(allocator, prefixLength);
7✔
18
    internal::EncodeLengthPrefix(source, number, prefixLength);
7✔
19
}
7✔
20

21
void Encode(std::span<std::byte> span, size_t number, size_t& bytesWritten) {
16✔
22
    internal::EnsureLengthPrefixLength(number);
16✔
23
    size_t prefixLength = internal::EncodeLengthPrefixLength(number);
14✔
24
    if (span.size() < prefixLength) {
14✔
25
        internal::ThrowNotEnoughBytesToWrite();
7✔
26
    }
27
    internal::EncodeLengthPrefix(span.data(), number, prefixLength);
7✔
28
    bytesWritten = prefixLength;
7✔
29
}
7✔
30

31
void EncodeWithLengthPrefix(Allocator& allocator, const std::span<const std::byte>& span) {
16✔
32
    size_t number = span.size();
16✔
33
    internal::EnsureLengthPrefixLength(number);
16✔
34
    size_t prefixLength = internal::EncodeLengthPrefixLength(number);
16✔
35
    std::byte* source = internal::AllocatorUnsafeAccessor::Assign(allocator, number + prefixLength);
16✔
36
    internal::EncodeLengthPrefix(source, number, prefixLength);
12✔
37
    memcpy(source + prefixLength, span.data(), number);
12✔
38
}
12✔
39

40
size_t Decode(std::span<const std::byte>& span) {
10✔
41
    const std::byte* source = span.data();
10✔
42
    size_t offset = 0;
10✔
43
    size_t length = internal::DecodeLengthPrefix(source, offset, span.size());
10✔
44
    assert(offset == 1 || offset == 4);
6✔
45
    assert(offset <= span.size());
6✔
46
    span = span.subspan(offset);
6✔
47
    return length;
6✔
48
}
49

50
size_t Decode(const std::span<const std::byte>& span, size_t& bytesRead) {
10✔
51
    const std::byte* source = span.data();
10✔
52
    size_t offset = 0;
10✔
53
    size_t length = internal::DecodeLengthPrefix(source, offset, span.size());
10✔
54
    assert(offset == 1 || offset == 4);
6✔
55
    assert(offset <= span.size());
6✔
56
    bytesRead = offset;
6✔
57
    return length;
6✔
58
}
59

60
std::span<const std::byte> DecodeWithLengthPrefix(std::span<const std::byte>& span) {
49✔
61
    const std::byte* source = span.data();
49✔
62
    size_t offset = 0;
49✔
63
    size_t length = internal::DecodeLengthPrefix(source, offset, span.size());
49✔
64
    assert(offset == 1 || offset == 4);
49✔
65
    assert(offset <= span.size());
49✔
66
    if (span.size() < offset + length) {
49✔
NEW
67
        internal::ThrowNotEnoughBytes();
×
68
    }
69
    std::span<const std::byte> result = span.subspan(offset, length);
49✔
70
    span = span.subspan(offset + length);
49✔
71
    return result;
49✔
72
}
73
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc