inline repeated field methods PiperOrigin-RevId: 633199701
diff --git a/rust/cpp.rs b/rust/cpp.rs index 87b4825..2a199dc 100644 --- a/rust/cpp.rs +++ b/rust/cpp.rs
@@ -399,34 +399,43 @@ unsafe impl ProxiedInRepeated for $t { #[allow(dead_code)] + #[inline] fn repeated_new(_: Private) -> Repeated<$t> { Repeated::from_inner(InnerRepeated { raw: unsafe { $new_thunk() } }) } #[allow(dead_code)] + #[inline] unsafe fn repeated_free(_: Private, f: &mut Repeated<$t>) { unsafe { $free_thunk(f.as_mut().as_raw(Private)) } } + #[inline] fn repeated_len(f: View<Repeated<$t>>) -> usize { unsafe { $size_thunk(f.as_raw(Private)) } } + #[inline] fn repeated_push(mut f: Mut<Repeated<$t>>, v: View<$t>) { unsafe { $add_thunk(f.as_raw(Private), v.into()) } } + #[inline] fn repeated_clear(mut f: Mut<Repeated<$t>>) { unsafe { $clear_thunk(f.as_raw(Private)) } } + #[inline] unsafe fn repeated_get_unchecked(f: View<Repeated<$t>>, i: usize) -> View<$t> { <$t as CppTypeConversions>::elem_to_view( unsafe { $get_thunk(f.as_raw(Private), i) }) } + #[inline] unsafe fn repeated_set_unchecked(mut f: Mut<Repeated<$t>>, i: usize, v: View<$t>) { unsafe { $set_thunk(f.as_raw(Private), i, v.into()) } } + #[inline] fn repeated_copy_from(src: View<Repeated<$t>>, mut dest: Mut<Repeated<$t>>) { unsafe { $copy_from_thunk(src.as_raw(Private), dest.as_raw(Private)) } } + #[inline] fn repeated_reserve(mut f: Mut<Repeated<$t>>, additional: usize) { unsafe { $reserve_thunk(f.as_raw(Private), additional) } }
diff --git a/rust/repeated.rs b/rust/repeated.rs index c7c9762..679e279 100644 --- a/rust/repeated.rs +++ b/rust/repeated.rs
@@ -61,6 +61,7 @@ #[doc(hidden)] impl<'msg, T: ?Sized> RepeatedView<'msg, T> { #[doc(hidden)] + #[inline] pub fn as_raw(&self, _private: Private) -> RawRepeatedField { self.raw } @@ -68,6 +69,7 @@ /// # Safety /// - `inner` must be valid to read from for `'msg` #[doc(hidden)] + #[inline] pub unsafe fn from_raw(_private: Private, raw: RawRepeatedField) -> Self { Self { raw, _phantom: PhantomData } } @@ -78,11 +80,13 @@ T: ProxiedInRepeated + ?Sized + 'msg, { /// Gets the length of the repeated field. + #[inline] pub fn len(&self) -> usize { T::repeated_len(*self) } /// Returns true if the repeated field has no values. + #[inline] pub fn is_empty(&self) -> bool { self.len() == 0 } @@ -90,6 +94,7 @@ /// Gets the value at `index`. /// /// Returns `None` if `index > len`. + #[inline] pub fn get(self, index: usize) -> Option<View<'msg, T>> { if index >= self.len() { return None; @@ -102,6 +107,7 @@ /// /// # Safety /// Undefined behavior if `index >= len` + #[inline] pub unsafe fn get_unchecked(self, index: usize) -> View<'msg, T> { // SAFETY: in-bounds as promised unsafe { T::repeated_get_unchecked(self, index) } @@ -120,11 +126,13 @@ /// - There must be no aliasing references or mutations on the same /// underlying object. #[doc(hidden)] + #[inline] pub unsafe fn from_inner(_private: Private, inner: InnerRepeatedMut<'msg>) -> Self { Self { inner, _phantom: PhantomData } } #[doc(hidden)] + #[inline] pub fn as_raw(&mut self, _private: Private) -> RawRepeatedField { self.inner.raw } @@ -135,11 +143,13 @@ T: ProxiedInRepeated + ?Sized + 'msg, { /// Gets the length of the repeated field. + #[inline] pub fn len(&self) -> usize { self.as_view().len() } /// Returns true if the repeated field has no values. + #[inline] pub fn is_empty(&self) -> bool { self.len() == 0 } @@ -147,6 +157,7 @@ /// Gets the value at `index`. /// /// Returns `None` if `index > len`. + #[inline] pub fn get(&self, index: usize) -> Option<View<T>> { self.as_view().get(index) } @@ -155,12 +166,14 @@ /// /// # Safety /// Undefined behavior if `index >= len` + #[inline] pub unsafe fn get_unchecked(&self, index: usize) -> View<T> { // SAFETY: in-bounds as promised unsafe { self.as_view().get_unchecked(index) } } /// Appends `val` to the end of the repeated field. + #[inline] pub fn push(&mut self, val: View<T>) { // TODO: b/320936046 - Use SettableValue instead of View for added ergonomics. T::repeated_push(self.as_mut(), val); @@ -170,6 +183,7 @@ /// /// # Panics /// Panics if `index >= len` + #[inline] pub fn set(&mut self, index: usize, val: View<T>) { let len = self.len(); if index >= len { @@ -184,6 +198,7 @@ /// /// # Safety /// Undefined behavior if `index >= len` + #[inline] pub unsafe fn set_unchecked(&mut self, index: usize, val: View<T>) { // TODO: b/320936046 - Use SettableValue instead of View for added ergonomics. // SAFETY: `index` is in-bounds as promised by the caller. @@ -376,10 +391,12 @@ { type Proxied = Repeated<T>; + #[inline] fn as_view(&self) -> View<'_, Self::Proxied> { *self } + #[inline] fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied> where 'msg: 'shorter, @@ -394,10 +411,12 @@ { type Proxied = Repeated<T>; + #[inline] fn as_view(&self) -> View<'_, Self::Proxied> { RepeatedView { raw: self.inner.raw, _phantom: PhantomData } } + #[inline] fn into_view<'shorter>(self) -> View<'shorter, Self::Proxied> where 'msg: 'shorter, @@ -410,10 +429,12 @@ where T: ProxiedInRepeated + ?Sized + 'msg, { + #[inline] fn as_mut(&mut self) -> Mut<'_, Self::Proxied> { RepeatedMut { inner: self.inner, _phantom: PhantomData } } + #[inline] fn into_mut<'shorter>(self) -> Mut<'shorter, Self::Proxied> where 'msg: 'shorter, @@ -428,6 +449,7 @@ { type Item = View<'msg, T>; + #[inline] fn next(&mut self) -> Option<Self::Item> { let val = self.view.get(self.current_index); if val.is_some() {
diff --git a/rust/upb.rs b/rust/upb.rs index 858e7cf..554af66 100644 --- a/rust/upb.rs +++ b/rust/upb.rs
@@ -182,6 +182,7 @@ macro_rules! impl_repeated_base { ($t:ty, $elem_t:ty, $ufield:ident, $upb_tag:expr) => { #[allow(dead_code)] + #[inline] fn repeated_new(_: Private) -> Repeated<$t> { let arena = Arena::new(); Repeated::from_inner(InnerRepeated { @@ -193,9 +194,11 @@ unsafe fn repeated_free(_: Private, _f: &mut Repeated<$t>) { // No-op: the memory will be dropped by the arena. } + #[inline] fn repeated_len(f: View<Repeated<$t>>) -> usize { unsafe { upb_Array_Size(f.as_raw(Private)) } } + #[inline] fn repeated_push(mut f: Mut<Repeated<$t>>, v: View<$t>) { let arena = f.raw_arena(Private); unsafe { @@ -206,16 +209,19 @@ )); } } + #[inline] fn repeated_clear(mut f: Mut<Repeated<$t>>) { unsafe { upb_Array_Resize(f.as_raw(Private), 0, f.raw_arena(Private)); } } + #[inline] unsafe fn repeated_get_unchecked(f: View<Repeated<$t>>, i: usize) -> View<$t> { unsafe { <$t as UpbTypeConversions>::from_message_value(upb_Array_Get(f.as_raw(Private), i)) } } + #[inline] unsafe fn repeated_set_unchecked(mut f: Mut<Repeated<$t>>, i: usize, v: View<$t>) { let arena = f.raw_arena(Private); unsafe { @@ -226,6 +232,7 @@ ) } } + #[inline] fn repeated_reserve(mut f: Mut<Repeated<$t>>, additional: usize) { // SAFETY: // - `upb_Array_Reserve` is unsafe but assumed to be sound when called on a @@ -272,6 +279,7 @@ unsafe impl ProxiedInRepeated for $t { impl_repeated_base!($t, PtrAndLen, str_val, $upb_tag); + #[inline] fn repeated_copy_from(src: View<Repeated<$t>>, mut dest: Mut<Repeated<$t>>) { let len = src.len(); // SAFETY: