16#ifndef ITSTRACKINGGPU_VECTOR_H_
17#define ITSTRACKINGGPU_VECTOR_H_
37 static_assert(std::is_trivially_destructible<T>::value,
"Vector only supports trivially destructible objects.");
41 explicit Vector(
const size_t,
const size_t = 0);
42 Vector(
const T*
const,
const size_t,
const size_t = 0);
56 void reset(const
size_t, const
size_t = 0);
57 void reset(const T* const, const
size_t, const
size_t = 0);
63 GPUhd()
size_t capacity() const;
65 GPUd() T& operator[](const
size_t) const;
70 template <typename... Args>
71 GPUd()
void emplace(const
size_t, Args&&...);
79 T* mArrayPtr =
nullptr;
80 size_t* mDeviceSizePtr =
nullptr;
104 utils::gpuMalloc(
reinterpret_cast<void**
>(&mDeviceSizePtr),
sizeof(
size_t));
127 : mArrayPtr{
other.mArrayPtr},
128 mDeviceSizePtr{
other.mDeviceSizePtr},
129 mCapacity{
other.mCapacity},
136GPUhd() Vector<T>::~Vector()
141#if defined(TRACKINGITSU_GPU_DEVICE)
151 : mArrayPtr{
other.mArrayPtr},
152 mDeviceSizePtr{
other.mDeviceSizePtr},
153 mCapacity{
other.mCapacity},
154 mIsWeak{
other.mIsWeak}
156 other.mArrayPtr =
nullptr;
157 other.mDeviceSizePtr =
nullptr;
165 mArrayPtr =
other.mArrayPtr;
166 mDeviceSizePtr =
other.mDeviceSizePtr;
167 mCapacity =
other.mCapacity;
168 mIsWeak =
other.mIsWeak;
170 other.mArrayPtr =
nullptr;
171 other.mDeviceSizePtr =
nullptr;
194 reset(
nullptr, capacity, initialSize);
200 if (
size > mCapacity) {
201 if (mArrayPtr !=
nullptr) {
207 if (mDeviceSizePtr ==
nullptr) {
208 utils::gpuMalloc(
reinterpret_cast<void**
>(&mDeviceSizePtr),
sizeof(
size_t));
222 if (
size > mCapacity) {
223 if (mArrayPtr !=
nullptr) {
229 if (mDeviceSizePtr ==
nullptr) {
246 if (mArrayPtr !=
nullptr) {
249 if (mDeviceSizePtr !=
nullptr) {
261GPUhd() size_t Vector<T>::capacity()
const
267GPUhd() Vector<T> Vector<T>::getWeakCopy()
const
269 return Vector{*
this,
true};
273GPUd() T& Vector<T>::operator[](const
size_t index)
const
275 return mArrayPtr[
index];
279GPUh() T Vector<T>::getElementFromDevice(const
size_t index)
const
288GPUd() size_t Vector<T>::
size()
const
290 return *mDeviceSizePtr;
294template <
typename... Args>
303 printf(
"mArrayPtr = %p\nmDeviceSize = %p\nmCapacity = %d\nmIsWeak = %s\n",
304 mArrayPtr, mDeviceSizePtr, mCapacity, mIsWeak ?
"true" :
"false");
void resetWithInt(const size_t, const int value=0)
GPUhd() Vector(Vector &&)
Vector(const Vector &)=delete
void resize(const size_t)
size_t getSizeFromDevice() const
Vector & operator=(const Vector &)=delete
void copyIntoSizedVector(std::vector< T > &)
void reset(const size_t, const size_t=0)
GPUd() size_t size() const
T getElementFromDevice(const size_t) const
void dump(const std::string what, DPMAP m, int verbose)
GLsizei GLsizei GLchar * source
GLsizei const GLfloat * value
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
bpo::variables_map arguments
void gpuMemcpyHostToDevice(void *, const void *, int)
void gpuMemset(void *, int, int)
void gpuMalloc(void **, const int)
void gpuMemcpyDeviceToHost(void *, const void *, int)
GPUhd() T *getPtrFromRuler(int index
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
VectorOfTObjectPtrs other