00001 #ifndef ERIS_ENTITY_REF_H
00002 #define ERIS_ENTITY_REF_H
00003
00004 #include <sigc++/trackable.h>
00005 #include <sigc++/signal.h>
00006
00007 namespace Eris
00008 {
00009
00010 class Entity;
00011 class View;
00012
00013 class EntityRef : public sigc::trackable
00014 {
00015 public:
00016 EntityRef() : m_inner(NULL)
00017 {
00018 }
00019
00020 EntityRef(View* v, const std::string& eid);
00021
00022 EntityRef(Entity*);
00023
00024 ~EntityRef()
00025 {
00026 }
00027
00028 EntityRef(const EntityRef& ref);
00029
00030 EntityRef& operator=(const EntityRef& ref);
00031
00032 const Entity& operator*() const
00033 {
00034 return *m_inner;
00035 }
00036
00037 Entity& operator*()
00038 {
00039 return *m_inner;
00040 }
00041
00042 const Entity* operator->() const
00043 {
00044 return m_inner;
00045 }
00046
00047 Entity* operator->()
00048 {
00049 return m_inner;
00050 }
00051
00052 Entity* get() const
00053 {
00054 return m_inner;
00055 }
00056
00057 operator bool() const
00058 {
00059 return (m_inner != NULL);
00060 }
00061
00062 bool operator!() const
00063 {
00064 return (m_inner == NULL);
00065 }
00066
00067 bool operator==(const EntityRef& e) const
00068 {
00069 return (m_inner == e.m_inner);
00070 }
00071
00072 bool operator==(const Entity* e) const
00073 {
00074 return (m_inner == e);
00075 }
00076
00077 bool operator<(const EntityRef& e) const
00078 {
00079 return (m_inner < e.m_inner);
00080 }
00081
00082 sigc::signal0<void> Changed;
00083 private:
00084 void onEntityDeleted();
00085 void onEntitySeen(Entity* e);
00086
00087 Entity* m_inner;
00088 };
00089
00090 }
00091
00092 #endif // of ERIS_ENTITY_REF_H