16#ifndef DRACO_COMPRESSION_ATTRIBUTES_POINT_D_VECTOR_H_
17#define DRACO_COMPRESSION_ATTRIBUTES_POINT_D_VECTOR_H_
40template <
typename internal_t>
44 : mem_(mem), dimension_(dimension) {}
48 for (internal_t dim = 0; dim < dimension_; dim += 1) {
49 std::swap(mem_[dim], other.mem_[dim]);
54 : mem_(other.mem_), dimension_(other.dimension_) {}
66 for (
auto dim = 0; dim < dimension_; dim += 1) {
67 if (mem_[dim] != other.mem_[dim]) {
78 internal_t *
const mem_;
79 const internal_t dimension_;
83template <
typename internal_t>
88template <
typename internal_t>
94template <
typename internal_t>
97 PointDVector(
const uint32_t n_items,
const uint32_t dimensionality)
99 dimensionality_(dimensionality),
100 item_size_bytes_(dimensionality * sizeof(internal_t)),
101 data_(n_items * dimensionality),
102 data0_(data_.
data()) {}
140 this->item_ = other.item_;
145 return item_ == ref.item_;
148 return item_ != ref.item_;
151 return item_ < ref.item_;
154 return item_ > ref.item_;
157 return item_ <= ref.item_;
160 return item_ >= ref.item_;
176 return (item_ - sub.item_);
185 return vec_->data0_ + (item_ + n) * dimensionality_;
190 : item_(start_item), vec_(vec), dimensionality_(vec->dimensionality_) {}
195 const uint32_t dimensionality_;
205 return data0_ + index * dimensionality_;
209 return data0_ + index * dimensionality_;
212 uint32_t
size()
const {
return n_items_; }
217 const internal_t destination_index) {
219 (&source ==
this && source_index != destination_index));
226 const internal_t *ref = source[source_index];
227 internal_t *
const dest = this->
operator[](destination_index);
228 std::memcpy(dest, ref, item_size_bytes_);
235 const internal_t attribute_dimensionality,
237 const internal_t offset_dimensionality,
const internal_t index,
239 const void *
const attribute_item_data) {
241 const size_t copy_size =
sizeof(internal_t) * attribute_dimensionality;
244 std::memcpy(data0_ + index * dimensionality_ + offset_dimensionality,
245 attribute_item_data, copy_size);
250 const internal_t attribute_dimensionality,
252 const internal_t offset_dimensionality,
253 const internal_t *
const attribute_mem) {
255 dimensionality_ - attribute_dimensionality);
257 if (dimensionality_ == attribute_dimensionality) {
259 const size_t copy_size =
260 sizeof(internal_t) * attribute_dimensionality * n_items_;
261 std::memcpy(data0_, attribute_mem, copy_size);
263 const size_t copy_size =
sizeof(internal_t) * attribute_dimensionality;
264 internal_t *internal_data;
265 const internal_t *attribute_data;
267 for (internal_data = data0_ + offset_dimensionality,
268 attribute_data = attribute_mem, item = 0;
269 item < n_items_; internal_data += dimensionality_,
270 attribute_data += attribute_dimensionality, item += 1) {
271 std::memcpy(internal_data, attribute_data, copy_size);
278 const uint32_t n_items_;
279 const uint32_t dimensionality_;
280 const uint32_t item_size_bytes_;
281 std::vector<internal_t> data_;
282 internal_t *
const data0_;
int add(void *w)
Definition ui.cc:341
Definition point_d_vector.h:104
size_t difference_type
Definition point_d_vector.h:111
PointDVectorIterator & operator+=(const int32_t &add)
Definition point_d_vector.h:167
bool operator>(const PointDVectorIterator &ref) const
Definition point_d_vector.h:153
friend class PointDVector
Definition point_d_vector.h:105
PointDVectorIterator & operator=(const PointDVectorIterator &other)
Definition point_d_vector.h:139
bool operator==(const PointDVectorIterator &ref) const
Definition point_d_vector.h:144
bool operator!=(const PointDVectorIterator &ref) const
Definition point_d_vector.h:147
bool operator<(const PointDVectorIterator &ref) const
Definition point_d_vector.h:150
PointDVectorIterator operator-(const int32_t &sub) const
Definition point_d_vector.h:171
size_t operator-(const PointDVectorIterator &sub) const
Definition point_d_vector.h:175
std::random_access_iterator_tag iterator_category
Definition point_d_vector.h:109
PointDVector & reference
Definition point_d_vector.h:113
bool operator<=(const PointDVectorIterator &ref) const
Definition point_d_vector.h:156
PointDVectorIterator operator--(int32_t)
Definition point_d_vector.h:134
PseudoPointD< internal_t > operator*() const
Definition point_d_vector.h:117
PointDVectorIterator operator+(const int32_t &add) const
Definition point_d_vector.h:163
size_t value_type
Definition point_d_vector.h:110
bool operator>=(const PointDVectorIterator &ref) const
Definition point_d_vector.h:159
const PointDVectorIterator & operator++()
Definition point_d_vector.h:121
internal_t * operator[](const size_t &n) const
Definition point_d_vector.h:184
PointDVectorIterator & operator-=(const int32_t &sub)
Definition point_d_vector.h:179
PointDVectorIterator operator++(int32_t)
Definition point_d_vector.h:129
const PointDVectorIterator & operator--()
Definition point_d_vector.h:125
PointDVectorIterator(PointDVector *vec, size_t start_item)
Definition point_d_vector.h:189
PointDVector * pointer
Definition point_d_vector.h:112
void CopyAttribute(const internal_t attribute_dimensionality, const internal_t offset_dimensionality, const internal_t *const attribute_mem)
Definition point_d_vector.h:248
void CopyItem(const PointDVector &source, const internal_t source_index, const internal_t destination_index)
Definition point_d_vector.h:216
uint32_t size() const
Definition point_d_vector.h:212
PointDVectorIterator begin()
Definition point_d_vector.h:198
void CopyAttribute(const internal_t attribute_dimensionality, const internal_t offset_dimensionality, const internal_t index, const void *const attribute_item_data)
Definition point_d_vector.h:233
PointDVector(const uint32_t n_items, const uint32_t dimensionality)
Definition point_d_vector.h:97
PointDVectorIterator end()
Definition point_d_vector.h:199
const internal_t * operator[](const uint32_t index) const
Definition point_d_vector.h:207
internal_t * operator[](const uint32_t index)
Definition point_d_vector.h:203
size_t GetBufferSize() const
Definition point_d_vector.h:213
Definition point_d_vector.h:41
PseudoPointD(const PseudoPointD &other)
Definition point_d_vector.h:53
PseudoPointD(internal_t *mem, internal_t dimension)
Definition point_d_vector.h:43
bool operator!=(const PseudoPointD &other) const
Definition point_d_vector.h:73
void swap(PseudoPointD &other) noexcept
Definition point_d_vector.h:47
bool operator==(const PseudoPointD &other) const
Definition point_d_vector.h:65
internal_t & operator[](const size_t &n)
Definition point_d_vector.h:60
const internal_t & operator[](const size_t &n) const
Definition point_d_vector.h:56
#define DRACO_DCHECK_LT(a, b)
Definition macros.h:86
#define DRACO_DCHECK_EQ(a, b)
Definition macros.h:81
#define DRACO_DCHECK(x)
Definition macros.h:80
lazy data
Definition meshpage.php:1583
Definition attribute_octahedron_transform.cc:21
void swap(draco::PseudoPointD< internal_t > &&a, draco::PseudoPointD< internal_t > &&b) noexcept
Definition point_d_vector.h:84