Coverage Report

Created: 2026-02-26 06:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/alembic/lib/Alembic/Abc/OArrayProperty.h
Line
Count
Source
1
//-*****************************************************************************
2
//
3
// Copyright (c) 2009-2011,
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
#ifndef Alembic_Abc_OArrayProperty_h
37
#define Alembic_Abc_OArrayProperty_h
38
39
#include <Alembic/Util/Export.h>
40
#include <Alembic/Abc/Foundation.h>
41
#include <Alembic/Abc/Base.h>
42
#include <Alembic/Abc/Argument.h>
43
#include <Alembic/Abc/OBaseProperty.h>
44
#include <Alembic/Abc/OCompoundProperty.h>
45
46
namespace Alembic {
47
namespace Abc {
48
namespace ALEMBIC_VERSION_NS {
49
50
//-*****************************************************************************
51
class ALEMBIC_EXPORT OArrayProperty
52
    : public OBasePropertyT<AbcA::ArrayPropertyWriterPtr>
53
{
54
public:
55
    //! By convention we always define this_type in Abc classes
56
    //! Used by unspecified-bool-type conversion below
57
    typedef OArrayProperty this_type;
58
59
    //-*************************************************************************
60
    // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
61
    //-*************************************************************************
62
63
    //! The default constructor creates an empty OArrayProperty function set.
64
    //! ...
65
0
    OArrayProperty() : OBasePropertyT<AbcA::ArrayPropertyWriterPtr>() {}
66
67
    //! Create a new OArrayProperty named iName as a child of compound iParent,
68
    //! of data type iDataType.  The remaining optional arguments can be used
69
    //! to override the ErrorHandlerPolicy, specify MetaData,
70
    //! and to specify time sampling or time sampling index.
71
    OArrayProperty( OCompoundProperty iParent,
72
                    const std::string &iName,
73
                    const AbcA::DataType &iDataType,
74
75
                    const Argument &iArg0 = Argument(),
76
                    const Argument &iArg1 = Argument(),
77
                    const Argument &iArg2 = Argument() );
78
79
    //! This attaches an OArrayProperty wrapper around an existing
80
    //! ArrayPropertyWriterPtr, with an optional error handling policy.
81
    OArrayProperty(
82
        AbcA::ArrayPropertyWriterPtr iPtr,
83
        const Argument &iArg0 = Argument() )
84
      : OBasePropertyT<AbcA::ArrayPropertyWriterPtr>( iPtr,
85
0
            GetErrorHandlerPolicy( iPtr, iArg0 ) ) {}
86
87
    // Deprecated in favor of the constructor above
88
    OArrayProperty(
89
        AbcA::ArrayPropertyWriterPtr iPtr,
90
        WrapExistingFlag iWrapFlag,
91
        const Argument &iArg0 = Argument() )
92
      : OBasePropertyT<AbcA::ArrayPropertyWriterPtr>( iPtr,
93
0
            GetErrorHandlerPolicy( iPtr, iArg0 ) ) {}
94
95
    //! Default copy constructor used
96
    //! Default assignment operator used.
97
98
    //! Destructor
99
    //! ...
100
    ~OArrayProperty();
101
102
    //-*************************************************************************
103
    // ARRAY PROPERTY WRITER FUNCTIONALITY
104
    //-*************************************************************************
105
106
    //! Get the number of samples written so far.
107
    //! May change over time as more samples are written.
108
    size_t getNumSamples() const;
109
110
    //! Set a sample from the address of a datum.
111
    //! ...
112
    void set( const AbcA::ArraySample &iSample );
113
114
    //! Set a sample from the previous sample.
115
    //! ...
116
    void setFromPrevious( );
117
118
    //! Changes the TimeSampling used by this property.
119
    //! If the TimeSampling is changed to Acyclic and the number of samples
120
    //! currently set is more than the number of times provided in the Acyclic
121
    //! TimeSampling, an exception will be thrown.
122
    void setTimeSampling( uint32_t iIndex );
123
124
    //! Changes the TimeSampling used by this property.
125
    //! If the TimeSampling is changed to Acyclic and the number of samples
126
    //! currently set is more than the number of times provided in the Acyclic
127
    //! TimeSampling, an exception will be thrown.
128
    void setTimeSampling( AbcA::TimeSamplingPtr iTime );
129
130
    //! Return the parent compound property, handily wrapped in a
131
    //! OCompoundProperty wrapper.
132
    OCompoundProperty getParent() const;
133
134
private:
135
    void init( AbcA::CompoundPropertyWriterPtr iParentObject,
136
               const std::string &iName,
137
               const AbcA::DataType &iDataType,
138
139
               ErrorHandler::Policy iParentPolicy,
140
141
               const Argument &iArg0,
142
               const Argument &iArg1,
143
               const Argument &iArg2 );
144
};
145
146
} // End namespace ALEMBIC_VERSION_NS
147
148
using namespace ALEMBIC_VERSION_NS;
149
150
} // End namespace Abc
151
} // End namespace Alembic
152
153
#endif