-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathchecker.cpp
More file actions
61 lines (54 loc) · 1.25 KB
/
Copy pathchecker.cpp
File metadata and controls
61 lines (54 loc) · 1.25 KB
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
#include "checker.h"
template<typename T>
auto get_keys(const T& m)
->list<typename T::key_type>
{
list<typename T::key_type> ret;
std::transform(begin(m),end(m),std::back_inserter(ret),
[](T::value_type v){
return v.first;
});
return ret;
}
template<typename T>
auto get_values(const T& m)
->list<typename T::mapped_type>
{
list<typename T::mapped_type> ret;
std::transform(begin(m),end(m),std::back_inserter(ret),
[](T::value_type v){
return v.second;
});
return ret;
}
map<string,CheckerBase*> CheckerBase::all_checkers = map<string,CheckerBase*>();
CheckerBase::CheckerBase(string name)
:name(name)
{
all_checkers[name]=this;
}
list<CheckerBase *> CheckerBase::avaliable_checkers()
{
return get_values(all_checkers);
}
list<string> CheckerBase::avaliable_charsets()
{
return get_keys(all_checkers);
}
bool CheckerBase::contains(string name)
{
auto it = all_checkers.find(name);
return it!=all_checkers.end();
}
CheckerBase *CheckerBase::get_checker(string name)
{
auto it = all_checkers.find(name);
if(it == all_checkers.end())
{
return nullptr;
}
else
{
return it->second;
}
}