Coverage Report

Created: 2026-06-09 06:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/alembic/lib/Alembic/Abc/ICompoundProperty.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_ICompoundProperty_h
38
#define Alembic_Abc_ICompoundProperty_h
39
40
#include <Alembic/Util/Export.h>
41
#include <Alembic/Abc/Foundation.h>
42
#include <Alembic/Abc/Argument.h>
43
#include <Alembic/Abc/Base.h>
44
#include <Alembic/Abc/IBaseProperty.h>
45
46
namespace Alembic {
47
namespace Abc {
48
namespace ALEMBIC_VERSION_NS {
49
50
//-*****************************************************************************
51
class ALEMBIC_EXPORT ICompoundProperty
52
    : public IBasePropertyT<AbcA::CompoundPropertyReaderPtr>
53
{
54
public:
55
    //! By convention we always define this_type in Abc classes
56
    //! Used by unspecified-bool-type conversion below
57
    typedef ICompoundProperty this_type;
58
59
    //-*************************************************************************
60
    // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
61
    //-*************************************************************************
62
63
    //! The default constructor creates an empty ICompoundProperty function set.
64
    //! ...
65
36
    ICompoundProperty() : IBasePropertyT<AbcA::CompoundPropertyReaderPtr>() {}
66
67
    //! This constructor creates a new compound property reader.
68
    //! The first argument is the parent ICompundProperty, from which the error
69
    //! handler policy for inheritance is also derived.  The remaining optional
70
    //! arguments can be used to override the ErrorHandlerPolicy, and that's it.
71
    ICompoundProperty( const ICompoundProperty & iParent,
72
                       const std::string & iName,
73
                       const Argument & iArg0 = Argument() );
74
75
    //! This attaches an ICompoundProperty wrapper around an existing
76
    //! CompoundPropertyReaderPtr, with an optional error handling policy.
77
    //!
78
    //! The extra argument is to support ISchema, which is publicly derived
79
    //! from ICompoundProperty (see ISchema.h).
80
    ICompoundProperty(
81
        AbcA::CompoundPropertyReaderPtr iPtr,
82
        const Argument &iArg0 = Argument(),
83
        const Argument &iArg1 = Argument() );
84
85
    // Deprecated in favor of the constructor above
86
    ICompoundProperty(
87
        AbcA::CompoundPropertyReaderPtr iPtr,
88
        WrapExistingFlag /* iWrapFlag */,
89
        const Argument &iArg0 = Argument(),
90
        const Argument &iArg1 = Argument() );
91
92
    //! This attaches an ICompoundProperty wrapper around the top
93
    //! properties of any object, with an optional error handling policy.
94
    //!
95
    //! The extra argument is to support ISchema, which is publicly derived
96
    //! from ICompoundProperty (see ISchema.h).
97
    ICompoundProperty(
98
        const IObject & iObject,
99
        const Argument &iArg0 = Argument(),
100
        const Argument &iArg1 = Argument() );
101
102
    // Deprecated in favor of the constructor above
103
    ICompoundProperty(
104
        const IObject & iObject,
105
        TopFlag /* iTopFlag */,
106
        const Argument &iArg0 = Argument(),
107
        const Argument &iArg1 = Argument() );
108
109
    //! Default copy constructor used
110
    //! Default assignment operator used.
111
112
    //! Destructor
113
    //! ...
114
    ~ICompoundProperty();
115
116
    //-*************************************************************************
117
    // COMPOUND PROPERTY READER FUNCTIONALITY
118
    //-*************************************************************************
119
120
    //! Returns the number of properties contained in this ICompoundProperty
121
    size_t getNumProperties() const;
122
123
    //! Return the header of a child property.
124
    //! Property is selected by index.
125
    //! This will throw an exception on out-of-range access.
126
    const AbcA::PropertyHeader & getPropertyHeader( size_t i ) const;
127
128
    //! Return the header of a property name.
129
    //! This will return a NULL pointer if no header by that name is found.
130
    const AbcA::PropertyHeader *
131
    getPropertyHeader( const std::string &iName ) const;
132
133
    //! There is no distinction between already added properties
134
    //! and created properties with an AbcA::CompoundPropertyReader, therefore
135
    //! we have no need to expose "getProperty". Simply use the appropriate
136
    //! IScalarProperty, ICompoundProperty, or IArrayProperty
137
    //! wrappers.
138
139
    //! Return the parent compound property, handily wrapped in a
140
    //! ICompoundProperty wrapper.
141
    ICompoundProperty getParent() const;
142
143
private:
144
145
    void init ( const IObject & iObject,
146
                const Argument &iArg0,
147
                const Argument &iArg1 );
148
149
    void init( AbcA::CompoundPropertyReaderPtr iParentObject,
150
               const std::string &iName,
151
152
               ErrorHandler::Policy iParentPolicy,
153
154
               const Argument &iArg0 );
155
};
156
157
//-*****************************************************************************
158
inline AbcA::CompoundPropertyReaderPtr
159
GetCompoundPropertyReaderPtr
160
0
( ICompoundProperty &iPrp ) { return iPrp.getPtr(); }
161
162
} // End namespace ALEMBIC_VERSION_NS
163
164
using namespace ALEMBIC_VERSION_NS;
165
166
} // End namespace Abc
167
} // End namespace Alembic
168
169
#endif