+use std::borrow::Cow;
+
use rand::{rngs::StdRng, SeedableRng};
use crate::Machine;
/// 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 {
fn default() -> Self {
MachineBuilder {
streams: Default::default(),
- toplevel: default_toplevel(),
+ toplevel: default_toplevel().into(),
}
}
}
}
/// 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<Cow<'static, str>>) -> Self {
+ self.toplevel = toplevel.into();
self
}
use ordered_float::OrderedFloat;
use rand::rngs::StdRng;
+use std::borrow::Cow;
use std::cmp::Ordering;
use std::env;
use std::io::Read;
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);