#pragma once #include "../../core/Defines.h" #include "../../inc/tbb/parallel_sort.h" template struct Block { public: Block() { mData = std::vector(); } Block(unsigned size) { mData = std::vector(size); } Block(const std::vector& data) { // Copy the given vector to mData mData = std::vector(data); } Block(const std::vector& data, const size_t& startIndex, const size_t& endIndex) { mData = std::vector(data.begin() + startIndex, data.begin() + endIndex); } ~Block() {} size_t size() const { return mData.size(); } const T& Get(const size_t& i) const { return mData[i]; } const std::vector& GetData() const { return mData; } void Set(const size_t& i, T v) { mData[i] = v; } template void Sort(const Compare& comparer) { std::sort(mData.begin(), mData.end(), comparer); } template void ParallelSort(const Compare& comparer) { tbb::parallel_sort(mData.begin(), mData.end(), comparer); } bool operator==(const Block& other) const { if (other.size() != this->size()) return false; for (size_t i = 0; i < this->size(); i++) if (other.Get(i) != this->Get(i)) return false; return true; } const T& operator[](size_t i) const { return mData[i]; } private: std::vector mData; };