|
29 | 29 | #include "misc/CudaMemory.cuh" |
30 | 30 | #endif |
31 | 31 |
|
| 32 | +struct PixelDataDim { |
| 33 | + size_t y; |
| 34 | + size_t x; |
| 35 | + size_t z; |
| 36 | + |
| 37 | + PixelDataDim(size_t y, size_t x, size_t z) : y(y), x(x), z(z) {} |
| 38 | + |
| 39 | + size_t size() const { return y * x * z; } |
| 40 | + |
| 41 | + PixelDataDim operator+(const PixelDataDim &rhs) const { return {y + rhs.y, x + rhs.x, z + rhs.z}; } |
| 42 | + PixelDataDim operator-(const PixelDataDim &rhs) const { return {y - rhs.y, x - rhs.x, z - rhs.z}; } |
| 43 | + |
| 44 | + template<typename INTEGER> |
| 45 | + constexpr typename std::enable_if<std::is_integral<INTEGER>::value, PixelDataDim>::type |
| 46 | + operator+(INTEGER i) const { return {y + i, x + i, z + i}; } |
| 47 | + |
| 48 | + template<typename INTEGER> |
| 49 | + constexpr typename std::enable_if<std::is_integral<INTEGER>::value, PixelDataDim>::type |
| 50 | + operator-(INTEGER i) const { return *this + (-i); } |
| 51 | + |
| 52 | + friend bool operator==(const PixelDataDim& lhs, const PixelDataDim& rhs) { |
| 53 | + return (lhs.x == rhs.x) && (lhs.y == rhs.y) && (lhs.z == rhs.z); |
| 54 | + } |
| 55 | + friend bool operator!=(const PixelDataDim& lhs, const PixelDataDim& rhs) { |
| 56 | + return !(lhs == rhs); |
| 57 | + } |
| 58 | + |
| 59 | + friend std::ostream &operator<<(std::ostream &os, const PixelDataDim &obj) { |
| 60 | + os << "{" << obj.y << ", " << obj.x << ", " << obj.z << "}"; |
| 61 | + return os; |
| 62 | + } |
| 63 | +}; |
| 64 | + |
32 | 65 | template <typename T> |
33 | 66 | class ArrayWrapper |
34 | 67 | { |
@@ -438,6 +471,13 @@ public : |
438 | 471 | if (aShouldCopyData) std::copy(aMesh.mesh.begin(), aMesh.mesh.end(), mesh.begin()); |
439 | 472 | } |
440 | 473 |
|
| 474 | + /** |
| 475 | + * Returns dimensions of PixelData |
| 476 | + */ |
| 477 | + PixelDataDim getDimension() const { |
| 478 | + return {static_cast<size_t>(y_num), static_cast<size_t>(x_num), static_cast<size_t>(z_num)}; |
| 479 | + } |
| 480 | + |
441 | 481 | /** |
442 | 482 | * Creates copy of this mesh converting each element to new type |
443 | 483 | * @tparam U new type of mesh |
|
0 commit comments