00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef _Alembic_Abc_ITypedArrayProperty_h_
00037 #define _Alembic_Abc_ITypedArrayProperty_h_
00038
00039 #include <Alembic/Abc/Foundation.h>
00040 #include <Alembic/Abc/IArrayProperty.h>
00041 #include <Alembic/Abc/TypedPropertyTraits.h>
00042 #include <Alembic/Abc/TypedArraySample.h>
00043
00044 namespace Alembic {
00045 namespace Abc {
00046 namespace ALEMBIC_VERSION_NS {
00047
00048
00049 template <class TRAITS>
00050 class ITypedArrayProperty : public IArrayProperty
00051 {
00052 public:
00053
00054
00055
00056 typedef TRAITS traits_type;
00057 typedef ITypedArrayProperty<TRAITS> this_type;
00058 typedef typename TRAITS::value_type value_type;
00059 typedef TypedArraySample<TRAITS> sample_type;
00060 typedef boost::shared_ptr<sample_type> sample_ptr_type;
00061
00062
00063
00064 static const std::string &getInterpretation()
00065 {
00066 static std::string sInterpretation = TRAITS::interpretation();
00067 return sInterpretation;
00068 }
00069
00070
00071
00072
00073 static bool matches( const AbcA::MetaData &iMetaData,
00074 SchemaInterpMatching iMatching = kStrictMatching )
00075 {
00076 if ( iMatching == kStrictMatching )
00077 {
00078 return ( getInterpretation() == "" ||
00079 ( iMetaData.get( "interpretation" ) ==
00080 getInterpretation() ) );
00081 }
00082 return true;
00083 }
00084
00085
00086
00087
00088 static bool matches( const AbcA::PropertyHeader &iHeader,
00089 SchemaInterpMatching iMatching = kStrictMatching )
00090 {
00091 return ( iHeader.getDataType() == TRAITS::dataType() ) &&
00092 matches( iHeader.getMetaData(), iMatching );
00093 }
00094
00095
00096
00097
00098
00099
00100
00101 ITypedArrayProperty() {}
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 template <class COMPOUND_PTR>
00112 ITypedArrayProperty( COMPOUND_PTR iParent,
00113 const std::string &iName,
00114
00115 const Argument &iArg0 = Argument(),
00116 const Argument &iArg1 = Argument() );
00117
00118
00119
00120
00121 ITypedArrayProperty( AbcA::ArrayPropertyReaderPtr iProp,
00122 WrapExistingFlag iWrapFlag,
00123 const Argument &iArg0 = Argument(),
00124 const Argument &iArg1 = Argument() );
00125
00126
00127
00128
00129
00130
00131
00132
00133 void get( sample_ptr_type& iVal,
00134 const ISampleSelector &iSS = ISampleSelector() )
00135 {
00136 AbcA::ArraySamplePtr ptr;
00137 IArrayProperty::get( ptr, iSS );
00138 iVal = boost::static_pointer_cast<sample_type, AbcA::ArraySample>( ptr );
00139 }
00140
00141
00142
00143 sample_ptr_type getValue( const ISampleSelector &iSS = ISampleSelector() )
00144 {
00145 sample_ptr_type ret;
00146 get( ret, iSS );
00147 return ret;
00148 }
00149 };
00150
00151
00152
00153
00154
00155
00156 template <class TRAITS>
00157 template <class COMPOUND_PTR>
00158 ITypedArrayProperty<TRAITS>::ITypedArrayProperty
00159 (
00160 COMPOUND_PTR iParent,
00161 const std::string &iName,
00162 const Argument &iArg0,
00163 const Argument &iArg1 )
00164 {
00165 Arguments args( GetErrorHandlerPolicy( iParent ) );
00166 iArg0.setInto( args );
00167 iArg1.setInto( args );
00168
00169 getErrorHandler().setPolicy( args.getErrorHandlerPolicy() );
00170
00171 ALEMBIC_ABC_SAFE_CALL_BEGIN(
00172 "ITypedArrayProperty::ITypedArrayProperty()" );
00173
00174 AbcA::CompoundPropertyReaderPtr parent =
00175 GetCompoundPropertyReaderPtr( iParent );
00176 ABCA_ASSERT( parent != NULL,
00177 "NULL CompoundPropertyReader passed into "
00178 << "ITypedArrayProperty ctor" );
00179
00180 const AbcA::PropertyHeader *pheader =
00181 parent->getPropertyHeader( iName );
00182 ABCA_ASSERT( pheader != NULL,
00183 "Nonexistent array property: " << iName );
00184
00185 ABCA_ASSERT( matches( *pheader, args.getSchemaInterpMatching() ),
00186
00187 "Incorrect match of header datatype: "
00188 << pheader->getDataType()
00189 << " to expected: "
00190 << TRAITS::dataType()
00191 << ",\n...or incorrect match of interpretation: "
00192 << pheader->getMetaData().get( "interpretation" )
00193 << " to expected: "
00194 << TRAITS::interpretation() );
00195
00196 m_property = parent->getArrayProperty( iName );
00197
00198 ALEMBIC_ABC_SAFE_CALL_END_RESET();
00199 }
00200
00201
00202 template <class TRAITS>
00203 ITypedArrayProperty<TRAITS>::ITypedArrayProperty(
00204 AbcA::ArrayPropertyReaderPtr iProperty,
00205 WrapExistingFlag iFlag,
00206 const Argument &iArg0,
00207 const Argument &iArg1 )
00208 : IArrayProperty( iProperty,
00209 iFlag,
00210 GetErrorHandlerPolicy( iProperty, iArg0, iArg1 ) )
00211 {
00212 ALEMBIC_ABC_SAFE_CALL_BEGIN(
00213 "ITypedArrayProperty::ITypedArrayProperty()" );
00214
00215 const AbcA::PropertyHeader &pheader = iProperty->getHeader();
00216
00217 ABCA_ASSERT( matches( pheader, GetSchemaInterpMatching( iArg0, iArg1 ) ),
00218
00219 "Incorrect match of header datatype: "
00220 << pheader.getDataType()
00221 << " to expected: "
00222 << TRAITS::dataType()
00223 << ",\n...or incorrect match of interpretation: "
00224 << pheader.getMetaData().get( "interpretation" )
00225 << " to expected: "
00226 << TRAITS::interpretation() );
00227
00228 ALEMBIC_ABC_SAFE_CALL_END_RESET();
00229 }
00230
00231
00232
00233
00234
00235 typedef ITypedArrayProperty<BooleanTPTraits> IBoolArrayProperty;
00236 typedef ITypedArrayProperty<Uint8TPTraits> IUcharArrayProperty;
00237 typedef ITypedArrayProperty<Int8TPTraits> ICharArrayProperty;
00238 typedef ITypedArrayProperty<Uint16TPTraits> IUInt16ArrayProperty;
00239 typedef ITypedArrayProperty<Int16TPTraits> IInt16ArrayProperty;
00240 typedef ITypedArrayProperty<Uint32TPTraits> IUInt32ArrayProperty;
00241 typedef ITypedArrayProperty<Int32TPTraits> IInt32ArrayProperty;
00242 typedef ITypedArrayProperty<Uint64TPTraits> IUInt64ArrayProperty;
00243 typedef ITypedArrayProperty<Int64TPTraits> IInt64ArrayProperty;
00244 typedef ITypedArrayProperty<Float16TPTraits> IHalfArrayProperty;
00245 typedef ITypedArrayProperty<Float32TPTraits> IFloatArrayProperty;
00246 typedef ITypedArrayProperty<Float64TPTraits> IDoubleArrayProperty;
00247 typedef ITypedArrayProperty<StringTPTraits> IStringArrayProperty;
00248 typedef ITypedArrayProperty<WstringTPTraits> IWstringArrayProperty;
00249
00250 typedef ITypedArrayProperty<V2sTPTraits> IV2sArrayProperty;
00251 typedef ITypedArrayProperty<V2iTPTraits> IV2iArrayProperty;
00252 typedef ITypedArrayProperty<V2fTPTraits> IV2fArrayProperty;
00253 typedef ITypedArrayProperty<V2dTPTraits> IV2dArrayProperty;
00254
00255 typedef ITypedArrayProperty<V3sTPTraits> IV3sArrayProperty;
00256 typedef ITypedArrayProperty<V3iTPTraits> IV3iArrayProperty;
00257 typedef ITypedArrayProperty<V3fTPTraits> IV3fArrayProperty;
00258 typedef ITypedArrayProperty<V3dTPTraits> IV3dArrayProperty;
00259
00260 typedef ITypedArrayProperty<P2sTPTraits> IP2sArrayProperty;
00261 typedef ITypedArrayProperty<P2iTPTraits> IP2iArrayProperty;
00262 typedef ITypedArrayProperty<P2fTPTraits> IP2fArrayProperty;
00263 typedef ITypedArrayProperty<P2dTPTraits> IP2dArrayProperty;
00264
00265 typedef ITypedArrayProperty<P3sTPTraits> IP3sArrayProperty;
00266 typedef ITypedArrayProperty<P3iTPTraits> IP3iArrayProperty;
00267 typedef ITypedArrayProperty<P3fTPTraits> IP3fArrayProperty;
00268 typedef ITypedArrayProperty<P3dTPTraits> IP3dArrayProperty;
00269
00270 typedef ITypedArrayProperty<Box2sTPTraits> IBox2sArrayProperty;
00271 typedef ITypedArrayProperty<Box2iTPTraits> IBox2iArrayProperty;
00272 typedef ITypedArrayProperty<Box2fTPTraits> IBox2fArrayProperty;
00273 typedef ITypedArrayProperty<Box2dTPTraits> IBox2dArrayProperty;
00274
00275 typedef ITypedArrayProperty<Box3sTPTraits> IBox3sArrayProperty;
00276 typedef ITypedArrayProperty<Box3iTPTraits> IBox3iArrayProperty;
00277 typedef ITypedArrayProperty<Box3fTPTraits> IBox3fArrayProperty;
00278 typedef ITypedArrayProperty<Box3dTPTraits> IBox3dArrayProperty;
00279
00280 typedef ITypedArrayProperty<M33fTPTraits> IM33fArrayProperty;
00281 typedef ITypedArrayProperty<M33dTPTraits> IM33dArrayProperty;
00282 typedef ITypedArrayProperty<M44fTPTraits> IM44fArrayProperty;
00283 typedef ITypedArrayProperty<M44dTPTraits> IM44dArrayProperty;
00284
00285 typedef ITypedArrayProperty<QuatfTPTraits> IQuatfArrayProperty;
00286 typedef ITypedArrayProperty<QuatdTPTraits> IQuatdArrayProperty;
00287
00288 typedef ITypedArrayProperty<C3hTPTraits> IC3hArrayProperty;
00289 typedef ITypedArrayProperty<C3fTPTraits> IC3fArrayProperty;
00290 typedef ITypedArrayProperty<C3cTPTraits> IC3cArrayProperty;
00291
00292 typedef ITypedArrayProperty<C4hTPTraits> IC4hArrayProperty;
00293 typedef ITypedArrayProperty<C4fTPTraits> IC4fArrayProperty;
00294 typedef ITypedArrayProperty<C4cTPTraits> IC4cArrayProperty;
00295
00296 typedef ITypedArrayProperty<N2fTPTraits> IN2fArrayProperty;
00297 typedef ITypedArrayProperty<N2dTPTraits> IN2dArrayProperty;
00298
00299 typedef ITypedArrayProperty<N3fTPTraits> IN3fArrayProperty;
00300 typedef ITypedArrayProperty<N3dTPTraits> IN3dArrayProperty;
00301
00302
00303 }
00304
00305 using namespace ALEMBIC_VERSION_NS;
00306
00307 }
00308 }
00309
00310 #endif