summaryrefslogtreecommitdiffstats
path: root/thirdparty/embree/common/sys/vector.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/embree/common/sys/vector.h')
-rw-r--r--thirdparty/embree/common/sys/vector.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/thirdparty/embree/common/sys/vector.h b/thirdparty/embree/common/sys/vector.h
index d05e1deb18..226cd34c21 100644
--- a/thirdparty/embree/common/sys/vector.h
+++ b/thirdparty/embree/common/sys/vector.h
@@ -8,6 +8,8 @@
namespace embree
{
+ class Device;
+
template<typename T, typename allocator>
class vector_t
{
@@ -25,6 +27,12 @@ namespace embree
template<typename M>
__forceinline explicit vector_t (M alloc, size_t sz)
: alloc(alloc), size_active(0), size_alloced(0), items(nullptr) { internal_resize_init(sz); }
+
+ __forceinline vector_t (Device* alloc)
+ : vector_t(alloc,0) {}
+
+ __forceinline vector_t(void* data, size_t bytes)
+ : size_active(0), size_alloced(bytes/sizeof(T)), items((T*)data) {}
__forceinline ~vector_t() {
clear();
@@ -65,6 +73,10 @@ namespace embree
return *this;
}
+ __forceinline allocator& getAlloc() {
+ return alloc;
+ }
+
/********************** Iterators ****************************/
__forceinline iterator begin() { return items; };
@@ -215,6 +227,10 @@ namespace embree
if (new_alloced <= size_alloced)
return size_alloced;
+ /* if current size is 0 allocate exact requested size */
+ if (size_alloced == 0)
+ return new_alloced;
+
/* resize to next power of 2 otherwise */
size_t new_size_alloced = size_alloced;
while (new_size_alloced < new_alloced) {
@@ -237,8 +253,12 @@ namespace embree
/*! vector class that performs aligned allocations */
template<typename T>
using avector = vector_t<T,aligned_allocator<T,std::alignment_of<T>::value> >;
-
+
/*! vector class that performs OS allocations */
template<typename T>
using ovector = vector_t<T,os_allocator<T> >;
+
+ /*! vector class with externally managed data buffer */
+ template<typename T>
+ using evector = vector_t<T,no_allocator<T>>;
}