// file : CCF/IDL2/Traversal/Operation.tpp // author : Boris Kolpackov // cvs-id : $Id$ namespace CCF { namespace IDL2 { namespace Traversal { // ParameterTemplate // // template void ParameterTemplate:: traverse (T& p) { pre (p); belongs (p); name (p); post (p); } template void ParameterTemplate:: pre (T&) { } template void ParameterTemplate:: belongs (T& p, EdgeDispatcherBase& d) { d.traverse (p.belongs ()); } template void ParameterTemplate:: belongs (T& p) { belongs (p, this->edge_traverser ()); } template void ParameterTemplate:: name (T&) { } template void ParameterTemplate:: post (T&) { } // OperationTemplate // // template void OperationTemplate:: traverse (T& o) { pre (o); returns (o); name (o); receives (o); raises (o); post (o); } template void OperationTemplate:: pre (T&) { } template void OperationTemplate:: returns (T& o, EdgeDispatcherBase& d) { d.traverse (o.returns ()); } template void OperationTemplate:: returns (T& o) { returns (o, this->edge_traverser ()); } template void OperationTemplate:: name (T&) { } template void OperationTemplate:: receives (T& o, EdgeDispatcherBase& d) { iterate_and_traverse (o.receives_begin (), o.receives_end (), d); } template void OperationTemplate:: receives (T& o) { typename T::ReceivesIterator b (o.receives_begin ()), e (o.receives_end ()); if (b != e) { receives_pre (o); iterate_and_traverse ( b, e, this->edge_traverser (), *this, &OperationTemplate::comma, o); receives_post (o); } else { receives_none (o); } } template void OperationTemplate:: receives_pre (T&) { } template void OperationTemplate:: receives_post (T&) { } template void OperationTemplate:: receives_none (T&) { } template void OperationTemplate:: raises (T& o, EdgeDispatcherBase& d) { iterate_and_traverse (o.raises_begin (), o.raises_end (), d); } template void OperationTemplate:: raises (T& o) { typename T::RaisesIterator b (o.raises_begin ()), e (o.raises_end ()); if (b != e) { raises_pre (o); iterate_and_traverse ( b, e, this->edge_traverser (), *this, &OperationTemplate::comma, o); raises_post (o); } else { raises_none (o); } } template void OperationTemplate:: raises_pre (T&) { } template void OperationTemplate:: raises_post (T&) { } template void OperationTemplate:: raises_none (T&) { } template void OperationTemplate:: post (T&) { } template void OperationTemplate:: comma (T&) { } } } }