56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
#pragma once
|
|
#include "../../core/Defines.h"
|
|
#include "../../inc/tbb/parallel_sort.h"
|
|
|
|
template<typename T>
|
|
struct Block
|
|
{
|
|
public:
|
|
Block() { mData = std::vector<T>(); }
|
|
|
|
Block(unsigned size)
|
|
{
|
|
mData = std::vector<T>(size);
|
|
}
|
|
Block(const std::vector<T>& data)
|
|
{
|
|
// Copy the given vector to mData
|
|
mData = std::vector<T>(data);
|
|
}
|
|
Block(const std::vector<T>& data, const size_t& startIndex, const size_t& endIndex)
|
|
{
|
|
mData = std::vector<T>(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<T>& GetData() const { return mData; }
|
|
void Set(const size_t& i, T v) { mData[i] = v; }
|
|
|
|
template<typename Compare>
|
|
void Sort(const Compare& comparer)
|
|
{
|
|
std::sort(mData.begin(), mData.end(), comparer);
|
|
}
|
|
|
|
template<typename Compare>
|
|
void ParallelSort(const Compare& comparer)
|
|
{
|
|
tbb::parallel_sort(mData.begin(), mData.end(), comparer);
|
|
}
|
|
|
|
bool operator==(const Block<T>& 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<T> mData;
|
|
}; |