|
| using | FrequencyBands = simd |
| |
| using | Rand = WyRand |
| |
| template<class KeyType , class T , template< class > class AllocatorType> |
| using | FlatMapWithAllocator = FlatMap< KeyType, T, std::equal_to< KeyType >, std::vector< KeyType, AllocatorType< KeyType > >, std::vector< T, AllocatorType< T > > > |
| |
| using | ScratchHashSetIdentity = ScratchHashSet32< uint32, std::identity > |
| |
| using | uint = unsigned int |
| |
| using | uint8 = std::uint8_t |
| |
| using | uint16 = std::uint16_t |
| |
| using | uint32 = std::uint32_t |
| |
| using | uint64 = std::uint64_t |
| |
| using | int8 = std::int8_t |
| |
| using | int16 = std::int16_t |
| |
| using | int32 = std::int32_t |
| |
| using | int64 = std::int64_t |
| |
| using | TraceFunction = void(*)(const char *message) |
| | Trace function, needs to be overridden by application. This should output a line of text to the log / TTY.
|
| |
| using | AssertFailedFunction = bool(*)(const char *inExpression, const char *inMessage, const std::source_location) |
| | Function called when an assertion fails. This function should return true if a breakpoint needs to be triggered.
|
| |
| using | AbsorptionCoeffs = simd |
| |
| using | FreqBandCenters = simd |
| |
| using | EnergyBands = simd |
| |
| using | Octahedron8Bit = OctahedronEncoding< Octahedron::Precision4bits > |
| | Encoder aliases for available encoding precisions.
|
| |
| using | Octahedron16Bit = OctahedronEncoding< Octahedron::Precision8bits > |
| |
| using | Octahedron32Bit = OctahedronEncoding< Octahedron::Precision16bits > |
| |
| using | Octahedron64Bit = OctahedronEncoding< Octahedron::Precision32bits > |
| |
| template<std::size_t N> |
| using | Vec3SIMDBuffer = Vec3Buffer< simd, N > |
| | Vec3-like SoA buffer, holding separate arrays of Vec3 components X, Y, Z as floats.
|
| |
| template<std::size_t N> |
| using | Vec3FloatBuffer = Vec3Buffer< float, N > |
| | Vec3-like SoA buffer, holding separate arrays of Vec3 components X, Y, Z as simd.
|
| |
| using | Vec3SIMDBufferView = Vec3BufferView< simd > |
| | View into a Vec3-like SoA buffer, holding separate arrays of Vec3 components X, Y, Z as floats.
|
| |
| using | Vec3FloatBufferView = Vec3BufferView< float > |
| | View into a Vec3-like SoA buffer, holding separate arrays of Vec3 components X, Y, Z as simd.
|
| |
| template<class Vec3Type > |
| using | Vec3FloatType = std::remove_cvref_t< decltype(Vec3Access< Vec3Type >::GetX(std::declval< Vec3Type >()))> |
| |
| template<class T > |
| using | PmrAllocator = std::pmr::polymorphic_allocator< T > |
| | Just a shorter alias.
|
| |
| template<class T > |
| using | pmr_unique_ptr = std::unique_ptr< T, PmrDeleter< T > > |
| | Alias for unique ptr using pmr allocator and deleter.
|
| |
| using | VBAPStandartTraits = VBAPBaseTraits< MinimalVec3 > |
| |
| template<class Traits = VBAPStandartTraits> |
| using | VBAPanner2D = VBAPannerBase< VBAP::Panning2D< Traits >, Traits > |
| |
| template<class Traits = VBAPStandartTraits, auto cLUTType = VBAP::ELUTSize::KB_983> |
| using | VBAPanner3D = VBAPannerBase< VBAP::Panning3D< Traits, cLUTType >, Traits > |
| |
| using | AttenuationCurveRef = std::shared_ptr< AttenuationFunction > |
| |
| using | DirectEffectHandle = IDType< DirectPathServiceIDTag > |
| |
| using | StandartPanner = VBAPanner2D< VBAPStandartTraits > |
| |
| using | StandartSourceLayout = typename StandartPanner::SourceLayoutType |
| |
| using | StandartPanData = typename StandartPanner::PanUpdateData |
| |
| using | StandartPanDataWithOrientation = typename StandartPanner::PanUpdateDataWithOrientation |
| |
| using | PanEffectHandle = IDType< PanningServiceIDTag > |
| |
| template<uint32_t MaxWindow> |
| using | RingIndexForwardFast = AbstractRingIndex< MaxWindow, RingImpl::EWriteDirection::Forward, RingImpl::EOperationMode::Pow2BitManip > |
| |
| template<uint32_t MaxWindow> |
| using | RingIndexBackwardFast = AbstractRingIndex< MaxWindow, RingImpl::EWriteDirection::Backward, RingImpl::EOperationMode::Pow2BitManip > |
| |
| template<uint32_t MaxWindow> |
| using | RingIndexForward = AbstractRingIndex< MaxWindow, RingImpl::EWriteDirection::Forward, RingImpl::EOperationMode::Modulo > |
| |
| template<uint32_t MaxWindow> |
| using | RingIndexBackward = AbstractRingIndex< MaxWindow, RingImpl::EWriteDirection::Backward, RingImpl::EOperationMode::Modulo > |
| |
| using | OnlineVariance = typename Variance< float >::Online |
| |
| using | OnlineVarianceSIMD = typename Variance< simd >::Online |
| |
|
| template<CFloatOrSIMD T> |
| JPL_INLINE T | ReflectionLoss_dB (const T &alpha) |
| |
| std::ostream & | operator<< (std::ostream &os, const AcousticMaterial &v) |
| |
| void | Add (float *dest, const float *source, uint32 destChannel, uint32 sourceChannel, uint32 destNumChannels, uint32 sourceNumChannels, uint32 numFrames) |
| |
| void | Add (float *dest, const float *source, uint32 destChannel, uint32 destNumChannels, uint32 numFrames) |
| |
| void | ApplyGain (float *dest, uint32 numFrames, float gain) |
| |
| void | ApplyGainRamp (float *dest, uint32 numFrames, float gainStart, float gainEnd) |
| |
| void | AddAndApplyGainRamp (float *dest, const float *source, uint32 destChannel, uint32 sourceChannel, uint32 destNumChannels, uint32 sourceNumChannels, uint32 numFrames, float gainStart, float gainEnd) |
| |
| void | AddAndApplyGainRamp (float *dest, const float *source, uint32 numChannels, uint32 numFrames, float gainStart, float gainEnd) |
| |
| void | DownmixToMono (float *dest, const float *source, uint32 numChannels, uint32 numSamples) |
| |
| JPL_INLINE simd | EstimateRT60_Sabine (float w, float l, float h, const simd &avgAbsorption) |
| |
| JPL_INLINE simd | EstimateRT60_Sabine (float w, float l, float h, const simd &avgAbsorption, const simd &airAttenuation_dB) |
| | Estimate RT60 using Sabine's equation, taking into account air absorption.
|
| |
| JPL_INLINE simd | EstimateRT60_Eyring (float w, float l, float h, const simd &avgAbsorption) |
| |
| JPL_INLINE simd | EstimateRT60_Eyring (float w, float l, float h, const simd &avgAbsorption, const simd &airAttenuation_dB) |
| | Estimate RT60 using Eyring-Norris equation, taking into account air absorption.
|
| |
| JPL_INLINE constexpr float | CalculateChannelPositionRectangularWeight (uint32 channelPositionA, uint32 channelPositionB) |
| |
| JPL_INLINE constexpr int | ToChannelPos (EChannel channel) noexcept |
| |
| bool | AssertFailedParamHelper (const char *inExpression, const std::source_location location) |
| |
| bool | AssertFailedParamHelper (const char *inExpression, const std::source_location location, const char *inMessage) |
| |
| JPL_INLINE FreqBandCenters | ComputeBandCenters (const SplitFrequencies &splitFrequenciesHz, float nyquist=22050.0f) |
| |
| JPL_INLINE FreqBandCenters | ComputeBandLowerThirdCenters (const SplitFrequencies &splitFrequenciesHz, float nyquist=22050.0f) |
| |
| JPL_INLINE SplitFrequencies | SplitFrequenciesFromBandCenters (const FreqBandCenters &bandCenters, float nyquist=22050.0f) |
| |
| JPL_INLINE FreqBandCenters | ComputeBandLowerThirdCenters (const FreqBandCenters &bandCenters, float nyquist=22050.0f) |
| |
| template<CVec3 Vec3> |
| bool | GetBaryCentricCoordinates (const Vec3 &inA, const Vec3 &inB, float &outU, float &outV) |
| |
| template<CVec3 Vec3> |
| Vec3 | GetClosestPointOnLine (const Vec3 &inA, const Vec3 &inB, uint32_t &outSet) |
| |
| template<CFloatOrSIMD T> |
| JPL_INLINE T | dBToGain (const T &dB) noexcept |
| |
| template<CFloatOrSIMD T> |
| JPL_INLINE T | dBToIntencity (const T &dB) noexcept |
| |
| template<CFloatOrSIMD T> |
| JPL_INLINE T | GainTodB (const T &gainFactor) noexcept |
| |
| template<CFloatOrSIMD T> |
| JPL_INLINE constexpr T | IntencityTodB (const T &intencityFactor) noexcept |
| |
| template<CVec3 Vec3> |
| JPL_INLINE constexpr uint32 | ToOctahedron32 (const Vec3 &direction) |
| |
| template<CVec3 Vec3> |
| JPL_INLINE constexpr Vec3 | FromOctahedron32 (uint32 encodedDirection) |
| |
| constexpr float | ToDiamond (Vec2 dir) noexcept |
| | "Diamond Encoding" of a 2D unit vector as per:
|
| |
| constexpr Vec2 | FromDiamond (float p) noexcept |
| | Decode scalar [0, 1] to a 2D unit vector.
|
| |
| JPL_INLINE simd | ToDiamond (simd x, const simd &y) noexcept |
| |
| template<CVec3 Vec3> |
| std::ostream & | operator<< (std::ostream &os, const Quat< Vec3 > &quat) |
| |
| JPL_INLINE constexpr bool | operator== (const Vec2 &A, const Vec2 &B) noexcept |
| |
template<typename T >
requires (std::is_arithmetic_v<T>) |
| JPL_INLINE constexpr Vec2 | operator* (T Scale, const JPL::Vec2 &V) noexcept |
| |
template<typename T >
requires (std::is_arithmetic_v<T>) |
| JPL_INLINE constexpr Vec2 | operator/ (T Scale, const JPL::Vec2 &V) noexcept |
| |
| JPL_INLINE constexpr Vec2 | operator* (const JPL::Vec2 &A, const JPL::Vec2 &B) noexcept |
| |
| JPL_INLINE constexpr Vec2 | operator/ (const JPL::Vec2 &A, const JPL::Vec2 &B) noexcept |
| |
| std::ostream & | operator<< (std::ostream &os, const Vec2 &v) |
| |
| JPL_INLINE constexpr bool | operator== (const MinimalVec3 &A, const MinimalVec3 &B) noexcept |
| |
template<typename T >
requires (std::is_arithmetic_v<T>) |
| JPL_INLINE constexpr MinimalVec3 | operator* (T Scale, const JPL::MinimalVec3 &V) noexcept |
| |
template<typename T >
requires (std::is_arithmetic_v<T>) |
| JPL_INLINE constexpr MinimalVec3 | operator/ (T Scale, const JPL::MinimalVec3 &V) noexcept |
| |
| JPL_INLINE constexpr MinimalVec3 | operator* (const JPL::MinimalVec3 &A, const JPL::MinimalVec3 &B) noexcept |
| |
| JPL_INLINE constexpr MinimalVec3 | operator/ (const JPL::MinimalVec3 &A, const JPL::MinimalVec3 &B) noexcept |
| |
| std::ostream & | operator<< (std::ostream &os, const MinimalVec3 &v) |
| |
| template<CVec3 Vec3Type> |
| JPL_INLINE bool | operator== (const OrientationData< Vec3Type > &lhs, const OrientationData< Vec3Type > &rhs) noexcept |
| |
| template<CVec3 Vec3Type> |
| JPL_INLINE bool | operator== (const Position< Vec3Type > &lhs, const Position< Vec3Type > &rhs) noexcept |
| |
| JPL_INLINE simd | operator| (const simd &a, const simd &b) noexcept |
| | Component-wise logical OR.
|
| |
| JPL_INLINE simd | operator^ (const simd &a, const simd &b) noexcept |
| | Component-wise logical XOR.
|
| |
| JPL_INLINE simd | operator& (const simd &a, const simd &b) noexcept |
| | Component-wise logical AND.
|
| |
| JPL_INLINE simd_mask | operator== (const simd &a, const simd &b) noexcept |
| | Component-wise comparison.
|
| |
| JPL_INLINE simd_mask | operator!= (const simd &a, const simd &b) noexcept |
| |
| JPL_INLINE simd_mask | operator< (const simd &a, const simd &b) noexcept |
| |
| JPL_INLINE simd_mask | operator<= (const simd &a, const simd &b) noexcept |
| |
| JPL_INLINE simd_mask | operator> (const simd &a, const simd &b) noexcept |
| |
| JPL_INLINE simd_mask | operator>= (const simd &a, const simd &b) noexcept |
| |
| JPL_INLINE simd_mask | operator== (const simd_mask &a, const simd_mask &b) noexcept |
| | Component-wise comparison.
|
| |
| JPL_INLINE simd_mask | operator!= (const simd_mask &a, const simd_mask &b) noexcept |
| |
| JPL_INLINE simd_mask | operator| (const simd_mask &a, const simd_mask &b) noexcept |
| | Component-wise logical OR.
|
| |
| JPL_INLINE simd_mask | operator^ (const simd_mask &a, const simd_mask &b) noexcept |
| | Component-wise logical XOR.
|
| |
| JPL_INLINE simd_mask | operator& (const simd_mask &a, const simd_mask &b) noexcept |
| | Component-wise logical AND.
|
| |
| JPL_INLINE simd | max (const simd &a, const simd &b) noexcept |
| | Element-wise max.
|
| |
| JPL_INLINE simd | min (const simd &a, const simd &b) noexcept |
| | Element-wise min.
|
| |
| JPL_INLINE simd | abs (const simd &vec) noexcept |
| |
| JPL_INLINE simd | clamp (const simd &value, const simd &minV, const simd &maxV) noexcept |
| | Element-wise clamp.
|
| |
| JPL_INLINE simd | fma (const simd &mul1, const simd &mul2, const simd &addV) noexcept |
| | Element-wise fused multiply-add.
|
| |
| JPL_INLINE simd | floor (const simd &vec) noexcept |
| | Element-wise floor.
|
| |
| JPL_INLINE simd | ceil (const simd &vec) noexcept |
| | Element-wise ceil.
|
| |
| JPL_INLINE simd | round (const simd &vec) noexcept |
| | Element-wise round to nearest integer value.
|
| |
| JPL_INLINE simd | interleave_lohi (const simd &vec) noexcept |
| | Interleave two low lanes with the two high lanes (e.g. { 0, 1, 2, 3 } -> { 0, 2, 1, 3 })
|
| |
| JPL_INLINE simd | combine_lo (const simd &a, const simd &b) noexcept |
| | Combine two low lanes of input a and b as { a0, a1, b0, b1 }.
|
| |
| JPL_INLINE simd | combine_hi (const simd &a, const simd &b) noexcept |
| | Combine two high lanes of input a and b as { a2, a3, b2, b3 }.
|
| |
| JPL_INLINE simd | combine_lohi (const simd &a, const simd &b) noexcept |
| | Combine two low lanes of a and two high lanes from b as { a0, a1, b2, b3 }.
|
| |
| JPL_INLINE simd | reverse (const simd &vec) noexcept |
| | Reverse the order of the lanes.
|
| |
| JPL_INLINE simd_mask | max (const simd_mask &a, const simd_mask &b) noexcept |
| | Element-wise max.
|
| |
| JPL_INLINE simd_mask | min (const simd_mask &a, const simd_mask &b) noexcept |
| | Element-wise min.
|
| |
| JPL_INLINE simd_mask | clamp (const simd_mask &value, const simd_mask &minV, const simd_mask &maxV) noexcept |
| | Element-wise clamp.
|
| |
| JPL_INLINE simd_mask | maxs (const simd_mask &a, const simd_mask &b) noexcept |
| | Element-wise max, signed.
|
| |
| JPL_INLINE simd_mask | mins (const simd_mask &a, const simd_mask &b) noexcept |
| | Element-wise min, signed.
|
| |
| JPL_INLINE simd_mask | clamps (const simd_mask &value, const simd_mask &minV, const simd_mask &maxV) noexcept |
| | Element-wise clamp, signed.
|
| |
| JPL_INLINE simd | operator* (float value, const simd &vec) noexcept |
| |
| JPL_INLINE constexpr auto | FloorToSIMDSize (std::unsigned_integral auto count) noexcept |
| | Floor count to 4-wide simd vector.
|
| |
| JPL_INLINE constexpr auto | FloorToSIMDSizeDouble (std::unsigned_integral auto count) noexcept |
| | Floor count to 8-wide simd vector.
|
| |
| JPL_INLINE constexpr auto | GetSIMDTail (std::unsigned_integral auto count) noexcept |
| | Get the remaining tail from count that won't fill a simd vector.
|
| |
| JPL_INLINE constexpr auto | GetNumSIMDOps (std::unsigned_integral auto count) noexcept |
| | Get number of SIMD operations that can fit into the count
|
| |
| JPL_INLINE constexpr auto | GetNumSIMDOpsDouble (std::unsigned_integral auto count) noexcept |
| | Get number of 8-wide simd operations that can fit into the count
|
| |
| JPL_INLINE constexpr auto | GetSIMDTailDouble (std::unsigned_integral auto count) noexcept |
| | Get the remaining tail from count that won't fill 8-wide simd vector.
|
| |
| JPL_INLINE constexpr auto | RoundUpToSIMD (std::unsigned_integral auto count) noexcept |
| | Round count up to the next simd width.
|
| |
| JPL_INLINE constexpr auto | FloorToDiv2 (std::unsigned_integral auto count) noexcept |
| | Floor count to divisible by 2.
|
| |
| JPL_INLINE constexpr auto | GetDiv2Tail (std::unsigned_integral auto count) noexcept |
| |
| JPL_INLINE simd_mask | signbit (const simd &vec) noexcept |
| | Equivalent to std::signbit but for 4-wide 32-bit float vector.
|
| |
| JPL_INLINE simd_mask | isinf (const simd &vec) noexcept |
| | Determines if the given floating-point number num is a positive or negative infinity.
|
| |
| JPL_INLINE simd_mask | isnan (const simd &vec) noexcept |
| | Determines if the given floating point number vec is a not-a-number(NaN) value.
|
| |
| JPL_INLINE simd | trunc (const simd &vec) noexcept |
| | Computes the nearest integer not greater in magnitude than vec.
|
| |
| simd | log (simd x) noexcept |
| |
| JPL_INLINE simd | log10 (const simd &vec) noexcept |
| | log10 for 4-wide 32-bit float vector
|
| |
| JPL_INLINE simd | log2 (const simd &vec) noexcept |
| | log2 for 4-wide 32-bit float vector
|
| |
| simd | exp (simd x) noexcept |
| | Exponent for 4-wide 32-bit float vector.
|
| |
| JPL_INLINE simd | exp2 (simd x) noexcept |
| |
| JPL_INLINE simd | ldexp (simd arg, simd_mask exp) noexcept |
| | Multiplies a floating-point value arg by the number 2 raised to the exp power.
|
| |
| simd | pow (const simd &x, const simd &y) noexcept |
| |
| simd | sin (simd x) noexcept |
| |
| simd | cos (simd x) noexcept |
| |
| simd | tan (simd x) noexcept |
| |
| simd | asin (const simd &in) |
| |
| simd | acos (const simd &in) |
| |
| simd | atan2 (const simd &y, const simd &x) |
| |
| JPL_INLINE simd_mask | operator== (const Vec3Pack &A, const Vec3Pack &B) noexcept |
| |
template<typename T >
requires (std::is_arithmetic_v<T>) |
| JPL_INLINE Vec3Pack | operator* (T Scale, const JPL::Vec3Pack &V) noexcept |
| |
template<typename T >
requires (std::is_arithmetic_v<T>) |
| JPL_INLINE Vec3Pack | operator/ (T Scale, const JPL::Vec3Pack &V) noexcept |
| |
| JPL_INLINE Vec3Pack | operator* (simd Scale, const JPL::Vec3Pack &V) noexcept |
| |
| JPL_INLINE Vec3Pack | operator/ (simd Scale, const JPL::Vec3Pack &V) noexcept |
| |
| JPL_INLINE Vec3Pack | operator* (const JPL::Vec3Pack &A, const JPL::Vec3Pack &B) noexcept |
| |
| JPL_INLINE Vec3Pack | operator/ (const JPL::Vec3Pack &A, const JPL::Vec3Pack &B) noexcept |
| |
| std::ostream & | operator<< (std::ostream &os, const Vec3Pack &v) |
| |
| template<class Vec3Type > |
| JPL_INLINE auto | GetX (const Vec3Type &v) noexcept |
| |
| template<class Vec3Type > |
| JPL_INLINE auto | GetY (const Vec3Type &v) noexcept |
| |
| template<class Vec3Type > |
| JPL_INLINE auto | GetZ (const Vec3Type &v) noexcept |
| |
| template<class Vec3Type > |
| JPL_INLINE void | SetX (Vec3Type &v, Vec3FloatType< Vec3Type > value) noexcept |
| |
| template<class Vec3Type > |
| JPL_INLINE void | SetY (Vec3Type &v, Vec3FloatType< Vec3Type > value) noexcept |
| |
| template<class Vec3Type > |
| JPL_INLINE void | SetZ (Vec3Type &v, Vec3FloatType< Vec3Type > value) noexcept |
| |
| template<std::integral T> |
| constexpr T | Byteswap (T value) noexcept |
| |
template<class T >
requires (std::unsigned_integral<T>) |
| constexpr int | MSBIndex (T n) noexcept |
| |
| template<std::integral T> |
| constexpr T | RoundUpBy4 (T n) noexcept |
| |
| template<std::integral T> |
| constexpr std::size_t | BitWidthOf () noexcept |
| |
| std::pmr::memory_resource * | GetDefaultMemoryResource () noexcept |
| |
| template<class T , class Allocator , class... Args> |
| auto | allocate_unique (const Allocator &allocator, Args &&... args) |
| |
| template<class T = std::byte> |
| JPL_INLINE PmrAllocator< T > | GetDefaultPmrAllocator () |
| |
| template<class T , class ... Args> |
| JPL_INLINE T * | DefaultNew (Args &&...args) |
| | Allocate new object from deafult global memory resource used in JPLSpatial.
|
| |
| template<class T > |
| JPL_INLINE void | DefaultDelete (T *object) |
| | Delete object allcoated from deafult global memory resource. The object must had been allocated by calling DefaultNew
|
| |
| template<class T , class... Args> |
| JPL_INLINE std::shared_ptr< T > | make_pmr_shared (Args &&... args) |
| | std::make_shared wrapper using our global memory resource
|
| |
| template<class T > |
| JPL_INLINE std::shared_ptr< T > | make_pmr_shared (T *ptr) |
| |
| template<class T , class Y > |
| JPL_INLINE void | reset_pmr_shared (std::shared_ptr< T > &sharedPtr, Y *ptr) |
| |
| template<class T > |
| JPL_INLINE void | reset_pmr_shared (std::shared_ptr< T > &sharedPtr) |
| |
| template<class T , class... Args> |
| JPL_INLINE pmr_unique_ptr< T > | make_pmr_unique (Args &&... args) |
| | std::make_unique wrapper using our global memory resource
|
| |
| JPL_INLINE float | GetSpreadFromSourceSize (float sourceSize, float distance) |
| |
| JPL_INLINE std::optional< const char * > | IsValidSourceChannelMap (ChannelMap channelMap) |
| |
| template<CVec3 Vec3Type> |
| Vec3Type | ComputeVBAP (const Vec3Type &sourceDirection, const Vec3Type &triPointA, const Vec3Type &triPointB, const Vec3Type &triPointC) |
| |
| Vec2 | ComputeVBAP (const Vec2 &sourceDirection, const Vec2 &speakerADirection, const Vec2 &speakerBDirection) |
| |
| JPL_INLINE constexpr bool | operator== (const SourceLayoutKey &lhs, const SourceLayoutKey &rhs) |
| |
| JPL_INLINE constexpr void | HashCombine32 (uint32_t &seed, uint32_t id32) |
| |
| JPL_INLINE constexpr void | HashCombine32 (uint32_t &seed, uint64_t id64) |
| |
| JPL_INLINE constexpr uint32_t | Murmur3Finalize (uint32_t hash) |
| |
template<std::integral T>
requires (sizeof(T) == 8) |
| constexpr uint32_t | HashIntSequence (std::span< const T > ids) |
| |
template<std::integral T>
requires (sizeof(T) == 4) |
| constexpr uint32_t | HashIntSequence32 (std::span< const T > ids) |
| |