#ifndef MOLECULAR_DEPTH_ITERATOR_H
#define MOLECULAR_DEPTH_ITERATOR_H

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

#ifndef INCLUDED_STACK
#include <stack>
#define INCLUDED_STACK
#endif

namespace MM
{

class Molecular_depth_iterator : public Molecular_iterator
{
    std::stack <Atom*>      stack_;

public:    
    Molecular_depth_iterator (Atom & root_atom);

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

private:
    void            find_neighbours (Atom *);
};

}//MM

#endif //MOLECULAR_DEPTH_ITERATOR_H
