35 #ifndef IE_CORE_OBJECT_H
36 #define IE_CORE_OBJECT_H
42 #include "boost/shared_ptr.hpp"
43 #include "IECore/Export.h"
44 #include "IECore/RunTimeTyped.h"
45 #include "IECore/IndexedIO.h"
50 IE_CORE_FORWARDDECLARE( Object );
54 #define IE_CORE_DECLAREOBJECTTYPEDESCRIPTION( TYPENAME ) \
56 static const IECore::Object::TypeDescription<TYPENAME> m_typeDescription; \
59 #define IE_CORE_DECLAREABSTRACTOBJECTTYPEDESCRIPTION( TYPENAME ) \
61 static const IECore::Object::AbstractTypeDescription<TYPENAME> m_typeDescription; \
64 #define IE_CORE_DECLAREOBJECTMEMBERFNS( TYPENAME ) \
66 TYPENAME::Ptr copy() const { return boost::static_pointer_cast<TYPENAME>( IECore::Object::copy() ); } \
67 bool isEqualTo( const IECore::Object *other ) const override; \
68 void hash( IECore::MurmurHash &h ) const override; \
70 void copyFrom( const IECore::Object *other, IECore::Object::CopyContext *context ) override; \
71 void save( IECore::Object::SaveContext *context ) const override; \
72 void load( IECore::Object::LoadContextPtr context ) override; \
73 void memoryUsage( IECore::Object::MemoryAccumulator & ) const override; \
75 #define IE_CORE_DECLAREOBJECT( TYPE, BASETYPE ) \
76 IE_CORE_DECLARERUNTIMETYPED( TYPE, BASETYPE ); \
77 IE_CORE_DECLAREOBJECTMEMBERFNS( TYPE ); \
78 IE_CORE_DECLAREOBJECTTYPEDESCRIPTION( TYPE ); \
80 #define IE_CORE_DECLAREABSTRACTOBJECT( TYPE, BASETYPE ) \
81 IE_CORE_DECLARERUNTIMETYPED( TYPE, BASETYPE ); \
82 IE_CORE_DECLAREOBJECTMEMBERFNS( TYPE ); \
83 IE_CORE_DECLAREABSTRACTOBJECTTYPEDESCRIPTION( TYPE ); \
85 #define IE_CORE_DECLAREEXTENSIONOBJECT( TYPE, TYPEID, BASETYPE ) \
86 IE_CORE_DECLARERUNTIMETYPEDEXTENSION( TYPE, TYPEID, BASETYPE ); \
87 IE_CORE_DECLAREOBJECTMEMBERFNS( TYPE ); \
88 IE_CORE_DECLAREOBJECTTYPEDESCRIPTION( TYPE ); \
90 #define IE_CORE_DECLAREABSTRACTEXTENSIONOBJECT( TYPE, TYPEID, BASETYPE ) \
91 IE_CORE_DECLARERUNTIMETYPEDEXTENSION( TYPE, TYPEID, BASETYPE ); \
92 IE_CORE_DECLAREOBJECTMEMBERFNS( TYPE ); \
93 IE_CORE_DECLAREABSTRACTOBJECTTYPEDESCRIPTION( TYPE ); \
95 #define IE_CORE_DEFINEOBJECTTYPEDESCRIPTION( TYPENAME ) \
96 const IECore::Object::TypeDescription<TYPENAME> TYPENAME::m_typeDescription \
98 #define IE_CORE_DEFINEABSTRACTOBJECTTYPEDESCRIPTION( TYPENAME ) \
99 const IECore::Object::AbstractTypeDescription<TYPENAME> TYPENAME::m_typeDescription \
101 class IECORE_API Object :
public RunTimeTyped
112 IE_CORE_DECLARERUNTIMETYPED( Object, RunTimeTyped );
124 ObjectPtr copy()
const;
130 void copyFrom(
const Object *other );
133 void save( IndexedIOPtr ioInterface,
const IndexedIO::EntryID &name )
const;
141 virtual bool isEqualTo(
const Object *other )
const = 0;
146 virtual bool isNotEqualTo(
const Object *other )
const;
148 bool operator==(
const Object &other )
const;
150 bool operator!=(
const Object &other )
const;
152 size_t memoryUsage()
const;
156 MurmurHash hash()
const;
160 virtual void hash( MurmurHash &h )
const = 0;
169 static bool isType(
TypeId typeId );
172 static bool isType(
const std::string &typeName );
175 static bool isAbstractType(
TypeId typeId );
177 static bool isAbstractType(
const std::string &typeName );
180 static ObjectPtr create(
TypeId typeId );
183 static ObjectPtr create(
const std::string &typeName );
186 static ObjectPtr load( ConstIndexedIOPtr ioInterface,
const IndexedIO::EntryID &name );
189 typedef ObjectPtr (*CreatorFn)(
void *data );
192 static void registerType(
TypeId typeId,
const std::string &typeName, CreatorFn creator,
void *data =
nullptr );
212 static ObjectPtr creator(
void *data =
nullptr );
234 typename T::Ptr copy(
const T *toCopy );
236 std::map<const Object *, Object *> m_copies;
260 IndexedIOPtr container(
const std::string &typeName,
unsigned int ioVersion );
276 typedef std::map<const Object *, IndexedIO::EntryIDList > SavedObjectMap;
278 SaveContext( IndexedIOPtr ioInterface, boost::shared_ptr<SavedObjectMap> savedObjects );
280 IndexedIOPtr m_ioInterface;
281 boost::shared_ptr<SavedObjectMap> m_savedObjects;
297 ConstIndexedIOPtr container(
const std::string &typeName,
unsigned int &ioVersion,
bool throwIfMissing =
true );
306 typedef std::map< IndexedIO::EntryIDList, ObjectPtr> LoadedObjectMap;
308 LoadContext( ConstIndexedIOPtr ioInterface, boost::shared_ptr<LoadedObjectMap> loadedObjects );
311 ObjectPtr loadObject(
const IndexedIO *container );
313 ConstIndexedIOPtr m_ioInterface;
314 boost::shared_ptr<LoadedObjectMap> m_loadedObjects;
322 virtual void save(
SaveContext *context )
const = 0;
329 virtual void load( LoadContextPtr context ) = 0;
338 void accumulate(
size_t bytes );
341 void accumulate(
const Object *
object );
344 void accumulate(
const void *ptr,
size_t bytes );
346 size_t total()
const;
348 std::set<const void *> m_accumulated;
359 struct TypeInformation;
360 static TypeInformation *typeInformation();
364 static const unsigned int m_ioVersion;
370 #include "IECore/Object.inl"
372 #endif // IE_CORE_OBJECT_H
The class provided to the load() method implemented by subclasses.
Definition: Object.h:286
Definition: IndexedIO.h:57
TypeId
Definition: TypeIds.h:46
The class provided to the save() method implemented by subclasses.
Definition: Object.h:247
Definition: InternedString.h:55
Definition: RefCounted.h:124
This namespace contains all components of the core library.
Definition: AddSmoothSkinningInfluencesOp.h:43