]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
m_spanningtree Add TreeServer::GetChildren() that replaces ChildCount() and GetChild()
authorattilamolnar <attilamolnar@hush.com>
Fri, 19 Jul 2013 11:40:07 +0000 (13:40 +0200)
committerattilamolnar <attilamolnar@hush.com>
Thu, 22 Aug 2013 11:42:20 +0000 (13:42 +0200)
src/modules/m_spanningtree/main.cpp
src/modules/m_spanningtree/netburst.cpp
src/modules/m_spanningtree/override_map.cpp
src/modules/m_spanningtree/treeserver.cpp
src/modules/m_spanningtree/treeserver.h
src/modules/m_spanningtree/treesocket1.cpp
src/modules/m_spanningtree/utils.cpp

index 316ed6e960b2a63fee697087fffddb56a41df3ba..169a5cd90abb725b5f290bc8176f6106eb7d73d0 100644 (file)
@@ -78,18 +78,21 @@ void ModuleSpanningTree::ShowLinks(TreeServer* Current, User* user, int hops)
        {
                Parent = Current->GetParent()->GetName();
        }
-       for (unsigned int q = 0; q < Current->ChildCount(); q++)
+
+       const TreeServer::ChildServers& children = Current->GetChildren();
+       for (TreeServer::ChildServers::const_iterator i = children.begin(); i != children.end(); ++i)
        {
-               if ((Current->GetChild(q)->Hidden) || ((Utils->HideULines) && (ServerInstance->ULine(Current->GetChild(q)->GetName()))))
+               TreeServer* server = *i;
+               if ((server->Hidden) || ((Utils->HideULines) && (ServerInstance->ULine(server->GetName()))))
                {
                        if (user->IsOper())
                        {
-                                ShowLinks(Current->GetChild(q),user,hops+1);
+                                ShowLinks(server, user, hops+1);
                        }
                }
                else
                {
-                       ShowLinks(Current->GetChild(q),user,hops+1);
+                       ShowLinks(server, user, hops+1);
                }
        }
        /* Don't display the line if its a uline, hide ulines is on, and the user isnt an oper */
@@ -685,11 +688,11 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod)
                return;
        ServerInstance->PI->SendMetaData(NULL, "modules", "-" + mod->ModuleSourceFile);
 
