#ifndef MOLECULAR_WIDTH_ITERATOR_H
#define MOLECULAR_WIDTH_ITERATOR_H

#ifndef MOLECULAR_ITERATOR_H
#include "Molecular_iterator.h"
#endif

#ifndef INCLUDED_QUEUE
#include <queue>
#define INCLUDED_QUEUE
#endif

namespace MM
{

class Molecular_width_iterator : public Molecular_iterator
{
protected:
    std::queue <Atom*>      queue_;

public:    
    explicit Molecular_width_iterator (Atom & root_atom);

    Atom &          current();
    const Atom &    current() const;
    void            next ();
    bool            is_valid ();

private:
    void            find_neighbours (Atom *);
};

}//MM

#endif //MOLECULAR_WIDTH_ITERATOR_H
