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++.
This commit is contained in:
Simon Hausmann 2021-03-15 10:19:35 +01:00
parent fdeca052cb
commit 41f77b2a27
3 changed files with 4 additions and 4 deletions

View file

@ -11,7 +11,7 @@ use core::cell::RefCell;
use neon::prelude::*; use neon::prelude::*;
use rand::RngCore; use rand::RngCore;
use sixtyfps_compilerlib::langtype::Type; use sixtyfps_compilerlib::langtype::Type;
use sixtyfps_corelib::ImageReference; use sixtyfps_corelib::{ImageReference, SharedVector};
use std::rc::Rc; use std::rc::Rc;
@ -198,7 +198,7 @@ fn to_eval_value<'cx>(
Ok(Value::Array( Ok(Value::Array(
vec.into_iter() vec.into_iter()
.map(|i| to_eval_value(i, (*a).clone(), cx, persistent_context)) .map(|i| to_eval_value(i, (*a).clone(), cx, persistent_context))
.collect::<Result<Vec<_>, _>>()?, .collect::<Result<SharedVector<_>, _>>()?,
)) ))
} }
Err(_) => { Err(_) => {

View file

@ -117,7 +117,7 @@ pub enum Value {
/// Correspond to the `image` type in .60 /// Correspond to the `image` type in .60
Image(ImageReference), Image(ImageReference),
/// An Array in the .60 language. /// An Array in the .60 language.
Array(Vec<Value>), Array(SharedVector<Value>),
/// A more complex model which is not created by the interpreter itself (Value::Array can also be used for model) /// A more complex model which is not created by the interpreter itself (Value::Array can also be used for model)
Model(ModelPtr), Model(ModelPtr),
/// An object /// An object

View file

@ -63,7 +63,7 @@ impl Model for ValueModel {
fn set_row_data(&self, row: usize, data: Self::Data) { fn set_row_data(&self, row: usize, data: Self::Data) {
match &mut *self.value.borrow_mut() { match &mut *self.value.borrow_mut() {
Value::Array(a) => { Value::Array(a) => {
a[row] = data; a.as_slice_mut()[row] = data;
self.notify.row_changed(row) self.notify.row_changed(row)
} }
Value::Model(model_ptr) => model_ptr.set_row_data(row, data), Value::Model(model_ptr) => model_ptr.set_row_data(row, data),