mirror of
https://github.com/NGSolve/netgen.git
synced 2025-02-14 06:13:07 +05:00
TablePrefixSum 32/64 bit decision
This commit is contained in:
parent
0a1fd5a2e2
commit
dcd6f6d60d
@ -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); }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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.
|
||||||
|
@ -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; }
|
||||||
|
Loading…
Reference in New Issue
Block a user