Make the next element serial number thread-local
In the last revision, the next element serial number was thread-safe, but that might be overdoing it. I suspect that elements will only ever be created from the main thread.
This commit is contained in:
parent
6b2d44a58c
commit
7bc3a9eeae
@ -1,7 +1,7 @@
|
||||
use nalgebra::{DMatrix, DVector};
|
||||
use rustc_hash::FxHashMap;
|
||||
use slab::Slab;
|
||||
use std::{collections::BTreeSet, sync::atomic::{AtomicU64, Ordering}};
|
||||
use std::{cell::Cell, collections::BTreeSet};
|
||||
use sycamore::prelude::*;
|
||||
use web_sys::{console, wasm_bindgen::JsValue}; /* DEBUG */
|
||||
|
||||
@ -13,7 +13,9 @@ pub type ConstraintKey = usize;
|
||||
|
||||
pub type ElementColor = [f32; 3];
|
||||
|
||||
static NEXT_ELEMENT_SERIAL: AtomicU64 = AtomicU64::new(0);
|
||||
thread_local! {
|
||||
static NEXT_ELEMENT_SERIAL: Cell<u64> = Cell::new(0);
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq)]
|
||||
pub struct Element {
|
||||
@ -39,13 +41,17 @@ impl Element {
|
||||
color: ElementColor,
|
||||
representation: DVector<f64>
|
||||
) -> Element {
|
||||
// take the next serial number
|
||||
let serial = NEXT_ELEMENT_SERIAL.get();
|
||||
NEXT_ELEMENT_SERIAL.set(serial.wrapping_add(1));
|
||||
|
||||
Element {
|
||||
id: id,
|
||||
label: label,
|
||||
color: color,
|
||||
representation: create_signal(representation),
|
||||
constraints: create_signal(BTreeSet::default()),
|
||||
serial: NEXT_ELEMENT_SERIAL.fetch_add(1, Ordering::SeqCst),
|
||||
serial: serial,
|
||||
column_index: 0
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user