TablePrefixSum 32/64 bit decision

This commit is contained in:
Joachim Schoeberl 2025-01-08 08:25:12 +01:00
parent 0a1fd5a2e2
commit dcd6f6d60d
3 changed files with 24 additions and 3 deletions

View File

@ -62,9 +62,9 @@ namespace ngcore
return index; return index;
} }
NGCORE_API size_t * TablePrefixSum32 (FlatArray<unsigned int> entrysize) NGCORE_API size_t * TablePrefixSum32 (FlatArray<uint32_t> entrysize)
{ return TablePrefixSum2 (entrysize); } { return TablePrefixSum2 (entrysize); }
NGCORE_API size_t * TablePrefixSum64 (FlatArray<size_t> entrysize) NGCORE_API size_t * TablePrefixSum64 (FlatArray<uint64_t> entrysize)
{ return TablePrefixSum2 (entrysize); } { return TablePrefixSum2 (entrysize); }
/* /*

View File

@ -94,6 +94,7 @@ namespace ngcore
Iterator end() const { return Iterator(*this, BASE+size); } Iterator end() const { return Iterator(*this, BASE+size); }
}; };
/*
NGCORE_API extern size_t * TablePrefixSum32 (FlatArray<unsigned int> entrysize); NGCORE_API extern size_t * TablePrefixSum32 (FlatArray<unsigned int> entrysize);
NGCORE_API extern size_t * TablePrefixSum64 (FlatArray<size_t> entrysize); NGCORE_API extern size_t * TablePrefixSum64 (FlatArray<size_t> entrysize);
@ -106,7 +107,20 @@ namespace ngcore
{ return TablePrefixSum32 (FlatArray<unsigned> (entrysize.Size(), (unsigned int*)(std::atomic<int>*)entrysize.Addr(0))); } { return TablePrefixSum32 (FlatArray<unsigned> (entrysize.Size(), (unsigned int*)(std::atomic<int>*)entrysize.Addr(0))); }
NETGEN_INLINE size_t * TablePrefixSum (FlatArray<size_t> entrysize) NETGEN_INLINE size_t * TablePrefixSum (FlatArray<size_t> entrysize)
{ return TablePrefixSum64 (entrysize); } { return TablePrefixSum64 (entrysize); }
*/
NGCORE_API extern size_t * TablePrefixSum32 (FlatArray<uint32_t> entrysize);
NGCORE_API extern size_t * TablePrefixSum64 (FlatArray<uint64_t> entrysize);
template <typename T> // TODO: enable_if T is integral
NETGEN_INLINE size_t * TablePrefixSum (FlatArray<T> entrysize)
{
if constexpr (sizeof(T) == 4)
return TablePrefixSum32 ( { entrysize.Size(), (uint32_t*)(void*)entrysize.Addr(0) });
else
return TablePrefixSum64 ( { entrysize.Size(), (uint64_t*)(void*)entrysize.Addr(0) });
}
/** /**
A compact Table container. A compact Table container.

View File

@ -138,6 +138,8 @@ namespace netgen
class t_invalid { public: constexpr t_invalid() = default; }; class t_invalid { public: constexpr t_invalid() = default; };
static constexpr t_invalid INVALID{}; static constexpr t_invalid INVALID{};
typedef decltype( declval<T>()-declval<T>() ) T_diff;
public: public:
constexpr Index () = default; constexpr Index () = default;
@ -182,11 +184,16 @@ namespace netgen
TIndex operator-- (int) { TIndex hi(*this); i--; return hi; } TIndex operator-- (int) { TIndex hi(*this); i--; return hi; }
TIndex & operator++ () { i++; return static_cast<TIndex&>(*this); } TIndex & operator++ () { i++; return static_cast<TIndex&>(*this); }
TIndex & operator-- () { i--; return static_cast<TIndex&>(*this); } TIndex & operator-- () { i--; return static_cast<TIndex&>(*this); }
/*
constexpr TIndex operator+= (int add) { i += add; return TIndex{*this}; } constexpr TIndex operator+= (int add) { i += add; return TIndex{*this}; }
constexpr TIndex operator+= (size_t add) { i += add; return TIndex{*this}; } constexpr TIndex operator+= (size_t add) { i += add; return TIndex{*this}; }
constexpr TIndex operator-= (int add) { i -= add; return TIndex{*this}; } constexpr TIndex operator-= (int add) { i -= add; return TIndex{*this}; }
constexpr TIndex operator-= (size_t add) { i -= add; return TIndex{*this}; } constexpr TIndex operator-= (size_t add) { i -= add; return TIndex{*this}; }
*/
constexpr TIndex operator+= (T_diff add) { i += add; return TIndex{*this}; }
constexpr TIndex operator-= (T_diff add) { i -= add; return TIndex{*this}; }
constexpr auto operator- (Index i2) const { return i-i2.i; } constexpr auto operator- (Index i2) const { return i-i2.i; }
// bool operator== (Index i2) const { return i==i2.i; } // bool operator== (Index i2) const { return i==i2.i; }