1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-03 14:26:17 +03:00

use single atomic u32 value instead of two atomic u16 values

to ensure load/store row and col atomically
Этот коммит содержится в:
rhysd
2022-07-11 09:45:25 +09:00
родитель 61ce49b331
Коммит fd174b316e

Просмотреть файл

@@ -1,6 +1,6 @@
use crate::textarea::TextArea;
use crate::util::num_digits;
use std::sync::atomic::{AtomicU16, Ordering};
use std::sync::atomic::{AtomicU32, Ordering};
use tui::buffer::Buffer;
use tui::layout::Rect;
use tui::text::Text;
@@ -15,18 +15,17 @@ use tui::widgets::{Block, Paragraph, Widget};
// manage states of textarea instances separately.
// https://docs.rs/tui/latest/tui/terminal/struct.Frame.html#method.render_stateful_widget
#[derive(Default)]
pub struct ScrollTop(AtomicU16, AtomicU16);
pub struct ScrollTop(AtomicU32);
impl ScrollTop {
fn load(&self) -> (u16, u16) {
let row = self.0.load(Ordering::Relaxed);
let col = self.1.load(Ordering::Relaxed);
(row, col)
let u = self.0.load(Ordering::Relaxed);
((u >> 16) as u16, u as u16)
}
fn store(&self, row: u16, col: u16) {
self.0.store(row, Ordering::Relaxed);
self.1.store(col, Ordering::Relaxed);
let u = ((row as u32) << 16) | col as u32;
self.0.store(u, Ordering::Relaxed);
}
}