diff options
Diffstat (limited to 'src/diagram/Structogram.hpp')
-rw-r--r-- | src/diagram/Structogram.hpp | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/src/diagram/Structogram.hpp b/src/diagram/Structogram.hpp index 2234142..9318ee4 100644 --- a/src/diagram/Structogram.hpp +++ b/src/diagram/Structogram.hpp @@ -10,21 +10,60 @@ #include <iostream> #include <list> -#include "../diagram/Statement.h" + +#include "Statement.hpp" namespace samb { -/* object that holds statements */ +/* A Structogram is a Nassi-Schneiderman diagram, in this implementation it is + * simply and iterable object that holds statements. + * + * The first statement inside a structogram (m_head) is a SCOPE + * statement that holds the entire program inside it. + */ class Structogram { -private: - std::list<Statement> m_statements; - std::string m_title; - public: + /* forward only iterator */ + class iterator { + public: + iterator(Statement::pointer first); + ~iterator(); + + iterator& operator++(); + iterator& operator++(int); + + bool operator==(const iterator& other) const; + bool operator!=(const iterator& other) const; + Statement& operator*() const; + Statement::pointer operator->() const; + + private: + Statement::pointer m_current; + }; + Structogram(std::string title); virtual ~Structogram(); - const std::list<Statement>& getStatements() const; + std::size_t size() const; + + // cannot be implemented because iter is forward only +// iterator insert(iterator it, Statement::pointer statement); +// iterator erase(iterator it); + + iterator insert_after(iterator it, Statement::pointer statement); + iterator erase_after(iterator it); + + /* iterator */ + iterator begin() const; + const iterator end() const; + const Statement& operator[](const Statement& it) = delete; + +private: + std::size_t m_size; + std::string m_title; + + Statement::pointer m_head; + Statement::pointer m_tail; }; } /* namespace structograms */ |