-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
*
- * InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
+ * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ * Copyright (C) 2005, 2007 Craig Edwards <craigedwards@brainbox.cc>
*
- * This program is free but copyrighted software; see
- * the file COPYING for details.
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
*
- * ---------------------------------------------------
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __CULLLIST_H__
-#define __CULLLIST_H__
-/** The CullList class is used by the core to create lists of users
- * prior to actually quitting (and deleting the objects) all at once.
- * to quitting them all at once. This is faster than quitting
- * them within the loop, as the loops become tighter with
- * little or no comparisons within them. The CullList class
- * operates by allowing the programmer to push users onto
- * the list, each with a seperate quit reason, and then, once
- * the list is complete, call a method to flush the list,
- * quitting all the users upon it. A CullList may hold local
- * or remote users, but it may only hold each user once. If
- * you attempt to add the same user twice, then the second
- * attempt will be ignored.
- *
- * NOTE: Don't use this outside core, use the QuitUser method like everyone else!
+#pragma once
+
+/**
+ * The CullList class is used to delete objects at the end of the main loop to
+ * avoid problems with references to deleted pointers if an object were deleted
+ * during execution.
*/
-class CoreExport CullList : public classbase
+class CoreExport CullList
{
- private:
- /** Creator of this CullList
- */
- InspIRCd* ServerInstance;
-
- /** Holds a list of users being quit.
- * See the information for CullItem for
- * more information.
- */
- std::vector<User *> list;
+ std::vector<classbase*> list;
+ std::vector<LocalUser*> SQlist;
public:
- /** Constructor.
- * @param Instance Creator of this CullList object
+ /** Adds an item to the cull list
*/
- CullList(InspIRCd* Instance);
+ void AddItem(classbase* item) { list.push_back(item); }
+ void AddSQItem(LocalUser* item) { SQlist.push_back(item); }
- /** Adds a user to the cull list for later
- * removal via QUIT.
- * @param user The user to add
- * @param reason The quit reason of the user being added
- * @param o_reason The quit reason to show only to opers
+ /** Applies the cull list (deletes the contents)
*/
- void AddItem(User* user);
+ void Apply();
+};
- /* Turn an item into a silent item (don't send out QUIT for this user)
- */
- void MakeSilent(User* user);
+class CoreExport ActionList
+{
+ std::vector<HandlerBase0<void>*> list;
- /** Applies the cull list, quitting all the users
- * on the list with their quit reasons all at once.
- * This is a very fast operation compared to
- * iterating the user list and comparing each one,
- * especially if there are multiple comparisons
- * to be done, or recursion.
- * @returns The number of users removed from IRC.
+ public:
+ /** Adds an item to the list
*/
- int Apply();
-};
+ void AddAction(HandlerBase0<void>* item) { list.push_back(item); }
-#endif
+ /** Runs the items
+ */
+ void Run();
+};