Coverage Report

Created: 2025-10-10 06:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/alembic/lib/Alembic/Abc/OBaseProperty.h
Line
Count
Source
1
//-*****************************************************************************
2
//
3
// Copyright (c) 2009-2013,
4
//  Sony Pictures Imageworks, Inc. and
5
//  Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
6
//
7
// All rights reserved.
8
//
9
// Redistribution and use in source and binary forms, with or without
10
// modification, are permitted provided that the following conditions are
11
// met:
12
// *       Redistributions of source code must retain the above copyright
13
// notice, this list of conditions and the following disclaimer.
14
// *       Redistributions in binary form must reproduce the above
15
// copyright notice, this list of conditions and the following disclaimer
16
// in the documentation and/or other materials provided with the
17
// distribution.
18
// *       Neither the name of Sony Pictures Imageworks, nor
19
// Industrial Light & Magic nor the names of their contributors may be used
20
// to endorse or promote products derived from this software without specific
21
// prior written permission.
22
//
23
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
//
35
//-*****************************************************************************
36
37
#ifndef Alembic_Abc_OBaseProperty_h
38
#define Alembic_Abc_OBaseProperty_h
39
40
#include <Alembic/Abc/Foundation.h>
41
#include <Alembic/Abc/Base.h>
42
#include <Alembic/Abc/Argument.h>
43
#include <Alembic/Abc/OObject.h>
44
#include <Alembic/Abc/OArchive.h>
45
46
namespace Alembic {
47
namespace Abc {
48
namespace ALEMBIC_VERSION_NS {
49
50
//-*****************************************************************************
51
//! Most of the functionality of properties (getting information about the
52
//! properties and so on) is common to all property types, so we create
53
//! a base class to contain all that functionality.
54
//! This is purely a base class for other properties to derive from,
55
//! it will never be created directly.
56
template <class PROP_PTR>
57
class OBasePropertyT : public Base
58
{
59
public:
60
    //! By convention we always define this_type in Abc classes
61
    //! Used by unspecified-bool-type conversion below
62
    typedef OBasePropertyT<PROP_PTR> this_type;
63
    typedef OBasePropertyT<PROP_PTR> operator_bool_base_type;
64
65
protected:
66
    friend class OCompoundProperty;
67
68
    //-*************************************************************************
69
    // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
70
    //-*************************************************************************
71
72
    //! The default constructor creates an empty OBaseProperty function set.
73
    //! ...
74
    OBasePropertyT() {}
75
76
    //! This attaches an OBaseProperty wrapper around an existing
77
    //! PROP_PTR, with the given error handler policy
78
    OBasePropertyT(
79
80
        //! The pointer
81
        //! ...
82
        PROP_PTR iPtr,
83
84
        //! The error handling.
85
        //! ...
86
        ErrorHandler::Policy iPolicy );
87
88
    //! Default copy constructor used
89
    //! Default assignment operator used.
90
91
public:
92
    //-*************************************************************************
93
    // PROPERTY WRITER FUNCTIONALITY
94
    //-*************************************************************************
95
96
    //! Return the property's header.
97
    //! ...
98
    const AbcA::PropertyHeader & getHeader() const;
99
100
    //! This function returns the property's local name
101
    //! ...
102
    const std::string &getName() const
103
    { return getHeader().getName(); }
104
105
    //! This function returns the property's type
106
    //! ...
107
    AbcA::PropertyType getPropertyType() const
108
    { return getHeader().getPropertyType(); }
109
110
    //! Convenience to return whether the property is scalar.
111
    //! Same as getPropertyType() == kScalarProperty
112
    bool isScalar() const { return getPropertyType() == AbcA::kScalarProperty; }
113
114
    //! Convenience to return whether the property is array.
115
    //! Same as getPropertyType() == kArrayProperty
116
    bool isArray() const { return getPropertyType() == AbcA::kArrayProperty; }
117
118
    //! Convenience to return whether the property is compound.
119
    //! Same as getPropertyType() == kCompoundProperty
120
    bool isCompound() const { return getPropertyType() ==
121
            AbcA::kCompoundProperty; }
122
123
    //! Convenience to return whether the property is simple (non-compound)
124
    //! Same as getPropertyType() != kCompoundProperty
125
    bool isSimple() const { return !isCompound(); }
126
127
    //! All properties have MetaData. This just returns the
128
    //! MetaData portion of the header that was used in creation.
129
    const AbcA::MetaData &getMetaData() const
130
    { return getHeader().getMetaData(); }
131
132
    //! Non-compound properties have a DataType. It is an error
133
    //! to call this function for CompoundProperties, and an exception will
134
    //! be thrown. This is a convenience function which just returns the
135
    //! DataType from the header that was used in creation.
136
    const AbcA::DataType &getDataType() const
137
    { return getHeader().getDataType(); }
138
139
    //! Non-compound properties have a TimeSamplingPtr. It is an error
140
    //! to call this function for CompoundProperties, and an exception will
141
    //! be thrown. This is a convenience function which just returns the
142
    //! TimeSamplingPtr from the header that was used in creation.
143
    AbcA::TimeSamplingPtr getTimeSampling() const
144
0
    { return getHeader().getTimeSampling(); }
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ArrayPropertyWriter> >::getTimeSampling() const
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ScalarPropertyWriter> >::getTimeSampling() const
145
146
    //! This function returns the property's object, handily
147
    //! wrapped in an OObject wrapper.
148
    OObject getObject() const;
149
150
    //! Can't wrap
151
    //! OCompoundProperty getParent();
152
153
    //-*************************************************************************
154
    // ABC BASE MECHANISMS
155
    // These functions are used by Abc to deal with errors, rewrapping,
156
    // and so on.
157
    //-*************************************************************************
158
159
    //! getPtr, as usual, returns a shared ptr to the
160
    //! underlying AbcCoreAbstract object, in this case the
161
    //! PROP_PTR.
162
0
    PROP_PTR getPtr() const { return m_property; }
163
164
    //! Reset returns this function set to an empty, default
165
    //! state.
166
0
    void reset() { m_property.reset(); Base::reset(); }
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ArrayPropertyWriter> >::reset()
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ScalarPropertyWriter> >::reset()
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::CompoundPropertyWriter> >::reset()
167
168
    //! Valid returns whether this function set is
169
    //! valid.
170
    bool valid() const
171
0
    {
172
0
        return ( Base::valid() && m_property );
173
0
    }
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ArrayPropertyWriter> >::valid() const
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::CompoundPropertyWriter> >::valid() const
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ScalarPropertyWriter> >::valid() const
174
175
    //! The unspecified-bool-type operator casts the object to "true"
176
    //! if it is valid, and "false" otherwise.
177
    ALEMBIC_OPERATOR_BOOL( valid() );
178
179
protected:
180
    PROP_PTR m_property;
181
};
182
183
//-*****************************************************************************
184
typedef OBasePropertyT<AbcA::BasePropertyWriterPtr> OBaseProperty;
185
186
//-*****************************************************************************
187
// TEMPLATE AND INLINE FUNCTIONS
188
//-*****************************************************************************
189
190
//-*****************************************************************************
191
template <class PROP_PTR>
192
inline OBasePropertyT<PROP_PTR>::OBasePropertyT
193
(
194
    PROP_PTR iPtr,
195
    ErrorHandler::Policy iPolicy )
196
  : m_property( iPtr )
197
{
198
    getErrorHandler().setPolicy( iPolicy );
199
}
200
201
namespace {
202
203
const AbcA::PropertyHeader g_phd;
204
205
}
206
207
//-*****************************************************************************
208
//-*****************************************************************************
209
//-*****************************************************************************
210
template <class PROP_PTR>
211
const AbcA::PropertyHeader &OBasePropertyT<PROP_PTR>::getHeader() const
212
0
{
213
0
    ALEMBIC_ABC_SAFE_CALL_BEGIN( "OBaseProperty::getHeader()" );
214
0
215
0
    return m_property->getHeader();
216
0
217
0
    ALEMBIC_ABC_SAFE_CALL_END();
218
0
219
0
    // Not all error handlers throw, so have a default behavior.
220
0
    return g_phd;
221
0
};
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ArrayPropertyWriter> >::getHeader() const
Unexecuted instantiation: Alembic::Abc::v12::OBasePropertyT<std::__1::shared_ptr<Alembic::AbcCoreAbstract::v12::ScalarPropertyWriter> >::getHeader() const
222
223
//-*****************************************************************************
224
template <class PROP_PTR>
225
OObject OBasePropertyT<PROP_PTR>::getObject() const
226
0
{
227
0
    ALEMBIC_ABC_SAFE_CALL_BEGIN( "OBaseProperty::getObject()" );
228
0
229
0
    return OObject( m_property->getObject(),
230
0
                    getErrorHandlerPolicy() );
231
0
232
0
    ALEMBIC_ABC_SAFE_CALL_END();
233
0
234
0
    // Not all error handlers throw. Have a default.
235
0
    return OObject();
236
0
}
237
238
} // End namespace ALEMBIC_VERSION_NS
239
240
using namespace ALEMBIC_VERSION_NS;
241
242
} // End namespace Abc
243
} // End namespace Alembic
244
245
#endif