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_HH
00019 # define VAUCANSON_AUTOMATA_IMPLEMENTATION_BMIG_VGRAPH_CONTAINER_HH
00020
00021 #include <iterator>
00022
00023 namespace vcsn
00024 {
00025 namespace bmig
00026 {
00027 template<typename EdgesIterator, typename GraphData, typename HTransition>
00028 class VGraphContainerIterator
00029 {
00030 public:
00031 typedef EdgesIterator iterator;
00032 VGraphContainerIterator(const GraphData& c, EdgesIterator i);
00033 HTransition operator*() const;
00034
00035 bool operator==(const VGraphContainerIterator& v) const;
00036 bool operator!=(const VGraphContainerIterator& v) const;
00037 VGraphContainerIterator& operator++();
00038 VGraphContainerIterator operator++(int);
00039
00040 private:
00041 iterator it_;
00042 iterator next_;
00043 const GraphData& container_;
00044 };
00045
00046 template<typename EdgesIterator, typename GraphData, typename HTransition>
00047 class VGraphContainer
00048 {
00049 public:
00050 typedef VGraphContainerIterator<EdgesIterator, GraphData, HTransition> iterator;
00051 typedef iterator const_iterator;
00052
00053 VGraphContainer(const GraphData& g);
00054
00055 iterator begin() const;
00056 iterator end() const;
00057
00058 size_t size() const;
00059
00060 private:
00061 const GraphData& graph_;
00062 };
00063 }
00064 }
00065
00066 # include <vaucanson/automata/implementation/bmig/vgraph_container.hxx>
00067
00068 #endif // !VAUCANSON_AUTOMATA_IMPLEMENTATION_BMIG_VGRAPH_CONTAINER_HH