#pragma once /// \file object.h /// \author Folling #include /// \defgroup object Objects /// \brief Objects are a compound type of all types of objects in the database. /// \details The following objects currently exist: /// - blueprints /// - properties /// - entities /// - blueprint folders /// - property folders /// - entity folders /// @{ IKARUS_BEGIN_HEADER /// \brief A generic object. Wraps all types of objects, including folders. struct IkarusObject; /// \brief Visits an object. Calling the appropriate function for the object's type. /// \param object The object to visit. /// \param blueprint_visitor The function to call if the object is a blueprint. Skipped if null. /// \param property_visitor The function to call if the object is a property. Skipped if null. /// \param entity_visitor The function to call if the object is an entity. Skipped if null. /// \param blueprint_folder_visitor The function to call if the object is a blueprint folder. Skipped if null. /// \param property_folder_visitor The function to call if the object is a property folder. Skipped if null. /// \param entity_folder_visitor The function to call if the object is an entity folder. Skipped if null. /// \param data The data passed to the visitor functions. IKA_API void ikarus_object_visit( IkarusObject * object, void (*blueprint_visitor)(struct IkarusBlueprint *, void *), void (*property_visitor)(struct IkarusProperty *, void *), void (*entity_visitor)(struct IkarusEntity *, void *), void (*blueprint_folder_visitor)(struct IkarusBlueprintFolder *, void *), void (*property_folder_visitor)(struct IkarusPropertyFolder *, void *), void (*entity_folder_visitor)(struct IkarusEntityFolder *, void *), void * data ); /// \see ikarus_object_visit IKA_API void ikarus_object_visit_const( IkarusObject const * object, void (*blueprint_visitor)(struct IkarusBlueprint const *, void *), void (*property_visitor)(struct IkarusProperty const *, void *), void (*entity_visitor)(struct IkarusEntity const *, void *), void (*blueprint_folder_visitor)(struct IkarusBlueprintFolder const *, void *), void (*property_folder_visitor)(struct IkarusPropertyFolder const *, void *), void (*entity_folder_visitor)(struct IkarusEntityFolder const *, void *), void * data ); IKARUS_END_HEADER // @}