fetish_lib/
term_pointer.rs1use std::cmp::*;
2use std::fmt::*;
3use std::hash::*;
4use crate::type_id::*;
5use crate::displayable_with_state::*;
6use crate::interpreter_state::*;
7use crate::term_index::*;
8use crate::primitive_term_pointer::*;
9use crate::nonprimitive_term_pointer::*;
10
11#[derive(Copy, Clone, PartialEq, Hash, Eq)]
14pub struct TermPointer {
15 pub type_id : TypeId,
16 pub index : TermIndex
17}
18
19impl DisplayableWithState for TermPointer {
20 fn display(&self, state : &InterpreterState) -> String {
21 let term = state.get(*self);
22 term.display(state)
23 }
24}
25
26impl From<NonPrimitiveTermPointer> for TermPointer {
27 fn from(term_ptr : NonPrimitiveTermPointer) -> Self {
28 TermPointer {
29 type_id : term_ptr.type_id,
30 index : TermIndex::NonPrimitive(term_ptr.index)
31 }
32 }
33}
34impl From<PrimitiveTermPointer> for TermPointer {
35 fn from(term_ptr : PrimitiveTermPointer) -> Self {
36 TermPointer {
37 type_id : term_ptr.type_id,
38 index : TermIndex::Primitive(term_ptr.index)
39 }
40 }
41}