4#ifndef _Stroika_Foundation_Math_ReBin_h_
5#define _Stroika_Foundation_Math_ReBin_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#include "Stroika/Foundation/Containers/Sequence.h"
10#include "Stroika/Foundation/Containers/Set.h"
33namespace Stroika::Foundation::Math::ReBin {
37 template <
typename X_TYPE,
typename VALUE_TYPE>
38 class DataDescriptorBase {
40 using BucketIndexType = size_t;
42 using ValueType = VALUE_TYPE;
49 static constexpr ValueType kNullValue{0};
52 static bool RangeElementsNearlyEqual (XType lhs, XType rhs);
57 nonvirtual BucketIndexType GetBucketCount ()
const;
60 nonvirtual Traversal::Range<XType> GetBucketRange (BucketIndexType bucket)
const;
67 nonvirtual Containers::Set<BucketIndexType> GetIntersectingBuckets (
const Traversal::Range<XType>& xrange)
const;
73 nonvirtual ValueType GetValue (BucketIndexType bucket)
const;
82 template <
typename X_TYPE,
typename VALUE_TYPE>
85 using inherited = DataDescriptorBase<X_TYPE, VALUE_TYPE>;
88 using BucketIndexType =
typename inherited::BucketIndexType;
89 using XType =
typename inherited::XType;
90 using ValueType =
typename inherited::ValueType;
93 BasicDataDescriptor (
const ValueType* bucketStart,
const ValueType* bucketEnd, XType xStart, XType xEnd);
96 nonvirtual BucketIndexType GetBucketCount ()
const;
112 nonvirtual ValueType GetValue (BucketIndexType bucket)
const;
120 const ValueType* _fBucketDataStart;
121 const ValueType* _fBucketDataEnd;
132 template <
typename X_TYPE,
typename VALUE_TYPE>
141 nonvirtual
void AccumulateValue (
typename inherited::BucketIndexType bucket, VALUE_TYPE delta);
144 nonvirtual
void clear ();
229 template <
typename SRC_DATA_DESCRIPTOR,
typename TRG_DATA_DESCRIPTOR>
230 void ReBin (
const SRC_DATA_DESCRIPTOR& srcData, TRG_DATA_DESCRIPTOR* trgData);
231 template <
typename SRC_BUCKET_TYPE,
typename TRG_BUCKET_TYPE,
typename X_OFFSET_TYPE =
double>
232 void ReBin (
const SRC_BUCKET_TYPE* srcStart,
const SRC_BUCKET_TYPE* srcEnd, TRG_BUCKET_TYPE* trgStart, TRG_BUCKET_TYPE* trgEnd);
void ReBin(const SRC_DATA_DESCRIPTOR &srcData, TRG_DATA_DESCRIPTOR *trgData)
A generalization of a vector: a container whose elements are keyed by the natural numbers.
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
nonvirtual Containers::Set< BucketIndexType > GetIntersectingBuckets(const Traversal::Range< XType > &xrange) const