Go to the documentation of this file.00001 #define wali_nwa_query_details_GENESIS_HPP
00002
00003 #ifndef wali_nwa_query_details_GENESIS_HPP
00004 #define wali_nwa_query_details_GENESIS_HPP
00005
00006 #include "opennwa/Nwa.hpp"
00007 #include "opennwa/query/details/iterators.hpp"
00008
00009 #include <utility>
00010
00011 namespace opennwa
00012 {
00013 namespace query
00014 {
00015 namespace details
00016 {
00017
00018 namespace genesis
00019 {
00020
00021
00022
00023 struct ReturnTransitionToFakeCallTransformer
00024 {
00025 NWA::Call operator()(NWA::Return const & r) const
00026 {
00027 return NWA::Call(r.first, r.third, r.fourth);
00028 }
00029 };
00030
00031
00032 struct FromCallTransitions
00033 {
00034 typedef NWA::CallIterator Iterator;
00035
00036 std::pair<Iterator, Iterator> getTransitions(NWA const & nwa) const
00037 {
00038 return std::make_pair(nwa.beginCallTrans(), nwa.endCallTrans());
00039 }
00040 };
00041
00042
00043 struct FromInternalTransitions
00044 {
00045 typedef NWA::InternalIterator Iterator;
00046
00047 std::pair<Iterator, Iterator> getTransitions(NWA const & nwa) const
00048 {
00049 return std::make_pair(nwa.beginInternalTrans(), nwa.endInternalTrans());
00050 }
00051 };
00052
00053
00054 struct FromReturnTransitions
00055 {
00056 typedef NWA::ReturnIterator Iterator;
00057
00058 std::pair<Iterator, Iterator> getTransitions(NWA const & nwa) const
00059 {
00060 return std::make_pair(nwa.beginReturnTrans(), nwa.endReturnTrans());
00061 }
00062 };
00063
00064
00065 struct FromAllTransitions
00066 {
00067 typedef iterators::iterator_base_wrapper<NWA::Call> _base_iterator;
00068 typedef iterators::iterator_sequence<_base_iterator> Iterator;
00069
00070 std::pair<Iterator, Iterator> getTransitions(NWA const & nwa) const
00071 {
00072 Iterator sequence;
00073
00074
00075 iterators::cplusplus_iterator_adapter<NWA::CallIterator>
00076 callBegin(nwa.beginCallTrans()),
00077 callEnd(nwa.endCallTrans());
00078
00079 sequence.append_range(_base_iterator(callBegin),
00080 _base_iterator(callEnd));
00081
00082
00083 iterators::cplusplus_iterator_adapter<NWA::InternalIterator>
00084 internalBegin(nwa.beginInternalTrans()),
00085 internalEnd(nwa.endInternalTrans());
00086
00087 sequence.append_range(_base_iterator(internalBegin),
00088 _base_iterator(internalEnd));
00089
00090
00091
00092 return std::make_pair(sequence, Iterator());
00093 }
00094 };
00095
00096
00097 }
00098 }
00099 }
00100 }
00101
00102
00103
00104
00105
00106
00107
00108 #endif