From e4b20015a4ee35f1279af4caa983478fa2ff0d4a Mon Sep 17 00:00:00 2001 From: dhuth Date: Mon, 6 Oct 2014 11:56:47 -0600 Subject: Added omega to source --- omega/omega_lib/src/RelVar.cc | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 omega/omega_lib/src/RelVar.cc (limited to 'omega/omega_lib/src/RelVar.cc') diff --git a/omega/omega_lib/src/RelVar.cc b/omega/omega_lib/src/RelVar.cc new file mode 100644 index 0000000..d9b977c --- /dev/null +++ b/omega/omega_lib/src/RelVar.cc @@ -0,0 +1,71 @@ +#include +#include + +namespace omega { + +Variable_ID Rel_Body::get_local(const Variable_ID v) { + Global_Var_ID g; + if (v->kind() == Global_Var) { + g = v->get_global_var(); + if (g->arity()) return get_local(g,v->function_of()); + return get_local(g); + } + if (is_set()) return set_var(v->get_position()); + if (v->kind() == Input_Var) return input_var(v->get_position()); + if (v->kind() == Output_Var) return output_var(v->get_position()); + assert(0 && "Can only get local for variable with global scope"); + exit(1); + return 0; +} + +// +// Find or declare global variable. +// If the VarID does not exist, it is created. Otherwise it's returned. +// Note that this version now works only for 0-ary functions. +// +Variable_ID Rel_Body::get_local(const Global_Var_ID G) { + assert(G->arity() == 0); + for(Variable_Iterator i(Symbolic); i; i++) + if ((*i)->get_global_var() == G) + return (*i); + + Variable_ID v = G->get_local(); + Symbolic.append(v); + return v; +} + + +Variable_ID Rel_Body::get_local(const Global_Var_ID G, Argument_Tuple of) { + assert(G->arity() == 0 || of == Input_Tuple || of == Output_Tuple); + + for(Variable_Iterator i = Symbolic; i; i++) + if ((*i)->get_global_var() == G && (G->arity() == 0 || + of == (*i)->function_of())) + return (*i); + + Variable_ID V = G->get_local(of); + Symbolic.append(V); + return V; +} + + +bool Rel_Body::has_local(const Global_Var_ID G) { + assert(G->arity() == 0); + for(Variable_Iterator i = Symbolic; i; i++) + if ((*i)->get_global_var() == G) + return true; + return false; +} + + +bool Rel_Body::has_local(const Global_Var_ID G, Argument_Tuple of) { + assert(G->arity() == 0 || of == Input_Tuple || of == Output_Tuple); + + for(Variable_Iterator i = Symbolic; i; i++) + if ((*i)->get_global_var() == G && (G->arity() == 0 || + of == (*i)->function_of())) + return true; + return false; +} + +} // namespace -- cgit v1.2.3-70-g09d2