mirror of
https://github.com/NGSolve/netgen.git
synced 2025-02-11 12:53:08 +05:00
TablePrefixSum 32/64 bit decision
This commit is contained in:
parent
0a1fd5a2e2
commit
dcd6f6d60d
@ -62,9 +62,9 @@ namespace ngcore
|
||||
return index;
|
||||
}
|
||||
|
||||
NGCORE_API size_t * TablePrefixSum32 (FlatArray<unsigned int> entrysize)
|
||||
NGCORE_API size_t * TablePrefixSum32 (FlatArray<uint32_t> 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); }
|
||||
|
||||
/*
|
||||
|
@ -94,6 +94,7 @@ namespace ngcore
|
||||
Iterator end() const { return Iterator(*this, BASE+size); }
|
||||
};
|
||||
|
||||
/*
|
||||
NGCORE_API extern size_t * TablePrefixSum32 (FlatArray<unsigned int> entrysize);
|
||||
NGCORE_API extern size_t * TablePrefixSum64 (FlatArray<size_t> entrysize);
|
||||
|
||||
@ -106,6 +107,19 @@ namespace ngcore
|
||||
{ return TablePrefixSum32 (FlatArray<unsigned> (entrysize.Size(), (unsigned int*)(std::atomic<int>*)entrysize.Addr(0))); }
|
||||
NETGEN_INLINE size_t * TablePrefixSum (FlatArray<size_t> 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) });
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -139,6 +139,8 @@ namespace netgen
|
||||
class t_invalid { public: constexpr t_invalid() = default; };
|
||||
static constexpr t_invalid INVALID{};
|
||||
|
||||
typedef decltype( declval<T>()-declval<T>() ) T_diff;
|
||||
|
||||
public:
|
||||
constexpr Index () = default;
|
||||
constexpr Index (const Index& i2) = default;
|
||||
@ -182,10 +184,15 @@ namespace netgen
|
||||
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); }
|
||||
|
||||
/*
|
||||
constexpr TIndex operator+= (int 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-= (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; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user