Browse Source

debug sparkstack

master
gjj 11 months ago
parent
commit
6c06abe48e
  1. 21
      algoim/sparkstack.hpp

21
algoim/sparkstack.hpp

@ -22,10 +22,11 @@ namespace algoim
template <typename... R> template <typename... R>
static size_t alloc(T** ptr, size_t len, R... rest) static size_t alloc(T** ptr, size_t len, R... rest)
{ {
if (pos() + len > capacity) if (pos() + len > capacity) {
{ std::cerr << "SparkStack<T = " << typeid(T).name() << ">: capacity=" << capacity << " and pos=" << pos()
std::cerr << "SparkStack<T = " << typeid(T).name() << ">: capacity=" << capacity << " and pos=" << pos() << " insufficient for request len=" << len << '\n'; << " insufficient for request len=" << len << '\n';
std::cerr << " consider increasing const 'capacity', defined on line " << capacity_line << " in file " << __FILE__ << '\n'; std::cerr << " consider increasing const 'capacity', defined on line " << capacity_line << " in file "
<< __FILE__ << '\n';
throw std::bad_alloc(); throw std::bad_alloc();
} }
*ptr = base() + pos(); *ptr = base() + pos();
@ -56,7 +57,6 @@ namespace algoim
SparkStack& operator=(SparkStack&&) = delete; SparkStack& operator=(SparkStack&&) = delete;
public: public:
// With parameters x0, n0, x1, n1, x2, n2, ..., allocate n0 elements and assign to x0, etc. // With parameters x0, n0, x1, n1, x2, n2, ..., allocate n0 elements and assign to x0, etc.
template <typename... R> template <typename... R>
explicit SparkStack(T** ptr, size_t len, R&&... rest) explicit SparkStack(T** ptr, size_t len, R&&... rest)
@ -71,8 +71,7 @@ namespace algoim
{ {
T* start = base() + pos(); T* start = base() + pos();
len_ = alloc(ptr, len, rest...); len_ = alloc(ptr, len, rest...);
for (int i = 0; i < len_; ++i) for (int i = 0; i < len_; ++i) *(start + i) = value;
*(start + i) = value;
} }
// For each i, allocate ext(i) elements and assign to ptr(i) // For each i, allocate ext(i) elements and assign to ptr(i)
@ -80,8 +79,7 @@ namespace algoim
explicit SparkStack(uvector<T*, N>& ptr, const uvector<int, N>& ext) explicit SparkStack(uvector<T*, N>& ptr, const uvector<int, N>& ext)
{ {
len_ = 0; len_ = 0;
for (int i = 0; i < N; ++i) for (int i = 0; i < N; ++i) len_ += alloc(&ptr(i), ext(i));
len_ += alloc(&ptr(i), ext(i));
} }
// Allocate enough elements for one or more xarray's having pre-set extent // Allocate enough elements for one or more xarray's having pre-set extent
@ -92,10 +90,7 @@ namespace algoim
} }
// Release memory when the SparkStack object goes out of scope // Release memory when the SparkStack object goes out of scope
~SparkStack() ~SparkStack() { pos() -= len_; }
{
pos() -= len_;
}
}; };
#define algoim_CONCAT2(x, y) x##y #define algoim_CONCAT2(x, y) x##y

Loading…
Cancel
Save