Coverage Report

Created: 2026-10-28 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/Fast-CDR/src/cpp/CdrSizeCalculator.cpp
Line
Count
Source
1
// Copyright 2023 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include <fastcdr/CdrSizeCalculator.hpp>
16
17
namespace eprosima {
18
namespace fastcdr {
19
20
CdrSizeCalculator::CdrSizeCalculator(
21
        CdrVersion cdr_version)
22
0
    : cdr_version_(cdr_version)
23
0
{
24
0
    switch (cdr_version_)
25
0
    {
26
0
        case CdrVersion::XCDRv2:
27
0
            break;
28
0
        default:
29
0
            current_encoding_ = EncodingAlgorithmFlag::PLAIN_CDR;
30
0
            align64_ = 8;
31
0
            break;
32
0
    }
33
0
}
34
35
CdrSizeCalculator::CdrSizeCalculator(
36
        const std::shared_ptr<CdrContext>& context,
37
        CdrVersion cdr_version)
38
0
    : CdrSizeCalculator(cdr_version)
39
0
{
40
0
    context_ = context;
41
0
}
42
43
CdrSizeCalculator::CdrSizeCalculator(
44
        CdrVersion cdr_version,
45
        EncodingAlgorithmFlag encoding)
46
0
    : CdrSizeCalculator(cdr_version)
47
0
{
48
0
    current_encoding_ = encoding;
49
0
}
50
51
CdrSizeCalculator::CdrSizeCalculator(
52
        const std::shared_ptr<CdrContext>& context,
53
        CdrVersion cdr_version,
54
        EncodingAlgorithmFlag encoding)
55
0
    : CdrSizeCalculator(cdr_version, encoding)
56
0
{
57
0
    context_ = context;
58
0
}
59
60
CdrVersion CdrSizeCalculator::get_cdr_version() const
61
0
{
62
0
    return cdr_version_;
63
0
}
64
65
EncodingAlgorithmFlag CdrSizeCalculator::get_encoding() const
66
0
{
67
0
    return current_encoding_;
68
0
}
69
70
std::shared_ptr<CdrContext> CdrSizeCalculator::get_context() const
71
0
{
72
0
    return context_;
73
0
}
74
75
size_t CdrSizeCalculator::begin_calculate_type_serialized_size(
76
        EncodingAlgorithmFlag new_encoding,
77
        size_t& current_alignment)
78
0
{
79
0
    size_t calculated_size {0};
80
0
    current_encoding_ = new_encoding;
81
82
0
    if (CdrVersion::XCDRv2 == cdr_version_ && EncodingAlgorithmFlag::PLAIN_CDR2 != current_encoding_)
83
0
    {
84
0
        calculated_size = 4 + alignment(current_alignment, 4);     // DHEADER
85
0
    }
86
87
0
    current_alignment += calculated_size;
88
89
0
    serialized_member_size_ = NO_SERIALIZED_MEMBER_SIZE;     // Avoid error when serializing arrays, sequences, etc..
90
91
0
    return calculated_size;
92
0
}
93
94
size_t CdrSizeCalculator::end_calculate_type_serialized_size(
95
        EncodingAlgorithmFlag new_encoding,
96
        size_t& current_alignment)
97
0
{
98
0
    size_t calculated_size {0};
99
100
0
    if (CdrVersion::XCDRv1 == cdr_version_ && EncodingAlgorithmFlag::PL_CDR == current_encoding_)
101
0
    {
102
0
        calculated_size = 4 + alignment(current_alignment, 4);     // Sentinel
103
0
    }
104
0
    else if (CdrVersion::XCDRv2 == cdr_version_ && EncodingAlgorithmFlag::PLAIN_CDR2 != current_encoding_)
105
0
    {
106
0
        serialized_member_size_ = SERIALIZED_MEMBER_SIZE;
107
0
    }
108
109
0
    current_alignment += calculated_size;
110
111
0
    current_encoding_ = new_encoding;
112
113
0
    return calculated_size;
114
0
}
115
116
} // namespace fastcdr
117
} // namespace eprosima