VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
slice.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 23.07.2025.
5//
6
7#pragma once
8
9#include <vector>
10
11namespace vis
12{
17
18 template <typename T>
19 class Slice {
20 public:
21 Slice(const std::vector<T>& vec, const SliceDirection dir)
22 : data(vec.data()), length(vec.size()), direction(dir) {}
23
24 Slice(const T* data, const std::size_t length, const SliceDirection dir)
25 : data(data), length(length), direction(dir) {}
26
27 [[nodiscard]] std::size_t size() const {
28 return length;
29 }
30
31 const T& operator[](std::size_t idx) const {
32 if (idx >= length)
33 {
34 throw std::out_of_range("Slice index out of bounds");
35 }
36
37 if (direction == SliceDirection::Forward) {
38 return data[idx];
39 }
40 { // Direction::Backward
41 return data[length - 1 - idx];
42 }
43 }
44
45 private:
46 const T* data;
47 std::size_t length;
48 SliceDirection direction;
49 };
50}
std::size_t size() const
Definition slice.h:27
Slice(const std::vector< T > &vec, const SliceDirection dir)
Definition slice.h:21
Slice(const T *data, const std::size_t length, const SliceDirection dir)
Definition slice.h:24
const T & operator[](std::size_t idx) const
Definition slice.h:31
Definition range.h:10
SliceDirection
Definition slice.h:13