Skip to content

Commit

Permalink
Remove RefCell from builder arena
Browse files Browse the repository at this point in the history
  • Loading branch information
marmeladema committed Jan 11, 2023
1 parent ab70c2c commit 4270150
Show file tree
Hide file tree
Showing 18 changed files with 643 additions and 547 deletions.
296 changes: 148 additions & 148 deletions capnp-rpc/src/rpc_capnp.rs

Large diffs are not rendered by default.

50 changes: 25 additions & 25 deletions capnp-rpc/src/rpc_twoparty_capnp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,22 +107,22 @@ pub mod vat_id {
}

impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
fn set_pointer_builder(pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
}

impl <'a,> Builder<'a,> {
pub fn into_reader(self) -> Reader<'a,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
}
pub fn reborrow(&mut self) -> Builder<'_,> {
Builder { .. *self }
Builder { builder: self.builder.reborrow(), ..*self }
}
pub fn reborrow_as_reader(&self) -> Reader<'_,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
::capnp::traits::FromStructReader::new(self.builder.as_reader())
}

pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}
#[inline]
pub fn get_side(self) -> ::core::result::Result<crate::rpc_twoparty_capnp::Side,::capnp::NotInSchema> {
Expand Down Expand Up @@ -227,22 +227,22 @@ pub mod provision_id {
}

impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
fn set_pointer_builder(pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
}

impl <'a,> Builder<'a,> {
pub fn into_reader(self) -> Reader<'a,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
}
pub fn reborrow(&mut self) -> Builder<'_,> {
Builder { .. *self }
Builder { builder: self.builder.reborrow(), ..*self }
}
pub fn reborrow_as_reader(&self) -> Reader<'_,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
::capnp::traits::FromStructReader::new(self.builder.as_reader())
}

pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}
#[inline]
pub fn get_join_id(self) -> u32 {
Expand Down Expand Up @@ -343,22 +343,22 @@ pub mod recipient_id {
}

impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
fn set_pointer_builder(pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
}

impl <'a,> Builder<'a,> {
pub fn into_reader(self) -> Reader<'a,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
}
pub fn reborrow(&mut self) -> Builder<'_,> {
Builder { .. *self }
Builder { builder: self.builder.reborrow(), ..*self }
}
pub fn reborrow_as_reader(&self) -> Reader<'_,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
::capnp::traits::FromStructReader::new(self.builder.as_reader())
}

pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}
}

Expand Down Expand Up @@ -451,22 +451,22 @@ pub mod third_party_cap_id {
}

impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
fn set_pointer_builder(pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
}

impl <'a,> Builder<'a,> {
pub fn into_reader(self) -> Reader<'a,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
}
pub fn reborrow(&mut self) -> Builder<'_,> {
Builder { .. *self }
Builder { builder: self.builder.reborrow(), ..*self }
}
pub fn reborrow_as_reader(&self) -> Reader<'_,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
::capnp::traits::FromStructReader::new(self.builder.as_reader())
}

pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}
}

Expand Down Expand Up @@ -571,22 +571,22 @@ pub mod join_key_part {
}

impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
fn set_pointer_builder(pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
}

impl <'a,> Builder<'a,> {
pub fn into_reader(self) -> Reader<'a,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
}
pub fn reborrow(&mut self) -> Builder<'_,> {
Builder { .. *self }
Builder { builder: self.builder.reborrow(), ..*self }
}
pub fn reborrow_as_reader(&self) -> Reader<'_,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
::capnp::traits::FromStructReader::new(self.builder.as_reader())
}

pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}
#[inline]
pub fn get_join_id(self) -> u32 {
Expand Down Expand Up @@ -719,22 +719,22 @@ pub mod join_result {
}

impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> {
fn set_pointer_builder(pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) }
}

impl <'a,> Builder<'a,> {
pub fn into_reader(self) -> Reader<'a,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
}
pub fn reborrow(&mut self) -> Builder<'_,> {
Builder { .. *self }
Builder { builder: self.builder.reborrow(), ..*self }
}
pub fn reborrow_as_reader(&self) -> Reader<'_,> {
::capnp::traits::FromStructReader::new(self.builder.into_reader())
::capnp::traits::FromStructReader::new(self.builder.as_reader())
}

pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}
#[inline]
pub fn get_join_id(self) -> u32 {
Expand Down Expand Up @@ -764,7 +764,7 @@ pub mod join_result {
}
#[inline]
pub fn has_cap(&self) -> bool {
!self.builder.get_pointer_field(0).is_null()
!self.builder.get_pointer_field_ref(0).is_null()
}
}

