summaryrefslogtreecommitdiff
path: root/graphs/cpp/caste_or_cast/queen.hh
blob: 9192f4c378182e448fcdce7bea22655cbfbc2a51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
};