-       unsigned int items = Utils->TreeRoot->ChildCount();
-       for(unsigned int x = 0; x < items; x++)
+       // Close all connections which use an IO hook provided by this module
+       const TreeServer::ChildServers& list = Utils->TreeRoot->GetChildren();
+       for (TreeServer::ChildServers::const_iterator i = list.begin(); i != list.end(); ++i)
        {
-               TreeServer* srv = Utils->TreeRoot->GetChild(x);
-               TreeSocket* sock = srv->GetSocket();
+               TreeSocket* sock = (*i)->GetSocket();
                if (sock && sock->GetIOHook() && sock->GetIOHook()->creator == mod)
                {
                        sock->SendError("SSL module unloaded");
index d86115cce40da25cffc47e455c00084da03cb52e..938585c847d588bed3c00c2fd3422dc8a94509e7 100644 (file)
@@ -65,9 +65,10 @@ void TreeSocket::DoBurst(TreeServer* s)
  */
 void TreeSocket::SendServers(TreeServer* Current, TreeServer* s)
 {
-       for (unsigned int q = 0; q < Current->ChildCount(); q++)
+       const TreeServer::ChildServers& children = Current->GetChildren();
+       for (TreeServer::ChildServers::const_iterator i = children.begin(); i != children.end(); ++i)
        {
-               TreeServer* recursive_server = Current->GetChild(q);
+               TreeServer* recursive_server = *i;
                if (recursive_server != s)
                {
                        this->WriteLine(InspIRCd::Format(":%s SERVER %s * 0 %s :%s", Current->GetID().c_str(),
index 14d0a3b4fa6135e9e0f82f5375d60fe6ef073299..b5da112806d0b5c347627c468bf4a525ed43e8b2 100644 (file)
@@ -77,9 +77,11 @@ void CommandMap::ShowMap(TreeServer* Current, User* user, int depth, int &line,
 
        if (user->IsOper() || !Utils->FlatLinks)
                depth = depth + 2;
-       for (unsigned int q = 0; q < Current->ChildCount(); q++)
+
+       const TreeServer::ChildServers& servers = Current->GetChildren();
+       for (TreeServer::ChildServers::const_iterator i = servers.begin(); i != servers.end(); ++i)
        {
-               TreeServer* child = Current->GetChild(q);
+               TreeServer* child = *i;
                if (!user->IsOper()) {
                        if (child->Hidden)
                                continue;
index 54ea5922fbaa56a770c31935c91455bc9cddfb65..8af3e777d9c68997b7b14752cbb040ad5fc19b3f 100644 (file)
@@ -119,9 +119,9 @@ void TreeServer::FinishBurstInternal()
        this->bursting = false;
        SetNextPingTime(ServerInstance->Time() + Utils->PingFreq);
        SetPingFlag();
-       for(unsigned int q=0; q < ChildCount(); q++)
+       for (ChildServers::const_iterator i = Children.begin(); i != Children.end(); ++i)
        {
-               TreeServer* child = GetChild(q);
+               TreeServer* child = *i;
                child->FinishBurstInternal();
        }
 }
@@ -229,28 +229,6 @@ void TreeServer::SetVersion(const std::string &Version)
        VersionString = Version;
 }
 
-unsigned int TreeServer::ChildCount()
-{
-       return Children.size();
-}
-
-TreeServer* TreeServer::GetChild(unsigned int n)
-{
-       if (n < Children.size())
-       {
-               /* Make sure they  cant request
-                * an out-of-range object. After
-                * all we know what these programmer
-                * types are like *grin*.
-                */
-               return Children[n];
-       }
-       else
-       {
-               return NULL;
-       }
-}
-
 void TreeServer::AddChild(TreeServer* Child)
 {
        Children.push_back(Child);
index 9f2e24172ad2d440bdc6ecf188b74e37bd2de252..8178c87faf0c758112593833b125d75017f7c335 100644 (file)
@@ -56,6 +56,7 @@ class TreeServer : public classbase
        void AddHashEntry();
 
  public:
+       typedef std::vector<TreeServer*> ChildServers;
        FakeUser* const ServerUser;             /* User representing this server */
        const time_t age;
 
@@ -151,13 +152,9 @@ class TreeServer : public classbase
         */
        void SetVersion(const std::string &Version);
 
-       /** Return number of child servers
+       /** Return all child servers
         */
-       unsigned int ChildCount();
-
-       /** Return a child server indexed 0..n
-        */
-       TreeServer* GetChild(unsigned int n);
+       const ChildServers& GetChildren() const { return Children; }
 
        /** Add a child server
         */
index 9e0acdd12305e0a080a2244ca32b56058390bf77..ad3a6390df1ee8b5bd236ae0dc9f74f15290202c 100644 (file)
@@ -150,9 +150,10 @@ void TreeSocket::SquitServer(std::string &from, TreeServer* Current, int& num_lo
         * We're going backwards so we don't remove users
         * while we still need them ;)
         */
-       for (unsigned int q = 0; q < Current->ChildCount(); q++)
+       const TreeServer::ChildServers& children = Current->GetChildren();
+       for (TreeServer::ChildServers::const_iterator i = children.begin(); i != children.end(); ++i)
        {
-               TreeServer* recursive_server = Current->GetChild(q);
+               TreeServer* recursive_server = *i;
                this->SquitServer(from,recursive_server, num_lost_servers, num_lost_users);
        }
        /* Now we've whacked the kids, whack self */
index bd87f20283babd2d64dda40b3a730baf0abeb58c..f71a9f0d5bed53504b6f7e8ddaf978d83ee61f60 100644 (file)
@@ -136,14 +136,11 @@ SpanningTreeUtilities::SpanningTreeUtilities(ModuleSpanningTree* C)
 
 CullResult SpanningTreeUtilities::cull()
 {
-       while (TreeRoot->ChildCount())
+       const TreeServer::ChildServers& children = TreeRoot->GetChildren();
+       while (!children.empty())
        {
-               TreeServer* child_server = TreeRoot->GetChild(0);
-               if (child_server)
-               {
-                       TreeSocket* sock = child_server->GetSocket();
-                       sock->Close();
-               }
+               TreeSocket* sock = children.front()->GetSocket();
+               sock->Close();
        }
 
        for(std::map<TreeSocket*, std::pair<std::string, int> >::iterator i = timeoutlist.begin(); i != timeoutlist.end(); ++i)
@@ -209,10 +206,10 @@ void SpanningTreeUtilities::DoOneToAllButSender(const std::string& prefix, const
 {
        std::string FullLine = ConstructLine(prefix, command, params);
 
-       unsigned int items = this->TreeRoot->ChildCount();
-       for (unsigned int x = 0; x < items; x++)
+       const TreeServer::ChildServers& children = TreeRoot->GetChildren();
+       for (TreeServer::ChildServers::const_iterator i = children.begin(); i != children.end(); ++i)
        {
-               TreeServer* Route = this->TreeRoot->GetChild(x);
+               TreeServer* Route = *i;
                // Send the line if the route isn't the path to the one to be omitted
                if (Route != omitroute)
                {