Storage#
-
namespace librapid
-
template<typename Scalar_>
class Storage - #include <storage.hpp>
Public Types
-
using Scalar = Scalar_
-
using RawPointer = Scalar*
-
using ConstRawPointer = const Scalar*
-
using Pointer = std::shared_ptr<Scalar>
-
using ConstPointer = std::shared_ptr<const Scalar>
-
using Reference = Scalar&
-
using ConstReference = const Scalar&
-
using SizeType = size_t
-
using DifferenceType = ptrdiff_t
-
using Iterator = RawPointer
-
using ConstIterator = ConstRawPointer
-
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) LIBRAPID_RELEASE_NOEXCEPT
Move assignment operator for a Storage object
- Parameters
other – Storage object to move
- Returns
*this
-
~Storage()
Free a Storage object.
-
void set(const Storage &other)
Set this storage object to reference the same data as
other
.- Parameters
other – Storage object to reference
-
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
-
RawPointer begin() noexcept
-
RawPointer 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()
Private Functions
-
template<typename P>
void initData(P begin, P end)# Copy data from
begin
toend
into this Storage object- Template Parameters
P – Pointer type
- Parameters
begin – Beginning of data to copy
end – End of data to copy
-
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)
Assignment operator for a FixedStorage object
- Parameters
other – FixedStorage object to copy
- Returns
*this
-
FixedStorage &operator=(FixedStorage &&other) noexcept
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
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
Safely copy a pointer to a shared pointer. If
ownsData
is true, then the shared pointer will be initialized with a custom deleter that will call safeDeallocate on the pointer. Otherwise, the shared pointer will be initialized with a no-op deleter.- Template Parameters
T – Type of the pointer
- Parameters
ptr – Raw pointer to copy
ownsData – Whether the shared pointer should own the data
- Returns
Shared pointer to the data
-
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_>