
#include "ctkEvent.h"


class ctkEventPrivate {

public:

  ctkEventPrivate(const QString& topic, const ctkLDAPSearchFilter::Dictionary& properties)
    : ref(1), topic(topic), properties(properties)
  {

  }

  QAtomicInt ref;
  const QString topic;
  const ctkLDAPSearchFilter::Dictionary properties;

};


ctkEvent::ctkEvent(const QString& topic, const ctkLDAPSearchFilter::Dictionary& properties)
  : d(new ctkEventPrivate(topic, properties))
{

}

/*
 * This is fast thanks to implicit sharing
 */
ctkEvent::ctkEvent(const ctkEvent &event)
  : d(event.d)
{
  d->ref.ref();
}

ctkEvent::~ctkEvent()
{
  if (!d->ref.deref())
    delete d;
}

bool ctkEvent::operator==(const ctkEvent& other) const
{
  if (d == other.d)
    return true;

  if (d->topic == other.d->topic &&
      d->properties == other.d->properties)
    return true;

  return false;
}

QVariant ctkEvent::property(const QString& name) const
{
  return d->properties[name];
}

QStringList ctkEvent::propertyNames() const
{
  return d->properties.keys();
}

const QString& ctkEvent::topic() const
{
  return d->topic;
}

bool ctkEvent::matches(const ctkLDAPSearchFilter& filter) const
{
  Q_UNUSED(filter)
  // TODO
  return true;
}
