diff options
author | Claudius Holeksa <mail@keldu.de> | 2023-05-23 18:32:59 +0200 |
---|---|---|
committer | Claudius Holeksa <mail@keldu.de> | 2023-05-23 18:32:59 +0200 |
commit | cf18707c086a1b47600c924ae1f33a379d1d3fb2 (patch) | |
tree | c1beaf4fb536c5fce7831f0ea44dedbc6f8d5cc7 /src/unit.tmpl.h | |
parent | 49cd4c7f007df26733f8c609c234a37be8214163 (diff) |
nix: Fixed dev install and moved folders
Diffstat (limited to 'src/unit.tmpl.h')
-rw-r--r-- | src/unit.tmpl.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/unit.tmpl.h b/src/unit.tmpl.h new file mode 100644 index 0000000..d89e0c1 --- /dev/null +++ b/src/unit.tmpl.h @@ -0,0 +1,53 @@ +#include <utility> + +namespace kelun { + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +unit<StorageT,unit_component<UnitTypes, Exponents>...>::unit(const value_type& value_): + value{value_}{} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +unit<StorageT,unit_component<UnitTypes, Exponents>...>::unit(value_type&& value_):value{std::move(value_)}{} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +unit<StorageT,unit_component<UnitTypes, Exponents>...>& unit<StorageT,unit_component<UnitTypes, Exponents>...>::operator=(const typename unit<StorageT,unit_component<UnitTypes, Exponents>...>::value_type& value_){ + value = value_; + return *this; +} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +unit<StorageT,unit_component<UnitTypes, Exponents>...>& unit<StorageT,unit_component<UnitTypes, Exponents>...>::operator=(typename unit<StorageT,unit_component<UnitTypes, Exponents>...>::value_type&& value_){ + value = std::move(value_); + return *this; +} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +unit<StorageT,unit_component<UnitTypes, Exponents>...> unit<StorageT,unit_component<UnitTypes, Exponents>...>::operator+(const unit<StorageT,unit_component<UnitTypes, Exponents>...>& rhs){ + return value + rhs.value; +} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +unit<StorageT,unit_component<UnitTypes, Exponents>...> unit<StorageT,unit_component<UnitTypes, Exponents>...>::operator-(const unit<StorageT,unit_component<UnitTypes, Exponents>...>& rhs){ + return value - rhs.value; +} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +template<typename... Trhs> +typename unit_multiplication<unit<StorageT,unit_component<UnitTypes,Exponents>...>, unit<StorageT, Trhs...>>::type +unit<StorageT,unit_component<UnitTypes, Exponents>...>::operator*(const unit<StorageT,Trhs...>& rhs){ + return value * rhs.data(); +} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +template<typename... Trhs> +typename unit_multiplication<unit<StorageT,unit_component<UnitTypes,Exponents>...>, typename unit_invert<StorageT,Trhs...>::type>::type +unit<StorageT,unit_component<UnitTypes,Exponents>...>::operator/(const unit<StorageT, Trhs...>& rhs){ + typename unit_invert<StorageT, Trhs...>::type rhs_inverted{static_cast<StorageT>(1)/rhs.data()}; + return value * rhs_inverted.data(); +} + +template<typename StorageT, typename... UnitTypes, int64_t... Exponents> +typename unit<StorageT,unit_component<UnitTypes, Exponents>...>::value_type unit<StorageT,unit_component<UnitTypes, Exponents>...>::data() const { + return value; +} +} |