Initial commit: Final state of the master project
This commit is contained in:
56
Research/scene/Material/Block.h
Normal file
56
Research/scene/Material/Block.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#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;
|
||||
};
|
||||
Reference in New Issue
Block a user