ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
SizeVector.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <Optional.h>
11 
12 #include <cstddef>
13 #include <string>
14 #include <vector>
15 
17 
18 namespace cloudViewer {
19 namespace core {
20 
21 class SizeVector;
22 
32 class DynamicSizeVector : public SmallVector<utility::optional<int64_t>, 4> {
33 public:
36 
38  const std::initializer_list<utility::optional<int64_t>>& dim_sizes);
39 
40  DynamicSizeVector(const std::vector<utility::optional<int64_t>>& dim_sizes);
41 
43 
44  explicit DynamicSizeVector(int64_t n, int64_t initial_value = 0);
45 
46  template <class InputIterator>
47  DynamicSizeVector(InputIterator first, InputIterator last)
48  : super_t(first, last) {}
49 
50  DynamicSizeVector(const SizeVector& dim_sizes);
51 
52  SizeVector ToSizeVector() const;
53 
55 
57 
58  std::string ToString() const;
59 
60  bool IsDynamic() const;
61 
62  // required for pybind
63  void shrink_to_fit() {}
64 };
65 
70 class SizeVector : public SmallVector<int64_t, 4> {
71 public:
74 
75  SizeVector(const std::initializer_list<int64_t>& dim_sizes);
76 
77  SizeVector(const std::vector<int64_t>& dim_sizes);
78 
79  SizeVector(const SizeVector& other);
80 
81  explicit SizeVector(int64_t n, int64_t initial_value = 0);
82 
83  template <class InputIterator>
84  SizeVector(InputIterator first, InputIterator last)
85  : super_t(first, last) {}
86 
87  SizeVector& operator=(const SizeVector& v);
88 
90 
91  int64_t NumElements() const;
92 
93  int64_t GetLength() const;
94 
95  std::string ToString() const;
96 
97  void AssertCompatible(const DynamicSizeVector& dsv,
98  const std::string msg = "") const;
99 
100  bool IsCompatible(const DynamicSizeVector& dsv) const;
101 
102  operator std::vector<int64_t>() const {
103  return std::vector<int64_t>(begin(), end());
104  }
105 
106  // required for pybind
107  void shrink_to_fit() {}
108 };
109 
110 } // namespace core
111 } // namespace cloudViewer
DynamicSizeVector & operator=(const DynamicSizeVector &v)
Definition: SizeVector.cpp:51
DynamicSizeVector(InputIterator first, InputIterator last)
Definition: SizeVector.h:47
bool IsCompatible(const DynamicSizeVector &dsv) const
Definition: SizeVector.cpp:149
void AssertCompatible(const DynamicSizeVector &dsv, const std::string msg="") const
Definition: SizeVector.cpp:136
std::string ToString() const
Definition: SizeVector.cpp:132
SizeVector(InputIterator first, InputIterator last)
Definition: SizeVector.h:84
SizeVector & operator=(const SizeVector &v)
Definition: SizeVector.cpp:98
Generic file read and write utility for python interface.