Lazy array implementation
<mrdocs/Dom/LazyArray.hpp>
template<
std::ranges::random_access_range R,
class Context = /* implementation-defined */>
requires HasValueFrom<std::ranges::range_value_t<R>, Context> ||
(std::invocable<Context, std::ranges::range_value_t<R>> &&
HasStandaloneValueFrom<std::invoke_result_t<Context, std::ranges::range_value_t<R>>>)
class LazyArrayImpl
: public ArrayImpl
| Name | Description |
|---|---|
ArrayImpl | Abstract array interface. |
| Name | Description |
|---|---|
size_type | An unsigned integral type used for indexes and sizes. |
value_type | The type of an element. |
| Name | Description |
|---|---|
emplace_back [virtual] | Append an element to the end of the array. |
get [virtual] | Return the i-th element, without bounds checking. |
set [virtual] | Set the i-th element, without bounds checking. |
size [virtual] | Return the number of elements in the array. |
type_key [virtual] | Return the type key of the implementation. |
This array type is used to define a dom::Array whose members are evaluated on demand as they are accessed.
Each member can goes through a transform function before being returned as a Value so that all types can be converted to dom::Value.
The underlying representation of the array is a range from where the elements are extracted. Elements in this range should be convertible to dom::Value.
This class is typically useful for implementing arrays that are expensive and have recursive dependencies, as these recursive dependencies can also be deferred.
Unlike a LazyObjectImpl, which contains an overlay object, this implementation is read-only. The set and emplace_back methods are not implemented.