// This file was generated by generate-classes. // DO NOT EDIT THIS FILE! #pragma once #include #include #include #include #include #include namespace CesiumGltf { /** * @brief A class property. */ struct CESIUMGLTF_API ClassProperty final : public CesiumUtility::ExtensibleObject { /** * @brief The original name of this type. */ static constexpr const char* TypeName = "ClassProperty"; /** * @brief Known values for The element type. */ struct Type { /** @brief `SCALAR` */ inline static const std::string SCALAR = "SCALAR"; /** @brief `VEC2` */ inline static const std::string VEC2 = "VEC2"; /** @brief `VEC3` */ inline static const std::string VEC3 = "VEC3"; /** @brief `VEC4` */ inline static const std::string VEC4 = "VEC4"; /** @brief `MAT2` */ inline static const std::string MAT2 = "MAT2"; /** @brief `MAT3` */ inline static const std::string MAT3 = "MAT3"; /** @brief `MAT4` */ inline static const std::string MAT4 = "MAT4"; /** @brief `STRING` */ inline static const std::string STRING = "STRING"; /** @brief `BOOLEAN` */ inline static const std::string BOOLEAN = "BOOLEAN"; /** @brief `ENUM` */ inline static const std::string ENUM = "ENUM"; }; /** * @brief Known values for The datatype of the element's components. Only * applicable to `SCALAR`, `VECN`, and `MATN` types. */ struct ComponentType { /** @brief `INT8` */ inline static const std::string INT8 = "INT8"; /** @brief `UINT8` */ inline static const std::string UINT8 = "UINT8"; /** @brief `INT16` */ inline static const std::string INT16 = "INT16"; /** @brief `UINT16` */ inline static const std::string UINT16 = "UINT16"; /** @brief `INT32` */ inline static const std::string INT32 = "INT32"; /** @brief `UINT32` */ inline static const std::string UINT32 = "UINT32"; /** @brief `INT64` */ inline static const std::string INT64 = "INT64"; /** @brief `UINT64` */ inline static const std::string UINT64 = "UINT64"; /** @brief `FLOAT32` */ inline static const std::string FLOAT32 = "FLOAT32"; /** @brief `FLOAT64` */ inline static const std::string FLOAT64 = "FLOAT64"; }; /** * @brief The name of the property, e.g. for display purposes. */ std::optional name; /** * @brief The description of the property. */ std::optional description; /** * @brief The element type. * * Known values are defined in {@link Type}. * */ std::string type = Type::SCALAR; /** * @brief The datatype of the element's components. Only applicable to * `SCALAR`, `VECN`, and `MATN` types. * * Known values are defined in {@link ComponentType}. * */ std::optional componentType; /** * @brief Enum ID as declared in the `enums` dictionary. Required when `type` * is `ENUM`. */ std::optional enumType; /** * @brief Whether the property is an array. When `count` is defined the * property is a fixed-length array. Otherwise the property is a * variable-length array. */ bool array = false; /** * @brief The number of array elements. May only be defined when `array` is * true. */ std::optional count; /** * @brief Specifies whether integer values are normalized. Only applicable to * `SCALAR`, `VECN`, and `MATN` types with integer component types. For * unsigned integer component types, values are normalized between * `[0.0, 1.0]`. For signed integer component types, values are normalized * between `[-1.0, 1.0]`. For all other component types, this property must be * false. */ bool normalized = false; /** * @brief An offset to apply to property values. Only applicable to `SCALAR`, * `VECN`, and `MATN` types when the component type is `FLOAT32` or `FLOAT64`, * or when the property is `normalized`. */ std::optional offset; /** * @brief A scale to apply to property values. Only applicable to `SCALAR`, * `VECN`, and `MATN` types when the component type is `FLOAT32` or `FLOAT64`, * or when the property is `normalized`. */ std::optional scale; /** * @brief Maximum allowed value for the property. Only applicable to `SCALAR`, * `VECN`, and `MATN` types. This is the maximum of all property values, after * the transforms based on the `normalized`, `offset`, and `scale` properties * have been applied. */ std::optional max; /** * @brief Minimum allowed value for the property. Only applicable to `SCALAR`, * `VECN`, and `MATN` types. This is the minimum of all property values, after * the transforms based on the `normalized`, `offset`, and `scale` properties * have been applied. */ std::optional min; /** * @brief If required, the property must be present in every entity conforming * to the class. If not required, individual entities may include `noData` * values, or the entire property may be omitted. As a result, `noData` has no * effect on a required property. Client implementations may use required * properties to make performance optimizations. */ bool required = false; /** * @brief A `noData` value represents missing data — also known as a sentinel * value — wherever it appears. `BOOLEAN` properties may not specify `noData` * values. This is given as the plain property value, without the transforms * from the `normalized`, `offset`, and `scale` properties. Must not be * defined if `required` is true. */ std::optional noData; /** * @brief A default value to use when encountering a `noData` value or an * omitted property. The value is given in its final form, taking the effect * of `normalized`, `offset`, and `scale` properties into account. Must not be * defined if `required` is true. */ std::optional defaultProperty; /** * @brief An identifier that describes how this property should be * interpreted. The semantic cannot be used by other properties in the class. */ std::optional semantic; /** * @brief Calculates the size in bytes of this object, including the contents * of all collections, pointers, and strings. This will NOT include the size * of any extensions attached to the object. Calling this method may be slow * as it requires traversing the object's entire structure. */ int64_t getSizeBytes() const { int64_t accum = 0; accum += int64_t(sizeof(ClassProperty)); accum += CesiumUtility::ExtensibleObject::getSizeBytes() - int64_t(sizeof(CesiumUtility::ExtensibleObject)); if (this->name) { accum += int64_t(this->name->capacity() * sizeof(char)); } if (this->description) { accum += int64_t(this->description->capacity() * sizeof(char)); } if (this->enumType) { accum += int64_t(this->enumType->capacity() * sizeof(char)); } if (this->semantic) { accum += int64_t(this->semantic->capacity() * sizeof(char)); } return accum; } }; } // namespace CesiumGltf