summaryrefslogtreecommitdiff
path: root/graphs/cpp/caste_or_cast/queen.hh
diff options
context:
space:
mode:
Diffstat (limited to 'graphs/cpp/caste_or_cast/queen.hh')
-rw-r--r--graphs/cpp/caste_or_cast/queen.hh32
1 files changed, 32 insertions, 0 deletions
diff --git a/graphs/cpp/caste_or_cast/queen.hh b/graphs/cpp/caste_or_cast/queen.hh
new file mode 100644
index 0000000..9192f4c
--- /dev/null
+++ b/graphs/cpp/caste_or_cast/queen.hh
@@ -0,0 +1,32 @@
+#pragma once
+
+#include <queue>
+
+#include "ant.hh"
+
+//! forward declaration
+class Worker;
+
+/*
+ * Class representing the Queen Caste
+ */
+class Queen : public Ant
+{
+public:
+ //! inherit Ant Constructors
+ using Ant::Ant;
+ //! the queen will create either a new Provider or Nurturer and push it to
+ //! eggs_queue_
+ void layEgg();
+
+private:
+ /*!
+ * We should not modify the Colony::workers vector while we
+ * iterate over it (because in some cases it can lead to undefined behavior)
+ * To solve this problem, we use a queue so we can save the eggs that the
+ * queen lay in one round (i.e. one call of Colony::manageAnts) and insert
+ * them in workers_ vector after we finished iterating.
+ * */
+ std::queue<std::shared_ptr<Worker>> eggs_queue_;
+ friend class Colony;
+};