From a434baed9154d90ad0dfd31c71a463fb8300bfd8 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 1 Oct 2012 18:50:29 -0400 Subject: Allow modules to store data in their own databases. --- src/access.cpp | 7 +------ src/bots.cpp | 7 +------ src/memoserv.cpp | 7 +------ src/nickalias.cpp | 7 +------ src/nickcore.cpp | 7 +------ src/operserv.cpp | 9 ++------- src/regchannel.cpp | 35 ++++++----------------------------- src/serialize.cpp | 23 +++++++++++++++++++++-- 8 files changed, 34 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/access.cpp b/src/access.cpp index 6ff842fd8..6b22ba871 100644 --- a/src/access.cpp +++ b/src/access.cpp @@ -90,7 +90,7 @@ const std::list& AccessProvider::GetProviders() return providers; } -ChanAccess::ChanAccess(AccessProvider *p) : provider(p) +ChanAccess::ChanAccess(AccessProvider *p) : Serializable("ChanAccess"), provider(p) { } @@ -98,11 +98,6 @@ ChanAccess::~ChanAccess() { } -const Anope::string ChanAccess::serialize_name() const -{ - return "ChanAccess"; -} - Serialize::Data ChanAccess::serialize() const { Serialize::Data data; diff --git a/src/bots.cpp b/src/bots.cpp index ffe814351..38f37c41d 100644 --- a/src/bots.cpp +++ b/src/bots.cpp @@ -21,7 +21,7 @@ serialize_checker BotListByNick("BotInfo"); serialize_checker BotListByUID("BotInfo"); -BotInfo::BotInfo(const Anope::string &nnick, const Anope::string &nuser, const Anope::string &nhost, const Anope::string &nreal, const Anope::string &bmodes) : User(nnick, nuser, nhost, "", "", Me, nreal, Anope::CurTime, "", ts6_uid_retrieve()), Flags(BotFlagString), botmodes(bmodes) +BotInfo::BotInfo(const Anope::string &nnick, const Anope::string &nuser, const Anope::string &nhost, const Anope::string &nreal, const Anope::string &bmodes) : User(nnick, nuser, nhost, "", "", Me, nreal, Anope::CurTime, "", ts6_uid_retrieve()), Flags(BotFlagString), Serializable("BotInfo"), botmodes(bmodes) { this->lastmsg = this->created = Anope::CurTime; this->introduced = false; @@ -71,11 +71,6 @@ BotInfo::~BotInfo() BotListByUID->erase(this->uid); } -const Anope::string BotInfo::serialize_name() const -{ - return "BotInfo"; -} - Serialize::Data BotInfo::serialize() const { Serialize::Data data; diff --git a/src/memoserv.cpp b/src/memoserv.cpp index c2e1de939..61ea73b72 100644 --- a/src/memoserv.cpp +++ b/src/memoserv.cpp @@ -18,12 +18,7 @@ #include "users.h" #include "account.h" -Memo::Memo() : Flags(MemoFlagStrings) { } - -const Anope::string Memo::serialize_name() const -{ - return "Memo"; -} +Memo::Memo() : Flags(MemoFlagStrings), Serializable("Memo") { } Serialize::Data Memo::serialize() const { diff --git a/src/nickalias.cpp b/src/nickalias.cpp index 6db16c44c..3137a827a 100644 --- a/src/nickalias.cpp +++ b/src/nickalias.cpp @@ -29,7 +29,7 @@ static nickservheld_map NickServHelds; * @param nick The nick * @param nickcore The nickcore for this nick */ -NickAlias::NickAlias(const Anope::string &nickname, NickCore* nickcore) : Flags(NickNameFlagStrings) +NickAlias::NickAlias(const Anope::string &nickname, NickCore* nickcore) : Flags(NickNameFlagStrings), Serializable("NickAlias") { if (nickname.empty()) throw CoreException("Empty nick passed to NickAlias constructor"); @@ -240,11 +240,6 @@ time_t NickAlias::GetVhostCreated() const return this->vhost_created; } -const Anope::string NickAlias::serialize_name() const -{ - return "NickAlias"; -} - Serialize::Data NickAlias::serialize() const { Serialize::Data data; diff --git a/src/nickcore.cpp b/src/nickcore.cpp index de64a7e9e..4c3a774b1 100644 --- a/src/nickcore.cpp +++ b/src/nickcore.cpp @@ -19,7 +19,7 @@ serialize_checker NickCoreList("NickCore"); /** Default constructor * @param display The display nick */ -NickCore::NickCore(const Anope::string &coredisplay) : Flags(NickCoreFlagStrings) +NickCore::NickCore(const Anope::string &coredisplay) : Flags(NickCoreFlagStrings), Serializable("NickCore") { if (coredisplay.empty()) throw CoreException("Empty display passed to NickCore constructor"); @@ -60,11 +60,6 @@ NickCore::~NickCore() } } -const Anope::string NickCore::serialize_name() const -{ - return "NickCore"; -} - Serialize::Data NickCore::serialize() const { Serialize::Data data; diff --git a/src/operserv.cpp b/src/operserv.cpp index de49c55b9..b339a697f 100644 --- a/src/operserv.cpp +++ b/src/operserv.cpp @@ -45,7 +45,7 @@ void XLine::InitRegex() } } -XLine::XLine(const Anope::string &mask, const Anope::string &reason, const Anope::string &uid) : Mask(mask), Created(0), Expires(0), Reason(reason), UID(uid) +XLine::XLine(const Anope::string &mask, const Anope::string &reason, const Anope::string &uid) : Serializable("XLine"), Mask(mask), Created(0), Expires(0), Reason(reason), UID(uid) { regex = NULL; manager = NULL; @@ -53,7 +53,7 @@ XLine::XLine(const Anope::string &mask, const Anope::string &reason, const Anope this->InitRegex(); } -XLine::XLine(const Anope::string &mask, const Anope::string &by, const time_t expires, const Anope::string &reason, const Anope::string &uid) : Mask(mask), By(by), Created(Anope::CurTime), Expires(expires), Reason(reason), UID(uid) +XLine::XLine(const Anope::string &mask, const Anope::string &by, const time_t expires, const Anope::string &reason, const Anope::string &uid) : Serializable("XLine"), Mask(mask), By(by), Created(Anope::CurTime), Expires(expires), Reason(reason), UID(uid) { regex = NULL; manager = NULL; @@ -138,11 +138,6 @@ bool XLine::IsRegex() const return !this->Mask.empty() && this->Mask[0] == '/' && this->Mask[this->Mask.length() - 1] == '/'; } -const Anope::string XLine::serialize_name() const -{ - return "XLine"; -} - Serialize::Data XLine::serialize() const { Serialize::Data data; diff --git a/src/regchannel.cpp b/src/regchannel.cpp index 99554a6d5..e0f371117 100644 --- a/src/regchannel.cpp +++ b/src/regchannel.cpp @@ -23,11 +23,6 @@ serialize_checker RegisteredChannelList("ChannelInfo"); -const Anope::string BadWord::serialize_name() const -{ - return "BadWord"; -} - Serialize::Data BadWord::serialize() const { Serialize::Data data; @@ -61,13 +56,8 @@ Serializable* BadWord::unserialize(Serializable *obj, Serialize::Data &data) return bw; } -AutoKick::AutoKick() : Flags(AutoKickFlagString) -{ -} - -const Anope::string AutoKick::serialize_name() const +AutoKick::AutoKick() : Flags(AutoKickFlagString), Serializable("AutoKick") { - return "AutoKick"; } Serialize::Data AutoKick::serialize() const @@ -121,15 +111,10 @@ Serializable* AutoKick::unserialize(Serializable *obj, Serialize::Data &data) return ak; } -ModeLock::ModeLock(ChannelInfo *ch, bool s, ChannelModeName n, const Anope::string &p, const Anope::string &se, time_t c) : ci(ch), set(s), name(n), param(p), setter(se), created(c) +ModeLock::ModeLock(ChannelInfo *ch, bool s, ChannelModeName n, const Anope::string &p, const Anope::string &se, time_t c) : Serializable("ModeLock"), ci(ch), set(s), name(n), param(p), setter(se), created(c) { } -const Anope::string ModeLock::serialize_name() const -{ - return "ModeLock"; -} - Serialize::Data ModeLock::serialize() const { Serialize::Data data; @@ -192,11 +177,6 @@ Serializable* ModeLock::unserialize(Serializable *obj, Serialize::Data &data) } } -const Anope::string LogSetting::serialize_name() const -{ - return "LogSetting"; -} - Serialize::Data LogSetting::serialize() const { Serialize::Data data; @@ -246,7 +226,8 @@ Serializable* LogSetting::unserialize(Serializable *obj, Serialize::Data &data) /** Default constructor * @param chname The channel name */ -ChannelInfo::ChannelInfo(const Anope::string &chname) : Flags(ChannelInfoFlagStrings), access("ChanAccess"), akick("AutoKick"), +ChannelInfo::ChannelInfo(const Anope::string &chname) : Flags(ChannelInfoFlagStrings), Serializable("ChannelInfo"), + access("ChanAccess"), akick("AutoKick"), badwords("BadWord"), mode_locks("ModeLock"), log_settings("LogSetting"), botflags(BotServFlagStrings) { if (chname.empty()) @@ -291,7 +272,8 @@ ChannelInfo::ChannelInfo(const Anope::string &chname) : Flags(ChannelInfoFlagStrings), access("ChanAccess"), akick("AutoKick"), +ChannelInfo::ChannelInfo(const ChannelInfo &ci) : Flags(ChannelInfoFlagStrings), Serializable("ChannelInfo"), + access("ChanAccess"), akick("AutoKick"), badwords("BadWord"), mode_locks("ModeLock"), log_settings("LogSetting"), botflags(BotServFlagStrings) { *this = ci; @@ -384,11 +366,6 @@ ChannelInfo::~ChannelInfo() --this->founder->channelcount; } -const Anope::string ChannelInfo::serialize_name() const -{ - return "ChannelInfo"; -} - Serialize::Data ChannelInfo::serialize() const { Serialize::Data data; diff --git a/src/serialize.cpp b/src/serialize.cpp index 7bcf12283..39d0cdd8f 100644 --- a/src/serialize.cpp +++ b/src/serialize.cpp @@ -71,23 +71,32 @@ unsigned stringstream::getMax() const } Serializable::Serializable() : last_commit_time(0), id(0) +{ + throw CoreException("Default Serializable constructor?"); +} + +Serializable::Serializable(const Anope::string &serialize_type) : last_commit_time(0), id(0) { if (serializable_items == NULL) serializable_items = new std::list(); serializable_items->push_back(this); + this->s_type = SerializeType::Find(serialize_type); + this->s_iter = serializable_items->end(); --this->s_iter; FOREACH_MOD(I_OnSerializableConstruct, OnSerializableConstruct(this)); } -Serializable::Serializable(const Serializable &) : last_commit_time(0), id(0) +Serializable::Serializable(const Serializable &other) : last_commit_time(0), id(0) { serializable_items->push_back(this); this->s_iter = serializable_items->end(); --this->s_iter; + this->s_type = other.s_type; + FOREACH_MOD(I_OnSerializableConstruct, OnSerializableConstruct(this)); } @@ -136,12 +145,17 @@ void Serializable::UpdateTS() this->last_commit_time = Anope::CurTime; } +SerializeType* Serializable::GetSerializableType() const +{ + return this->s_type; +} + const std::list &Serializable::GetItems() { return *serializable_items; } -SerializeType::SerializeType(const Anope::string &n, unserialize_func f) : name(n), unserialize(f), timestamp(0) +SerializeType::SerializeType(const Anope::string &n, unserialize_func f, Module *o) : name(n), unserialize(f), owner(o), timestamp(0) { type_order.push_back(this->name); types[this->name] = this; @@ -180,6 +194,11 @@ void SerializeType::UpdateTimestamp() this->timestamp = Anope::CurTime; } +Module* SerializeType::GetOwner() const +{ + return this->owner; +} + SerializeType *SerializeType::Find(const Anope::string &name) { Anope::map::iterator it = types.find(name); -- cgit