pub trait Representation:
Send
+ Sync
+ Debug {
// Required methods
fn init(name: &Name, symtab: &SymbolTable) -> Option<Self>
where Self: Sized;
fn variable_name(&self) -> &Name;
fn value_down(
&self,
value: Literal,
) -> Result<BTreeMap<Name, Literal>, ApplicationError>;
fn value_up(
&self,
values: &BTreeMap<Name, Literal>,
) -> Result<Literal, ApplicationError>;
fn expression_down(
&self,
symtab: &SymbolTable,
) -> Result<BTreeMap<Name, Expression>, ApplicationError>;
fn declaration_down(&self) -> Result<Vec<Declaration>, ApplicationError>;
fn repr_name(&self) -> &str;
fn box_clone(&self) -> Box<dyn Representation>;
}
Required Methods§
Sourcefn init(name: &Name, symtab: &SymbolTable) -> Option<Self>where
Self: Sized,
fn init(name: &Name, symtab: &SymbolTable) -> Option<Self>where
Self: Sized,
Creates a representation object for the given name.
Sourcefn variable_name(&self) -> &Name
fn variable_name(&self) -> &Name
The variable being represented.
Sourcefn value_down(
&self,
value: Literal,
) -> Result<BTreeMap<Name, Literal>, ApplicationError>
fn value_down( &self, value: Literal, ) -> Result<BTreeMap<Name, Literal>, ApplicationError>
Given an assignment for self
, creates assignments for its representation variables.
Sourcefn value_up(
&self,
values: &BTreeMap<Name, Literal>,
) -> Result<Literal, ApplicationError>
fn value_up( &self, values: &BTreeMap<Name, Literal>, ) -> Result<Literal, ApplicationError>
Given assignments for its representation variables, creates an assignment for self
.
Sourcefn expression_down(
&self,
symtab: &SymbolTable,
) -> Result<BTreeMap<Name, Expression>, ApplicationError>
fn expression_down( &self, symtab: &SymbolTable, ) -> Result<BTreeMap<Name, Expression>, ApplicationError>
Returns Expression
s representing each representation variable.
Sourcefn declaration_down(&self) -> Result<Vec<Declaration>, ApplicationError>
fn declaration_down(&self) -> Result<Vec<Declaration>, ApplicationError>
Creates Declaration
s for the representation variables of self
.
Sourcefn box_clone(&self) -> Box<dyn Representation>
fn box_clone(&self) -> Box<dyn Representation>
Makes a clone of self
into a Representation
trait object.