-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
*
- * InspIRCd: (C) 2002-2010 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
+ * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ * Copyright (C) 2003-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 __BASE_H__
-#define __BASE_H__
+
+#ifndef BASE_H
+#define BASE_H
#include <map>
#include <deque>
#include <string>
+#include <list>
/** Dummy class to help enforce culls being parent-called up to classbase */
class CullResult
{
public:
interfacebase() {}
+ static inline void* operator new(size_t, void* m) { return m; }
private:
interfacebase(const interfacebase&);
void operator=(const interfacebase&);
- void* operator new(size_t);
- void operator delete(void*);
+ static void* operator new(size_t);
+ static void operator delete(void*);
};
/** The base class for inspircd classes that support reference counting.
refcountbase();
virtual ~refcountbase();
inline unsigned int GetReferenceCount() const { return refcount; }
- void* operator new(size_t);
- void operator delete(void*);
+ static inline void* operator new(size_t, void* m) { return m; }
+ static void* operator new(size_t);
+ static void operator delete(void*);
inline void refcount_inc() const { refcount++; }
inline bool refcount_dec() const { refcount--; return !refcount; }
private:
};
template <typename T>
-class reference
+class CoreExport reference
{
T* value;
public:
if (value && value->refcount_dec())
delete value;
}
- inline operator bool() const { return value; }
+
+ inline reference<T>& operator=(T* other)
+ {
+ if (value != other)
+ {
+ if (value && value->refcount_dec())
+ delete value;
+ value = other;
+ if (value)
+ value->refcount_inc();
+ }
+
+ return *this;
+ }
+
+ inline operator bool() const { return (value != NULL); }
inline operator T*() const { return value; }
inline T* operator->() const { return value; }
inline T& operator*() const { return *value; }
inline bool operator<(const reference<T>& other) const { return value < other.value; }
inline bool operator>(const reference<T>& other) const { return value > other.value; }
+ static inline void* operator new(size_t, void* m) { return m; }
private:
- void* operator new(size_t);
- void operator delete(void*);
+#ifndef _WIN32
+ static void* operator new(size_t);
+ static void operator delete(void*);
+#endif
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
*/
class CoreExport CoreException : public std::exception
{
- protected:
+ public:
/** Holds the error message to be displayed
*/
const std::string err;
/** Source of the exception
*/
const std::string source;
- public:
/** Default constructor, just uses the error mesage 'Core threw an exception'.
*/
CoreException() : err("Core threw an exception"), source("The core") {}
}
};
+class Module;
class CoreExport ModuleException : public CoreException
{
public:
enum ServiceType {
/** is a Command */
SERVICE_COMMAND,
- /** is a channel ModeHandler */
- SERVICE_CMODE,
- /** is a user ModeHandler */
- SERVICE_UMODE,
+ /** is a ModeHandler */
+ SERVICE_MODE,
/** is a metadata descriptor */
SERVICE_METADATA,
/** is a data processing provider (MD5, SQL) */