      1  #ifndef MAILBOX_H
      2  #define MAILBOX_H
      3
      4  using namespace std;
      5
      6  #include <string>
      7  #include <queue>
      8
      9  class Message;
     10
     11  /**
     12     A mailbox contains messages that can be listed, kept, or discarded
     13  */
     14  class Mailbox
     15  {
     16  public:
     17     /**
     18        Create a mailbox object
     19        @param a_passcode passcode number
     20        @param a_greeting greeting string
     21     */
     22     Mailbox(string a_passcode, string a_greeting);
     23
     24     /**
     25        Check if the passcode is correct
     26        @param a_passcode a passcode to check
     27     */
     28     bool check_passcode(string a_passcode) const;
     29
     30     /**
     31        Add a message to the mailbox
     32        @param a_message the message to be added
     33     */
     34     void add_message(Message* a_message);
     35
     36     /**
     37        Get the current message
     38        @return the current message
     39     */
     40     Message* get_current_message() const;
     41
     42     /**
     43        Remove the current message from the mailbox
     44     */
     45     void remove_current_message();
     46
     47     /**
     48        Save the current message
     49     */
     50     void save_current_message();
     51
     52     /**
     53        Change the mailbox's greeting
     54        @param new_greeting the new greeting string
     55     */
     56     void set_greeting(string new_greeting);
     57
     58     /**
     59        Change mailbox's passcode
     60        @param new_passcode the new passcode
     61     */
     62     void set_passcode(string new_passcode);
     63
     64     /**
     65        Get the mailbox's greeting
     66        @return the greeting
     67     */
     68     string get_greeting() const;
     69  private:
     70     queue<Message*> new_messages;
     71     queue<Message*> kept_messages;
     72     string greeting;
     73     string passcode;
     74  };
     75
     76  inline Mailbox::Mailbox(string a_passcode, string a_greeting)
     77     : passcode(a_passcode), greeting(a_greeting)
     78  {
     79  }
     80
     81  inline bool Mailbox::check_passcode(string a_passcode) const
     82  {
     83     return passcode == a_passcode;
     84  }
     85
     86  inline void Mailbox::add_message(Message* a_message)
     87  {
     88     new_messages.push(a_message);
     89  }
     90
     91  inline void Mailbox::set_greeting(string new_greeting)
     92  {
     93     greeting = new_greeting;
     94  }
     95
     96  inline void Mailbox::set_passcode(string new_passcode)
     97  {
     98     passcode = new_passcode;
     99  }
    100
    101  inline string Mailbox::get_greeting() const
    102  {
    103     return greeting;
    104  }
    105
    106  #endif