Alembic: Abc/OSchema.h Source File

Alembic 1.8.11

Loading...
Searching...
No Matches
OSchema.h
1//-*****************************************************************************
2//
3// Copyright (c) 2009-2012,
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_OSchema_h
38#define Alembic_Abc_OSchema_h
39
40#include <Alembic/Abc/Foundation.h>
41#include <Alembic/Abc/OCompoundProperty.h>
42
43namespace Alembic {
44namespace Abc {
45namespace ALEMBIC_VERSION_NS {
46
47//-*****************************************************************************
72//-*****************************************************************************
73
74
75//-*****************************************************************************
89
90
91//-*****************************************************************************
105#define ALEMBIC_ABC_DECLARE_SCHEMA_INFO( STITLE, SBTYP, SDFLT, SPREP, STDEF ) \
106struct STDEF \
107{ \
108 static const char * title() { return ( STITLE ) ; } \
109 static const char * defaultName() { return ( SDFLT ); } \
110 static const char * schemaBaseType() { return ( SBTYP ); } \
111 static bool replaceOnSparse() { return SPREP; } \
112}
113
114//-*****************************************************************************
117template <class INFO>
118 class OSchema : public OCompoundProperty
119{
120public:
121 //-*************************************************************************
122 // TYPEDEFS AND IDENTIFIERS
123 //-*************************************************************************
124
125 typedef INFO info_type;
126 typedef OSchema<INFO> this_type;
127
130 static const char * getSchemaTitle()
131 {
132 return INFO::title();
133 }
134
137 static const char * getSchemaBaseType()
138 {
139 return INFO::schemaBaseType();
140 }
141
144 static const char * getDefaultSchemaName()
145 {
146 return INFO::defaultName();
147 }
148
154 static bool replaceOnSparse()
155 {
156 return INFO::replaceOnSparse();
157 }
158
162 static bool matches( const AbcA::MetaData &iMetaData,
163 SchemaInterpMatching iMatching = kStrictMatching )
164 {
165 if ( std::string() == getSchemaTitle() || iMatching == kNoMatching )
166 { return true; }
167
168 if ( iMatching == kStrictMatching || iMatching == kSchemaTitleMatching )
169 {
170 return iMetaData.get( "schema" ) == getSchemaTitle();
171 }
172
173 return false;
174 }
175
179 static bool matches( const AbcA::PropertyHeader &iHeader,
180 SchemaInterpMatching iMatching = kStrictMatching )
181 {
182 return matches( iHeader.getMetaData(), iMatching );
183 }
184
185 //-*************************************************************************
186 // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
187 //-*************************************************************************
188
191 OSchema() {}
192
195 OSchema( AbcA::CompoundPropertyWriterPtr iParent,
196 const std::string &iName,
197
198 const Argument &iArg0 = Argument(),
199 const Argument &iArg1 = Argument(),
200 const Argument &iArg2 = Argument(),
201 const Argument &iArg3 = Argument() )
202 {
203 this_type::init( iParent, iName, iArg0, iArg1, iArg2, iArg3 );
204 }
205
208 OSchema( OCompoundProperty iParent,
209 const std::string &iName,
210
211 const Argument &iArg0 = Argument(),
212 const Argument &iArg1 = Argument(),
213 const Argument &iArg2 = Argument() )
214 {
215 *this = OSchema( iParent.getPtr(), iName,
216 GetErrorHandlerPolicy( iParent ), iArg0, iArg1, iArg2);
217 }
218
219 virtual ~OSchema() {}
220
223
224private:
225 void init( AbcA::CompoundPropertyWriterPtr iParent,
226 const std::string &iName,
227 const Argument &iArg0,
228 const Argument &iArg1,
229 const Argument &iArg2,
230 const Argument &iArg3 );
231};
232
233//-*****************************************************************************
234// TEMPLATE AND INLINE FUNCTIONS
235//-*****************************************************************************
236template <class INFO>
237void OSchema<INFO>::init( AbcA::CompoundPropertyWriterPtr iParent,
238 const std::string &iName,
239 const Argument &iArg0,
240 const Argument &iArg1,
241 const Argument &iArg2,
242 const Argument &iArg3 )
243{
244 Arguments args;
245 iArg0.setInto( args );
246 iArg1.setInto( args );
247 iArg2.setInto( args );
248 iArg3.setInto( args );
249
250 getErrorHandler().setPolicy( args.getErrorHandlerPolicy() );
251
252 ALEMBIC_ABC_SAFE_CALL_BEGIN( "OSchema::OSchema::init()" );
253
254
255 // Get actual writer for parent.
256 ABCA_ASSERT( iParent,
257 "NULL parent passed into OSchema ctor" );
258
259 // Put schema title into metadata.
260 AbcA::MetaData mdata = args.getMetaData();
261 std::string emptyStr;
262 if ( emptyStr != getSchemaTitle() && !args.isSparse() )
263 {
264 mdata.set( "schema", getSchemaTitle() );
265 }
266 if ( emptyStr != getSchemaBaseType() && !args.isSparse() )
267 {
268 mdata.set( "schemaBaseType", getSchemaBaseType() );
269 }
270
271 // Create property.
272 m_property = iParent->createCompoundProperty( iName, mdata );
273
274 ALEMBIC_ABC_SAFE_CALL_END_RESET();
275}
276
277} // End namespace ALEMBIC_VERSION_NS
278
279using namespace ALEMBIC_VERSION_NS;
280
281} // End namespace Abc
282} // End namespace Alembic
283
284#endif
Alembic::Abc::ALEMBIC_VERSION_NS::Argument
Definition Argument.h:120
Alembic::Abc::ALEMBIC_VERSION_NS::OBasePropertyT::getPtr
PROP_PTR getPtr() const
Definition OBaseProperty.h:162
Alembic::Abc::ALEMBIC_VERSION_NS::OCompoundProperty::OCompoundProperty
OCompoundProperty()
Definition OCompoundProperty.h:65
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema
Definition OSchema.h:119
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::OSchema
OSchema(AbcA::CompoundPropertyWriterPtr iParent, const std::string &iName, const Argument &iArg0=Argument(), const Argument &iArg1=Argument(), const Argument &iArg2=Argument(), const Argument &iArg3=Argument())
Definition OSchema.h:195
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::getDefaultSchemaName
static const char * getDefaultSchemaName()
Definition OSchema.h:144
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::OSchema
OSchema(OCompoundProperty iParent, const std::string &iName, const Argument &iArg0=Argument(), const Argument &iArg1=Argument(), const Argument &iArg2=Argument())
Definition OSchema.h:208
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::matches
static bool matches(const AbcA::MetaData &iMetaData, SchemaInterpMatching iMatching=kStrictMatching)
Definition OSchema.h:162
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::matches
static bool matches(const AbcA::PropertyHeader &iHeader, SchemaInterpMatching iMatching=kStrictMatching)
Definition OSchema.h:179
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::OSchema
OSchema()
Definition OSchema.h:191
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::getSchemaTitle
static const char * getSchemaTitle()
Definition OSchema.h:130
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::getSchemaBaseType
static const char * getSchemaBaseType()
Definition OSchema.h:137
Alembic::Abc::ALEMBIC_VERSION_NS::OSchema::replaceOnSparse
static bool replaceOnSparse()
Definition OSchema.h:154
Alembic
Alembic namespace ...
Definition ArchiveInfo.cpp:39