diff options
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; +} + |