Expand Down
2 changes: 1 addition & 1 deletion capnp/src/any_pointer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ impl<'a> Builder<'a> {

/// Gets the total size of the target and all of its children. Does not count far pointer overhead.
pub fn target_size(&self) -> Result<crate::MessageSize> {
self.builder.into_reader().total_size()
self.builder.as_reader().total_size()
}

pub fn get_as<T: FromPointerBuilder<'a>>(self) -> Result<T> {
Expand Down
2 changes: 1 addition & 1 deletion capnp/src/any_pointer_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ impl<'a> FromPointerBuilder<'a> for Builder<'a> {

impl<'a> crate::traits::SetPointerBuilder for Reader<'a> {
fn set_pointer_builder<'b>(
pointer: PointerBuilder<'b>,
mut pointer: PointerBuilder<'b>,
value: Reader<'a>,
canonicalize: bool,
) -> Result<()> {
Expand Down
4 changes: 2 additions & 2 deletions capnp/src/capability_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ where
{
pub fn reborrow(&mut self) -> Builder<'_, T> {
Builder {
builder: self.builder,
builder: self.builder.reborrow(),
marker: PhantomData,
}
}
Expand Down Expand Up @@ -251,7 +251,7 @@ where
T: FromClientHook,
{
fn set_pointer_builder<'b>(
pointer: crate::private::layout::PointerBuilder<'b>,
mut pointer: crate::private::layout::PointerBuilder<'b>,
value: Reader<'a, T>,
canonicalize: bool,
) -> Result<()> {
Expand Down
2 changes: 1 addition & 1 deletion capnp/src/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ impl<'a> crate::traits::FromPointerBuilder<'a> for Builder<'a> {

impl<'a> crate::traits::SetPointerBuilder for Reader<'a> {
fn set_pointer_builder<'b>(
pointer: PointerBuilder<'b>,
mut pointer: PointerBuilder<'b>,
value: Reader<'a>,
_canonicalize: bool,
) -> Result<()> {
Expand Down
2 changes: 1 addition & 1 deletion capnp/src/data_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ impl<'a> Builder<'a> {

impl<'a> crate::traits::SetPointerBuilder for Reader<'a> {
fn set_pointer_builder<'b>(
pointer: crate::private::layout::PointerBuilder<'b>,
mut pointer: crate::private::layout::PointerBuilder<'b>,
value: Reader<'a>,
canonicalize: bool,
) -> Result<()> {
Expand Down
9 changes: 6 additions & 3 deletions capnp/src/enum_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,17 @@ impl<'a, T: ToU16 + FromU16> Builder<'a, T> {
}
}

pub fn reborrow(&self) -> Builder<'_, T> {
Builder { ..*self }
pub fn reborrow(&mut self) -> Builder<'_, T> {
Builder {
builder: self.builder.reborrow(),
marker: PhantomData,
}
}
}

impl<'a, T> crate::traits::SetPointerBuilder for Reader<'a, T> {
fn set_pointer_builder<'b>(
pointer: crate::private::layout::PointerBuilder<'b>,
mut pointer: crate::private::layout::PointerBuilder<'b>,
value: Reader<'a, T>,
canonicalize: bool,
) -> Result<()> {
Expand Down
6 changes: 3 additions & 3 deletions capnp/src/list_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,14 +232,14 @@ where
}
}

pub fn set<'b>(&self, index: u32, value: T::Reader<'a>) -> Result<()>
pub fn set<'b>(&mut self, index: u32, value: T::Reader<'a>) -> Result<()>
where
T::Reader<'a>: crate::traits::IntoInternalListReader<'b>,
{
use crate::traits::IntoInternalListReader;
assert!(index < self.len());
self.builder
.get_pointer_element(index)
.get_pointer_element_mut(index)
.set_list(&value.into_internal_list_reader(), false)
}
}
Expand All @@ -249,7 +249,7 @@ where
T: crate::traits::Owned,
{
fn set_pointer_builder<'b>(
pointer: crate::private::layout::PointerBuilder<'b>,
mut pointer: crate::private::layout::PointerBuilder<'b>,
value: Reader<'a, T>,
canonicalize: bool,
) -> Result<()> {
Expand Down
2 changes: 1 addition & 1 deletion capnp/src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ where
self.arena.allocate_segment(1);
}
let (seg_start, _seg_len) = self.arena.get_segment_mut(0);
let pointer = layout::PointerBuilder::get_root(&self.arena, 0, seg_start);
let pointer = layout::PointerBuilder::get_root(&mut self.arena, 0, seg_start);
SetPointerBuilder::set_pointer_builder(pointer, value, true)?;
assert_eq!(self.get_segments_for_output().len(), 1);
Ok(())
Expand Down
17 changes: 10 additions & 7 deletions capnp/src/primitive_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,13 +161,13 @@ where
}

#[cfg(all(target_endian = "little"))]
pub fn as_slice(&self) -> Option<&mut [T]> {
pub fn as_slice(&self) -> Option<&[T]> {
if self.builder.get_element_size() == T::element_size() {
let bytes = self.builder.into_raw_bytes();
let bytes = self.builder.as_raw_bytes();
Some(unsafe {
use core::slice;
slice::from_raw_parts_mut(
bytes.as_ptr() as *mut T,
slice::from_raw_parts(
bytes.as_ptr() as *const T,
8 * bytes.len() / (data_bits_per_element(T::element_size())) as usize,
)
})
Expand Down Expand Up @@ -213,8 +213,11 @@ impl<'a, T: PrimitiveElement> Builder<'a, T> {
}
}

pub fn reborrow(&self) -> Builder<'_, T> {
Builder { ..*self }
pub fn reborrow(&mut self) -> Builder<'_, T> {
Builder {
marker: marker::PhantomData,
builder: self.builder.reborrow(),
}
}
}

Expand All @@ -223,7 +226,7 @@ where
T: PrimitiveElement,
{
fn set_pointer_builder<'b>(
pointer: PointerBuilder<'b>,
mut pointer: PointerBuilder<'b>,
value: Reader<'a, T>,
canonicalize: bool,
) -> Result<()> {
Expand Down
Loading

0 comments on commit 4270150

Please sign in to comment.