replace SliceDeque with VecDeque
This commit is contained in:
@@ -12,8 +12,6 @@ use crate::machine::term_stream::*;
|
||||
use crate::machine::*;
|
||||
use crate::parser::ast::*;
|
||||
|
||||
use slice_deque::{sdeq, SliceDeque};
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::collections::VecDeque;
|
||||
use std::mem;
|
||||
@@ -425,8 +423,8 @@ fn delete_from_skeleton(
|
||||
target_pos: usize,
|
||||
retraction_info: &mut RetractionInfo,
|
||||
) -> usize {
|
||||
let clause_index_info = skeleton.clauses.remove(target_pos);
|
||||
let clause_clause_loc = skeleton.core.clause_clause_locs.remove(target_pos);
|
||||
let clause_index_info = skeleton.clauses.remove(target_pos).unwrap();
|
||||
let clause_clause_loc = skeleton.core.clause_clause_locs.remove(target_pos).unwrap();
|
||||
|
||||
if target_pos < skeleton.core.clause_assert_margin {
|
||||
skeleton.core.clause_assert_margin -= 1;
|
||||
@@ -887,7 +885,7 @@ fn prepend_compiled_clause(
|
||||
global_clock_tick: usize,
|
||||
) -> IndexPtr {
|
||||
let clause_loc = code.len();
|
||||
let mut prepend_queue = sdeq![];
|
||||
let mut prepend_queue = VecDeque::new();
|
||||
|
||||
let target_arg_num = skeleton.clauses[0].opt_arg_index_key.arg_num();
|
||||
let head_arg_num = skeleton.clauses[1].opt_arg_index_key.arg_num();
|
||||
@@ -995,7 +993,7 @@ fn prepend_compiled_clause(
|
||||
|
||||
merge_clause_index(
|
||||
target_indexing_line,
|
||||
&mut skeleton.clauses,
|
||||
skeleton.clauses.make_contiguous(),
|
||||
&skeleton.core.retracted_dynamic_clauses,
|
||||
clause_loc + 2, // == skeleton.clauses[0].clause_start
|
||||
AppendOrPrepend::Prepend,
|
||||
@@ -1189,7 +1187,7 @@ fn append_compiled_clause(
|
||||
|
||||
merge_clause_index(
|
||||
target_indexing_line,
|
||||
&mut skeleton.clauses[lower_bound..],
|
||||
&mut skeleton.clauses.make_contiguous()[lower_bound..],
|
||||
&skeleton.core.retracted_dynamic_clauses,
|
||||
clause_loc,
|
||||
AppendOrPrepend::Append,
|
||||
@@ -1406,7 +1404,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
)?;
|
||||
|
||||
if settings.is_extensible {
|
||||
let mut clause_clause_locs = sdeq![];
|
||||
let mut clause_clause_locs = VecDeque::new();
|
||||
|
||||
for clause_index_info in cg.skeleton.clauses.iter_mut() {
|
||||
clause_index_info.clause_start += code_len;
|
||||
@@ -1434,7 +1432,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
skeleton
|
||||
.core
|
||||
.clause_clause_locs
|
||||
.extend_from_slice(&clause_clause_locs[0..]);
|
||||
.extend(&clause_clause_locs.make_contiguous()[0..]);
|
||||
|
||||
self.payload.retraction_info
|
||||
.push_record(RetractionRecord::SkeletonClauseTruncateBack(
|
||||
@@ -1447,7 +1445,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
cg.skeleton
|
||||
.core
|
||||
.clause_clause_locs
|
||||
.extend_from_slice(&clause_clause_locs[0..]);
|
||||
.extend(&clause_clause_locs.make_contiguous()[0..]);
|
||||
|
||||
let skeleton = cg.skeleton;
|
||||
|
||||
@@ -1495,7 +1493,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
&mut self,
|
||||
compilation_target: &CompilationTarget,
|
||||
key: &PredicateKey,
|
||||
clause_clause_locs: SliceDeque<usize>,
|
||||
mut clause_clause_locs: VecDeque<usize>,
|
||||
) {
|
||||
let listing_src_file_name = self.listing_src_file_name();
|
||||
|
||||
@@ -1519,7 +1517,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
|
||||
skeleton
|
||||
.clause_clause_locs
|
||||
.extend_from_slice(&clause_clause_locs[0..]);
|
||||
.extend(&clause_clause_locs.make_contiguous()[0..]);
|
||||
}
|
||||
None => {
|
||||
let mut skeleton = LocalPredicateSkeleton::new();
|
||||
@@ -1972,7 +1970,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
code,
|
||||
later_indexing_loc,
|
||||
0..target_pos - lower_bound,
|
||||
&mut skeleton.clauses[lower_bound..],
|
||||
&mut skeleton.clauses.make_contiguous()[lower_bound..],
|
||||
&skeleton.core.retracted_dynamic_clauses,
|
||||
&mut self.payload.retraction_info,
|
||||
);
|
||||
@@ -1997,7 +1995,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
code,
|
||||
target_indexing_loc,
|
||||
target_pos + 1 - lower_bound..skeleton.clauses.len() - lower_bound,
|
||||
&mut skeleton.clauses[lower_bound..],
|
||||
&mut skeleton.clauses.make_contiguous()[lower_bound..],
|
||||
&skeleton.core.retracted_dynamic_clauses,
|
||||
&mut self.payload.retraction_info,
|
||||
);
|
||||
@@ -2196,15 +2194,17 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
{
|
||||
Some(skeleton) if append_or_prepend.is_append() => {
|
||||
let tail_num = skeleton.core.clause_clause_locs.len() - num_clause_predicates;
|
||||
skeleton.core.clause_clause_locs[tail_num..]
|
||||
skeleton.core.clause_clause_locs.make_contiguous()[tail_num..]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect()
|
||||
}
|
||||
Some(skeleton) => {
|
||||
skeleton.core.clause_clause_locs.make_contiguous()[0..num_clause_predicates]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect()
|
||||
}
|
||||
Some(skeleton) => skeleton.core.clause_clause_locs[0..num_clause_predicates]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect(),
|
||||
None => {
|
||||
unreachable!()
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@ use crate::parser::ast::*;
|
||||
use fxhash::FxBuildHasher;
|
||||
use indexmap::IndexSet;
|
||||
use ref_thread_local::RefThreadLocal;
|
||||
use slice_deque::{sdeq, SliceDeque};
|
||||
|
||||
use std::collections::VecDeque;
|
||||
use std::fs::File;
|
||||
use std::mem;
|
||||
|
||||
@@ -334,12 +334,12 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
&mut self,
|
||||
compilation_target: CompilationTarget,
|
||||
key: PredicateKey,
|
||||
clause_locs: &SliceDeque<usize>,
|
||||
clause_locs: &VecDeque<usize>,
|
||||
) {
|
||||
let result_opt = self
|
||||
.wam_prelude
|
||||
.indices
|
||||
.get_predicate_skeleton(&compilation_target, &key)
|
||||
.get_predicate_skeleton_mut(&compilation_target, &key)
|
||||
.map(|skeleton| {
|
||||
(
|
||||
clause_locs
|
||||
@@ -396,7 +396,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
pub(super) fn retract_local_clause_clauses(
|
||||
&mut self,
|
||||
clause_clause_compilation_target: CompilationTarget,
|
||||
clause_locs: &SliceDeque<usize>,
|
||||
clause_locs: &VecDeque<usize>,
|
||||
) {
|
||||
let key = (atom!("$clause"), 2);
|
||||
let listing_src_file_name = self.listing_src_file_name();
|
||||
@@ -415,7 +415,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
payload_compilation_target,
|
||||
clause_clause_compilation_target,
|
||||
key,
|
||||
mem::replace(&mut skeleton.clause_clause_locs, sdeq![]),
|
||||
mem::replace(&mut skeleton.clause_clause_locs, VecDeque::new()),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@ use crate::parser::ast::*;
|
||||
use crate::types::*;
|
||||
|
||||
use indexmap::IndexSet;
|
||||
use slice_deque::{sdeq, SliceDeque};
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::collections::VecDeque;
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt;
|
||||
use std::mem;
|
||||
@@ -96,7 +96,7 @@ pub(crate) enum RetractionRecord {
|
||||
CompilationTarget,
|
||||
CompilationTarget,
|
||||
PredicateKey,
|
||||
SliceDeque<usize>,
|
||||
VecDeque<usize>,
|
||||
),
|
||||
RemovedSkeleton(CompilationTarget, PredicateKey, PredicateSkeleton),
|
||||
ReplacedDynamicElseOffset(usize, usize),
|
||||
@@ -900,7 +900,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
key,
|
||||
) {
|
||||
Some(skeleton) => {
|
||||
skeleton.clause_clause_locs.truncate_back(len);
|
||||
skeleton.clause_clause_locs.truncate(len);
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
@@ -912,8 +912,8 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
.get_predicate_skeleton_mut(&compilation_target, &key)
|
||||
{
|
||||
Some(skeleton) => {
|
||||
skeleton.clauses.truncate_back(len);
|
||||
skeleton.core.clause_clause_locs.truncate_back(len);
|
||||
skeleton.clauses.truncate(len);
|
||||
skeleton.core.clause_clause_locs.truncate(len);
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
@@ -1358,7 +1358,7 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
|
||||
*key,
|
||||
) {
|
||||
Some(skeleton) if !skeleton.clause_clause_locs.is_empty() => {
|
||||
mem::replace(&mut skeleton.clause_clause_locs, sdeq![])
|
||||
mem::replace(&mut skeleton.clause_clause_locs, VecDeque::new())
|
||||
}
|
||||
_ => return,
|
||||
};
|
||||
@@ -1973,33 +1973,42 @@ impl Machine {
|
||||
let mut clause_clause_target_poses: Vec<_> = loader
|
||||
.wam_prelude
|
||||
.indices
|
||||
.get_predicate_skeleton(&compilation_target, &key)
|
||||
.remove_predicate_skeleton(&compilation_target, &key)
|
||||
.map(|skeleton| {
|
||||
loader
|
||||
let mut clause_clause_skeleton = loader
|
||||
.wam_prelude
|
||||
.indices
|
||||
.get_predicate_skeleton(
|
||||
.remove_predicate_skeleton(
|
||||
&clause_clause_compilation_target,
|
||||
&(atom!("$clause"), 2),
|
||||
)
|
||||
.map(|clause_clause_skeleton| {
|
||||
skeleton
|
||||
.core
|
||||
.clause_clause_locs
|
||||
.iter()
|
||||
.map(|clause_clause_loc| {
|
||||
clause_clause_skeleton
|
||||
.target_pos_of_clause_clause_loc(*clause_clause_loc)
|
||||
.unwrap()
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
.unwrap()
|
||||
})
|
||||
.unwrap();
|
||||
).unwrap();
|
||||
|
||||
loader
|
||||
.wam_prelude
|
||||
let result = skeleton.core
|
||||
.clause_clause_locs
|
||||
.iter()
|
||||
.map(|clause_clause_loc| {
|
||||
clause_clause_skeleton
|
||||
.target_pos_of_clause_clause_loc(*clause_clause_loc)
|
||||
.unwrap()
|
||||
})
|
||||
.collect();
|
||||
|
||||
loader.add_extensible_predicate(
|
||||
key,
|
||||
skeleton,
|
||||
compilation_target,
|
||||
);
|
||||
|
||||
loader.add_extensible_predicate(
|
||||
(atom!("$clause"), 2),
|
||||
clause_clause_skeleton,
|
||||
clause_clause_compilation_target,
|
||||
);
|
||||
|
||||
result
|
||||
}).unwrap();
|
||||
|
||||
loader.wam_prelude
|
||||
.indices
|
||||
.remove_predicate_skeleton(&compilation_target, &key);
|
||||
|
||||
@@ -2008,15 +2017,6 @@ impl Machine {
|
||||
|
||||
code_index.set(IndexPtr::Undefined);
|
||||
|
||||
/*
|
||||
loader
|
||||
.wam_prelude
|
||||
.indices
|
||||
.get_predicate_skeleton_mut(&compilation_target, &key)
|
||||
.map(|skeleton| skeleton.reset());
|
||||
|
||||
*/
|
||||
|
||||
loader.payload.compilation_target = clause_clause_compilation_target;
|
||||
|
||||
while let Some(target_pos) = clause_clause_target_poses.pop() {
|
||||
@@ -2076,7 +2076,7 @@ impl Machine {
|
||||
// the global clock is incremented after each retraction.
|
||||
LiveLoadAndMachineState::machine_st(&mut loader.payload).global_clock += 1;
|
||||
|
||||
let target_pos = match loader.wam_prelude.indices.get_predicate_skeleton(
|
||||
let target_pos = match loader.wam_prelude.indices.get_predicate_skeleton_mut(
|
||||
&clause_clause_compilation_target,
|
||||
&(atom!("$clause"), 2),
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user