pub struct ExternalVector<'a, T> { /* fields omitted */ }
Vector which flushes its content when growing.
Useful for serialization of data which does not fully fit in memory.
External vector does not provide access to elements previously added to it.
Only the last element added to the vector using the result of the method
grow
can be accessed and written.
An external vector must be closed, after the last element was written to
it. After closing, it can not be used anymore. Not closing the vector will
result in panic on drop (in debug mode).
use flatdata::{
create_external_vector, ArrayView, ExternalVector, MemoryResourceStorage, ResourceStorage,
};
define_struct!(
A,
RefA,
RefMutA,
"no_schema",
4,
(x, set_x, u32, 0, 16),
(y, set_y, u32, 16, 16)
);
let storage = MemoryResourceStorage::new("/root/extvec");
{
let mut v = create_external_vector::<A>(&*storage, "vector", "Some schema content")
.expect("failed to create ExternalVector");
{
let mut a = v.grow().expect("grow failed");
a.set_x(0);
a.set_y(1);
}
{
let mut a = v.grow().expect("grow failed");
a.set_x(2);
a.set_y(3);
}
let view = v.close().expect("close failed");
assert_eq!(view.len(), 2);
assert_eq!(view.at(0).x(), 0);
assert_eq!(view.at(0).y(), 1);
assert_eq!(view.at(1).x(), 2);
assert_eq!(view.at(1).y(), 3);
}
let resource = storage
.read_and_check_schema("vector", "Some schema content")
.expect("failed to read vector resource");
let view: ArrayView<A> = ArrayView::new(&resource);
assert_eq!(view.len(), 2);
assert_eq!(view.at(0).x(), 0);
assert_eq!(view.at(0).y(), 1);
assert_eq!(view.at(1).x(), 2);
assert_eq!(view.at(1).y(), 3);
pub fn new(resource_handle: ResourceHandle<'a>) -> Self | [src] |
Creates an empty ExternalVector<T>
in the given resource storage.
Number of elements that where added to this vector.
Returns true
if no element were added to this vector yet.
Appends an element to the end of this vector and returns a mutable
handle to it.
Calling this method may flush data to storage (cf. flush
), which
may fail due to different IO reasons.
Returns true
if this vector was not closed yet and more elements can
be added to it.
Flushes the remaining not yet flushed elements in this vector and
finalizes the data inside the storage.
An external vector must be closed, otherwise it will panic on drop
Formats the value using the given formatter. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static