1 #ifndef _NNDEPLOY_BASE_SATURATE_CAST_H_
2 #define _NNDEPLOY_BASE_SATURATE_CAST_H_
33 static inline T saturate_cast(
unsigned char v) {
38 static inline T saturate_cast(
signed char v) {
43 static inline T saturate_cast(
unsigned short v) {
48 static inline T saturate_cast(
short v) {
53 static inline T saturate_cast(
unsigned v) {
58 static inline T saturate_cast(
int v) {
63 static inline T saturate_cast(
float v) {
68 static inline T saturate_cast(
double v) {
73 static inline T saturate_cast(int64_t v) {
78 static inline T saturate_cast(uint64_t v) {
84 return (
unsigned char)std::max((
int)v, 0);
88 return (
unsigned char)std::min((
unsigned)v, (
unsigned)UCHAR_MAX);
92 return (
unsigned char)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0);
100 return (
unsigned char)std::min(v, (
unsigned)UCHAR_MAX);
114 return (
unsigned char)((uint64_t)v <= (uint64_t)UCHAR_MAX ? v
120 return (
unsigned char)std::min(v, (uint64_t)UCHAR_MAX);
125 return (
signed char)std::min((
int)v, SCHAR_MAX);
129 return (
signed char)std::min((
unsigned)v, (
unsigned)SCHAR_MAX);
133 return (
signed char)((unsigned)(v - SCHAR_MIN) <= (unsigned)UCHAR_MAX ? v
143 return (
signed char)std::min(v, (
unsigned)SCHAR_MAX);
157 return (
signed char)((uint64_t)((int64_t)v - SCHAR_MIN) <= (uint64_t)UCHAR_MAX
164 return (
signed char)std::min(v, (uint64_t)SCHAR_MAX);
169 return (
unsigned short)std::max((
int)v, 0);
173 return (
unsigned short)std::max((
int)v, 0);
177 return (
unsigned short)((unsigned)v <= (
unsigned)USHRT_MAX ? v
183 return (
unsigned short)std::min(v, (
unsigned)USHRT_MAX);
197 return (
unsigned short)((uint64_t)v <= (uint64_t)USHRT_MAX ? v
203 return (
unsigned short)std::min(v, (uint64_t)USHRT_MAX);
208 return (
short)std::min((
int)v, SHRT_MAX);
212 return (
short)((unsigned)(v - SHRT_MIN) <= (unsigned)USHRT_MAX ? v
218 return (
short)std::min(v, (
unsigned)SHRT_MAX);
232 return (
short)((uint64_t)((int64_t)v - SHRT_MIN) <= (uint64_t)USHRT_MAX ? v
238 return (
short)std::min(v, (uint64_t)SHRT_MAX);
243 return (
int)std::min(v, (
unsigned)INT_MAX);
247 return (
int)((uint64_t)(v - INT_MIN) <= (uint64_t)UINT_MAX ? v
253 return (
int)std::min(v, (uint64_t)INT_MAX);
266 return (
unsigned)std::max(v, (
signed char)0);
270 return (
unsigned)std::max(v, (
short)0);
274 return (
unsigned)std::max(v, (
int)0);
278 return (
unsigned)((uint64_t)v <= (uint64_t)UINT_MAX ? v
284 return (
unsigned)std::min(v, (uint64_t)UINT_MAX);
299 return (uint64_t)std::max(v, (
signed char)0);
303 return (uint64_t)std::max(v, (
short)0);
307 return (uint64_t)std::max(v, (
int)0);
311 return (uint64_t)std::max(v, (int64_t)0);
316 return (int64_t)std::min(v, (uint64_t)LLONG_MAX);
unsigned short saturate_cast< unsigned short >(signed char v)
int64_t saturate_cast< int64_t >(uint64_t v)
short saturate_cast< short >(unsigned short v)
uint64_t saturate_cast< uint64_t >(signed char v)
unsigned char saturate_cast< unsigned char >(signed char v)
int saturate_cast< int >(unsigned v)
signed char saturate_cast< signed char >(unsigned char v)
unsigned saturate_cast< unsigned >(signed char v)
base::Status round(device::Tensor *input, device::Tensor *output)