diff options
author | Adam <Adam@anope.org> | 2012-12-13 06:12:56 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-12-13 06:12:56 -0500 |
commit | c1077faa281c5635f85b892e605e23bd6c8fcc3b (patch) | |
tree | 213b5f87a19f182e1efd6110f03ff10d5b10ebf6 /src/base.cpp | |
parent | 76ba147c22944b67e8522cd2bb7b6e1bae498ced (diff) |
Optimize much of the database code and serialize code.
Diffstat (limited to 'src/base.cpp')
-rw-r--r-- | src/base.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/base.cpp b/src/base.cpp index 5b8d828b6..b98b68893 100644 --- a/src/base.cpp +++ b/src/base.cpp @@ -14,25 +14,37 @@ std::map<Anope::string, std::map<Anope::string, Service *> > Service::Services; std::map<Anope::string, std::map<Anope::string, Anope::string> > Service::Aliases; -Base::Base() +Base::Base() : references(NULL) { } Base::~Base() { - for (std::set<ReferenceBase *>::iterator it = this->references.begin(), it_end = this->references.end(); it != it_end; ++it) + if (this->references != NULL) { - (*it)->Invalidate(); + for (std::set<ReferenceBase *>::iterator it = this->references->begin(), it_end = this->references->end(); it != it_end; ++it) + (*it)->Invalidate(); + delete this->references; } } void Base::AddReference(ReferenceBase *r) { - this->references.insert(r); + if (this->references == NULL) + this->references = new std::set<ReferenceBase *>(); + this->references->insert(r); } void Base::DelReference(ReferenceBase *r) { - this->references.erase(r); + if (this->references != NULL) + { + this->references->erase(r); + if (this->references->empty()) + { + delete this->references; + this->references = NULL; + } + } } |