aboutsummaryrefslogtreecommitdiffstats
path: root/src/diagram/Structogram.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/diagram/Structogram.hpp')
-rw-r--r--src/diagram/Structogram.hpp53
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 */