Skip to content

Reviewing Getter and Setter #303

@furudbat

Description

@furudbat

While rewriting the code for my own proposes, I encounter that everything can be get and set, at first this not bad, but doesn't make always sense, for example: all the owning pointers or resources with depending member like width and height in Image.
Maybe we can prevent the user from setting depended members or changing pointer to leak memory/ownership.
What happens when someone tempers with SetMaterialCount in Model but didn't update Materials.

For example, Image:

    CONST_GETTER(void*, Data, data)
    GETTER(int, Width, width)
    GETTER(int, Height, height)
    GETTER(int, Mipmaps, mipmaps)
    GETTER(int, Format, format)

So the Image can only been loaded or manipulated with operations like Format.

Not sure about something like Texture, is resetting the id ok (?) Only set the id via Load or from ::Texture (?)

There is also the possibility for using something like std::span for arrays.

    /// Model
    GETTERSETTER(int, MeshCount, meshCount)
    GETTERSETTER(int, MaterialCount, materialCount)
    SPAN_GETTER(::Mesh, Meshes, meshes, meshCount)
    SPAN_GETTER(::Material, Materials, materials, materialCount)   ///< std::span{materials, materialCount}

    /// AutomationEventList
    GETTERSETTER(unsigned int, Capacity, capacity)
    GETTERSETTER(unsigned int, Count, count)
    SPAN_GETTER(AutomationEvent, Events, events, capacity)

While the classes still can been converted to (C) raylib structs and "loaded" from raylibs structs, the wrapper interface itself can been a little bit more robust, and if someone really want to tamper with the data, it still can been done via (explicit) casting. or using the public members. (I personally thinking about, using composition for the classes and explicit casting, so the data is no more public)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions