summaryrefslogtreecommitdiff
path: root/src/base.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-12-13 06:12:56 -0500
committerAdam <Adam@anope.org>2012-12-13 06:12:56 -0500
commitc1077faa281c5635f85b892e605e23bd6c8fcc3b (patch)
tree213b5f87a19f182e1efd6110f03ff10d5b10ebf6 /src/base.cpp
parent76ba147c22944b67e8522cd2bb7b6e1bae498ced (diff)
Optimize much of the database code and serialize code.
Diffstat (limited to 'src/base.cpp')
-rw-r--r--src/base.cpp22
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;
+ }
+ }
}