// IMPLEMENTATION_DETAIL_DATABASE /// \file id.h /// \author Folling /// \privatesection #pragma once #include #include #include IKARUS_BEGIN_HEADER /// \defgroup id Ids /// \brief Ids are used to identify objects in the database. /// \details They are stored as 64 bit integers with the following layout: /// - first bit: ignored, technically we could use it, but SQLite doesn't support u64 integers. /// To avoid ordering fiascos and potential index performance degradation we just skip the first bit. /// - next 7 bits: #IkarusObjectType /// - last 56 bits: incremented counter generated by the database /// @{ /// \brief A wrapper around a 64 bit integer that represents the id of an object. /// \details They are stored as 64 bit integers with the following layout: /// - first bit: ignored, technically we could use it, but SQLite doesn't support u64 integers. /// To avoid ordering fiascos and potential index performance degradation we just skip the first bit. /// - next 7 bits: #IkarusObjectType /// - last 56 bits: incremented counter generated by the database using IkarusId = int64_t; IKA_API IkarusId ikarus_id_from_data_and_type(int64_t data, IkarusObjectType type); /// \brief Fetches the object type of the given id. /// \param id The id to fetch the object type for. /// \return The object type of the given id. IKA_API IkarusObjectType ikarus_id_get_object_type(IkarusId id); /// @} IKARUS_END_HEADER