Storage#
-
namespace librapid
-
template<typename Scalar_>
class Storage - #include <storage.hpp>
Public Types
-
using Scalar = Scalar_
-
using Packet = typename typetraits::TypeInfo<Scalar>::Packet
-
using Pointer = Scalar*
-
using ConstPointer = const Scalar*
-
using Reference = Scalar&
-
using ConstReference = const Scalar&
-
using SizeType = size_t
-
using DifferenceType = ptrdiff_t
-
using Iterator = Pointer
-
using ConstIterator = ConstPointer
-
using ReverseIterator = std::reverse_iterator<Iterator>
-
using ConstReverseIterator = std::reverse_iterator<ConstIterator>
Public Functions
-
Storage() = default
Default constructor.
-
explicit Storage(SizeType size)
Create a Storage object with
size
elements- Parameters
size – Number of elements to allocate
-
Storage(SizeType size, ConstReference value)
Create a Storage object with
size
elements, each initialized tovalue
.- Parameters
size – Number of elements to allocate
value – Value to initialize each element to
-
Storage(const Storage &other)
Create a Storage object from another Storage object. Additionally a custom allocator can be used. The data is NOT copied — it is referenced by the new Storage object. For a deep copy, use the
copy()
method.- Parameters
other – Storage object to copy
-
Storage(Storage &&other) noexcept
Move a Storage object into this object.
- Parameters
other – Storage object to move
-
template<typename V>
Storage(const std::initializer_list<V> &list) Create a Storage object from an std::initializer_list
- Template Parameters
V – Type of the elements in the initializer list
- Parameters
list – Initializer list to copy
alloc – Allocator to use
-
template<typename V>
explicit Storage(const std::vector<V> &vec) Create a Storage object from a std::vector
- Template Parameters
V – Type of the elements in the vector
- Parameters
vec – Vector to copy
-
Storage &operator=(const Storage &other)
Assignment operator for a Storage object
- Parameters
other – Storage object to copy
- Returns
*this
-
Storage &operator=(Storage &&other) noexcept
Move assignment operator for a Storage object
- Parameters
other – Storage object to move
- Returns
*this
-
~Storage()
Free a Storage object.
-
Storage toHostStorage() const
Return a Storage object on the host with the same data as this Storage object (mainly for use with CUDA or OpenCL)
- Returns
-
Storage toHostStorageUnsafe() const
Same as
toHostStorage()
but does not necessarily copy the data.- Returns
Storage object on the host
-
Storage copy() const
Create a deep copy of this Storage object.
- Returns
Deep copy of this Storage object
-
void resize(SizeType newSize)
Resize a Storage object to
size
elements. Existing elements are preserved.- Parameters
size – New size of the Storage object
-
void resize(SizeType newSize, int)
Resize a Storage object to
size
elements. Existing elements are not preserved- Parameters
size – New size of the Storage object
-
ConstReference operator[](SizeType index) const
Const access to the element at index
index
- Parameters
index – Index of the element to access
- Returns
Const reference to the element at index
index
-
Reference operator[](SizeType index)
Access to the element at index
index
- Parameters
index – Index of the element to access
- Returns
Reference to the element at index
index
-
Pointer data() const noexcept
-
Pointer begin() noexcept
-
Pointer end() noexcept
-
ConstPointer begin() const noexcept
-
ConstPointer end() const noexcept
-
ConstIterator cbegin() const noexcept
-
ConstIterator cend() const noexcept
-
ReverseIterator rbegin() noexcept
-
ReverseIterator rend() noexcept
-
ConstReverseIterator rbegin() const noexcept
-
ConstReverseIterator rend() const noexcept
-
ConstReverseIterator crbegin() const noexcept
-
ConstReverseIterator crend() const noexcept
-
template<typename ShapeType>
auto defaultShape() -> ShapeType
Public Static Functions
-
template<typename ShapeType>
static ShapeType defaultShape()
Public Static Attributes
-
static constexpr uint64_t packetWidth = typetraits::TypeInfo<Scalar>::packetWidth
-
using Scalar = Scalar_
-
template<typename Scalar_, size_t... Size_>
class FixedStorage - #include <storage.hpp>
Public Types
-
using Scalar = Scalar_
-
using Pointer = Scalar*
-
using ConstPointer = const Scalar*
-
using Reference = Scalar&
-
using ConstReference = const Scalar&
-
using SizeType = size_t
-
using DifferenceType = ptrdiff_t
-
using ReverseIterator = std::reverse_iterator<Iterator>
-
using ConstReverseIterator = std::reverse_iterator<ConstIterator>
Public Functions
-
FixedStorage()
Default constructor.
-
explicit FixedStorage(const Scalar &value)
Create a FixedStorage object filled with
value
- Parameters
value – Value to fill the FixedStorage object with
-
FixedStorage(const FixedStorage &other)
Create a FixedStorage object from another FixedStorage object
- Parameters
other – FixedStorage object to copy
-
FixedStorage(FixedStorage &&other) noexcept
Move constructor for a FixedStorage object
- Parameters
other – FixedStorage object to move
-
explicit FixedStorage(const std::initializer_list<Scalar> &list)
Create a FixedStorage object from a std::initializer_list
- Template Parameters
V – Type of the elements in the initializer list
- Parameters
list – Initializer list to copy
-
explicit FixedStorage(const std::vector<Scalar> &vec)
Create a FixedStorage object from a std::vector
- Template Parameters
V – Type of the elements in the vector
- Parameters
vec – Vector to copy
-
FixedStorage &operator=(const FixedStorage &other) noexcept
Assignment operator for a FixedStorage object
- Parameters
other – FixedStorage object to copy
- Returns
*this
-
FixedStorage &operator=(FixedStorage &&other) noexcept = default
Move assignment operator for a FixedStorage object
- Parameters
other – FixedStorage object to move
- Returns
*this
-
~FixedStorage() = default
Free a FixedStorage object.
-
void resize(SizeType newSize)
Resize a Storage object to
size
elements. Existing elements are preserved.- Parameters
size – New size of the Storage object
-
void resize(SizeType newSize, int)
Resize a Storage object to
size
elements. Existing elements are not preserved- Parameters
size – New size of the Storage object
-
SizeType size() const noexcept
Return the number of elements in the FixedStorage object
- Returns
Number of elements in the FixedStorage object
-
FixedStorage copy() const
Create a copy of the FixedStorage object.
- Returns
Copy of the FixedStorage object
-
ConstReference operator[](SizeType index) const
Const access to the element at index
index
- Parameters
index – Index of the element to access
- Returns
Const reference to the element at index
index
-
Reference operator[](SizeType index)
Access to the element at index
index
- Parameters
index – Index of the element to access
- Returns
Reference to the element at index
index
-
Pointer data() const noexcept
-
Iterator begin() noexcept
-
Iterator end() noexcept
-
ConstIterator begin() const noexcept
-
ConstIterator end() const noexcept
-
ConstIterator cbegin() const noexcept
-
ConstIterator cend() const noexcept
-
ReverseIterator rbegin() noexcept
-
ReverseIterator rend() noexcept
-
ConstReverseIterator rbegin() const noexcept
-
ConstReverseIterator rend() const noexcept
-
ConstReverseIterator crbegin() const noexcept
-
ConstReverseIterator crend() const noexcept
-
template<typename ShapeType>
auto defaultShape() -> ShapeType
Public Static Functions
-
template<typename ShapeType>
static ShapeType defaultShape()
-
using Scalar = Scalar_
-
namespace detail
Functions
-
template<typename T>
void safeDeallocate(T *ptr, size_t size) Safely deallocate memory for
size
elements, using an std::allocatoralloc
. If the object cannot be trivially destroyed, the destructor will be called on each element of the data, ensuring that it is safe to free the allocated memory.- Template Parameters
A – The allocator type
- Parameters
alloc – The allocator object
ptr – The pointer to free
size – The number of elements of type
in
the memory block
-
template<typename T>
T *safeAllocate(size_t size) Safely allocate memory for
size
elements using the allocatoralloc
. If the data can be trivially default constructed, then the constructor is not called and no data is initialized. Otherwise, the correct default constructor will be called for each element in the data, making sure the returned pointer is safe to use.See also
- Template Parameters
A – The allocator type to use
- Parameters
alloc – The allocator object to use
size – Number of elements to allocate
- Returns
Pointer to the first element
- template<typename T, typename V> void fastCopy (T *__restrict dst, const V *__restrict src, size_t size)
-
template<typename T>
-
namespace typetraits
-
-
template<typename Scalar_>
struct TypeInfo<Storage<Scalar_>> - #include <storage.hpp>
Public Static Attributes
-
static constexpr bool isLibRapidType = true
-
static constexpr bool isLibRapidType = true
-
template<typename Scalar_, size_t... Dims>
struct TypeInfo<FixedStorage<Scalar_, Dims...>> - #include <storage.hpp>
Public Static Attributes
-
static constexpr bool isLibRapidType = true
-
static constexpr bool isLibRapidType = true
-
template<typename T>
struct IsStorage : public std::false_type - #include <storage.hpp>
-
template<typename Scalar>
struct IsStorage<Storage<Scalar>> : public std::true_type - #include <storage.hpp>
-
template<typename T>
struct IsFixedStorage : public std::false_type - #include <storage.hpp>
-
template<typename Scalar, size_t... Size>
struct IsFixedStorage<FixedStorage<Scalar, Size...>> : public std::true_type - #include <storage.hpp>
-
template<typename Scalar_>
-
template<typename Scalar_>