mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-19 10:58:04 +08:00
Refactor resource caches and use it with textures now
This commit is contained in:
52
src/resource_cache.rs
Normal file
52
src/resource_cache.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
struct CacheID {
|
||||
index: usize,
|
||||
}
|
||||
|
||||
impl CacheID {
|
||||
fn new(index: usize) -> Self {
|
||||
Self { index }
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ResourceCache<T> {
|
||||
pub resources: Vec<T>,
|
||||
name_to_id: HashMap<String, CacheID>,
|
||||
}
|
||||
|
||||
impl<T> ResourceCache<T> {
|
||||
pub fn new() -> Self {
|
||||
let resources = Vec::new();
|
||||
let name_to_id = HashMap::new();
|
||||
|
||||
Self {
|
||||
resources,
|
||||
name_to_id,
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn get(&self, name: &str) -> Option<&T> {
|
||||
match self.name_to_id.get(name) {
|
||||
Some(id) => self.resources.get(id.index),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn set(&mut self, name: &str, resource: T) {
|
||||
match self.name_to_id.get(name) {
|
||||
Some(id) => {
|
||||
self.resources[id.index] = resource;
|
||||
},
|
||||
None => {
|
||||
let last_index = self.name_to_id.len();
|
||||
let id = CacheID::new(last_index);
|
||||
self.name_to_id.insert(String::from(name), id);
|
||||
self.resources.push(resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user