Struct re_viewer::external::arrow::array::GenericByteViewBuilder
pub struct GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,{
views_builder: BufferBuilder<u128>,
null_buffer_builder: NullBufferBuilder,
completed: Vec<Buffer>,
in_progress: Vec<u8>,
block_size: BlockSizeGrowthStrategy,
string_tracker: Option<(HashTable<usize>, RandomState)>,
phantom: PhantomData<T>,
}
Expand description
A builder for GenericByteViewArray
A GenericByteViewArray
consists of a list of data blocks containing string data,
and a list of views into those buffers.
See examples on StringViewBuilder
and BinaryViewBuilder
This builder can be used in two ways
§Append Values
To avoid bump allocating, this builder allocates data in fixed size blocks, configurable
using GenericByteViewBuilder::with_fixed_block_size
. GenericByteViewBuilder::append_value
writes values larger than 12 bytes to the current in-progress block, with values smaller
than 12 bytes inlined into the views. If a value is appended that will not fit in the
in-progress block, it will be closed, and a new block of sufficient size allocated
§Append Views
Some use-cases may wish to reuse an existing allocation containing string data, for example,
when parsing data from a parquet data page. In such a case entire blocks can be appended
using GenericByteViewBuilder::append_block
and then views into this block appended
using GenericByteViewBuilder::try_append_view
Fields§
§views_builder: BufferBuilder<u128>
§null_buffer_builder: NullBufferBuilder
§completed: Vec<Buffer>
§in_progress: Vec<u8>
§block_size: BlockSizeGrowthStrategy
§string_tracker: Option<(HashTable<usize>, RandomState)>
§phantom: PhantomData<T>
Implementations§
§impl<T> GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
impl<T> GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
pub fn new() -> GenericByteViewBuilder<T>
pub fn new() -> GenericByteViewBuilder<T>
Creates a new GenericByteViewBuilder
.
pub fn with_capacity(capacity: usize) -> GenericByteViewBuilder<T>
pub fn with_capacity(capacity: usize) -> GenericByteViewBuilder<T>
Creates a new GenericByteViewBuilder
with space for capacity
string values.
pub fn with_fixed_block_size(self, block_size: u32) -> GenericByteViewBuilder<T>
pub fn with_fixed_block_size(self, block_size: u32) -> GenericByteViewBuilder<T>
Set a fixed buffer size for variable length strings
The block size is the size of the buffer used to store values greater than 12 bytes. The builder allocates new buffers when the current buffer is full.
By default the builder balances buffer size and buffer count by growing buffer size exponentially from 8KB up to 2MB. The first buffer allocated is 8KB, then 16KB, then 32KB, etc up to 2MB.
If this method is used, any new buffers allocated are
exactly this size. This can be useful for advanced users
that want to control the memory usage and buffer count.
See https://github.com/apache/arrow-rs/issues/6094 for more details on the implications.
pub fn with_block_size(self, block_size: u32) -> GenericByteViewBuilder<T>
👎Deprecated: Use with_fixed_block_size
instead
pub fn with_block_size(self, block_size: u32) -> GenericByteViewBuilder<T>
with_fixed_block_size
insteadOverride the size of buffers to allocate for holding string data
Use with_fixed_block_size
instead.
pub fn with_deduplicate_strings(self) -> GenericByteViewBuilder<T>
pub fn with_deduplicate_strings(self) -> GenericByteViewBuilder<T>
Deduplicate strings while building the array
This will potentially decrease the memory usage if the array have repeated strings It will also increase the time to build the array as it needs to hash the strings
pub fn append_block(&mut self, buffer: Buffer) -> u32
pub fn append_block(&mut self, buffer: Buffer) -> u32
Append a new data block returning the new block offset
Note: this will first flush any in-progress block
This allows appending views from blocks added using Self::append_block
. See
Self::append_value
for appending individual values
let mut builder = StringViewBuilder::new();
let block = builder.append_block(b"helloworldbingobongo".into());
builder.try_append_view(block, 0, 5).unwrap();
builder.try_append_view(block, 5, 5).unwrap();
builder.try_append_view(block, 10, 5).unwrap();
builder.try_append_view(block, 15, 5).unwrap();
builder.try_append_view(block, 0, 15).unwrap();
let array = builder.finish();
let actual: Vec<_> = array.iter().flatten().collect();
let expected = &["hello", "world", "bingo", "bongo", "helloworldbingo"];
assert_eq!(actual, expected);
pub unsafe fn append_view_unchecked(
&mut self,
block: u32,
offset: u32,
len: u32,
)
pub unsafe fn append_view_unchecked( &mut self, block: u32, offset: u32, len: u32, )
Append a view of the given block
, offset
and length
§Safety
(1) The block must have been added using Self::append_block
(2) The range offset..offset+length
must be within the bounds of the block
(3) The data in the block must be valid of type T
pub fn try_append_view(
&mut self,
block: u32,
offset: u32,
len: u32,
) -> Result<(), ArrowError>
pub fn try_append_view( &mut self, block: u32, offset: u32, len: u32, ) -> Result<(), ArrowError>
Try to append a view of the given block
, offset
and length
pub fn get_value(&self, index: usize) -> &[u8] ⓘ
pub fn get_value(&self, index: usize) -> &[u8] ⓘ
Returns the value at the given index
Useful if we want to know what value has been inserted to the builder
The index has to be smaller than self.len()
, otherwise it will panic
pub fn append_value(&mut self, value: impl AsRef<<T as ByteViewType>::Native>)
pub fn append_value(&mut self, value: impl AsRef<<T as ByteViewType>::Native>)
Appends a value into the builder
§Panics
Panics if
- String buffer count exceeds
u32::MAX
- String length exceeds
u32::MAX
pub fn append_option(
&mut self,
value: Option<impl AsRef<<T as ByteViewType>::Native>>,
)
pub fn append_option( &mut self, value: Option<impl AsRef<<T as ByteViewType>::Native>>, )
Append an Option
value into the builder
pub fn append_null(&mut self)
pub fn append_null(&mut self)
Append a null value into the builder
pub fn finish(&mut self) -> GenericByteViewArray<T>
pub fn finish(&mut self) -> GenericByteViewArray<T>
Builds the GenericByteViewArray
and reset this builder
pub fn finish_cloned(&self) -> GenericByteViewArray<T>
pub fn finish_cloned(&self) -> GenericByteViewArray<T>
Builds the GenericByteViewArray
without resetting the builder
pub fn validity_slice(&self) -> Option<&[u8]>
pub fn validity_slice(&self) -> Option<&[u8]>
Returns the current null buffer as a slice
pub fn allocated_size(&self) -> usize
pub fn allocated_size(&self) -> usize
Return the allocated size of this builder in bytes, useful for memory accounting.
Trait Implementations§
§impl<T> ArrayBuilder for GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
impl<T> ArrayBuilder for GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
§fn finish_cloned(&self) -> Arc<dyn Array>
fn finish_cloned(&self) -> Arc<dyn Array>
§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Any
reference. Read more§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Any
reference. Read more§fn into_box_any(self: Box<GenericByteViewBuilder<T>>) -> Box<dyn Any>
fn into_box_any(self: Box<GenericByteViewBuilder<T>>) -> Box<dyn Any>
Any
.§impl<T> Debug for GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
impl<T> Debug for GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
§impl<T> Default for GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
impl<T> Default for GenericByteViewBuilder<T>where
T: ByteViewType + ?Sized,
§fn default() -> GenericByteViewBuilder<T>
fn default() -> GenericByteViewBuilder<T>
§impl<T, V> Extend<Option<V>> for GenericByteViewBuilder<T>
impl<T, V> Extend<Option<V>> for GenericByteViewBuilder<T>
§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = Option<V>>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = Option<V>>,
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Auto Trait Implementations§
impl<T> Freeze for GenericByteViewBuilder<T>where
T: ?Sized,
impl<T> RefUnwindSafe for GenericByteViewBuilder<T>where
T: RefUnwindSafe + ?Sized,
impl<T> Send for GenericByteViewBuilder<T>where
T: ?Sized,
impl<T> Sync for GenericByteViewBuilder<T>where
T: ?Sized,
impl<T> Unpin for GenericByteViewBuilder<T>
impl<T> UnwindSafe for GenericByteViewBuilder<T>where
T: UnwindSafe + ?Sized,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere
T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.