70 lines
3 KiB
C
70 lines
3 KiB
C
#pragma once
|
|
|
|
/// \file object.h
|
|
/// \author Folling <folling@ikarus.world>
|
|
|
|
#include <ikarus/errors.h>
|
|
#include <ikarus/macros.h>
|
|
|
|
/// \defgroup object Objects
|
|
/// \brief Objects are a compound type of all types of objects in the database.
|
|
/// \details The following objects currently exist:
|
|
/// - \ref blueprint.h "Blueprints"
|
|
/// - \ref property.h "Properties"
|
|
/// - \ref entity.h "Entities"
|
|
/// @{
|
|
|
|
IKARUS_BEGIN_HEADER
|
|
|
|
/// \brief A generic object. Wraps all types of objects, including folders.
|
|
struct IkarusObject;
|
|
|
|
/// \brief Compares two objects for equality.
|
|
/// \details This neither compares the pointers nor does a deep copy. Instead it figures out if the objects _are_ the
|
|
/// same object.
|
|
/// \param lhs The left hand side object.
|
|
/// \pre \li Must not be null.
|
|
/// \param rhs The right hand side object.
|
|
/// \pre \li Must not be null.
|
|
/// \param error_out \see errors.h
|
|
/// \return True if the objects are equal, false otherwise.
|
|
IKA_API bool ikarus_object_is_equal(IkarusObject const * lhs, IkarusObject const * rhs, IkarusErrorData * error_out);
|
|
|
|
/// \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.
|
|
/// \param error_out \see errors.h
|
|
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,
|
|
IkarusErrorData * error_out
|
|
);
|
|
|
|
/// \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,
|
|
IkarusErrorData * error_out
|
|
);
|
|
|
|
IKARUS_END_HEADER
|
|
|
|
/// @}
|