Cleanup: Use none-const get_single_value for setting values
This patch adds a none-const variant of the get_single_value method and use that in the set_single_value method, which will reduce code duplication. This is also needed for a future change.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
#include "BLI_assert.h"
|
||||
#include "BLI_math_base.hh"
|
||||
@@ -384,7 +385,8 @@ class Result {
|
||||
|
||||
/* Gets the single value stored in the result. Assumes the result stores a value of the given
|
||||
* template type. */
|
||||
template<typename T> T get_single_value() const;
|
||||
template<typename T> const T &get_single_value() const;
|
||||
template<typename T> T &get_single_value();
|
||||
|
||||
/* Gets the single value stored in the result, if the result is not a single value, the given
|
||||
* default value is returned. Assumes the result stores a value of the same type as the template
|
||||
@@ -560,7 +562,7 @@ inline void *Result::data() const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template<typename T> inline T Result::get_single_value() const
|
||||
template<typename T> inline const T &Result::get_single_value() const
|
||||
{
|
||||
BLI_assert(this->is_single_value());
|
||||
static_assert(Result::is_supported_type<T>());
|
||||
@@ -594,6 +596,11 @@ template<typename T> inline T Result::get_single_value() const
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T> inline T &Result::get_single_value()
|
||||
{
|
||||
return const_cast<T &>(std::as_const(*this).get_single_value<T>());
|
||||
}
|
||||
|
||||
template<typename T> inline T Result::get_single_value_default(const T &default_value) const
|
||||
{
|
||||
if (this->is_single_value()) {
|
||||
@@ -608,30 +615,7 @@ template<typename T> inline void Result::set_single_value(const T &value)
|
||||
BLI_assert(this->is_single_value());
|
||||
static_assert(Result::is_supported_type<T>());
|
||||
|
||||
if constexpr (std::is_same_v<T, float>) {
|
||||
BLI_assert(type_ == ResultType::Float);
|
||||
float_value_ = value;
|
||||
}
|
||||
else if constexpr (std::is_same_v<T, int>) {
|
||||
BLI_assert(type_ == ResultType::Int);
|
||||
int_value_ = value;
|
||||
}
|
||||
else if constexpr (std::is_same_v<T, float2>) {
|
||||
BLI_assert(type_ == ResultType::Float2);
|
||||
float2_value_ = value;
|
||||
}
|
||||
else if constexpr (std::is_same_v<T, float3>) {
|
||||
BLI_assert(type_ == ResultType::Float3);
|
||||
float3_value_ = value;
|
||||
}
|
||||
else if constexpr (std::is_same_v<T, float4>) {
|
||||
BLI_assert(ELEM(type_, ResultType::Color, ResultType::Vector));
|
||||
color_value_ = value;
|
||||
}
|
||||
else if constexpr (std::is_same_v<T, int2>) {
|
||||
BLI_assert(type_ == ResultType::Int2);
|
||||
int2_value_ = value;
|
||||
}
|
||||
this->get_single_value<T>() = value;
|
||||
|
||||
switch (storage_type_) {
|
||||
case ResultStorageType::GPU:
|
||||
|
||||
Reference in New Issue
Block a user