Coverage Report

Created: 2025-07-23 06:21

/src/alembic/lib/Alembic/Abc/OScalarProperty.h
Line
Count
Source (jump to first uncovered line)
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_OScalarProperty_h
37
#define Alembic_Abc_OScalarProperty_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 OScalarProperty
52
    : public OBasePropertyT<AbcA::ScalarPropertyWriterPtr>
53
{
54
public:
55
    //! By convention we always define this_type in Abc classes
56
    //! Used by unspecified-bool-type conversion below
57
    typedef OScalarProperty this_type;
58
59
    //-*************************************************************************
60
    // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
61
    //-*************************************************************************
62
63
    //! The default constructor creates an empty OScalarProperty function set.
64
    //! ...
65
0
    OScalarProperty() : OBasePropertyT<AbcA::ScalarPropertyWriterPtr>() {}
66
67
    //! Create a new OScalarProperty named iName as a child of compound iParent,
68
    //! of data type iDataType.  The remaining optional arguments can be used
69
    //! the inherited parent ErrorHandlerPolicy, an override to that policy,
70
    //! specify MetaData, and to specify time sampling or time sampling index.
71
    OScalarProperty( AbcA::CompoundPropertyWriterPtr 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
                     const Argument &iArg3 = Argument() );
79
80
    //! Create a new OScalarProperty named iName as a child of compound iParent,
81
    //! of data type iDataType.  The remaining optional arguments can be used
82
    //! to override the ErrorHandlerPolicy, specify MetaData,
83
    //! and to specify time sampling or time sampling index.
84
    OScalarProperty( OCompoundProperty iParent,
85
                     const std::string &iName,
86
                     const AbcA::DataType &iDataType,
87
88
                     const Argument &iArg0 = Argument(),
89
                     const Argument &iArg1 = Argument(),
90
                     const Argument &iArg2 = Argument() );
91
92
93
    //! This attaches an OScalarProperty wrapper around an existing
94
    //! ScalarPropertyWriterPtr, arguments are there to specify
95
    //! ErrorHandling policy,
96
    OScalarProperty(
97
        AbcA::ScalarPropertyWriterPtr iPtr,
98
        ErrorHandler::Policy iPolicy = ErrorHandler::kThrowPolicy )
99
0
      : OBasePropertyT<AbcA::ScalarPropertyWriterPtr>( iPtr, iPolicy ) {}
100
101
    // Deprecated in favor of the constructor above
102
    OScalarProperty(
103
        AbcA::ScalarPropertyWriterPtr iPtr,
104
        WrapExistingFlag iWrapFlag,
105
        ErrorHandler::Policy iPolicy = ErrorHandler::kThrowPolicy )
106
0
      : OBasePropertyT<AbcA::ScalarPropertyWriterPtr>( iPtr, iPolicy ) {}
107
108
    //! Default copy constructor used
109
    //! Default assignment operator used.
110
111
    //! Destructor
112
    //! ...
113
    ~OScalarProperty();
114
115
    //-*************************************************************************
116
    // SCALAR PROPERTY WRITER FUNCTIONALITY
117
    //-*************************************************************************
118
119
    //! Return the number of samples contained in the property.
120
    //! This can be any number, including zero.
121
    //! This returns the number of samples that were written, independently
122
    //! of whether or not they were constant.
123
    //! It make change over time as more samples are written.
124
    size_t getNumSamples() const;
125
126
    //! Set a sample from the address of a datum.
127
    //! ...
128
    void set( const void *iSample );
129
130
    //! Set a sample from the previous sample.
131
    //! ...
132
    void setFromPrevious( );
133
134
    //! Changes the TimeSampling used by this property.
135
    //! If the TimeSampling is changed to Acyclic and the number of samples
136
    //! currently set is more than the number of times provided in the Acyclic
137
    //! TimeSampling, an exception will be thrown.
138
    void setTimeSampling( uint32_t iIndex );
139
140
    //! Changes the TimeSampling used by this property.
141
    //! If the TimeSampling is changed to Acyclic and the number of samples
142
    //! currently set is more than the number of times provided in the Acyclic
143
    //! TimeSampling, an exception will be thrown.
144
    void setTimeSampling( AbcA::TimeSamplingPtr iTime );
145
146
    //! Return the parent compound property, handily wrapped in a
147
    //! OCompoundProperty wrapper.
148
    OCompoundProperty getParent() const;
149
150
private:
151
    void init( AbcA::CompoundPropertyWriterPtr iParent,
152
               const std::string &iName,
153
               const AbcA::DataType &iDataType,
154
155
               const Argument &iArg0,
156
               const Argument &iArg1,
157
               const Argument &iArg2,
158
               const Argument &iArg3 );
159
};
160
161
} // End namespace ALEMBIC_VERSION_NS
162
163
using namespace ALEMBIC_VERSION_NS;
164
165
} // End namespace Abc
166
} // End namespace Alembic
167
168
#endif