Skip to content

Replace vec methods with operator overloads #230

@no-lex

Description

@no-lex

The current class vec, while useful, requires the user to use an unusual means of calculating operations: named methods corresponding to the desired operation. However, C++ gives us operator overloads, and that is the way these types of operations should be conducted. Operator overloads don't require the developer to memorize what the method names are: you just have to call on the well known operators themselves (* + - / += -= > < etc.).

Some things to be aware of when rewriting methods:

From rendersky:

   vec lambda(680e-9f, 550e-9f, 450e-9f),
       betar = vec(lambda).square().square().recip().mul(1.86e-31f / atmodensity),
       betam = vec(lambda).recip().mul(2*M_PI).square().mul(atmohazefade.tocolor().mul(atmohazefadescale)).mul(1.36e-19f * std::max(atmohaze, 1e-3f)),
       betarm = vec(betar).div(1+atmoclarity).add(betam);

We see spurious vec() constructor calls here because vec has no equivalent of the + operator, only the += operator. These vec() calls construct a new object to += on so that the original is not modified. Of course, these should be replaced by + when encountered.

In general, the operator methods already defined are of the += type: they modify the object in place. This includes some operators such as ** which don't even have such operation/assignment equivalents.

The mul(vec o) operator is not the dot operator: mul returns the element-wise multiplication of this with o.

Metadata

Metadata

Assignees

No one assigned

    Labels

    inconsistencyIssues that break convention rather than being faulty implementationsmisimplementationCircumlocutious or redundant implementation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions