]> git.stg.codes - stg.git/blob - projects/traffcounter/utils.h
Factored out users' parser.
[stg.git] / projects / traffcounter / utils.h
1 #ifndef __UTILS_H__
2 #define __UTILS_H__
3
4 #include <string>
5 #include <locale>
6
7 namespace STG
8 {
9
10 class IsNotSpace : public std::unary_function<bool, char> {
11 public:
12     IsNotSpace(const std::locale & l) : loc(l) {};
13     bool operator() (char c)
14         {
15         return !std::use_facet<casefacet>(loc).is(std::ctype_base::space, c);
16         };
17 private:
18     const std::locale & loc;
19
20     typedef std::ctype<char> casefacet;
21 };
22
23 class ToLowerHelper : public std::unary_function<char, char> {
24 public:
25     ToLowerHelper(const std::locale & l) : loc(l) {};
26     char operator() (char c)
27         {
28         return std::tolower(c, loc);
29         };
30 private:
31     const std::locale & loc;
32 };
33
34 class ToUpperHelper : public std::unary_function<char, char> {
35 public:
36     ToUpperHelper(const std::locale & l) : loc(l) {};
37     char operator() (char c)
38         {
39         return std::toupper(c, loc);
40         };
41 private:
42     const std::locale & loc;
43 };
44
45 std::string Trim(const std::string & val, const std::locale & loc);
46 std::string ToLower(const std::string & val, const std::locale & loc);
47 std::string ToUpper(const std::string & val, const std::locale & loc);
48
49 inline std::string Trim(const std::string & val)
50     {
51     return Trim(val, std::locale(""));
52     }
53
54 inline std::string ToLower(const std::string & val)
55     {
56     return ToLower(val, std::locale(""));
57     }
58
59 inline std::string ToUpper(const std::string & val)
60     {
61     return ToUpper(val, std::locale(""));
62     }
63
64 }
65
66 std::string inet_ntostring(uint32_t ip);
67
68 #endif