restructure into smaller files & add IWYU/clang-tidy
Signed-off-by: Folling <mail@folling.io>
This commit is contained in:
parent
660736133a
commit
13eee8b168
28 changed files with 845 additions and 556 deletions
24
include/ikarus/objects/blueprint.h
Normal file
24
include/ikarus/objects/blueprint.h
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
/// \file blueprint.h
|
||||
/// \author Folling <mail@folling.io>
|
||||
|
||||
#include <ikarus/id.h>
|
||||
#include <ikarus/macros.h>
|
||||
|
||||
/// \defgroup blueprints Blueprints
|
||||
/// \brief Blueprints are templates for entities.
|
||||
|
||||
IKARUS_BEGIN_HEADER
|
||||
|
||||
/// \brief A blueprint object.
|
||||
/// \details A blueprint is a collection of properties which can be linked to entities.
|
||||
/// Each entity the blueprint is linked to will have values for the blueprints properties.
|
||||
struct IkarusBlueprint {
|
||||
/// \private \brief The id of the blueprint.
|
||||
IkarusId id;
|
||||
};
|
||||
|
||||
IKARUS_END_HEADER
|
||||
|
||||
// @}
|
||||
41
include/ikarus/objects/entity.h
Normal file
41
include/ikarus/objects/entity.h
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
#include <ikarus/id.h>
|
||||
#include <ikarus/macros.h>
|
||||
|
||||
/// \file entity.h
|
||||
/// \author Folling <mail@folling.io>
|
||||
|
||||
/// \defgroup entities Entities
|
||||
/// \brief Entities are the core building blocks of Ikarus.
|
||||
|
||||
IKARUS_BEGIN_HEADER
|
||||
|
||||
/// \brief Entities are the core building blocks of Ikarus.
|
||||
/// \detials Blueprints and Properties define the structure of the data.
|
||||
/// Entities define the data itself.
|
||||
///
|
||||
/// Properties can be associated with Entities in two ways:
|
||||
/// - Directly: The property is linked to the entity.
|
||||
/// - Indirectly: The property is linked to a blueprint of the entity.
|
||||
///
|
||||
/// For each property an entity is linked to, it has a value. These values depend on the property's type.
|
||||
/// For more information on the types see the property documentation.
|
||||
///
|
||||
/// Values are the core type of data within Ikarus.
|
||||
/// Each value is associated with one page and one property.
|
||||
///
|
||||
/// \remark Values are typed, the type of a value is specified by its associated property.
|
||||
/// For more information on the types see the property documentation.
|
||||
///
|
||||
/// \remark Values are guaranteed to be in valid format for a given type
|
||||
/// but not guaranteed to be valid under the settings of the property.
|
||||
/// This is because changing the settings can invalidate existing values without resetting them.
|
||||
struct IkarusEntity {
|
||||
/// \private \brief The ID of the entity.
|
||||
IkarusId id;
|
||||
};
|
||||
|
||||
IKARUS_END_HEADER
|
||||
|
||||
// @}
|
||||
123
include/ikarus/objects/object.h
Normal file
123
include/ikarus/objects/object.h
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
#pragma once
|
||||
|
||||
/// \file object.h
|
||||
/// \author Folling <mail@folling.io>
|
||||
|
||||
#include <ikarus/folders/blueprint_folder.h>
|
||||
#include <ikarus/folders/entity_folder.h>
|
||||
#include <ikarus/folders/property_folder.h>
|
||||
#include <ikarus/macros.h>
|
||||
#include <ikarus/objects/blueprint.h>
|
||||
#include <ikarus/objects/entity.h>
|
||||
#include <ikarus/objects/object_type.h>
|
||||
#include <ikarus/objects/property.h>
|
||||
|
||||
/// \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
|
||||
|
||||
struct IkarusFolder;
|
||||
|
||||
/// \private \brief The data of an object.
|
||||
union IkarusObjectData {
|
||||
/// \private \brief The blueprint data of the object.
|
||||
IkarusBlueprint blueprint;
|
||||
/// \private \brief The property data of the object.
|
||||
IkarusProperty property;
|
||||
/// \private \brief The entity data of the object.
|
||||
IkarusEntity entity;
|
||||
/// \private \brief The blueprint folder data of the object.
|
||||
IkarusBlueprintFolder blueprint_folder;
|
||||
/// \private \brief The property folder data of the object.
|
||||
IkarusPropertyFolder property_folder;
|
||||
/// \private \brief The entity folder data of the object.
|
||||
IkarusEntityFolder entity_folder;
|
||||
};
|
||||
|
||||
/// \brief A generic object. Wraps all types of objects, including folders.
|
||||
struct IkarusObject {
|
||||
/// \private \brief The type of the object.
|
||||
IkarusObjectType type;
|
||||
/// \private \brief The data of the object.
|
||||
IkarusObjectData data;
|
||||
};
|
||||
|
||||
/// \brief Constructs an object from a blueprint.
|
||||
/// \param blueprint The blueprint to construct the object from.
|
||||
/// \return The constructed object, representing the blueprint.
|
||||
IKA_API IkarusObject ikarus_object_from_blueprint(IkarusBlueprint blueprint);
|
||||
|
||||
/// \brief Constructs an object from a property.
|
||||
/// \param property The property to construct the object from.
|
||||
/// \return The constructed object, representing the property.
|
||||
IKA_API IkarusObject ikarus_object_from_property(IkarusProperty property);
|
||||
|
||||
/// \brief Constructs an object from an entity.
|
||||
/// \param entity The entity to construct the object from.
|
||||
/// \return The constructed object, representing the entity.
|
||||
IKA_API IkarusObject ikarus_object_from_entity(IkarusEntity entity);
|
||||
|
||||
/// \brief Constructs an object from a blueprint folder.
|
||||
/// \param blueprint The folder to construct the object from.
|
||||
/// \return The constructed object, representing the folder.
|
||||
IKA_API IkarusObject ikarus_object_from_blueprint_folder(IkarusBlueprintFolder folder);
|
||||
|
||||
/// \brief Constructs an object from a property folder.
|
||||
/// \param property The folder to construct the object from.
|
||||
/// \return The constructed object, representing the folder.
|
||||
IKA_API IkarusObject ikarus_object_from_property_folder(IkarusPropertyFolder folder);
|
||||
|
||||
/// \brief Constructs an object from a entity folder.
|
||||
/// \param entity The folder to construct the object from.
|
||||
/// \return The constructed object, representing the folder.
|
||||
IKA_API IkarusObject ikarus_object_from_entity_folder(IkarusEntityFolder folder);
|
||||
|
||||
/// \brief Constructs an object from a folder.
|
||||
/// \param folder The folder to construct the object from.
|
||||
/// \return The constructed object, representing the folder.
|
||||
IKA_API IkarusObject ikarus_object_from_folder(IkarusFolder folder);
|
||||
|
||||
/// \brief Compares two objects for equality.
|
||||
/// \details Since ids store the type of the object, this boils down to a simple comparison of the ids.
|
||||
/// \param left The left side of the comparison.
|
||||
/// \param right The right side of the comparison.
|
||||
/// \return Whether the objects are equal.
|
||||
IKA_API bool ikarus_object_is_equal(IkarusObject left, IkarusObject right);
|
||||
|
||||
/// \brief Fetches the type of an object.
|
||||
/// \param object The object to fetch the type of.
|
||||
/// \return The type of the object.
|
||||
IKA_API IkarusObjectType ikarus_object_get_type(IkarusObject object);
|
||||
|
||||
/// \brief Visits an object. Calling the appropriate function for the object's type.
|
||||
/// \param object The object to visit.
|
||||
/// \param blueprint The function to call if the object is a blueprint.
|
||||
/// \param property The function to call if the object is a property.
|
||||
/// \param entity The function to call if the object is an entity.
|
||||
/// \param blueprint_folder The function to call if the object is a blueprint folder.
|
||||
/// \param property_folder The function to call if the object is a property folder.
|
||||
/// \param entity_folder The function to call if the object is an entity folder.
|
||||
/// \param data The data to pass to the functions.
|
||||
IKA_API void ikarus_object_visit(
|
||||
IkarusObject object,
|
||||
void (*visit_blueprint)(IkarusBlueprint, void *),
|
||||
void (*visit_property)(IkarusProperty, void *),
|
||||
void (*visit_entity)(IkarusEntity, void *),
|
||||
void (*visit_blueprint_folder)(IkarusBlueprintFolder, void *),
|
||||
void (*visit_property_folder)(IkarusPropertyFolder, void *),
|
||||
void (*visit_entity_folder)(IkarusEntityFolder, void *),
|
||||
void * data
|
||||
);
|
||||
|
||||
IKARUS_END_HEADER
|
||||
|
||||
// @}
|
||||
38
include/ikarus/objects/object_type.h
Normal file
38
include/ikarus/objects/object_type.h
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#pragma once
|
||||
|
||||
// IMPLEMENTATION_DETAIL_OBJECT_TYPES
|
||||
|
||||
/// \file object.h
|
||||
/// \author Folling <mail@folling.io>
|
||||
|
||||
#include <ikarus/folders/folder_type.h>
|
||||
#include <ikarus/macros.h>
|
||||
|
||||
/// \addtogroup object Objects
|
||||
/// @{
|
||||
|
||||
/// \brief The type of an object.
|
||||
/// \remark Folders have the 4th bit set.
|
||||
enum IkarusObjectType {
|
||||
/// \brief Not an object or no object.
|
||||
IkarusObjectType_None = 0,
|
||||
/// \brief An IkarusBlueprint.
|
||||
IkarusObjectType_Blueprint = 1,
|
||||
/// \brief An IkarusProperty.
|
||||
IkarusObjectType_Property = 2,
|
||||
/// \brief An IkarusEntity.
|
||||
IkarusObjectType_Entity = 3,
|
||||
/// \brief An IkarusBlueprintFolder
|
||||
IkarusObjectType_BlueprintFolder = IkarusFolderType_BlueprintFolder,
|
||||
/// \brief An IkarusPropertyFolder
|
||||
IkarusObjectType_PropertyFolder = IkarusFolderType_PropertyFolder,
|
||||
/// \brief An IkarusEntityFolder
|
||||
IkarusObjectType_EntityFolder = IkarusFolderType_EntityFolder,
|
||||
};
|
||||
|
||||
/// \brief Constructs an IkarusObjectType from an IkarusFolderType.
|
||||
/// \param type The IkarusFolderType of which to construct the IkarusObjectType from.
|
||||
/// \return The constructed IkarusObjectType, representing the folder type.
|
||||
IKA_API IkarusObjectType ikarus_object_type_from_folder_type(IkarusFolderType type);
|
||||
|
||||
/// @}
|
||||
73
include/ikarus/objects/property.h
Normal file
73
include/ikarus/objects/property.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
#pragma once
|
||||
|
||||
// IMPLEMENTATION_DETAIL_LAZY_VALUE_CREATION, IMPLEMENTATION_DETAIL_PROPERTY_TYPES
|
||||
|
||||
/// \file property.h
|
||||
/// \author Folling <mail@folling.io>
|
||||
|
||||
#include <ikarus/id.h>
|
||||
#include <ikarus/macros.h>
|
||||
#include <ikarus/objects/blueprint.h>
|
||||
#include <ikarus/objects/entity.h>
|
||||
|
||||
/// \defgroup properties Properties
|
||||
/// \brief Properties define the structure and types of data.
|
||||
|
||||
IKARUS_BEGIN_HEADER
|
||||
|
||||
/// \brief Properties are the placeholders of values for entities.
|
||||
/// \details Each entity can have any number of properties.
|
||||
/// Every property has a type that identifies the kind of data that can be put in.
|
||||
///
|
||||
/// The following types currently exist:
|
||||
/// - Toggle: A true/false boolean-like value
|
||||
/// - Number: An arbitrary numeric value
|
||||
/// - Text: An arbitrary textual value
|
||||
///
|
||||
/// Property Examples:
|
||||
/// - Is Dead (Toggle)
|
||||
/// - Age (Number)
|
||||
/// - ISBN (Text)
|
||||
///
|
||||
/// Every property has settings which can be used to customise the property further.
|
||||
/// Two settings that are shared among all properties are the following:
|
||||
/// - Multiple
|
||||
/// - Allow undefined
|
||||
///
|
||||
/// The former transforms a property into a list. Instead of one number, you could then specify a series of numbers.
|
||||
/// The latter allows you to specify an "unknown" value for a property.
|
||||
/// It might not be known if a character is dead or not for example.
|
||||
///
|
||||
/// Each entity associated with the property has a value for it.
|
||||
///
|
||||
/// Properties can also be added to blueprints in which case they are available for all entities associated with the
|
||||
/// blueprint.
|
||||
///
|
||||
/// We call properties within entities "Entity Properties" and properties within blueprints "Blueprint Properties".
|
||||
///
|
||||
/// \remark Properties are scoped to the blueprint or entity they are associated with.
|
||||
/// \remark Values for properties are lazily created as space saving measure.
|
||||
/// Fetching the value for some property of some entity will return the property's default value if none is specified.
|
||||
/// This default value is specified when the property is created and can be updated later.
|
||||
/// \remark Properties' tree structures are scoped to the entity or blueprint they are associated with.
|
||||
struct IkarusProperty {
|
||||
/// \private \brief The id of the property.
|
||||
IkarusId id;
|
||||
};
|
||||
|
||||
/// \brief The type of a property.
|
||||
/// \details Designates the type of data stored by the property as well as which settings are
|
||||
/// available.
|
||||
/// \see IkarusPropertySettings
|
||||
enum IkarusPropertyType {
|
||||
/// \brief A true/false boolean-like value.
|
||||
IkarusPropertyType_Toggle,
|
||||
/// \brief An arbitrary numeric value.
|
||||
IkarusPropertyType_Number,
|
||||
/// \brief An arbitrary textual value.
|
||||
IkarusPropertyType_Text,
|
||||
};
|
||||
|
||||
IKARUS_END_HEADER
|
||||
|
||||
// @}
|
||||
31
include/ikarus/objects/property_type.h
Normal file
31
include/ikarus/objects/property_type.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#pragma once
|
||||
|
||||
// IMPLEMENTATION_DETAIL_PROPERTY_TYPES
|
||||
|
||||
/// \file property_type.h
|
||||
/// \author Folling <mail@folling.io>
|
||||
|
||||
#include <ikarus/macros.h>
|
||||
|
||||
IKARUS_BEGIN_HEADER
|
||||
|
||||
/// \defgroup property_types Property Types
|
||||
/// \brief Property Types delineate the type of data stored by a property.
|
||||
/// @{
|
||||
|
||||
/// \brief The type of a property.
|
||||
/// \details Designates the type of data stored by the property as well as which settings are
|
||||
/// available.
|
||||
/// \see IkarusPropertySettings
|
||||
enum IkarusPropertyType {
|
||||
/// \brief A true/false boolean-like value.
|
||||
IkarusPropertyType_Toggle,
|
||||
/// \brief An arbitrary numeric value.
|
||||
IkarusPropertyType_Number,
|
||||
/// \brief An arbitrary textual value.
|
||||
IkarusPropertyType_Text,
|
||||
};
|
||||
|
||||
/// @}
|
||||
|
||||
IKARUS_END_HEADER
|
||||
Loading…
Add table
Add a link
Reference in a new issue