/*
 * Marc Groenewegen, 2023
 */

#include <iostream>
#include <string>
#include <list>


class Event
{
public:
  Event(std::string payload,unsigned int timestamp)
  {
    this->payload=payload;
    this->timestamp=timestamp;
  } // Event()
  void setPayload(std::string payload) { this->payload=payload; }
  void setTimestamp(unsigned int timestamp) { this->timestamp=timestamp; }
  std::string getPayload() { return payload; }
  unsigned int getTimestamp() { return timestamp; }
private:
  std::string payload;
  unsigned int timestamp;
};


int main()
{
  std::list<Event> mylist;
  std::list<Event>::iterator pos;

  Event event("programmeren",5);
  pos = mylist.begin();
  while(pos->getTimestamp() < event.getTimestamp()) ++pos;
  mylist.insert(pos,event);

  event.setPayload("leuk");
  event.setTimestamp(9);
  pos = mylist.begin();
  while(pos->getTimestamp() < event.getTimestamp()) ++pos;
  mylist.insert(pos,event);

  event.setPayload("is");
  event.setTimestamp(6);
  pos = mylist.begin();
  while(pos->getTimestamp() < event.getTimestamp()) ++pos;
  mylist.insert(pos,event);

  // show contents
  for(pos=mylist.begin(); pos!=mylist.end(); ++pos)
    std::cout << pos->getPayload() << std::endl;

  std::cout << "Trying to erase last element" << std::endl;
  if(mylist.size() > 0){
    pos=mylist.end();
    if(pos == mylist.begin()) mylist.erase(pos);
    else {
      --pos;
      mylist.erase(pos);
    } // else
  } // if list not empty

  // show contents
  for(pos=mylist.begin(); pos!=mylist.end(); ++pos)
    std::cout << pos->getPayload() << std::endl;

  return 0;
} // main()

