anope

- supernets anope source code & configuration
git clone git://git.acid.vegas/anope.git
Log | Files | Refs | Archive | README

extensible.cpp (1679B)

      1 /*
      2  *
      3  * (C) 2003-2022 Anope Team
      4  * Contact us at team@anope.org
      5  *
      6  * Please read COPYING and README for further details.
      7  */
      8 
      9 #include "extensible.h"
     10 
     11 static std::set<ExtensibleBase *> extensible_items;
     12 
     13 ExtensibleBase::ExtensibleBase(Module *m, const Anope::string &n) : Service(m, "Extensible", n)
     14 {
     15 	extensible_items.insert(this);
     16 }
     17 
     18 ExtensibleBase::~ExtensibleBase()
     19 {
     20 	extensible_items.erase(this);
     21 }
     22 
     23 Extensible::~Extensible()
     24 {
     25 	UnsetExtensibles();
     26 }
     27 
     28 void Extensible::UnsetExtensibles()
     29 {
     30 	while (!extension_items.empty())
     31 		(*extension_items.begin())->Unset(this);
     32 }
     33 
     34 bool Extensible::HasExt(const Anope::string &name) const
     35 {
     36 	ExtensibleRef<void *> ref(name);
     37 	if (ref)
     38 		return ref->HasExt(this);
     39 
     40 	Log(LOG_DEBUG) << "HasExt for nonexistent type " << name << " on " << static_cast<const void *>(this);
     41 	return false;
     42 }
     43 
     44 void Extensible::ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data)
     45 {
     46 	for (std::set<ExtensibleBase *>::iterator it = e->extension_items.begin(); it != e->extension_items.end(); ++it)
     47 	{
     48 		ExtensibleBase *eb = *it;
     49 		eb->ExtensibleSerialize(e, s, data);
     50 	}
     51 }
     52 
     53 void Extensible::ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data)
     54 {
     55 	for (std::set<ExtensibleBase *>::iterator it = extensible_items.begin(); it != extensible_items.end(); ++it)
     56 	{
     57 		ExtensibleBase *eb = *it;
     58 		eb->ExtensibleUnserialize(e, s, data);
     59 	}
     60 }
     61 
     62 template<>
     63 bool* Extensible::Extend(const Anope::string &name, const bool &what)
     64 {
     65 	ExtensibleRef<bool> ref(name);
     66 	if (ref)
     67 		return ref->Set(this);
     68 
     69 	Log(LOG_DEBUG) << "Extend for nonexistent type " << name << " on " << static_cast<void *>(this);
     70 	return NULL;
     71 }