replace HashMap with IndexMap and HashSet with IndexSet
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use prolog::machine::*;
|
||||
|
||||
use std::collections::HashSet;
|
||||
use indexmap::IndexSet;
|
||||
|
||||
use std::vec::IntoIter;
|
||||
|
||||
pub static VERIFY_ATTRS: &str = include_str!("attributed_variables.pl");
|
||||
@@ -87,7 +88,7 @@ impl MachineState {
|
||||
|
||||
fn populate_project_attr_lists(&mut self) -> (Addr, Addr)
|
||||
{
|
||||
let mut query_vars = HashSet::new();
|
||||
let mut query_vars = IndexSet::new();
|
||||
let attr_vars = self.gather_attr_vars_created_since(0);
|
||||
|
||||
for (_, addr) in self.heap_locs.iter() {
|
||||
|
||||
@@ -12,8 +12,10 @@ use prolog::machine::machine_indices::*;
|
||||
use prolog::machine::term_expansion::{ExpansionAdditionResult};
|
||||
use prolog::machine::toplevel::*;
|
||||
|
||||
use indexmap::{IndexMap, IndexSet};
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::collections::{HashMap, HashSet, VecDeque};
|
||||
use std::collections::VecDeque;
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use std::mem;
|
||||
@@ -325,13 +327,13 @@ pub struct GatherResult {
|
||||
pub struct ClauseCodeGenerator {
|
||||
len_offset: usize,
|
||||
code: Code,
|
||||
pi_to_loc: HashMap<PredicateKey, usize>
|
||||
pi_to_loc: IndexMap<PredicateKey, usize>
|
||||
}
|
||||
|
||||
impl ClauseCodeGenerator {
|
||||
#[inline]
|
||||
fn new(len_offset: usize) -> Self {
|
||||
ClauseCodeGenerator { len_offset, code: vec![], pi_to_loc: HashMap::new() }
|
||||
ClauseCodeGenerator { len_offset, code: vec![], pi_to_loc: IndexMap::new() }
|
||||
}
|
||||
|
||||
fn generate_clause_code(&mut self, dynamic_clause_map: DynamicClauseMap, wam: &Machine)
|
||||
@@ -375,7 +377,7 @@ impl ClauseCodeGenerator {
|
||||
}
|
||||
|
||||
pub struct ListingCompiler {
|
||||
non_counted_bt_preds: HashSet<PredicateKey>,
|
||||
non_counted_bt_preds: IndexSet<PredicateKey>,
|
||||
module: Option<Module>,
|
||||
user_term_dir: TermDir,
|
||||
orig_term_expansion_lens: (usize, usize),
|
||||
@@ -428,7 +430,7 @@ impl ListingCompiler {
|
||||
#[inline]
|
||||
pub fn new(code_repo: &CodeRepo) -> Self {
|
||||
ListingCompiler {
|
||||
non_counted_bt_preds: HashSet::new(),
|
||||
non_counted_bt_preds: IndexSet::new(),
|
||||
module: None,
|
||||
user_term_dir: TermDir::new(),
|
||||
orig_term_expansion_lens: code_repo.term_dir_entry_len((clause_name!("term_expansion"), 2)),
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
use indexmap::IndexMap;
|
||||
|
||||
use prolog_parser::ast::*;
|
||||
use prolog_parser::tabled_rc::*;
|
||||
|
||||
@@ -7,9 +5,11 @@ use prolog::clause_types::*;
|
||||
use prolog::fixtures::*;
|
||||
use prolog::forms::*;
|
||||
|
||||
use indexmap::IndexMap;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::{BTreeMap, HashMap, VecDeque};
|
||||
use std::collections::{BTreeMap, VecDeque};
|
||||
use std::mem;
|
||||
use std::ops::{Add, AddAssign, Sub, SubAssign};
|
||||
use std::rc::Rc;
|
||||
@@ -427,11 +427,11 @@ impl Default for DynamicPredicateInfo {
|
||||
}
|
||||
}
|
||||
|
||||
pub type InSituCodeDir = HashMap<PredicateKey, usize>;
|
||||
pub type InSituCodeDir = IndexMap<PredicateKey, usize>;
|
||||
// key type: module name, predicate indicator.
|
||||
pub type DynamicCodeDir = HashMap<(ClauseName, ClauseName, usize), DynamicPredicateInfo>;
|
||||
pub type DynamicCodeDir = IndexMap<(ClauseName, ClauseName, usize), DynamicPredicateInfo>;
|
||||
|
||||
pub type GlobalVarDir = HashMap<ClauseName, Addr>;
|
||||
pub type GlobalVarDir = IndexMap<ClauseName, Addr>;
|
||||
|
||||
pub struct IndexStore {
|
||||
pub(super) atom_tbl: TabledData<Atom>,
|
||||
@@ -545,7 +545,7 @@ impl IndexStore {
|
||||
}
|
||||
|
||||
pub type CodeDir = BTreeMap<PredicateKey, CodeIndex>;
|
||||
pub type TermDir = HashMap<PredicateKey, (Predicate, VecDeque<TopLevel>)>;
|
||||
pub type TermDir = IndexMap<PredicateKey, (Predicate, VecDeque<TopLevel>)>;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Ord, PartialOrd)]
|
||||
pub enum CompileTimeHook {
|
||||
|
||||
@@ -21,8 +21,9 @@ use prolog::ordered_float::*;
|
||||
use prolog::rug::{Integer, Rational};
|
||||
use prolog::read::PrologStream;
|
||||
|
||||
use indexmap::{IndexMap, IndexSet};
|
||||
|
||||
use std::cmp::{min, max, Ordering};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::f64;
|
||||
use std::mem;
|
||||
use std::rc::Rc;
|
||||
@@ -374,7 +375,7 @@ impl MachineState {
|
||||
|
||||
pub(super) fn unify_with_occurs_check(&mut self, a1: Addr, a2: Addr) {
|
||||
let mut pdl = vec![a1, a2];
|
||||
let mut tabu_list: HashSet<(Addr, Addr)> = HashSet::new();
|
||||
let mut tabu_list: IndexSet<(Addr, Addr)> = IndexSet::new();
|
||||
|
||||
self.fail = false;
|
||||
|
||||
@@ -479,7 +480,7 @@ impl MachineState {
|
||||
|
||||
pub(super) fn unify(&mut self, a1: Addr, a2: Addr) {
|
||||
let mut pdl = vec![a1, a2];
|
||||
let mut tabu_list: HashSet<(Addr, Addr)> = HashSet::new();
|
||||
let mut tabu_list: IndexSet<(Addr, Addr)> = IndexSet::new();
|
||||
|
||||
self.fail = false;
|
||||
|
||||
@@ -2071,7 +2072,7 @@ impl MachineState {
|
||||
}
|
||||
|
||||
pub(crate) fn is_cyclic_term(&self, addr: Addr) -> bool {
|
||||
let mut seen = HashSet::new();
|
||||
let mut seen = IndexSet::new();
|
||||
let mut fail = false;
|
||||
let mut iter = self.pre_order_iter(addr);
|
||||
|
||||
@@ -2835,7 +2836,7 @@ impl MachineState {
|
||||
let a1 = self[temp_v!(1)].clone();
|
||||
let a2 = self[temp_v!(2)].clone();
|
||||
|
||||
let mut var_pairs = HashMap::new();
|
||||
let mut var_pairs = IndexMap::new();
|
||||
|
||||
let iter = self.zipped_acyclic_pre_order_iter(a1, a2);
|
||||
|
||||
|
||||
@@ -37,7 +37,9 @@ use prolog::machine::modules::*;
|
||||
use prolog::machine::toplevel::stream_to_toplevel;
|
||||
use prolog::read::PrologStream;
|
||||
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
use indexmap::IndexMap;
|
||||
|
||||
use std::collections::VecDeque;
|
||||
use std::io::{Read, Write, stdout};
|
||||
use std::fs::File;
|
||||
use std::mem;
|
||||
|
||||
@@ -17,7 +17,9 @@ use prolog::ordered_float::OrderedFloat;
|
||||
use prolog::read::{PrologStream, readline};
|
||||
use prolog::rug::Integer;
|
||||
|
||||
use std::collections::{HashMap, HashSet, VecDeque};
|
||||
use indexmap::{IndexMap, IndexSet};
|
||||
|
||||
use std::collections::VecDeque;
|
||||
use std::io::{stdout, Write};
|
||||
use std::iter::once;
|
||||
use std::mem;
|
||||
@@ -1672,7 +1674,7 @@ impl MachineState {
|
||||
&SystemClauseType::Succeed => {},
|
||||
&SystemClauseType::TermVariables => {
|
||||
let a1 = self[temp_v!(1)].clone();
|
||||
let mut seen_vars = HashSet::new();
|
||||
let mut seen_vars = IndexSet::new();
|
||||
|
||||
for item in self.acyclic_pre_order_iter(a1) {
|
||||
match item {
|
||||
@@ -1779,7 +1781,7 @@ impl MachineState {
|
||||
|
||||
match self.try_from_list(temp_v!(5), stub.clone()) {
|
||||
Ok(addrs) => {
|
||||
let mut var_names: HashMap<Addr, String> = HashMap::new();
|
||||
let mut var_names: IndexMap<Addr, String> = IndexMap::new();
|
||||
|
||||
for addr in addrs {
|
||||
match addr {
|
||||
|
||||
@@ -9,8 +9,10 @@ use prolog::machine::machine_indices::*;
|
||||
use prolog::machine::machine_state::MachineState;
|
||||
use prolog::machine::term_expansion::*;
|
||||
|
||||
use indexmap::{IndexMap, IndexSet};
|
||||
|
||||
use std::borrow::BorrowMut;
|
||||
use std::collections::{HashMap, HashSet, VecDeque};
|
||||
use std::collections::VecDeque;
|
||||
use std::cell::Cell;
|
||||
use std::io::Read;
|
||||
use std::mem;
|
||||
@@ -426,7 +428,7 @@ impl RelationWorker {
|
||||
|
||||
fn compute_head(&self, term: &Term) -> Vec<Term>
|
||||
{
|
||||
let mut vars = HashSet::new();
|
||||
let mut vars = IndexSet::new();
|
||||
|
||||
for term in post_order_iter(term) {
|
||||
if let TermRef::Var(_, _, v) = term {
|
||||
@@ -802,7 +804,7 @@ fn stream_to_toplevel<R: Read>(mut buffer: ParsingStream<R>, wam: &mut Machine)
|
||||
Ok(deque_to_packet(tl, queue))
|
||||
}
|
||||
|
||||
pub type DynamicClauseMap = HashMap<(ClauseName, usize), Vec<(Term, Term)>>;
|
||||
pub type DynamicClauseMap = IndexMap<(ClauseName, usize), Vec<(Term, Term)>>;
|
||||
|
||||
pub struct TopLevelBatchWorker<'a, R: Read> {
|
||||
pub(crate) term_stream: TermStream<'a, R>,
|
||||
@@ -823,7 +825,7 @@ impl<'a, R: Read> TopLevelBatchWorker<'a, R> {
|
||||
TopLevelBatchWorker { term_stream,
|
||||
rel_worker: RelationWorker::new(flags),
|
||||
results: vec![],
|
||||
dynamic_clause_map: HashMap::new(),
|
||||
dynamic_clause_map: IndexMap::new(),
|
||||
in_module: false }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user