From aecb1d571e575dc173b25a66c8addde29777cc3b Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Sat, 9 Nov 2019 14:38:14 -0600 Subject: [PATCH] DEV: Get rid of the MemoryCache implmentation. --- src/build/assets.rs | 84 --------------------------------------- src/build/mod.rs | 1 - src/build/opcode/cache.rs | 1 + src/main.rs | 4 -- 4 files changed, 1 insertion(+), 89 deletions(-) delete mode 100644 src/build/assets.rs diff --git a/src/build/assets.rs b/src/build/assets.rs deleted file mode 100644 index ffaa78b..0000000 --- a/src/build/assets.rs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2017 Jeremy Wall -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! The asset cache for the ucg compiler. - -use std::collections::HashMap; -use std::io; -use std::path::PathBuf; -use std::rc::Rc; -use std::result; - -use super::Val; - -pub type Result = result::Result; - -/// Defines the cach interface for a UCG build. It has functions to retrieve -/// An asset for a referenced ucg file if it exists as well as to stash -/// an asset for a built ucg file. -/// -/// All methods with a path do path canonicalization. As a result the path -/// is expected to exist on the filesystem. If the path does not exist on -/// the local filesystem then the Cache may return an error. -pub trait Cache { - fn has_path(&self, path: &PathBuf) -> Result; - fn get(&self, path: &PathBuf) -> Result>>; - fn stash(&mut self, path: PathBuf, asset: Rc, modkey: u64) -> Result<()>; - fn evict(&mut self, path: &PathBuf) -> Result<()>; - fn check_mod_key(&self, path: &PathBuf, modkey: u64) -> Result; -} - -pub struct MemoryCache { - map: HashMap>, - mod_key_map: HashMap, -} - -impl MemoryCache { - pub fn new() -> Self { - MemoryCache { - map: HashMap::new(), - mod_key_map: HashMap::new(), - } - } -} - -impl Cache for MemoryCache { - fn has_path(&self, path: &PathBuf) -> Result { - Ok(self.map.contains_key(path)) - } - - fn get(&self, path: &PathBuf) -> Result>> { - Ok(self.map.get(path).map(|v| v.clone())) - } - - fn stash(&mut self, path: PathBuf, asset: Rc, modkey: u64) -> Result<()> { - self.map.insert(path.clone(), asset); - self.mod_key_map.insert(path, modkey); - Ok(()) - } - - fn evict(&mut self, path: &PathBuf) -> Result<()> { - self.map.remove(path); - self.mod_key_map.remove(path); - Ok(()) - } - - fn check_mod_key(&self, path: &PathBuf, modkey: u64) -> Result { - Ok(self - .mod_key_map - .get(path) - .map(|v| *v == modkey) - .unwrap_or(true)) - } -} diff --git a/src/build/mod.rs b/src/build/mod.rs index c95cbda..0266edf 100644 --- a/src/build/mod.rs +++ b/src/build/mod.rs @@ -37,7 +37,6 @@ use crate::build::opcode::translate::PositionMap; use crate::build::opcode::Environment; use crate::build::opcode::VM; -pub mod assets; pub mod format; pub mod ir; pub mod opcode; diff --git a/src/build/opcode/cache.rs b/src/build/opcode/cache.rs index fdfcd59..e7eb73d 100644 --- a/src/build/opcode/cache.rs +++ b/src/build/opcode/cache.rs @@ -48,6 +48,7 @@ impl<'a> Entry<'a> { let cached = match self.0 { btree_map::Entry::Occupied(e) => e.get().clone(), btree_map::Entry::Vacant(e) => { + // TODO(jwall) Check a file cache for the opcodes before let v = Rc::new(f()?); e.insert(v.clone()); v diff --git a/src/main.rs b/src/main.rs index f5639d0..d15f43b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,7 +17,6 @@ extern crate dirs; extern crate rustyline; extern crate ucglib; -use std::cell::RefCell; use std::collections::BTreeMap; use std::error::Error; use std::fs::File; @@ -25,10 +24,8 @@ use std::io; use std::io::Read; use std::path::{Path, PathBuf}; use std::process; -use std::rc::Rc; use ucglib::build; -use ucglib::build::assets::MemoryCache; use ucglib::convert::{ConverterRegistry, ImporterRegistry}; use ucglib::iter::OffsetStrIter; use ucglib::parse::parse; @@ -451,7 +448,6 @@ fn main() { let mut app = do_flags(); let app_matches = app.clone().get_matches(); // FIXME(jwall): Do we want these to be shared or not? - let cache = Rc::new(RefCell::new(MemoryCache::new())); let registry = ConverterRegistry::make_registry(); let mut import_paths = Vec::new(); if let Some(mut p) = dirs::home_dir() {