summaryrefslogtreecommitdiff
path: root/include/typedefs.h
blob: 8a7b591590b6a3949ef657b01e124eb16e603b27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * InspIRCd -- Internet Relay Chat Daemon
 *
 *   Copyright (C) 2013, 2016, 2018, 2020 Sadie Powell <sadie@witchery.services>
 *   Copyright (C) 2012-2014, 2016, 2018 Attila Molnar <attilamolnar@hush.com>
 *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
 *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
 *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
 *   Copyright (C) 2005, 2010 Craig Edwards <brain@inspircd.org>
 *
 * 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/>.
 */


#pragma once

class BanCacheManager;
class BufferedSocket;
class Channel;
class Command;
class ConfigStatus;
class ConfigTag;
class Extensible;
class FakeUser;
class InspIRCd;
class Invitation;
class IOHookProvider;
class LocalUser;
class Membership;
class Module;
class OperInfo;
class ProtocolServer;
class RemoteUser;
class Server;
class ServerConfig;
class ServerLimits;
class Thread;
class User;
class XLine;
class XLineManager;
class XLineFactory;
struct ConnectClass;
class ModResult;

namespace ClientProtocol
{
	class Event;
	class EventProvider;
	class Message;
	class MessageTagEvent;
	class MessageTagProvider;
	class Serializer;

	typedef std::vector<Message*> MessageList;
	typedef std::vector<std::string> ParamList;
	typedef std::string SerializedMessage;

	struct MessageTagData
	{
		MessageTagProvider* tagprov;
		std::string value;
		void* provdata;

		MessageTagData(MessageTagProvider* prov, const std::string& val, void* data = NULL);
	};

	/** Map of message tag values and providers keyed by their name.
	 * Sorted in descending order to ensure tag names beginning with symbols (such as '+') come later when iterating
	 * the container than tags with a normal name.
	 */
	typedef insp::flat_map<std::string, MessageTagData, std::greater<std::string> > TagMap;
}

#include "hashcomp.h"
#include "base.h"

typedef TR1NS::unordered_map<std::string, User*, irc::insensitive, irc::StrHashComp> user_hash;
typedef TR1NS::unordered_map<std::string, Channel*, irc::insensitive, irc::StrHashComp> chan_hash;

/** List of channels to consider when building the neighbor list of a user
 */
typedef std::vector<Membership*> IncludeChanList;

/** A cached text file stored with its contents as lines
 */
typedef std::vector<std::string> file_cache;

/** A mapping of configuration keys to their assigned values.
 */
typedef insp::flat_map<std::string, std::string, irc::insensitive_swo> ConfigItems;

/** The entire configuration
 */
typedef std::multimap<std::string, reference<ConfigTag>, irc::insensitive_swo> ConfigDataHash;

/** Iterator of ConfigDataHash */
typedef ConfigDataHash::const_iterator ConfigIter;
/** Iterator pair, used for tag-name ranges */
typedef std::pair<ConfigIter,ConfigIter> ConfigTagList;

/** Files read by the configuration */
typedef std::map<std::string, file_cache> ConfigFileCache;

/** Generic user list, used for exceptions */
typedef std::set<User*> CUList;

/** Contains an ident and host split into two strings
 */
typedef std::pair<std::string, std::string> IdentHostPair;

/** A map of xline factories
 */
typedef std::map<std::string, XLineFactory*> XLineFactMap;

/** A map of XLines indexed by string
 */
typedef std::map<std::string, XLine*, irc::insensitive_swo> XLineLookup;

/** A map of XLineLookup maps indexed by string
 */
typedef std::map<std::string, XLineLookup > XLineContainer;

/** An iterator in an XLineContainer
 */
typedef XLineContainer::iterator ContainerIter;

/** An iterator in an XLineLookup
 */
typedef XLineLookup::iterator LookupIter;

namespace Stats
{
	class Context;
}