#[repr(C, align(64))]pub enum Array {
NumericArray(NumericArray),
TextArray(TextArray),
TemporalArray(TemporalArray),
BooleanArray(Arc<BooleanArray<()>>),
Null,
}Expand description
§Array
Standard Array type. Wrap in a FieldArray when using inside a Table
or as a standalone value requiring tagged metadata.
§Overview
The dual-enum approach may look verbose but works well in practice:
- Enables clean function signatures with direct access to concrete types
(e.g.
&NumericArray), supporting trait-aligned dispatch without exhaustive matches at every call site. - Supports ergonomic categorisation: functions typically match on the outer enum for broad category handling (numeric, text, temporal, boolean), while allowing inner variant matching for precise type handling.
- The focused typeset (no nested types) helps keeps enum size efficient as memory is allocated for the largest variant.
§Usage
Functions can accept references tailored to the intended match granularity:
&IntegerArray: direct reference to the inner type e.g.,arr.num().i64().&NumericArray: any numeric type viaarr.num().&Array: match on categories or individual types.
§Benefits
- No heap allocation or runtime indirection - all enum variants are inline with minimal discriminant cost.
- Unified call sites with compiler-enforced type safety.
- Easy casting to inner types (e.g.,
.str()for strings). - Supports aggressive compiler inlining, unlike approaches relying on dynamic dispatch and downcasting.
§Trade-offs
- Adds ~30–100 ns latency compared to direct inner type calls - only noticeable in extreme low-latency contexts such as HFT.
- Requires enum matching at dispatch sites compared to direct inner type usage.
§Examples
use minarrow::{
Array, IntegerArray, NumericArray, arr_bool, arr_f64, arr_i32, arr_i64,
arr_str32, vec64
};
// Fast macro construction
let int_arr = arr_i32![1, 2, 3, 4];
let float_arr = arr_f64![0.5, 1.5, 2.5];
let bool_arr = arr_bool![true, false, true];
let str_arr = arr_str32!["a", "b", "c"];
assert_eq!(int_arr.len(), 4);
assert_eq!(str_arr.len(), 3);
// Manual construction
let int = IntegerArray::<i64>::from_slice(&[100, 200]);
let wrapped: NumericArray = NumericArray::Int64(std::sync::Arc::new(int));
let array = Array::NumericArray(wrapped);Variants§
NumericArray(NumericArray)
TextArray(TextArray)
TemporalArray(TemporalArray)
BooleanArray(Arc<BooleanArray<()>>)
Null
Implementations§
Source§impl Array
impl Array
Sourcepub fn from_int8(arr: IntegerArray<i8>) -> Array
pub fn from_int8(arr: IntegerArray<i8>) -> Array
Creates an Array enum with an Int8 array.
Sourcepub fn from_uint8(arr: IntegerArray<u8>) -> Array
pub fn from_uint8(arr: IntegerArray<u8>) -> Array
Creates an Array enum with an UInt8 array.
Sourcepub fn from_int16(arr: IntegerArray<i16>) -> Array
pub fn from_int16(arr: IntegerArray<i16>) -> Array
Creates an Array enum with an Int16 array.
Sourcepub fn from_uint16(arr: IntegerArray<u16>) -> Array
pub fn from_uint16(arr: IntegerArray<u16>) -> Array
Creates an Array enum with an UInt16 array.
Sourcepub fn from_int32(arr: IntegerArray<i32>) -> Array
pub fn from_int32(arr: IntegerArray<i32>) -> Array
Creates an Array enum with an Int32 array.
Examples found in repository?
149fn example_2_export_table_stream(py: Python<'_>) -> PyResult<()> {
150 println!("Example 2: Export MinArrow table -> PyArrow via __arrow_c_stream__");
151 println!("------------------------------------------------------------------");
152
153 let mut ids = IntegerArray::<i32>::default();
154 ids.push(1);
155 ids.push(2);
156 ids.push(3);
157
158 let mut scores = FloatArray::<f64>::default();
159 scores.push(9.5);
160 scores.push(8.3);
161 scores.push(7.1);
162
163 let table = Table::new(
164 "results".to_string(),
165 Some(vec![
166 FieldArray::new(
167 Field::new("id", ArrowType::Int32, false, None),
168 Array::from_int32(ids),
169 ),
170 FieldArray::new(
171 Field::new("score", ArrowType::Float64, false, None),
172 Array::from_float64(scores),
173 ),
174 ]),
175 );
176 println!(" Created MinArrow table: 3 rows x 2 columns (id, score)");
177
178 // Export as a stream capsule and extract the raw pointer for PyArrow
179 let stream_capsule = to_py::table_to_stream_capsule(&table, py)?;
180 let stream_ptr = unsafe {
181 pyo3::ffi::PyCapsule_GetPointer(
182 stream_capsule.as_ptr(),
183 c"arrow_array_stream".as_ptr(),
184 )
185 } as usize;
186
187 let pyarrow = py.import("pyarrow")?;
188 let reader = pyarrow
189 .getattr("RecordBatchReader")?
190 .call_method1("_import_from_c", (stream_ptr,))?;
191 let pa_table = reader.call_method0("read_all")?;
192
193 let num_rows: usize = pa_table.getattr("num_rows")?.extract()?;
194 let schema_repr: String = pa_table.getattr("schema")?.call_method0("__repr__")?.extract()?;
195 println!(" PyArrow received: {} rows", num_rows);
196 println!(" Schema: {}", schema_repr.lines().next().unwrap_or(""));
197 println!(" Done.\n");
198 Ok(())
199}Sourcepub fn from_int64(arr: IntegerArray<i64>) -> Array
pub fn from_int64(arr: IntegerArray<i64>) -> Array
Creates an Array enum with an Int64 array.
Examples found in repository?
97fn example_1_export_array(py: Python<'_>) -> PyResult<()> {
98 println!("Example 1: Export MinArrow array -> PyArrow via __arrow_c_array__");
99 println!("----------------------------------------------------------------");
100
101 // Build an array in Rust
102 let mut arr = IntegerArray::<i64>::default();
103 for i in 0..5 {
104 arr.push(i * 10);
105 }
106 let array = Array::from_int64(arr);
107 let field = Field::new("values", ArrowType::Int64, false, None);
108 println!(" Created MinArrow i64 array: [0, 10, 20, 30, 40]");
109
110 // Export as PyCapsules (i.e., schema + array)
111 let (schema_capsule, array_capsule) =
112 to_py::array_to_capsules(Arc::new(array), &field, py)?;
113 println!(" Exported as PyCapsules");
114
115 // Build a wrapper that implements __arrow_c_array__ so PyArrow can consume it.
116 // In a real #[pyfunction] you'd return ArrowArrayWrapper directly;
117 // here we simulate by calling __arrow_c_array__ manually.
118 let pyarrow = py.import("pyarrow")?;
119
120 // PyArrow.Array._import_from_c expects (array_ptr, schema_ptr) as integers,
121 // but we can extract the raw pointers from the capsules properly:
122 let array_ptr = unsafe {
123 pyo3::ffi::PyCapsule_GetPointer(
124 array_capsule.as_ptr(),
125 c"arrow_array".as_ptr(),
126 )
127 } as usize;
128 let schema_ptr = unsafe {
129 pyo3::ffi::PyCapsule_GetPointer(
130 schema_capsule.as_ptr(),
131 c"arrow_schema".as_ptr(),
132 )
133 } as usize;
134
135 let pa_array = pyarrow
136 .getattr("Array")?
137 .call_method1("_import_from_c", (array_ptr, schema_ptr))?;
138
139 let repr: String = pa_array.call_method0("__repr__")?.extract()?;
140 println!(" PyArrow received: {}", repr.lines().next().unwrap_or(""));
141 println!(" Done.\n");
142 Ok(())
143}Sourcepub fn from_uint32(arr: IntegerArray<u32>) -> Array
pub fn from_uint32(arr: IntegerArray<u32>) -> Array
Creates an Array enum with a UInt32 array.
Sourcepub fn from_uint64(arr: IntegerArray<u64>) -> Array
pub fn from_uint64(arr: IntegerArray<u64>) -> Array
Creates an Array enum with an UInt64 array.
Sourcepub fn from_float32(arr: FloatArray<f32>) -> Array
pub fn from_float32(arr: FloatArray<f32>) -> Array
Creates an Array enum with a Float32 array.
Sourcepub fn from_float64(arr: FloatArray<f64>) -> Array
pub fn from_float64(arr: FloatArray<f64>) -> Array
Creates an Array enum with a Float64 array.
Examples found in repository?
149fn example_2_export_table_stream(py: Python<'_>) -> PyResult<()> {
150 println!("Example 2: Export MinArrow table -> PyArrow via __arrow_c_stream__");
151 println!("------------------------------------------------------------------");
152
153 let mut ids = IntegerArray::<i32>::default();
154 ids.push(1);
155 ids.push(2);
156 ids.push(3);
157
158 let mut scores = FloatArray::<f64>::default();
159 scores.push(9.5);
160 scores.push(8.3);
161 scores.push(7.1);
162
163 let table = Table::new(
164 "results".to_string(),
165 Some(vec![
166 FieldArray::new(
167 Field::new("id", ArrowType::Int32, false, None),
168 Array::from_int32(ids),
169 ),
170 FieldArray::new(
171 Field::new("score", ArrowType::Float64, false, None),
172 Array::from_float64(scores),
173 ),
174 ]),
175 );
176 println!(" Created MinArrow table: 3 rows x 2 columns (id, score)");
177
178 // Export as a stream capsule and extract the raw pointer for PyArrow
179 let stream_capsule = to_py::table_to_stream_capsule(&table, py)?;
180 let stream_ptr = unsafe {
181 pyo3::ffi::PyCapsule_GetPointer(
182 stream_capsule.as_ptr(),
183 c"arrow_array_stream".as_ptr(),
184 )
185 } as usize;
186
187 let pyarrow = py.import("pyarrow")?;
188 let reader = pyarrow
189 .getattr("RecordBatchReader")?
190 .call_method1("_import_from_c", (stream_ptr,))?;
191 let pa_table = reader.call_method0("read_all")?;
192
193 let num_rows: usize = pa_table.getattr("num_rows")?.extract()?;
194 let schema_repr: String = pa_table.getattr("schema")?.call_method0("__repr__")?.extract()?;
195 println!(" PyArrow received: {} rows", num_rows);
196 println!(" Schema: {}", schema_repr.lines().next().unwrap_or(""));
197 println!(" Done.\n");
198 Ok(())
199}Sourcepub fn from_string32(arr: StringArray<u32>) -> Array
pub fn from_string32(arr: StringArray<u32>) -> Array
Creates an Array enum with a String32 array.
Sourcepub fn from_string64(arr: StringArray<u64>) -> Array
pub fn from_string64(arr: StringArray<u64>) -> Array
Creates an Array enum with a String64 array.
Sourcepub fn from_categorical32(arr: CategoricalArray<u32>) -> Array
pub fn from_categorical32(arr: CategoricalArray<u32>) -> Array
Creates an Array enum with a Categorical32 array.
Sourcepub fn from_categorical8(arr: CategoricalArray<u8>) -> Array
pub fn from_categorical8(arr: CategoricalArray<u8>) -> Array
Creates an Array enum with a Categorical8 array.
Sourcepub fn from_categorical16(arr: CategoricalArray<u16>) -> Array
pub fn from_categorical16(arr: CategoricalArray<u16>) -> Array
Creates an Array enum with a Categorical16 array.
Sourcepub fn from_categorical64(arr: CategoricalArray<u64>) -> Array
pub fn from_categorical64(arr: CategoricalArray<u64>) -> Array
Creates an Array enum with a Categorical64 array.
Sourcepub fn from_datetime_i32(arr: DatetimeArray<i32>) -> Array
pub fn from_datetime_i32(arr: DatetimeArray<i32>) -> Array
Creates an Array enum with a DatetimeI32 array.
Sourcepub fn from_datetime_i64(arr: DatetimeArray<i64>) -> Array
pub fn from_datetime_i64(arr: DatetimeArray<i64>) -> Array
Creates an Array enum with a DatetimeI64 array.
Sourcepub fn from_bool(arr: BooleanArray<()>) -> Array
pub fn from_bool(arr: BooleanArray<()>) -> Array
Creates an Array enum with a Boolean array.
Sourcepub fn fa(self, name: impl Into<String>) -> FieldArray
pub fn fa(self, name: impl Into<String>) -> FieldArray
Wraps this Array in a FieldArray with the given name.
Infers the Arrow type and nullability from the array itself.
§Example
use minarrow::{Array, IntegerArray, MaskedArray};
let mut arr = IntegerArray::<i32>::default();
arr.push(1);
arr.push(2);
let array = Array::from_int32(arr);
let field_array = array.fa("my_column");
assert_eq!(field_array.field.name, "my_column");Sourcepub fn num_ref(&self) -> Result<&NumericArray, MinarrowError>
pub fn num_ref(&self) -> Result<&NumericArray, MinarrowError>
Returns a reference to the inner NumericArray if the variant matches.
No conversion or cloning is performed.
Sourcepub fn str_ref(&self) -> Result<&TextArray, MinarrowError>
pub fn str_ref(&self) -> Result<&TextArray, MinarrowError>
Returns a reference to the inner TextArray if the variant matches.
No conversion or cloning is performed.
Sourcepub fn bool_ref(&self) -> Result<&BooleanArray<()>, MinarrowError>
pub fn bool_ref(&self) -> Result<&BooleanArray<()>, MinarrowError>
Returns a reference to the inner BooleanArray if the variant matches.
No conversion or cloning is performed.
Sourcepub fn dt_ref(&self) -> Result<&TemporalArray, MinarrowError>
pub fn dt_ref(&self) -> Result<&TemporalArray, MinarrowError>
Returns a reference to the inner TemporalArray if the variant matches.
No conversion or cloning is performed.
Sourcepub fn try_i32_ref(&self) -> Result<&IntegerArray<i32>, MinarrowError>
pub fn try_i32_ref(&self) -> Result<&IntegerArray<i32>, MinarrowError>
Returns a reference to the inner IntegerArray<i32>.
Sourcepub fn try_i64_ref(&self) -> Result<&IntegerArray<i64>, MinarrowError>
pub fn try_i64_ref(&self) -> Result<&IntegerArray<i64>, MinarrowError>
Returns a reference to the inner IntegerArray<i64>.
Sourcepub fn try_u32_ref(&self) -> Result<&IntegerArray<u32>, MinarrowError>
pub fn try_u32_ref(&self) -> Result<&IntegerArray<u32>, MinarrowError>
Returns a reference to the inner IntegerArray<u32>.
Sourcepub fn try_u64_ref(&self) -> Result<&IntegerArray<u64>, MinarrowError>
pub fn try_u64_ref(&self) -> Result<&IntegerArray<u64>, MinarrowError>
Returns a reference to the inner IntegerArray<u64>.
Sourcepub fn try_f32_ref(&self) -> Result<&FloatArray<f32>, MinarrowError>
pub fn try_f32_ref(&self) -> Result<&FloatArray<f32>, MinarrowError>
Returns a reference to the inner FloatArray<f32>.
Sourcepub fn try_f64_ref(&self) -> Result<&FloatArray<f64>, MinarrowError>
pub fn try_f64_ref(&self) -> Result<&FloatArray<f64>, MinarrowError>
Returns a reference to the inner FloatArray<f64>.
Sourcepub fn try_i8_ref(&self) -> Result<&IntegerArray<i8>, MinarrowError>
pub fn try_i8_ref(&self) -> Result<&IntegerArray<i8>, MinarrowError>
Returns a reference to the inner IntegerArray<i8>.
Sourcepub fn try_i16_ref(&self) -> Result<&IntegerArray<i16>, MinarrowError>
pub fn try_i16_ref(&self) -> Result<&IntegerArray<i16>, MinarrowError>
Returns a reference to the inner IntegerArray<i16>.
Sourcepub fn try_u8_ref(&self) -> Result<&IntegerArray<u8>, MinarrowError>
pub fn try_u8_ref(&self) -> Result<&IntegerArray<u8>, MinarrowError>
Returns a reference to the inner IntegerArray<u8>.
Sourcepub fn try_u16_ref(&self) -> Result<&IntegerArray<u16>, MinarrowError>
pub fn try_u16_ref(&self) -> Result<&IntegerArray<u16>, MinarrowError>
Returns a reference to the inner IntegerArray<u16>.
Sourcepub fn try_str32_ref(&self) -> Result<&StringArray<u32>, MinarrowError>
pub fn try_str32_ref(&self) -> Result<&StringArray<u32>, MinarrowError>
Returns a reference to the inner StringArray<u32>.
Sourcepub fn try_str64_ref(&self) -> Result<&StringArray<u64>, MinarrowError>
pub fn try_str64_ref(&self) -> Result<&StringArray<u64>, MinarrowError>
Returns a reference to the inner StringArray<u64>.
Sourcepub fn try_cat32_ref(&self) -> Result<&CategoricalArray<u32>, MinarrowError>
pub fn try_cat32_ref(&self) -> Result<&CategoricalArray<u32>, MinarrowError>
Returns a reference to the inner CategoricalArray<u32>.
Sourcepub fn try_cat8_ref(&self) -> Result<&CategoricalArray<u8>, MinarrowError>
pub fn try_cat8_ref(&self) -> Result<&CategoricalArray<u8>, MinarrowError>
Returns a reference to the inner CategoricalArray<u8>.
Sourcepub fn try_cat16_ref(&self) -> Result<&CategoricalArray<u16>, MinarrowError>
pub fn try_cat16_ref(&self) -> Result<&CategoricalArray<u16>, MinarrowError>
Returns a reference to the inner CategoricalArray<u16>.
Sourcepub fn try_cat64_ref(&self) -> Result<&CategoricalArray<u64>, MinarrowError>
pub fn try_cat64_ref(&self) -> Result<&CategoricalArray<u64>, MinarrowError>
Returns a reference to the inner CategoricalArray<u64>.
Sourcepub fn try_dt32_ref(&self) -> Result<&DatetimeArray<i32>, MinarrowError>
pub fn try_dt32_ref(&self) -> Result<&DatetimeArray<i32>, MinarrowError>
Returns a reference to the inner DatetimeArray<i32>.
Sourcepub fn try_dt64_ref(&self) -> Result<&DatetimeArray<i64>, MinarrowError>
pub fn try_dt64_ref(&self) -> Result<&DatetimeArray<i64>, MinarrowError>
Returns a reference to the inner DatetimeArray<i64>.
Sourcepub fn num(self) -> NumericArray
pub fn num(self) -> NumericArray
Returns an inner NumericArray, consuming self.
- If already a
NumericArray, consumes and returns the inner value with no clone. - Other types: casts and copies.
Sourcepub fn str(self) -> TextArray
pub fn str(self) -> TextArray
Returns an inner TextArray, consuming self.
- If already a
TextArray, consumes and returns the inner value with no clone. - Other types: casts (to string) and copies.
Sourcepub fn bool(self) -> Arc<BooleanArray<()>>
pub fn bool(self) -> Arc<BooleanArray<()>>
Returns the inner BooleanArray, consuming self.
- If already a
BooleanArray, consumes and returns the inner value with no clone. - Other types: calculates the boolean mask based on whether the value is present, and non-zero,
and copies. In these cases, any null mask is preserved, rather than becoming
false.
Sourcepub fn dt(self) -> TemporalArray
pub fn dt(self) -> TemporalArray
Returns the inner TemporalArray, consuming self.
- If already a
TemporalArray, consumes and returns the inner value with no clone. - Other types: casts and (often) copies using clone on write.
§Datetime conversions
- String parses a timestamp in milliseconds since the Unix epoch.
If the
datetime_opsfeature is on, it also attempts common ISO8601/RFC3339 and%Y-%m-%dformats. Keep this in mind, because your API will break if you toggle thedatetime_opsfeature on/off but keep the previous code. - Integer becomes milliseconds since epoch.
- Floats round as integers to milliseconds since epoch.
- Boolean returns
TemporalArray::Null.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the length of the array.
Examples found in repository?
206fn example_3_import_from_pyarrow_array(py: Python<'_>) -> PyResult<()> {
207 println!("Example 3: Import PyArrow array -> MinArrow via __arrow_c_array__");
208 println!("-----------------------------------------------------------------");
209
210 let pyarrow = py.import("pyarrow")?;
211 let py_array = pyarrow.call_method1("array", (vec![100i64, 200, 300, 400, 500],))?;
212 println!(" Created PyArrow array: [100, 200, 300, 400, 500]");
213
214 let result = to_rust::try_capsule_array(&py_array);
215
216 match result {
217 Some(Ok(field_array)) => {
218 println!(" Imported into MinArrow: {} elements", field_array.array.len());
219
220 match &field_array.array {
221 Array::NumericArray(NumericArray::Int64(a)) => {
222 let values: Vec<i64> = (0..a.len())
223 .map(|i| a.get(i).unwrap_or(0))
224 .collect();
225 println!(" Values: {:?}", values);
226 }
227 other => println!(" Got type: {:?}", std::mem::discriminant(other)),
228 }
229 }
230 Some(Err(e)) => println!(" Import failed: {}", e),
231 None => println!(" __arrow_c_array__ not available on this object"),
232 }
233
234 println!(" Done.\n");
235 Ok(())
236}
237
238/// Import a PyArrow table into MinArrow via __arrow_c_stream__.
239///
240/// The stream protocol is ideal for tabular data - the consumer gets
241/// schema and batches through a single interface.
242fn example_4_import_from_pyarrow_table(py: Python<'_>) -> PyResult<()> {
243 println!("Example 4: Import PyArrow table -> MinArrow via __arrow_c_stream__");
244 println!("------------------------------------------------------------------");
245
246 let pyarrow = py.import("pyarrow")?;
247 let dict = vec![
248 (
249 "name",
250 pyarrow.call_method1("array", (vec!["Alice", "Bob", "Charlie"],))?,
251 ),
252 (
253 "age",
254 pyarrow.call_method1("array", (vec![30i64, 25, 35],))?,
255 ),
256 ]
257 .into_py_dict(py)?;
258
259 let py_table = pyarrow.call_method1("table", (dict,))?;
260 println!(" Created PyArrow table: name=['Alice','Bob','Charlie'], age=[30,25,35]");
261
262 let result = to_rust::try_capsule_record_batch_stream(&py_table);
263
264 match result {
265 Some(Ok((batches, _metadata))) => {
266 println!(" Imported {} batch(es) into MinArrow", batches.len());
267 for (batch_idx, batch) in batches.iter().enumerate() {
268 println!(" Batch {}: {} columns", batch_idx, batch.len());
269 for (col_idx, (array, field)) in batch.iter().enumerate() {
270 println!(
271 " Column {} '{}': {} rows, type={:?}",
272 col_idx,
273 field.name,
274 array.len(),
275 field.dtype
276 );
277 }
278 }
279 }
280 Some(Err(e)) => println!(" Import failed: {}", e),
281 None => println!(" __arrow_c_stream__ not available on this object"),
282 }
283
284 println!(" Done.\n");
285 Ok(())
286}Sourcepub fn view(&self, offset: usize, len: usize) -> ArrayV
pub fn view(&self, offset: usize, len: usize) -> ArrayV
Returns a metadata view and reference over the specified window of this array.
Does not slice the object (yet).
Panics if out of bounds.
Sourcepub fn view_tuple(&self, offset: usize, len: usize) -> (&Array, usize, usize)
pub fn view_tuple(&self, offset: usize, len: usize) -> (&Array, usize, usize)
Returns a metadata view and reference over the specified window of this array.
Does not slice the object (yet).
Panics if out of bounds.
Sourcepub fn inner<T>(&self) -> &Arc<T>where
T: 'static,
pub fn inner<T>(&self) -> &Arc<T>where
T: 'static,
Returns a reference to the inner array as type Arc<T>.
This is compile-time safe if T matches the actual payload, but will panic otherwise.
Prefer .inner_check() for Option-based pattern.
Sourcepub fn inner_mut<T>(&mut self) -> &mut Arc<T>where
T: 'static,
pub fn inner_mut<T>(&mut self) -> &mut Arc<T>where
T: 'static,
Returns a mutable reference to the inner array as type T.
This method is compile-time safe when the type T matches the actual inner type,
but relies on TypeId checks and unsafe casting. If an incorrect type is specified,
this will panic at runtime.
Prefer inner_check_mut if you want an Option-based version that avoids panics.
Sourcepub fn inner_check<T>(&self) -> Option<&Arc<T>>where
T: 'static,
pub fn inner_check<T>(&self) -> Option<&Arc<T>>where
T: 'static,
Returns a reference to the inner array as type T, if the type matches.
This method performs a runtime TypeId check to verify that the provided type T
corresponds to the actual inner variant. If the types match, returns Some(&T);
otherwise, returns None without panicking.
Use when the type of the variant is uncertain at compile time.
Sourcepub fn inner_check_mut<T>(&mut self) -> Option<&mut Arc<T>>where
T: 'static,
pub fn inner_check_mut<T>(&mut self) -> Option<&mut Arc<T>>where
T: 'static,
Returns a mutable reference to the inner array as type T, if the type matches.
This method performs a runtime TypeId check to verify that the provided type T
corresponds to the actual inner variant. If the types match, returns Some(&mut T);
otherwise, returns None without panicking.
Use when the type of the variant is uncertain at compile time.
pub fn as_slice<T>(&self, offset: usize, len: usize) -> &[T]
pub fn slice_raw<T>(&self, offset: usize, len: usize) -> Option<&[T]>where
T: 'static,
Sourcepub fn slice_clone(&self, offset: usize, len: usize) -> Array
pub fn slice_clone(&self, offset: usize, len: usize) -> Array
Returns a new Array of the same variant sliced to the given offset and length
.
Copies the data of the scoped range that’s selected.
If out-of-bounds, returns Self::Null. All null mask, offsets, etc. are trimmed.
Sourcepub fn arrow_type(&self) -> ArrowType
pub fn arrow_type(&self) -> ArrowType
Arrow physical type for this array.
Sourcepub fn is_nullable(&self) -> bool
pub fn is_nullable(&self) -> bool
Column nullability
Sourcepub fn is_categorical_array(&self) -> bool
pub fn is_categorical_array(&self) -> bool
Returns true if this is a categorical array.
Sourcepub fn is_string_array(&self) -> bool
pub fn is_string_array(&self) -> bool
Returns true if this is a string array i.e. non-categorical text.
Sourcepub fn is_text_array(&self) -> bool
pub fn is_text_array(&self) -> bool
Returns true if this is any text array, string or categorical.
Sourcepub fn is_boolean_array(&self) -> bool
pub fn is_boolean_array(&self) -> bool
Returns true if this is a boolean array.
Sourcepub fn is_integer_array(&self) -> bool
pub fn is_integer_array(&self) -> bool
Returns true if this is an integer array.
Sourcepub fn is_float_array(&self) -> bool
pub fn is_float_array(&self) -> bool
Returns true if this is a floating-point array.
Sourcepub fn is_numerical_array(&self) -> bool
pub fn is_numerical_array(&self) -> bool
Returns true if this is any numeric array, integer or float.
Sourcepub fn is_datetime_array(&self) -> bool
pub fn is_datetime_array(&self) -> bool
Returns true if this is a datetime/temporal array.
Sourcepub fn value_to_string(&self, idx: usize) -> String
pub fn value_to_string(&self, idx: usize) -> String
Format the element at idx as a human-readable string.
Returns "null" for null elements. Uses the same formatting as
the array’s Display implementation.
Sourcepub fn null_array(arrow_type: &ArrowType, n_rows: usize) -> Array
pub fn null_array(arrow_type: &ArrowType, n_rows: usize) -> Array
Create an all-null array of the given ArrowType with n_rows elements.
The data buffer is zero-filled and every element is masked as null. For datetime types, set the time_unit on the returned array afterwards.
Sourcepub fn compare_at(&self, i: usize, j: usize) -> Ordering
pub fn compare_at(&self, i: usize, j: usize) -> Ordering
Compare two elements within the same array by index.
Uses total ordering for floats via total_cmp(). Nulls sort last:
null > any value, null == null.
Sourcepub fn set_null_mask(&mut self, mask: Bitmask)
pub fn set_null_mask(&mut self, mask: Bitmask)
Set null mask on Array by matching on variants
Sourcepub fn data_ptr_and_byte_len(&self) -> (*const u8, usize, usize)
pub fn data_ptr_and_byte_len(&self) -> (*const u8, usize, usize)
Returns a pointer to the backing data (contiguous bytes), length in elements, and element size.
This is not logical length - it is total raw bytes in the buffer, so for non-fixed width types such as bit-packed booleans or strings, please factor this in accordingly.
Sourcepub fn null_mask_ptr_and_byte_len(&self) -> Option<(*const u8, usize)>
pub fn null_mask_ptr_and_byte_len(&self) -> Option<(*const u8, usize)>
Returns a pointer to the null mask and its length in bytes, if present.
Sourcepub fn offsets_ptr_and_len(&self) -> Option<(*const u8, usize)>
pub fn offsets_ptr_and_len(&self) -> Option<(*const u8, usize)>
Offsets pointer/len for variable-length types
Sourcepub fn null_count(&self) -> usize
pub fn null_count(&self) -> usize
Returns the null count of the array
Sourcepub fn concat_array(&mut self, other: &Array)
pub fn concat_array(&mut self, other: &Array)
Appends all values (and null mask if present) from other into self.
Panics if the two arrays are of different variants or incompatible types.
This function uses copy-on-write semantics for arrays wrapped in Arc.
If self is the only owner of its data, appends are performed in place without copying the first array.
If the array data is shared (Arc reference count > 1), the data is first cloned
(so the mutation does not affect other owners), and the append is then performed on the unique copy.
The second array is allocated into the buffer, which is standard.
Sourcepub fn concat_array_range(
&mut self,
other: &Array,
offset: usize,
len: usize,
) -> Result<(), MinarrowError>
pub fn concat_array_range( &mut self, other: &Array, offset: usize, len: usize, ) -> Result<(), MinarrowError>
Appends rows [offset..offset+len) from another array into self.
Extends data and null masks directly from the source range.
Sourcepub fn insert_rows(
&mut self,
index: usize,
other: &Array,
) -> Result<(), MinarrowError>
pub fn insert_rows( &mut self, index: usize, other: &Array, ) -> Result<(), MinarrowError>
Inserts all values (and null mask if present) from other into self at the specified index.
This is an O(n) operation.
Returns an error if the two arrays are of different variants or incompatible types, or if the index is out of bounds.
Sourcepub fn split(
self,
index: usize,
field: &Arc<Field>,
) -> Result<SuperArray, MinarrowError>
pub fn split( self, index: usize, field: &Arc<Field>, ) -> Result<SuperArray, MinarrowError>
Splits the Array at the specified index, consuming self and returning a SuperArray with two FieldArray chunks.
Splits the underlying buffers (via vec .split_off()), allocating new storage for the second half.
More efficient than cloning the entire array but requires allocation.
Trait Implementations§
Source§impl Concatenate for Array
impl Concatenate for Array
Source§impl From<Arc<CategoricalArray<u16>>> for Array
Available on crate feature extended_categorical only.
impl From<Arc<CategoricalArray<u16>>> for Array
extended_categorical only.Source§impl From<Arc<CategoricalArray<u32>>> for Array
Available on non-crate feature default_categorical_8 or crate feature extended_categorical only.
impl From<Arc<CategoricalArray<u32>>> for Array
default_categorical_8 or crate feature extended_categorical only.Source§impl From<Arc<CategoricalArray<u64>>> for Array
Available on crate feature extended_categorical only.
impl From<Arc<CategoricalArray<u64>>> for Array
extended_categorical only.Source§impl From<Arc<CategoricalArray<u8>>> for Array
Available on crate feature default_categorical_8 only.
impl From<Arc<CategoricalArray<u8>>> for Array
default_categorical_8 only.Source§impl From<Arc<IntegerArray<i16>>> for Array
Available on crate feature extended_numeric_types only.
impl From<Arc<IntegerArray<i16>>> for Array
extended_numeric_types only.Source§impl From<Arc<IntegerArray<i8>>> for Array
Available on crate feature extended_numeric_types only.
impl From<Arc<IntegerArray<i8>>> for Array
extended_numeric_types only.Source§impl From<Arc<IntegerArray<u16>>> for Array
Available on crate feature extended_numeric_types only.
impl From<Arc<IntegerArray<u16>>> for Array
extended_numeric_types only.Source§impl From<Arc<IntegerArray<u8>>> for Array
Available on crate feature extended_numeric_types only.
impl From<Arc<IntegerArray<u8>>> for Array
extended_numeric_types only.Source§impl From<Array> for SuperArray
impl From<Array> for SuperArray
Source§fn from(array: Array) -> SuperArray
fn from(array: Array) -> SuperArray
Source§impl From<CategoricalArray<u16>> for Array
Available on crate feature extended_categorical only.
impl From<CategoricalArray<u16>> for Array
extended_categorical only.Source§impl From<CategoricalArray<u32>> for Array
Available on non-crate feature default_categorical_8 or crate feature extended_categorical only.
impl From<CategoricalArray<u32>> for Array
default_categorical_8 or crate feature extended_categorical only.Source§impl From<CategoricalArray<u64>> for Array
Available on crate feature extended_categorical only.
impl From<CategoricalArray<u64>> for Array
extended_categorical only.Source§impl From<CategoricalArray<u8>> for Array
Available on crate feature default_categorical_8 only.
impl From<CategoricalArray<u8>> for Array
default_categorical_8 only.Source§impl From<IntegerArray<i16>> for Array
Available on crate feature extended_numeric_types only.
impl From<IntegerArray<i16>> for Array
extended_numeric_types only.Source§impl From<IntegerArray<u16>> for Array
Available on crate feature extended_numeric_types only.
impl From<IntegerArray<u16>> for Array
extended_numeric_types only.Source§impl FromIterator<Array> for SuperArray
impl FromIterator<Array> for SuperArray
Source§fn from_iter<T>(iter: T) -> SuperArraywhere
T: IntoIterator<Item = Array>,
fn from_iter<T>(iter: T) -> SuperArraywhere
T: IntoIterator<Item = Array>,
Source§impl RowSelection for Array
Available on crate features select and views only.
impl RowSelection for Array
select and views only.Source§fn r<S>(&self, selection: S) -> ArrayVwhere
S: DataSelector,
fn r<S>(&self, selection: S) -> ArrayVwhere
S: DataSelector,
Select rows by index or range, returning an ArrayV (view)
For contiguous selections (ranges), creates a zero-copy view. For non-contiguous selections (index arrays), gathers into a new array.