saturate_cast
まだ誰も着手していません。
評価
調査の方向性
提案されている BOOST_CORE_SATURATE_CAST_HPP の実装、C++26 の saturate_cast リファレンス、および記載されている boost::is_integer 依存関係をレビューしてください。まず、このユーティリティを boost::core に置くべきか、また従う必要がある既存の Boost の規約を判断してください。完了条件は、ライブラリ内の配置場所について合意し、示されている変換を適切にカバーする、互換性のある飽和整数キャストユーティリティを用意することです。
索引モデルが issue の本文から書いたものです。
説明
With C++26, there is std::saturate_cast https://en.cppreference.com/w/cpp/numeric/saturate_cast.html
Can you provide this as well?
I'm not sure if boost::core is the right library.
My implementation requires boost::is_integer (https://github.com/boostorg/type_traits/issues/186), but they didn't understand what I meant and therefore rejected/closed it.
// Distributed under the Boost Software License Version 1.0 https://www.boost.org/LICENSE_1_0.txt
// Copyright Gero Peterhoff
#ifndef BOOST_CORE_SATURATE_CAST_HPP
#define BOOST_CORE_SATURATE_CAST_HPP
#include <boost/type_traits/is_integer.hpp>
#include <limits>
namespace boost
{
namespace core
{
template <typename To, typename From>
inline BOOST_CXX14_CONSTEXPR typename std::enable_if<boost::is_integer<To>::value && boost::is_integer<From>::value, To>::type saturate_cast(const From& from) noexcept
{
using limits = std::numeric_limits<To>;
BOOST_IF_CONSTEXPR (std::is_same<To, From>::value)
{
return from;
}
else BOOST_IF_CONSTEXPR (std::is_signed<To>::value && std::is_unsigned<From>::value)
{
using type = typename std::make_unsigned<To>::type;
return
(from > type(limits::max())) ? limits::max() :
To(from);
}
else BOOST_IF_CONSTEXPR (std::is_unsigned<To>::value && std::is_signed<From>::value)
{
using type = typename std::make_unsigned<From>::type;
return
(from < 0) ? To{} :
(type(from) > limits::max()) ? limits::max() :
To(from);
}
else BOOST_IF_CONSTEXPR (std::is_signed<To>::value && std::is_signed<From>::value)
{
return
(from < limits::min()) ? limits::min() :
(from > limits::max()) ? limits::max() :
To(from);
}
else
{
return
(from > limits::max()) ? limits::max() :
To(from);
}
}
} // core
} // boost
#endif // BOOST_CORE_SATURATE_CAST_HPP
thx
Gero
- 主要言語
- C++
- スター
- 156
- フォーク
- 116
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
boostorg/core のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 55/100
-
難易度 1/5 1時間未満 初心者へのやさしさ 55/100
-
move span to boost::core::再び着手できるかも @glenfe が 507 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
-
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
NVIDIA-RTX/NRI#277 ·
メンテナーはふだん 1 日以内に返信
-
os:Linux
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
-
acceptable_buffer_backends: unknown backend names are silently ignored対応中かも @mini-1235 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
ros2/rmw_fastrtps#945 ·
メンテナーはふだん 1 日以内に返信