From 41f77b2a27cb669ea52592e7b5b536baac6abc1a Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 15 Mar 2021 10:19:35 +0100 Subject: [PATCH] Use `SharedVector` for `Value::Array` instead of `Vec` That will make it more efficient to pass data into the interpreter in the future, especially from C++. --- api/sixtyfps-node/native/lib.rs | 4 ++-- sixtyfps_runtime/interpreter/eval.rs | 2 +- sixtyfps_runtime/interpreter/value_model.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/sixtyfps-node/native/lib.rs b/api/sixtyfps-node/native/lib.rs index 46266eead..b12d9cf33 100644 --- a/api/sixtyfps-node/native/lib.rs +++ b/api/sixtyfps-node/native/lib.rs @@ -11,7 +11,7 @@ use core::cell::RefCell; use neon::prelude::*; use rand::RngCore; use sixtyfps_compilerlib::langtype::Type; -use sixtyfps_corelib::ImageReference; +use sixtyfps_corelib::{ImageReference, SharedVector}; use std::rc::Rc; @@ -198,7 +198,7 @@ fn to_eval_value<'cx>( Ok(Value::Array( vec.into_iter() .map(|i| to_eval_value(i, (*a).clone(), cx, persistent_context)) - .collect::, _>>()?, + .collect::, _>>()?, )) } Err(_) => { diff --git a/sixtyfps_runtime/interpreter/eval.rs b/sixtyfps_runtime/interpreter/eval.rs index 802a686a7..c9738af49 100644 --- a/sixtyfps_runtime/interpreter/eval.rs +++ b/sixtyfps_runtime/interpreter/eval.rs @@ -117,7 +117,7 @@ pub enum Value { /// Correspond to the `image` type in .60 Image(ImageReference), /// An Array in the .60 language. - Array(Vec), + Array(SharedVector), /// A more complex model which is not created by the interpreter itself (Value::Array can also be used for model) Model(ModelPtr), /// An object diff --git a/sixtyfps_runtime/interpreter/value_model.rs b/sixtyfps_runtime/interpreter/value_model.rs index b35ce2090..1f09a3712 100644 --- a/sixtyfps_runtime/interpreter/value_model.rs +++ b/sixtyfps_runtime/interpreter/value_model.rs @@ -63,7 +63,7 @@ impl Model for ValueModel { fn set_row_data(&self, row: usize, data: Self::Data) { match &mut *self.value.borrow_mut() { Value::Array(a) => { - a[row] = data; + a.as_slice_mut()[row] = data; self.notify.row_changed(row) } Value::Model(model_ptr) => model_ptr.set_row_data(row, data),