home | help
std::experimental::clamp(3)    C++ Standard Libary   std::experimental::clamp(3)

NAME
     std::experimental::clamp - std::experimental::clamp

Synopsis
	Defined in header <experimental/simd>
	template< class T, class Abi >

	simd<T, Abi>							 (paral-
     lelism TS v2)

	clamp( const simd<T, Abi>& v, const simd<T, Abi>& lo, const
	simd<T, Abi>& hi );

Parameters
	v      - the elements to clamp
	lo, hi - the boundaries to clamp v to

Return value
	The result of element-wise application of std::clamp(v[i], lo[i], hi[i])
     for all i a
	[0, size()).

Example
     // Run this code

      #include <cstddef>
      #include <cstdint>
      #include <experimental/simd>
      #include <iomanip>
      #include <iostream>
      namespace stdx = std::experimental;

      void println(auto rem, auto const v)
      {
	  std::cout << rem << ": ";
	  for (std::size_t i = 0; i != v.size(); ++i)
	      std::cout << std::setw(4) << v[i] << ' ';
	  std::cout << '\n';
      }

      int main()
      {
	  stdx::fixed_size_simd<int, 8> a{[](int i) {
	      static constexpr auto c = {-129, -128, -1, 0, 42, 127, 128, 255};
	      return c.begin()[i];
	  }};
	  println("a", a);

	  stdx::fixed_size_simd<int, 8> lo1{INT8_MIN};
	  stdx::fixed_size_simd<int, 8> hi1{INT8_MAX};
	  const auto b = stdx::clamp(a, lo1, hi1);
	  println("b", b);

	  stdx::fixed_size_simd<int, 8> lo2{0};
	  stdx::fixed_size_simd<int, 8> hi2{UINT8_MAX};
	  const auto c = stdx::clamp(a, lo2, hi2);
	  println("c", c);
      }

Output:
      a: -129 -128   -1    0   42  127	128  255
      b: -128 -128   -1    0   42  127	127  127
      c:    0	 0    0    0   42  127	128  255

See also
	clamp	clamps a value between a pair of boundary values
	(C++17) (function template)

http://cppreference.com 	   2024.06.10	     std::experimental::clamp(3)

home | help