Add indirect comparison predicate
[clinton/bobotpp.git] / source / Utils.H
1 // Utils.H -*- C++ -*-
2 // Copyright (c) 1997, 1998 Etienne BERNARD
3 // Copyright (c) 2002,2005,2008 Clinton Ebadi
4
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // any later version.
9
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 // 02110-1301, USA.
19
20 #ifndef UTILS_H
21 #define UTILS_H
22
23 #ifndef HAVE_CONFIG_H
24 #include "config.h"
25 #endif
26
27 #include <ctime>
28 #include <string>
29
30 #include "Bot.H"
31
32 #ifdef USESCRIPTS
33 #include <libguile.h>
34 #endif
35
36 namespace Utils {
37 std::string get_nick (std::string);
38 std::string get_userhost (std::string);
39 std::string get_key();
40
41 int get_level (Bot *, std::string);
42 int get_level (Bot *, std::string, std::string);
43
44 std::string make_wildcard (std::string);
45
46 // predicates
47 bool channel_p (std::string);
48 bool wildcard_p (std::string);
49 bool valid_channel_name_p (std::string);
50 bool valid_nickname_p (const Bot *, std::string);
51 bool IP_p (std::string);
52
53 std::string level2str (int);
54 std::string prot2str (int);
55 std::string bool2str (bool);
56 std::string long2str (long);
57
58 std::time_t str2time(std::string);
59
60 // string case conversion
61 std::string to_lower (std::string);
62 std::string to_upper (std::string);
63
64 std::string trim_str (std::string);
65
66 #ifdef USESCRIPTS
67 std::string scm2str (SCM);
68 SCM str2scm (std::string);
69 #endif
70
71 // Class to compare *i1 / *i2 in heaps etc.
72 template<typename T, typename C> class IndirectPred
73 {
74 C compare;
75 public:
76 bool operator() (const T * i1, const T * i2) const
77 { return compare (*i1, *i2); }
78
79 typedef T* first_argument_type;
80 typedef T* second_argument_type;
81 typedef bool result_type;
82 };
83 }
84
85 #endif