summaryrefslogtreecommitdiff
path: root/src/access.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-08-01 22:37:27 -0400
committerAdam <Adam@anope.org>2011-08-01 22:37:27 -0400
commitf7adc0b35b50f06706872a161f1c7476e6e6981e (patch)
tree91fbe281f2772136a327fd4fc4c64740d1ab65ab /src/access.cpp
parent710c02f3bd3581b7c5b3d48e7604756975219fc8 (diff)
Rewrote the access systems and added a flags access system
Diffstat (limited to 'src/access.cpp')
-rw-r--r--src/access.cpp140
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;
+}
+