- Added iterators.

- More space in encryption notation for better readability.
This commit is contained in:
ccremers 2006-03-10 14:48:40 +00:00
parent 2280187b32
commit 895852de89
3 changed files with 56 additions and 2 deletions

View File

@ -361,6 +361,55 @@ valid_binding (Binding b)
return false;
}
//! Iterate over valid bindings
/**
* Iterator should return true to proceed
*/
int
iterate_bindings (int (*func) (Binding b))
{
List bl;
for (bl = sys->bindings; bl != NULL; bl = bl->next)
{
Binding b;
b = (Binding) bl->data;
if (valid_binding (b))
{
if (!func (b))
{
return false;
}
}
}
return true;
}
//! Iterate over preceding bindings (this does not include stuff bound to the same destination)
/**
* Iterator should return true to proceed
*/
int
iterate_preceding_bindings (const int run, const int ev,
int (*func) (Binding b))
{
int precs (Binding b)
{
if (isDependEvent (b->run_to, b->ev_to, run, ev))
{
return func (b);
}
return true;
}
return iterate_bindings (precs);
}
//! Check for unique origination
/*
* Contrary to a previous version, we simply check for unique origination.
@ -435,6 +484,7 @@ unique_origination ()
return true;
}
//! Prune invalid state w.r.t. <=C minimal requirement
/**
* Intuition says this can be done a lot more efficient. Luckily this is the prototype.

View File

@ -43,6 +43,10 @@ int binding_block (Binding b);
int binding_unblock (Binding b);
int labels_ordered (Termmap runs, Termlist labels);
int iterate_bindings (int (*func) (Binding b));
int iterate_preceding_bindings (const int run, const int ev,
int (*func) (Binding b));
int bindings_c_minimal ();
#endif

View File

@ -364,9 +364,9 @@ termPrint (Term term)
else
{
/* normal encryption */
eprintf ("{");
eprintf ("{ ");
termTuplePrint (TermOp (term));
eprintf ("}");
eprintf (" }");
termPrint (TermKey (term));
}
}