Line data Source code
1 :
2 : #define IOW_DISABLE_LOG
3 : #include <iow/logger.hpp>
4 : #include <wfc/core/object_registry.hpp>
5 : #include <vector>
6 : #include <algorithm>
7 :
8 : using namespace ::wfc;
9 :
10 25 : struct number: iinterface {
11 : int count = 0;
12 : number() = default;
13 4 : explicit number(int c) noexcept: count(c) {}
14 : };
15 :
16 : struct number_greater
17 : {
18 2 : bool operator () (const number& left, const number& right) const
19 : {
20 2 : return left.count > right.count;
21 : }
22 : };
23 :
24 1 : int main()
25 : {
26 1 : object_registry reg;
27 2 : std::shared_ptr<number> i0 = std::make_shared<number>(0);
28 2 : std::shared_ptr<number> i1 = std::make_shared<number>(1);
29 2 : std::shared_ptr<number> i2 = std::make_shared<number>(2);
30 2 : std::shared_ptr<number> i3 = std::make_shared<number>(3);
31 1 : reg.set_target("i0", i0);
32 1 : reg.set_target("i1", i1);
33 1 : reg.set_target("i2", i2);
34 1 : reg.set_target("i3", i3);
35 :
36 1 : reg.erase("i0");
37 2 : std::vector<number> v;
38 3 : reg.for_each<number>([&v](const std::string&, const std::string&, std::shared_ptr<number> p){
39 3 : if ( auto i = p )
40 3 : v.push_back(*i);
41 4 : });
42 :
43 1 : std::sort(v.begin(), v.end(), number_greater());
44 :
45 1 : if (v.size()!=3) return -1;
46 :
47 1 : if (v[0].count!=3) return -1;
48 1 : if (v[1].count!=2) return -1;
49 1 : if (v[2].count!=1) return -1;
50 :
51 1 : if ( reg.get_target<number>("i2")->count != 2 )
52 0 : return -1;
53 :
54 1 : if ( auto x = reg.get_target<number>("i4") )
55 0 : return -1;
56 :
57 2 : return 0;
58 : }
|