#ifndef OBJECT_H
#define OBJECT_H
#include <multimap.h>
#include <list.h>
#include <dump.h>
#define SIGNAL(x) #x
#define SLOT(x) (Object::Function)&x
#define emit(x) raise(#x)
// standard base class for doing signals and slots
class Object : public Dumpable
{
public:
typedef void (Object::*Function)();
Object();
virtual ~Object();
const char *className() const { return "Object"; }
const char *dump() const { return "{ 0, 0, 0 }"; }
static void connect(Object *sender, const char *signal, Object *receiver, Function func);
void raise(const char *signal);
private:
void disconnect(Object *sender, Object *receiver);
typedef struct { Object *o; int id; } Slot;
MultiMap<Slot> signalMap;
List<Function> slotList;
List<Object*> senderList;
};
#endif // OBJECT_H