+class CoreExport RemoteUser : public User
+{
+ public:
+ RemoteUser(const std::string& uid, Server* srv) : User(uid, srv, USERTYPE_REMOTE)
+ {
+ }
+ virtual void SendText(const std::string& line);
+};
+
+class CoreExport FakeUser : public User
+{
+ public:
+ FakeUser(const std::string& uid, Server* srv) : User(uid, srv, USERTYPE_SERVER)
+ {
+ nick = srv->GetName();
+ }
+
+ FakeUser(const std::string& uid, const std::string& sname, const std::string& sdesc)
+ : User(uid, new Server(sname, sdesc), USERTYPE_SERVER)
+ {
+ nick = sname;
+ }
+
+ virtual CullResult cull();
+ virtual void SendText(const std::string& line);
+ virtual const std::string& GetFullHost();
+ virtual const std::string& GetFullRealHost();
+};
+
+/* Faster than dynamic_cast */
+/** Is a local user */
+inline LocalUser* IS_LOCAL(User* u)
+{
+ return u->usertype == USERTYPE_LOCAL ? static_cast<LocalUser*>(u) : NULL;
+}
+/** Is a remote user */
+inline RemoteUser* IS_REMOTE(User* u)
+{
+ return u->usertype == USERTYPE_REMOTE ? static_cast<RemoteUser*>(u) : NULL;
+}
+/** Is a server fakeuser */
+inline FakeUser* IS_SERVER(User* u)
+{
+ return u->usertype == USERTYPE_SERVER ? static_cast<FakeUser*>(u) : NULL;
+}
+
+inline bool User::IsModeSet(ModeHandler* mh)
+{
+ char m = mh->GetModeChar();
+ return (modes[m-65]);
+}
+
+inline bool User::IsModeSet(UserModeReference& moderef)
+{
+ if (!moderef)
+ return false;
+ return IsModeSet(*moderef);
+}
+
+inline void User::SetMode(ModeHandler* mh, bool value)
+{
+ char m = mh->GetModeChar();
+ modes[m-65] = value;
+}