Program Listing for File Clamp.hpp

Return to documentation for file (include\util\function\scalar\Clamp.hpp)

#pragma once

#include "util/common/Result.hpp"

#include <algorithm>

namespace PDJE_UTIL::function {

struct ClampArgs {
    double value     = 0.0;
    double min_value = 0.0;
    double max_value = 1.0;
};

inline common::Result<double>
clamp(ClampArgs args)
{
    if (args.min_value > args.max_value) {
        return common::Result<double>::failure(
            { common::StatusCode::invalid_argument,
              "ClampArgs.min_value must be less than or equal to ClampArgs.max_value." });
    }

    return common::Result<double>::success(
        std::clamp(args.value, args.min_value, args.max_value));
}

} // namespace PDJE_UTIL::function