diff options
author | Adam <Adam@anope.org> | 2011-08-01 22:37:27 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-08-01 22:37:27 -0400 |
commit | f7adc0b35b50f06706872a161f1c7476e6e6981e (patch) | |
tree | 91fbe281f2772136a327fd4fc4c64740d1ab65ab /src/access.cpp | |
parent | 710c02f3bd3581b7c5b3d48e7604756975219fc8 (diff) |
Rewrote the access systems and added a flags access system
Diffstat (limited to 'src/access.cpp')
-rw-r--r-- | src/access.cpp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/access.cpp b/src/access.cpp new file mode 100644 index 000000000..5fba02c98 --- /dev/null +++ b/src/access.cpp @@ -0,0 +1,140 @@ +/* + * + * (C) 2003-2011 Anope Team + * Contact us at team@anope.org + * + * Please read COPYING and README for further details. + * + * Based on the original code of Epona by Lara. + * Based on the original code of Services by Andy Church. + */ + +#include "services.h" +#include "modules.h" +#include "access.h" + +AccessProvider::AccessProvider(Module *o, const Anope::string &n) : Service(o, n) +{ +} + +AccessProvider::~AccessProvider() +{ +} + +ChanAccess::ChanAccess(AccessProvider *p) : provider(p) +{ +} + +ChanAccess::~ChanAccess() +{ +} + +bool ChanAccess::operator>(ChanAccess &other) +{ + for (size_t i = CA_SIZE; i > 0; --i) + if (this->HasPriv(static_cast<ChannelAccess>(i - 1)) && !other.HasPriv(static_cast<ChannelAccess>(i - 1))) + return true; + return false; +} + +bool ChanAccess::operator<(ChanAccess &other) +{ + for (size_t i = CA_SIZE; i > 0; --i) + if (!this->HasPriv(static_cast<ChannelAccess>(i - 1)) && other.HasPriv(static_cast<ChannelAccess>(i - 1))) + return true; + return false; +} + +bool ChanAccess::operator>=(ChanAccess &other) +{ + for (size_t i = CA_SIZE; i > 0; --i) + { + bool this_p = this->HasPriv(static_cast<ChannelAccess>(i - 1)), + other_p = other.HasPriv(static_cast<ChannelAccess>(i - 1)); + + if ((this_p && !other_p) || (this_p && other_p)) + return true; + } + + return false; +} + +bool ChanAccess::operator<=(ChanAccess &other) +{ + for (size_t i = CA_SIZE; i > 0; --i) + { + bool this_p = this->HasPriv(static_cast<ChannelAccess>(i - 1)), + other_p = other.HasPriv(static_cast<ChannelAccess>(i - 1)); + + if ((!this_p && other_p) || (this_p && other_p)) + return true; + } + + return false; +} + +AccessGroup::AccessGroup() : std::vector<ChanAccess *>() +{ +} + +bool AccessGroup::HasPriv(ChannelAccess priv) const +{ + for (unsigned i = this->size(); i > 0; --i) + if (this->at(i - 1)->HasPriv(priv)) + return true; + return false; +} + +ChanAccess *AccessGroup::Highest() const +{ + for (size_t i = CA_SIZE; i > 0; --i) + for (unsigned j = this->size(); j > 0; --j) + if (this->at(j - 1)->HasPriv(static_cast<ChannelAccess>(i - 1))) + return this->at(j - 1); + return NULL; +} + +bool AccessGroup::operator>(const AccessGroup &other) const +{ + for (size_t i = CA_SIZE; i > 0; --i) + if (this->HasPriv(static_cast<ChannelAccess>(i - 1)) && !other.HasPriv(static_cast<ChannelAccess>(i - 1))) + return true; + return true; +} + +bool AccessGroup::operator<(const AccessGroup &other) const +{ + for (size_t i = CA_SIZE; i > 0; --i) + if (!this->HasPriv(static_cast<ChannelAccess>(i - 1)) && other.HasPriv(static_cast<ChannelAccess>(i - 1))) + return true; + return false; +} + +bool AccessGroup::operator>=(const AccessGroup &other) const +{ + for (size_t i = CA_SIZE; i > 0; --i) + { + bool this_p = this->HasPriv(static_cast<ChannelAccess>(i - 1)), + other_p = other.HasPriv(static_cast<ChannelAccess>(i - 1)); + + if ((this_p && !other_p) || (this_p && other_p)) + return true; + } + + return false; +} + +bool AccessGroup::operator<=(const AccessGroup &other) const +{ + for (size_t i = CA_SIZE; i > 0; --i) + { + bool this_p = this->HasPriv(static_cast<ChannelAccess>(i - 1)), + other_p = other.HasPriv(static_cast<ChannelAccess>(i - 1)); + + if ((!this_p && other_p) || (this_p && other_p)) + return true; + } + + return false; +} + |