diff options
Diffstat (limited to 'thirdparty/embree/common/sys/vector.h')
-rw-r--r-- | thirdparty/embree/common/sys/vector.h | 22 |
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>>; } |