9#include <kernel/util/string.hpp> 
   27  using i8 = std::int8_t;
 
   29  using i16 = std::int16_t;
 
   31  using i32 = std::int32_t;
 
   33  using i64 = std::int64_t;
 
   36  using u8 = std::uint8_t;
 
   38  using u16 = std::uint16_t;
 
   40  using u32 = std::uint32_t;
 
   42  using u64 = std::uint64_t;
 
   44#if defined(FEAT_HAVE_HALFMATH) || defined(DOXYGEN) 
   45#define FEAT_HAVE_PACK_TYPE_F16 1 
   50  static_assert(
sizeof(
f16) == 2, 
"16-bit float is assumed to have exactly 16 bits");
 
   58#if defined(FEAT_HAVE_QUADMATH) || defined(DOYGEN) 
   59#define FEAT_HAVE_PACK_TYPE_F128 1 
   61  using f128 = __float128;
 
   63  static_assert(
sizeof(f128) == 16, 
"128-bit float is assumed to have exactly 128 bits");
 
   75  static constexpr uint zfp_header_mask = 7u;
 
  157    case Pack::Type::F16:   
return os << 
"F16";
 
  158    case Pack::Type::F32:   
return os << 
"F32";
 
  159    case Pack::Type::F64:   
return os << 
"F64";
 
  160    case Pack::Type::F128:  
return os << 
"F128";
 
  161    case Pack::Type::I8:    
return os << 
"I8";
 
  162    case Pack::Type::I16:   
return os << 
"I16";
 
  163    case Pack::Type::I32:   
return os << 
"I32";
 
  164    case Pack::Type::I64:   
return os << 
"I64";
 
  165    case Pack::Type::U8:    
return os << 
"U8";
 
  166    case Pack::Type::U16:   
return os << 
"U16";
 
  167    case Pack::Type::U32:   
return os << 
"U32";
 
  168    case Pack::Type::U64:   
return os << 
"U64";
 
  170    case Pack::Type::ZF16:  
return os << 
"ZF16";
 
  171    case Pack::Type::ZF32:  
return os << 
"ZF32";
 
  172    case Pack::Type::ZF64:  
return os << 
"ZF64";
 
  173    case Pack::Type::ZF128: 
return os << 
"ZF128";
 
  174    case Pack::Type::ZI8:   
return os << 
"ZI8";
 
  175    case Pack::Type::ZI16:  
return os << 
"ZI16";
 
  176    case Pack::Type::ZI32:  
return os << 
"ZI32";
 
  177    case Pack::Type::ZI64:  
return os << 
"ZI64";
 
  178    case Pack::Type::ZU8:   
return os << 
"ZU8";
 
  179    case Pack::Type::ZU16:  
return os << 
"ZU16";
 
  180    case Pack::Type::ZU32:  
return os << 
"ZU32";
 
  181    case Pack::Type::ZU64:  
return os << 
"ZU64";
 
  182    case Pack::Type::PF32:  
return os << 
"PF32";
 
  183    case Pack::Type::PF64:  
return os << 
"PF64";
 
  184    default:                
return os << 
"???";
 
  205      t = Pack::Type::F128;
 
  225      t = Pack::Type::ZF16;
 
  227      t = Pack::Type::ZF32;
 
  229      t = Pack::Type::ZF64;
 
  231      t = Pack::Type::ZF128;
 
  235      t = Pack::Type::ZI16;
 
  237      t = Pack::Type::ZI32;
 
  239      t = Pack::Type::ZI64;
 
  243      t = Pack::Type::ZU16;
 
  245      t = Pack::Type::ZU32;
 
  247      t = Pack::Type::ZU64;
 
  249      t = Pack::Type::PF32;
 
  251      t = Pack::Type::PF64;
 
  253      is.setstate(std::ios_base::failbit);
 
  271    constexpr auto size_mask = 0xFULL;
 
  272    return std::size_t(1) << ((
static_cast<u16>(type) & size_mask) - 1);
 
  287  template<
typename T_>
 
  334  template<
typename T_>
 
  338    std::size_t buf_size,
 
  342    double tolerance = 1e-16);
 
  370  template<
typename T_>
 
  375    std::size_t buf_size,
 
String class implementation.
int compare_no_case(const String &other) const
Compares two strings without regard to case.
Data Array Pack namespace.
Pack::Type operator|(Pack::Type a, Pack::Type b)
bit-wise OR operator for Pack::Type
std::int32_t i32
32-bit signed integer type
std::size_t encode(void *buf, const T_ *src, const std::size_t buf_size, const std::size_t count, const Pack::Type pack_type, bool swap_bytes, double tolerance)
Encodes an array into a packed buffer.
std::uint64_t u64
64-bit unsigned integer type
std::size_t element_size(const Pack::Type type)
Returns the size of a Pack::Type element in bytes.
Pack::Type operator&(Pack::Type a, Pack::Type b)
bit-wise AND operator for Pack::Type
std::size_t estimate_size(const std::size_t count, const Pack::Type type, const double tolerance)
Computes the estimated (upper bound) pack buffer size for an array.
std::istream & operator>>(std::istream &is, Pack::Type &t)
stream input operator for Pack::Type
std::ostream & operator<<(std::ostream &os, Pack::Type t)
stream output operator for Pack::Type
Half f16
16-bit floating point type
float f32
32-bit floating point type
Type
bitmask for zfp header
std::int16_t i16
16-bit signed integer type
std::uint32_t u32
32-bit unsigned integer type
std::int64_t i64
64-bit signed integer type
std::uint16_t u16
16-bit unsigned integer type
std::int8_t i8
8-bit signed integer type
double f64
64-bit floating point type
std::size_t decode(T_ *dst, void *buf, const std::size_t count, const std::size_t buf_size, const Pack::Type pack_type, bool swap_bytes)
Decodes an array from a packed buffer.
std::uint8_t u8
8-bit unsigned integer type
Pack::Type deduct_type()
Deduct the (raw) Pack::Type from a given data type T_.
__half Half
Half data type.