//===----------------------------------------------------------------------===// // DuckDB // // duckdb/common/limits.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/common/types.hpp" // Undef annoying windows macro #undef max #include namespace duckdb { template struct NumericLimits { static constexpr T Minimum() { return std::numeric_limits::lowest(); }; static constexpr T Maximum() { return std::numeric_limits::max(); }; DUCKDB_API static bool IsSigned(); DUCKDB_API static idx_t Digits(); }; template <> struct NumericLimits { static constexpr int8_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr int8_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return true; } static idx_t Digits() { return 3; } }; template <> struct NumericLimits { static constexpr int16_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr int16_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return true; } static idx_t Digits() { return 5; } }; template <> struct NumericLimits { static constexpr int32_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr int32_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return true; } static idx_t Digits() { return 10; } }; template <> struct NumericLimits { static constexpr int64_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr int64_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return true; } static idx_t Digits() { return 19; } }; template <> struct NumericLimits { static constexpr hugeint_t Minimum() { return {std::numeric_limits::lowest(), 1}; }; static constexpr hugeint_t Maximum() { return {std::numeric_limits::max(), std::numeric_limits::max()}; }; static bool IsSigned() { return true; } static idx_t Digits() { return 39; } }; template <> struct NumericLimits { static constexpr uint8_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr uint8_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return false; } static idx_t Digits() { return 3; } }; template <> struct NumericLimits { static constexpr uint16_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr uint16_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return false; } static idx_t Digits() { return 5; } }; template <> struct NumericLimits { static constexpr uint32_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr uint32_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return false; } static idx_t Digits() { return 10; } }; template <> struct NumericLimits { static constexpr uint64_t Minimum() { return std::numeric_limits::lowest(); }; static constexpr uint64_t Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return false; } static idx_t Digits() { return 20; } }; template <> struct NumericLimits { static constexpr float Minimum() { return std::numeric_limits::lowest(); }; static constexpr float Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return true; } static idx_t Digits() { return 127; } }; template <> struct NumericLimits { static constexpr double Minimum() { return std::numeric_limits::lowest(); }; static constexpr double Maximum() { return std::numeric_limits::max(); }; static bool IsSigned() { return true; } static idx_t Digits() { return 250; } }; } // namespace duckdb