ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ecvChunk.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 // System
11 #include <vector>
12 
14 class ccChunk {
15 public:
16  static const size_t SIZE_POWER = 16;
17  static const size_t SIZE = (1 << SIZE_POWER); //~ 64K
18 
19  inline static size_t Count(size_t elementCount) {
20  return (elementCount >> SIZE_POWER) +
21  ((elementCount & (SIZE - 1)) ? 1 : 0);
22  }
23  inline static size_t Size(size_t chunkIndex, size_t elementCount) {
24  return (chunkIndex + 1 < Count(elementCount)
25  ? SIZE
26  : elementCount - chunkIndex * SIZE);
27  }
28  inline static size_t Size(size_t chunkIndex,
29  size_t chunkCount,
30  size_t elementCount) {
31  return (chunkIndex + 1 < chunkCount ? SIZE
32  : elementCount - chunkIndex * SIZE);
33  }
34  inline static size_t StartPos(size_t chunkIndex) {
35  return chunkIndex * SIZE;
36  }
37  template <typename T>
38  inline static T* Start(std::vector<T>& buffer, size_t chunkIndex) {
39  return buffer.data() + StartPos(chunkIndex);
40  }
41  template <typename T>
42  inline static const T* Start(const std::vector<T>& buffer,
43  size_t chunkIndex) {
44  return buffer.data() + StartPos(chunkIndex);
45  }
46  template <typename T>
47  inline static size_t Count(const std::vector<T>& buffer) {
48  return Count(buffer.size());
49  }
50  template <typename T>
51  inline static size_t Size(size_t chunkIndex, const std::vector<T>& buffer) {
52  return Size(chunkIndex, buffer.size());
53  }
54 };
Fake chunked array management.
Definition: ecvChunk.h:14
static size_t Count(size_t elementCount)
Definition: ecvChunk.h:19
static T * Start(std::vector< T > &buffer, size_t chunkIndex)
Definition: ecvChunk.h:38
static const T * Start(const std::vector< T > &buffer, size_t chunkIndex)
Definition: ecvChunk.h:42
static const size_t SIZE
Definition: ecvChunk.h:17
static size_t Size(size_t chunkIndex, const std::vector< T > &buffer)
Definition: ecvChunk.h:51
static size_t Size(size_t chunkIndex, size_t elementCount)
Definition: ecvChunk.h:23
static size_t Count(const std::vector< T > &buffer)
Definition: ecvChunk.h:47
static const size_t SIZE_POWER
Definition: ecvChunk.h:16
static size_t StartPos(size_t chunkIndex)
Definition: ecvChunk.h:34
static size_t Size(size_t chunkIndex, size_t chunkCount, size_t elementCount)
Definition: ecvChunk.h:28