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