Coverage Report

Created: 2026-02-26 07:48

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openexr/src/lib/OpenEXR/ImfOpaqueAttribute.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 OpaqueAttribute
9
//
10
//-----------------------------------------------------------------------------
11
12
#include "Iex.h"
13
#include "ImfNamespace.h"
14
#include <ImfOpaqueAttribute.h>
15
#include <string.h>
16
17
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
18
19
#if defined(_MSC_VER)
20
// suppress warning about non-exported base classes
21
#    pragma warning(disable : 4251)
22
#    pragma warning(disable : 4275)
23
#endif
24
25
OpaqueAttribute::OpaqueAttribute (const char typeName[])
26
0
    : _typeName (typeName), _dataSize (0)
27
0
{}
28
29
OpaqueAttribute::OpaqueAttribute (const char  typeName[],
30
                                  long        dataSize,
31
                                  const void* data)
32
58.8k
    : _typeName (typeName), _dataSize (dataSize)
33
58.8k
{
34
58.8k
    _data.resizeErase (dataSize);
35
58.8k
    memcpy ((char*) _data, (const char*) data, dataSize);
36
58.8k
}
37
38
OpaqueAttribute::OpaqueAttribute (const OpaqueAttribute& other)
39
58.8k
    : _typeName (other._typeName)
40
58.8k
    , _dataSize (other._dataSize)
41
58.8k
    , _data (other._dataSize)
42
58.8k
{
43
58.8k
    _data.resizeErase (other._dataSize);
44
58.8k
    memcpy ((char*) _data, (const char*) other._data, other._dataSize);
45
58.8k
}
46
47
OpaqueAttribute::~OpaqueAttribute ()
48
117k
{
49
    // empty
50
117k
}
51
52
const char*
53
OpaqueAttribute::typeName () const
54
349
{
55
349
    return _typeName.c_str ();
56
349
}
57
58
Attribute*
59
OpaqueAttribute::copy () const
60
58.8k
{
61
58.8k
    return new OpaqueAttribute (*this);
62
58.8k
}
63
64
void
65
OpaqueAttribute::writeValueTo (
66
    OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const
67
0
{
68
0
    Xdr::write<StreamIO> (os, _data, _dataSize);
69
0
}
70
71
void
72
OpaqueAttribute::readValueFrom (
73
    OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version)
74
0
{
75
0
    _data.resizeErase (size);
76
0
    _dataSize = size;
77
0
    Xdr::read<StreamIO> (is, _data, size);
78
0
}
79
80
void
81
OpaqueAttribute::copyValueFrom (const Attribute& other)
82
0
{
83
0
    const OpaqueAttribute* oa = dynamic_cast<const OpaqueAttribute*> (&other);
84
85
0
    if (oa == 0 || _typeName != oa->_typeName)
86
0
    {
87
0
        THROW (
88
0
            IEX_NAMESPACE::TypeExc,
89
0
            "Cannot copy the value of an "
90
0
            "image file attribute of type "
91
0
            "\"" << other.typeName ()
92
0
                 << "\" "
93
0
                    "to an attribute of type "
94
0
                    "\""
95
0
                 << _typeName << "\".");
96
0
    }
97
98
0
    _data.resizeErase (oa->_dataSize);
99
0
    _dataSize = oa->_dataSize;
100
0
    memcpy ((char*) _data, (const char*) oa->_data, oa->_dataSize);
101
0
}
102
103
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT