/*
 * Marc Groenewegen, 2023
 */

#include <iostream>
#include <string>
#include <set>
#include <iterator>
#include <algorithm>


class Event
{
public:
  Event(int timestamp,std::string eventType);
  Event();

  // operator overloading for < operator needed to preserve sorting order
  friend bool operator<(const Event& i, const Event& j)
  {
    return (i.getTimestamp() < j.getTimestamp());
  }

  void set(int ts,std::string type);
  int getTimestamp() const;
  std::string getEventType() const;

private:
  int timestamp;
  std::string eventType;
};


Event::Event(int timestamp,std::string eventType)
{
  this->timestamp=timestamp;
  this->eventType=eventType;
}

Event::Event()
{
}


int Event::getTimestamp() const
{
  return timestamp;
}

std::string Event::getEventType() const
{
  return eventType;
}

void Event::set(int ts,std::string type)
{
  this->timestamp=ts;
  this->eventType=type;
}



int main()
{
std::set<Event> eventSet;
std::set<Event>::iterator setIterator;
Event event;

  event.set(0,"MouseMove-1");
  eventSet.insert(event);
  event.set(2000,"MouseMove-2");
  eventSet.insert(event);
  event.set(20,"Click");
  eventSet.insert(event);
  event.set(200,"Key-1");
  eventSet.insert(event);
  event.set(770,"Key-2");
  eventSet.insert(event);
  event.set(935,"Key-2");
  eventSet.insert(event);
  event.set(1834,"WindowMove");
  eventSet.insert(event);
  event.set(0,"AudioRead");
  eventSet.insert(event);
  event.set(1000,"AudioRead");
  eventSet.insert(event);
  event.set(500,"AudioRead");
  eventSet.insert(event);
  event.set(1500,"AudioRead");
  eventSet.insert(event);
  event.set(2000,"AudioRead");
  eventSet.insert(event);

  std::cout << "Size of the set: " << eventSet.size() << std::endl;

  std::cout << std::endl << "Set's (ordered) contents: " << std::endl;
  setIterator=eventSet.begin();
  while(setIterator != eventSet.end())
  {
    Event blah = *setIterator;
    std::cout << (*setIterator).getTimestamp() << "\t" <<
                 (*setIterator).getEventType() << std::endl;
    setIterator++;
  }
  std::cout << std::endl;


  return 0;
}

