00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VAUCANSON_AUTOMATA_IMPLEMENTATION_BMIG_VGRAPH_CONTAINER_HXX
00019 # define VAUCANSON_AUTOMATA_IMPLEMENTATION_BMIG_VGRAPH_CONTAINER_HXX
00020
00021 # include <vaucanson/automata/implementation/bmig/vgraph_container.hh>
00022
00023 namespace vcsn
00024 {
00025 namespace bmig
00026 {
00027
00028
00029
00030
00031
00032 # define TPARAM \
00033 template<typename EdgesIterator, typename GraphData, typename HTransition>
00034
00035
00036
00037
00038
00039 # define ITERATOR \
00040 VGraphContainerIterator<EdgesIterator, GraphData, HTransition>
00041
00042 TPARAM
00043 ITERATOR::VGraphContainerIterator(const GraphData& c,
00044 EdgesIterator i)
00045 : container_(c)
00046 {
00047 if (i != c.end())
00048 {
00049 it_ = i++;
00050 next_ = i;
00051 }
00052 else
00053 {
00054 it_ = i;
00055 next_ = i;
00056 }
00057 }
00058
00059
00060 TPARAM
00061 HTransition
00062 ITERATOR::operator*() const
00063 {
00064 return HTransition(it_);
00065 }
00066
00067 TPARAM
00068 bool
00069 ITERATOR::operator==(const VGraphContainerIterator& v) const
00070 {
00071 return v.it_ == it_;
00072 }
00073
00074 TPARAM
00075 bool
00076 ITERATOR::operator!=(const VGraphContainerIterator& v) const
00077 {
00078 return v.it_ != it_;
00079 }
00080
00081 TPARAM
00082 ITERATOR&
00083 ITERATOR::operator++()
00084 {
00085 if (next_ != container_.end())
00086 it_ = next_++;
00087 else
00088 it_ = next_;
00089 return *this;
00090 }
00091
00092 TPARAM
00093 ITERATOR
00094 ITERATOR::operator++(int)
00095 {
00096 iterator tmp = it_;
00097 if (next_ != container_.end())
00098 it_ = next_++;
00099 else
00100 it_ = next_;
00101 return ITERATOR(container_, tmp);
00102 }
00103
00104
00105
00106
00107
00108 # define CONTAINER \
00109 VGraphContainer<EdgesIterator, GraphData, HTransition>
00110
00111 TPARAM
00112 CONTAINER::VGraphContainer(const GraphData& g)
00113 : graph_(g)
00114 {
00115 }
00116
00117 TPARAM
00118 typename CONTAINER::iterator
00119 CONTAINER::begin() const
00120 {
00121 return ITERATOR(graph_, graph_.begin());
00122 }
00123
00124 TPARAM
00125 typename CONTAINER::iterator
00126 CONTAINER::end() const
00127 {
00128 return ITERATOR(graph_, graph_.end());
00129 }
00130
00131 TPARAM
00132 size_t
00133 CONTAINER::size() const
00134 {
00135 return graph_.size();
00136 }
00137
00138 }
00139 }
00140
00141 # undef ITERATOR
00142 # undef CONTAINER
00143 # undef BMIGRAPH
00144 #endif // !VAUCANSON_AUTOMATA_IMPLEMENTATION_BMIG_VGRAPH_CONTAINER_HXX
00145