Feat: optimizations
This commit is contained in:
@@ -104,7 +104,7 @@ pub struct CopiedSteps {
|
||||
pub struct CopiedStepData {
|
||||
pub script: String,
|
||||
pub active: bool,
|
||||
pub source: Option<usize>,
|
||||
pub source: Option<u8>,
|
||||
pub original_index: usize,
|
||||
pub name: Option<String>,
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ pub enum Modal {
|
||||
bank: usize,
|
||||
selected: bool,
|
||||
},
|
||||
FileBrowser(FileBrowserState),
|
||||
FileBrowser(Box<FileBrowserState>),
|
||||
RenameBank {
|
||||
bank: usize,
|
||||
name: String,
|
||||
@@ -50,7 +50,7 @@ pub enum Modal {
|
||||
input: String,
|
||||
},
|
||||
SetTempo(String),
|
||||
AddSamplePath(FileBrowserState),
|
||||
AddSamplePath(Box<FileBrowserState>),
|
||||
Editor,
|
||||
Preview,
|
||||
PatternProps {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
use std::collections::HashSet;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::model::{MAX_BANKS, MAX_PATTERNS};
|
||||
@@ -7,7 +6,7 @@ use crate::model::Project;
|
||||
pub struct ProjectState {
|
||||
pub project: Project,
|
||||
pub file_path: Option<PathBuf>,
|
||||
pub dirty_patterns: HashSet<(usize, usize)>,
|
||||
dirty_patterns: [[bool; MAX_PATTERNS]; MAX_BANKS],
|
||||
}
|
||||
|
||||
impl Default for ProjectState {
|
||||
@@ -15,7 +14,7 @@ impl Default for ProjectState {
|
||||
let mut state = Self {
|
||||
project: Project::default(),
|
||||
file_path: None,
|
||||
dirty_patterns: HashSet::new(),
|
||||
dirty_patterns: [[false; MAX_PATTERNS]; MAX_BANKS],
|
||||
};
|
||||
state.mark_all_dirty();
|
||||
state
|
||||
@@ -24,18 +23,23 @@ impl Default for ProjectState {
|
||||
|
||||
impl ProjectState {
|
||||
pub fn mark_dirty(&mut self, bank: usize, pattern: usize) {
|
||||
self.dirty_patterns.insert((bank, pattern));
|
||||
self.dirty_patterns[bank][pattern] = true;
|
||||
}
|
||||
|
||||
pub fn mark_all_dirty(&mut self) {
|
||||
for bank in 0..MAX_BANKS {
|
||||
for pattern in 0..MAX_PATTERNS {
|
||||
self.dirty_patterns.insert((bank, pattern));
|
||||
}
|
||||
}
|
||||
self.dirty_patterns = [[true; MAX_PATTERNS]; MAX_BANKS];
|
||||
}
|
||||
|
||||
pub fn take_dirty(&mut self) -> HashSet<(usize, usize)> {
|
||||
std::mem::take(&mut self.dirty_patterns)
|
||||
pub fn take_dirty(&mut self) -> Vec<(usize, usize)> {
|
||||
let mut result = Vec::new();
|
||||
for (bank, patterns) in self.dirty_patterns.iter_mut().enumerate() {
|
||||
for (pattern, dirty) in patterns.iter_mut().enumerate() {
|
||||
if *dirty {
|
||||
*dirty = false;
|
||||
result.push((bank, pattern));
|
||||
}
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user