Coverage Report

Created: 2026-03-12 06:49

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openexr/src/lib/OpenEXR/ImfTileDescriptionAttribute.cpp
Line
Count
Source
1
//
2
// SPDX-License-Identifier: BSD-3-Clause
3
// Copyright (c) Contributors to the OpenEXR Project.
4
//
5
6
//-----------------------------------------------------------------------------
7
//
8
//  class TileDescriptionAttribute
9
//
10
//-----------------------------------------------------------------------------
11
12
#define COMPILING_IMF_STRING_VECTOR_ATTRIBUTE
13
#include "ImfTileDescriptionAttribute.h"
14
15
#if defined(_MSC_VER)
16
// suppress warning about non-exported base classes
17
#    pragma warning(disable : 4251)
18
#    pragma warning(disable : 4275)
19
#endif
20
21
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
22
23
using namespace OPENEXR_IMF_INTERNAL_NAMESPACE;
24
25
template <>
26
IMF_EXPORT const char*
27
TileDescriptionAttribute::staticTypeName ()
28
198
{
29
198
    return "tiledesc";
30
198
}
31
32
template <>
33
IMF_EXPORT void
34
TileDescriptionAttribute::writeValueTo (
35
    OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const
36
0
{
37
0
    Xdr::write<StreamIO> (os, _value.xSize);
38
0
    Xdr::write<StreamIO> (os, _value.ySize);
39
40
0
    unsigned char tmp = _value.mode | (_value.roundingMode << 4);
41
0
    Xdr::write<StreamIO> (os, tmp);
42
0
}
43
44
template <>
45
IMF_EXPORT void
46
TileDescriptionAttribute::readValueFrom (
47
    OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version)
48
0
{
49
0
    Xdr::read<StreamIO> (is, _value.xSize);
50
0
    Xdr::read<StreamIO> (is, _value.ySize);
51
52
0
    unsigned char tmp;
53
0
    Xdr::read<StreamIO> (is, tmp);
54
55
    //
56
    // four bits are allocated for 'mode' for future use (16 possible values)
57
    // but only values 0,1,2 are currently valid. '3' is a special valid enum value
58
    // that indicates bad values have been used
59
    //
60
    // roundingMode can only be 0 or 1, and 2 is a special enum value for 'bad enum'
61
    //
62
0
    unsigned char levelMode = tmp & 0x0f;
63
0
    if (levelMode > 3) { levelMode = 3; }
64
65
0
    _value.mode = LevelMode (levelMode);
66
67
0
    unsigned char levelRoundingMode = (tmp >> 4) & 0x0f;
68
0
    if (levelRoundingMode > 2) { levelRoundingMode = 2; }
69
70
0
    _value.roundingMode = LevelRoundingMode (levelRoundingMode);
71
0
}
72
73
template class IMF_EXPORT_TEMPLATE_INSTANCE
74
    TypedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::TileDescription>;
75
76
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT