This is an automated email from the ASF dual-hosted git repository.

tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new a5d9118c7b Cleanup ArrayData::buffers (#4583)
a5d9118c7b is described below

commit a5d9118c7b420bb413b642cfc024770e38594aab
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Tue Aug 1 10:26:46 2023 +0100

    Cleanup ArrayData::buffers (#4583)
    
    * Cleanup ArrayData::buffers
    
    * Hide from docs
    
    * Review feedback
---
 arrow-data/src/{data/mod.rs => data.rs} | 13 ++---
 arrow-data/src/data/buffers.rs          | 96 ---------------------------------
 2 files changed, 7 insertions(+), 102 deletions(-)

diff --git a/arrow-data/src/data/mod.rs b/arrow-data/src/data.rs
similarity index 99%
rename from arrow-data/src/data/mod.rs
rename to arrow-data/src/data.rs
index 50643b90e8..6ff8a824b2 100644
--- a/arrow-data/src/data/mod.rs
+++ b/arrow-data/src/data.rs
@@ -29,8 +29,10 @@ use std::sync::Arc;
 
 use crate::equal;
 
-mod buffers;
-pub use buffers::*;
+/// A collection of [`Buffer`]
+#[doc(hidden)]
+#[deprecated(note = "Use [Buffer]")]
+pub type Buffers<'a> = &'a [Buffer];
 
 #[inline]
 pub(crate) fn contains_nulls(
@@ -345,10 +347,9 @@ impl ArrayData {
         &self.data_type
     }
 
-    /// Returns the [`Buffers`] storing data for this [`ArrayData`]
-    pub fn buffers(&self) -> Buffers<'_> {
-        // In future ArrayData won't store data contiguously as `Vec<Buffer>` 
(#1799)
-        Buffers::from_slice(&self.buffers)
+    /// Returns the [`Buffer`] storing data for this [`ArrayData`]
+    pub fn buffers(&self) -> &[Buffer] {
+        &self.buffers
     }
 
     /// Returns a slice of children [`ArrayData`]. This will be non
diff --git a/arrow-data/src/data/buffers.rs b/arrow-data/src/data/buffers.rs
deleted file mode 100644
index 883e92e36d..0000000000
--- a/arrow-data/src/data/buffers.rs
+++ /dev/null
@@ -1,96 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-use arrow_buffer::Buffer;
-use std::iter::Chain;
-use std::ops::Index;
-
-/// A collection of [`Buffer`]
-#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)]
-pub struct Buffers<'a>([Option<&'a Buffer>; 2]);
-
-impl<'a> Buffers<'a> {
-    /// Temporary will be removed once ArrayData does not store `Vec<Buffer>` 
directly (#3769)
-    pub(crate) fn from_slice(a: &'a [Buffer]) -> Self {
-        match a.len() {
-            0 => Self([None, None]),
-            1 => Self([Some(&a[0]), None]),
-            _ => Self([Some(&a[0]), Some(&a[1])]),
-        }
-    }
-
-    /// Returns the number of [`Buffer`] in this collection
-    #[inline]
-    pub fn len(&self) -> usize {
-        self.0[0].is_some() as usize + self.0[1].is_some() as usize
-    }
-
-    /// Returns `true` if this collection is empty
-    #[inline]
-    pub fn is_empty(&self) -> bool {
-        self.0[0].is_none() && self.0[1].is_none()
-    }
-
-    #[inline]
-    pub fn iter(&self) -> IntoIter<'a> {
-        self.into_iter()
-    }
-
-    /// Converts this [`Buffers`] to a `Vec<Buffer>`
-    #[inline]
-    pub fn to_vec(&self) -> Vec<Buffer> {
-        self.iter().cloned().collect()
-    }
-}
-
-impl<'a> Index<usize> for Buffers<'a> {
-    type Output = &'a Buffer;
-
-    #[inline]
-    fn index(&self, index: usize) -> &Self::Output {
-        self.0[index].as_ref().unwrap()
-    }
-}
-
-impl<'a> IntoIterator for Buffers<'a> {
-    type Item = &'a Buffer;
-    type IntoIter = IntoIter<'a>;
-
-    #[inline]
-    fn into_iter(self) -> Self::IntoIter {
-        IntoIter(self.0[0].into_iter().chain(self.0[1].into_iter()))
-    }
-}
-
-type OptionIter<'a> = std::option::IntoIter<&'a Buffer>;
-
-/// [`Iterator`] for [`Buffers`]
-pub struct IntoIter<'a>(Chain<OptionIter<'a>, OptionIter<'a>>);
-
-impl<'a> Iterator for IntoIter<'a> {
-    type Item = &'a Buffer;
-
-    #[inline]
-    fn next(&mut self) -> Option<Self::Item> {
-        self.0.next()
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        self.0.size_hint()
-    }
-}

Reply via email to