From 74e3d32ca9350b5ca7d524835b65a0c6d6d75557 Mon Sep 17 00:00:00 2001 From: bakaq Date: Thu, 12 Dec 2024 05:59:59 -0300 Subject: [PATCH] Use Cow<'a,B> for toplevel configuration --- src/machine/config.rs | 10 ++++++---- src/machine/mod.rs | 8 ++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/machine/config.rs b/src/machine/config.rs index 4e1e0532..2981899d 100644 --- a/src/machine/config.rs +++ b/src/machine/config.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use rand::{rngs::StdRng, SeedableRng}; use crate::Machine; @@ -41,7 +43,7 @@ enum StreamConfigInner { /// Describes how a [`Machine`](crate::Machine) will be configured. pub struct MachineBuilder { pub(crate) streams: StreamConfig, - pub(crate) toplevel: &'static str, + pub(crate) toplevel: Cow<'static, str>, } impl Default for MachineBuilder { @@ -49,7 +51,7 @@ impl Default for MachineBuilder { fn default() -> Self { MachineBuilder { streams: Default::default(), - toplevel: default_toplevel(), + toplevel: default_toplevel().into(), } } } @@ -67,8 +69,8 @@ impl MachineBuilder { } /// Uses the given toplevel in this configuration. - pub fn with_toplevel(mut self, toplevel: &'static str) -> Self { - self.toplevel = toplevel; + pub fn with_toplevel(mut self, toplevel: impl Into>) -> Self { + self.toplevel = toplevel.into(); self } diff --git a/src/machine/mod.rs b/src/machine/mod.rs index 22c2a032..a62c0caa 100644 --- a/src/machine/mod.rs +++ b/src/machine/mod.rs @@ -54,6 +54,7 @@ use lazy_static::lazy_static; use ordered_float::OrderedFloat; use rand::rngs::StdRng; +use std::borrow::Cow; use std::cmp::Ordering; use std::env; use std::io::Read; @@ -297,13 +298,16 @@ impl Machine { self.run_module_predicate(atom!("loader"), (atom!("file_load"), 2)); } - fn load_top_level(&mut self, program: &'static str) { + fn load_top_level(&mut self, program: Cow<'static, str>) { let mut path_buf = current_dir(); path_buf.push("src/toplevel.pl"); let path = path_buf.to_str().unwrap(); - let toplevel_stream = Stream::from_static_string(program, &mut self.machine_st.arena); + let toplevel_stream = match program { + Cow::Borrowed(s) => Stream::from_static_string(s, &mut self.machine_st.arena), + Cow::Owned(s) => Stream::from_owned_string(s, &mut self.machine_st.arena), + }; self.load_file(path, toplevel_stream); -- 2.54.0