/src/brpc/src/bvar/passive_status.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Licensed to the Apache Software Foundation (ASF) under one |
2 | | // or more contributor license agreements. See the NOTICE file |
3 | | // distributed with this work for additional information |
4 | | // regarding copyright ownership. The ASF licenses this file |
5 | | // to you under the Apache License, Version 2.0 (the |
6 | | // "License"); you may not use this file except in compliance |
7 | | // with the License. You may obtain a copy of the License at |
8 | | // |
9 | | // http://www.apache.org/licenses/LICENSE-2.0 |
10 | | // |
11 | | // Unless required by applicable law or agreed to in writing, |
12 | | // software distributed under the License is distributed on an |
13 | | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
14 | | // KIND, either express or implied. See the License for the |
15 | | // specific language governing permissions and limitations |
16 | | // under the License. |
17 | | |
18 | | // Date 2014/09/22 11:57:43 |
19 | | |
20 | | #ifndef BVAR_PASSIVE_STATUS_H |
21 | | #define BVAR_PASSIVE_STATUS_H |
22 | | |
23 | | #include "bvar/variable.h" |
24 | | #include "bvar/reducer.h" |
25 | | |
26 | | namespace bvar { |
27 | | |
28 | | // Display a updated-by-need value. This is done by passing in an user callback |
29 | | // which is called to produce the value. |
30 | | // Example: |
31 | | // int print_number(void* arg) { |
32 | | // ... |
33 | | // return 5; |
34 | | // } |
35 | | // |
36 | | // // number1 : 5 |
37 | | // bvar::PassiveStatus<int> status1("number1", print_number, arg); |
38 | | // |
39 | | // // foo_number2 : 5 |
40 | | // bvar::PassiveStatus<int> status2("Foo", "number2", print_number, arg); |
41 | | template <typename Tp> |
42 | | class PassiveStatus : public Variable { |
43 | | public: |
44 | | typedef Tp value_type; |
45 | | typedef detail::ReducerSampler<PassiveStatus, Tp, detail::AddTo<Tp>, |
46 | | detail::MinusFrom<Tp> > sampler_type; |
47 | | struct PlaceHolderOp { |
48 | 0 | void operator()(Tp&, const Tp&) const {} |
49 | | }; |
50 | | static const bool ADDITIVE = (butil::is_integral<Tp>::value || |
51 | | butil::is_floating_point<Tp>::value || |
52 | | is_vector<Tp>::value); |
53 | | class SeriesSampler : public detail::Sampler { |
54 | | public: |
55 | | typedef typename butil::conditional< |
56 | | ADDITIVE, detail::AddTo<Tp>, PlaceHolderOp>::type Op; |
57 | | explicit SeriesSampler(PassiveStatus* owner) |
58 | 92 | : _owner(owner), _vector_names(NULL), _series(Op()) {} bvar::PassiveStatus<double>::SeriesSampler::SeriesSampler(bvar::PassiveStatus<double>*) Line | Count | Source | 58 | 12 | : _owner(owner), _vector_names(NULL), _series(Op()) {} |
bvar::PassiveStatus<long>::SeriesSampler::SeriesSampler(bvar::PassiveStatus<long>*) Line | Count | Source | 58 | 20 | : _owner(owner), _vector_names(NULL), _series(Op()) {} |
bvar::PassiveStatus<unsigned long>::SeriesSampler::SeriesSampler(bvar::PassiveStatus<unsigned long>*) Line | Count | Source | 58 | 40 | : _owner(owner), _vector_names(NULL), _series(Op()) {} |
Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::SeriesSampler::SeriesSampler(bvar::PassiveStatus<bvar::Vector<long, 4ul> >*) bvar::PassiveStatus<int>::SeriesSampler::SeriesSampler(bvar::PassiveStatus<int>*) Line | Count | Source | 58 | 20 | : _owner(owner), _vector_names(NULL), _series(Op()) {} |
Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::SeriesSampler::SeriesSampler(bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >*) |
59 | 0 | ~SeriesSampler() { |
60 | 0 | delete _vector_names; |
61 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<double>::SeriesSampler::~SeriesSampler() Unexecuted instantiation: bvar::PassiveStatus<long>::SeriesSampler::~SeriesSampler() Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::SeriesSampler::~SeriesSampler() Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::SeriesSampler::~SeriesSampler() Unexecuted instantiation: bvar::PassiveStatus<int>::SeriesSampler::~SeriesSampler() Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::SeriesSampler::~SeriesSampler() |
62 | 128 | void take_sample() override { _series.append(_owner->get_value()); } bvar::PassiveStatus<long>::SeriesSampler::take_sample() Line | Count | Source | 62 | 29 | void take_sample() override { _series.append(_owner->get_value()); } |
Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::SeriesSampler::take_sample() bvar::PassiveStatus<double>::SeriesSampler::take_sample() Line | Count | Source | 62 | 12 | void take_sample() override { _series.append(_owner->get_value()); } |
bvar::PassiveStatus<unsigned long>::SeriesSampler::take_sample() Line | Count | Source | 62 | 58 | void take_sample() override { _series.append(_owner->get_value()); } |
bvar::PassiveStatus<int>::SeriesSampler::take_sample() Line | Count | Source | 62 | 29 | void take_sample() override { _series.append(_owner->get_value()); } |
Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::SeriesSampler::take_sample() Unexecuted instantiation: bvar::PassiveStatus<timeval>::SeriesSampler::take_sample() |
63 | 0 | void describe(std::ostream& os) { _series.describe(os, _vector_names); } Unexecuted instantiation: bvar::PassiveStatus<long>::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) Unexecuted instantiation: bvar::PassiveStatus<double>::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) Unexecuted instantiation: bvar::PassiveStatus<int>::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) Unexecuted instantiation: bvar::PassiveStatus<timeval>::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::SeriesSampler::describe(std::basic_ostream<char, std::char_traits<char> >&) |
64 | 0 | void set_vector_names(const std::string& names) { |
65 | 0 | if (_vector_names == NULL) { |
66 | 0 | _vector_names = new std::string; |
67 | 0 | } |
68 | 0 | *_vector_names = names; |
69 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::SeriesSampler::set_vector_names(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::SeriesSampler::set_vector_names(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) |
70 | | private: |
71 | | PassiveStatus* _owner; |
72 | | std::string* _vector_names; |
73 | | detail::Series<Tp, Op> _series; |
74 | | }; |
75 | | |
76 | | public: |
77 | | // NOTE: You must be very careful about lifetime of `arg' which should be |
78 | | // valid during lifetime of PassiveStatus. |
79 | | PassiveStatus(const butil::StringPiece& name, |
80 | | Tp (*getfn)(void*), void* arg) |
81 | | : _getfn(getfn) |
82 | | , _arg(arg) |
83 | | , _sampler(NULL) |
84 | 92 | , _series_sampler(NULL) { |
85 | 92 | expose(name); |
86 | 92 | } bvar::PassiveStatus<long>::PassiveStatus(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, long (*)(void*), void*) Line | Count | Source | 84 | 20 | , _series_sampler(NULL) { | 85 | 20 | expose(name); | 86 | 20 | } |
bvar::PassiveStatus<double>::PassiveStatus(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, double (*)(void*), void*) Line | Count | Source | 84 | 12 | , _series_sampler(NULL) { | 85 | 12 | expose(name); | 86 | 12 | } |
bvar::PassiveStatus<int>::PassiveStatus(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, int (*)(void*), void*) Line | Count | Source | 84 | 20 | , _series_sampler(NULL) { | 85 | 20 | expose(name); | 86 | 20 | } |
bvar::PassiveStatus<unsigned long>::PassiveStatus(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, unsigned long (*)(void*), void*) Line | Count | Source | 84 | 40 | , _series_sampler(NULL) { | 85 | 40 | expose(name); | 86 | 40 | } |
|
87 | | |
88 | | PassiveStatus(const butil::StringPiece& prefix, |
89 | | const butil::StringPiece& name, |
90 | | Tp (*getfn)(void*), void* arg) |
91 | | : _getfn(getfn) |
92 | | , _arg(arg) |
93 | | , _sampler(NULL) |
94 | 0 | , _series_sampler(NULL) { |
95 | 0 | expose_as(prefix, name); |
96 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<timeval>::PassiveStatus(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, timeval (*)(void*), void*) Unexecuted instantiation: bvar::PassiveStatus<int>::PassiveStatus(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, int (*)(void*), void*) |
97 | | |
98 | | PassiveStatus(Tp (*getfn)(void*), void* arg) |
99 | | : _getfn(getfn) |
100 | | , _arg(arg) |
101 | | , _sampler(NULL) |
102 | 0 | , _series_sampler(NULL) { |
103 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<double>::PassiveStatus(double (*)(void*), void*) Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::PassiveStatus(unsigned long (*)(void*), void*) Unexecuted instantiation: bvar::PassiveStatus<long>::PassiveStatus(long (*)(void*), void*) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::PassiveStatus(bvar::Vector<long, 4ul> (*)(void*), void*) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::PassiveStatus(bvar::Vector<unsigned int, 2ul> (*)(void*), void*) Unexecuted instantiation: bvar::PassiveStatus<int>::PassiveStatus(int (*)(void*), void*) |
104 | | |
105 | 0 | ~PassiveStatus() { |
106 | 0 | hide(); |
107 | 0 | if (_sampler) { |
108 | 0 | _sampler->destroy(); |
109 | 0 | _sampler = NULL; |
110 | 0 | } |
111 | 0 | if (_series_sampler) { |
112 | 0 | _series_sampler->destroy(); |
113 | 0 | _series_sampler = NULL; |
114 | 0 | } |
115 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<double>::~PassiveStatus() Unexecuted instantiation: bvar::PassiveStatus<long>::~PassiveStatus() Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::~PassiveStatus() Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::~PassiveStatus() Unexecuted instantiation: bvar::PassiveStatus<int>::~PassiveStatus() Unexecuted instantiation: bvar::PassiveStatus<timeval>::~PassiveStatus() Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::~PassiveStatus() |
116 | | |
117 | 0 | int set_vector_names(const std::string& names) { |
118 | 0 | if (_series_sampler) { |
119 | 0 | _series_sampler->set_vector_names(names); |
120 | 0 | return 0; |
121 | 0 | } |
122 | 0 | return -1; |
123 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::set_vector_names(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::set_vector_names(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) |
124 | | |
125 | 0 | void describe(std::ostream& os, bool /*quote_string*/) const override { |
126 | 0 | os << get_value(); |
127 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<long>::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const Unexecuted instantiation: bvar::PassiveStatus<double>::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const Unexecuted instantiation: bvar::PassiveStatus<int>::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const Unexecuted instantiation: bvar::PassiveStatus<timeval>::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::describe(std::basic_ostream<char, std::char_traits<char> >&, bool) const |
128 | | |
129 | | #ifdef BAIDU_INTERNAL |
130 | | void get_value(boost::any* value) const override { |
131 | | if (_getfn) { |
132 | | *value = _getfn(_arg); |
133 | | } else { |
134 | | *value = Tp(); |
135 | | } |
136 | | } |
137 | | #endif |
138 | | |
139 | 128 | Tp get_value() const { |
140 | 128 | return (_getfn ? _getfn(_arg) : Tp()); |
141 | 128 | } Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::get_value() const bvar::PassiveStatus<long>::get_value() const Line | Count | Source | 139 | 29 | Tp get_value() const { | 140 | 29 | return (_getfn ? _getfn(_arg) : Tp()); | 141 | 29 | } |
bvar::PassiveStatus<double>::get_value() const Line | Count | Source | 139 | 12 | Tp get_value() const { | 140 | 12 | return (_getfn ? _getfn(_arg) : Tp()); | 141 | 12 | } |
bvar::PassiveStatus<unsigned long>::get_value() const Line | Count | Source | 139 | 58 | Tp get_value() const { | 140 | 58 | return (_getfn ? _getfn(_arg) : Tp()); | 141 | 58 | } |
bvar::PassiveStatus<int>::get_value() const Line | Count | Source | 139 | 29 | Tp get_value() const { | 140 | 29 | return (_getfn ? _getfn(_arg) : Tp()); | 141 | 29 | } |
Unexecuted instantiation: bvar::PassiveStatus<timeval>::get_value() const Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::get_value() const |
142 | | |
143 | 0 | sampler_type* get_sampler() { |
144 | 0 | if (NULL == _sampler) { |
145 | 0 | _sampler = new sampler_type(this); |
146 | 0 | _sampler->schedule(); |
147 | 0 | } |
148 | 0 | return _sampler; |
149 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<double>::get_sampler() Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::get_sampler() Unexecuted instantiation: bvar::PassiveStatus<long>::get_sampler() |
150 | | |
151 | 0 | detail::AddTo<Tp> op() const { return detail::AddTo<Tp>(); } Unexecuted instantiation: bvar::PassiveStatus<double>::op() const Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::op() const Unexecuted instantiation: bvar::PassiveStatus<long>::op() const |
152 | 0 | detail::MinusFrom<Tp> inv_op() const { return detail::MinusFrom<Tp>(); } Unexecuted instantiation: bvar::PassiveStatus<double>::inv_op() const Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::inv_op() const Unexecuted instantiation: bvar::PassiveStatus<long>::inv_op() const |
153 | | |
154 | 0 | int describe_series(std::ostream& os, const SeriesOptions& options) const override { |
155 | 0 | if (_series_sampler == NULL) { |
156 | 0 | return 1; |
157 | 0 | } |
158 | 0 | if (!options.test_only) { |
159 | 0 | _series_sampler->describe(os); |
160 | 0 | } |
161 | 0 | return 0; |
162 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<long>::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const Unexecuted instantiation: bvar::PassiveStatus<double>::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const Unexecuted instantiation: bvar::PassiveStatus<int>::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const Unexecuted instantiation: bvar::PassiveStatus<timeval>::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::describe_series(std::basic_ostream<char, std::char_traits<char> >&, bvar::SeriesOptions const&) const |
163 | | |
164 | 0 | Tp reset() { |
165 | 0 | CHECK(false) << "PassiveStatus::reset() should never be called, abort"; |
166 | 0 | abort(); |
167 | 0 | } Unexecuted instantiation: bvar::PassiveStatus<double>::reset() Unexecuted instantiation: bvar::PassiveStatus<unsigned long>::reset() Unexecuted instantiation: bvar::PassiveStatus<long>::reset() |
168 | | |
169 | | protected: |
170 | | int expose_impl(const butil::StringPiece& prefix, |
171 | | const butil::StringPiece& name, |
172 | 92 | DisplayFilter display_filter) override { |
173 | 92 | const int rc = Variable::expose_impl(prefix, name, display_filter); |
174 | 92 | if (ADDITIVE && |
175 | 92 | rc == 0 && |
176 | 92 | _series_sampler == NULL && |
177 | 92 | FLAGS_save_series) { |
178 | 92 | _series_sampler = new SeriesSampler(this); |
179 | 92 | _series_sampler->schedule(); |
180 | 92 | } |
181 | 92 | return rc; |
182 | 92 | } bvar::PassiveStatus<long>::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) Line | Count | Source | 172 | 20 | DisplayFilter display_filter) override { | 173 | 20 | const int rc = Variable::expose_impl(prefix, name, display_filter); | 174 | 20 | if (ADDITIVE && | 175 | 20 | rc == 0 && | 176 | 20 | _series_sampler == NULL && | 177 | 20 | FLAGS_save_series) { | 178 | 20 | _series_sampler = new SeriesSampler(this); | 179 | 20 | _series_sampler->schedule(); | 180 | 20 | } | 181 | 20 | return rc; | 182 | 20 | } |
Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<long, 4ul> >::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) bvar::PassiveStatus<double>::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) Line | Count | Source | 172 | 12 | DisplayFilter display_filter) override { | 173 | 12 | const int rc = Variable::expose_impl(prefix, name, display_filter); | 174 | 12 | if (ADDITIVE && | 175 | 12 | rc == 0 && | 176 | 12 | _series_sampler == NULL && | 177 | 12 | FLAGS_save_series) { | 178 | 12 | _series_sampler = new SeriesSampler(this); | 179 | 12 | _series_sampler->schedule(); | 180 | 12 | } | 181 | 12 | return rc; | 182 | 12 | } |
bvar::PassiveStatus<unsigned long>::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) Line | Count | Source | 172 | 40 | DisplayFilter display_filter) override { | 173 | 40 | const int rc = Variable::expose_impl(prefix, name, display_filter); | 174 | 40 | if (ADDITIVE && | 175 | 40 | rc == 0 && | 176 | 40 | _series_sampler == NULL && | 177 | 40 | FLAGS_save_series) { | 178 | 40 | _series_sampler = new SeriesSampler(this); | 179 | 40 | _series_sampler->schedule(); | 180 | 40 | } | 181 | 40 | return rc; | 182 | 40 | } |
bvar::PassiveStatus<int>::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) Line | Count | Source | 172 | 20 | DisplayFilter display_filter) override { | 173 | 20 | const int rc = Variable::expose_impl(prefix, name, display_filter); | 174 | 20 | if (ADDITIVE && | 175 | 20 | rc == 0 && | 176 | 20 | _series_sampler == NULL && | 177 | 20 | FLAGS_save_series) { | 178 | 20 | _series_sampler = new SeriesSampler(this); | 179 | 20 | _series_sampler->schedule(); | 180 | 20 | } | 181 | 20 | return rc; | 182 | 20 | } |
Unexecuted instantiation: bvar::PassiveStatus<timeval>::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) Unexecuted instantiation: bvar::PassiveStatus<bvar::Vector<unsigned int, 2ul> >::expose_impl(butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, butil::BasicStringPiece<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, bvar::DisplayFilter) |
183 | | |
184 | | private: |
185 | | Tp (*_getfn)(void*); |
186 | | void* _arg; |
187 | | sampler_type* _sampler; |
188 | | SeriesSampler* _series_sampler; |
189 | | }; |
190 | | |
191 | | // ccover g++ may complain about ADDITIVE is undefined unless it's |
192 | | // explicitly declared here. |
193 | | template <typename Tp> const bool PassiveStatus<Tp>::ADDITIVE; |
194 | | |
195 | | // Specialize std::string for using std::ostream& as a more friendly |
196 | | // interface for user's callback. |
197 | | template <> |
198 | | class PassiveStatus<std::string> : public Variable { |
199 | | public: |
200 | | // NOTE: You must be very careful about lifetime of `arg' which should be |
201 | | // valid during lifetime of PassiveStatus. |
202 | | PassiveStatus(const butil::StringPiece& name, |
203 | | void (*print)(std::ostream&, void*), void* arg) |
204 | 72 | : _print(print), _arg(arg) { |
205 | 72 | expose(name); |
206 | 72 | } |
207 | | |
208 | | PassiveStatus(const butil::StringPiece& prefix, |
209 | | const butil::StringPiece& name, |
210 | | void (*print)(std::ostream&, void*), void* arg) |
211 | 0 | : _print(print), _arg(arg) { |
212 | 0 | expose_as(prefix, name); |
213 | 0 | } |
214 | | |
215 | | PassiveStatus(void (*print)(std::ostream&, void*), void* arg) |
216 | 0 | : _print(print), _arg(arg) {} |
217 | | |
218 | 0 | ~PassiveStatus() { |
219 | 0 | hide(); |
220 | 0 | } |
221 | | |
222 | 0 | void describe(std::ostream& os, bool quote_string) const override { |
223 | 0 | if (quote_string) { |
224 | 0 | if (_print) { |
225 | 0 | os << '"'; |
226 | 0 | _print(os, _arg); |
227 | 0 | os << '"'; |
228 | 0 | } else { |
229 | 0 | os << "\"null\""; |
230 | 0 | } |
231 | 0 | } else { |
232 | 0 | if (_print) { |
233 | 0 | _print(os, _arg); |
234 | 0 | } else { |
235 | 0 | os << "null"; |
236 | 0 | } |
237 | 0 | } |
238 | 0 | } |
239 | | |
240 | | private: |
241 | | void (*_print)(std::ostream&, void*); |
242 | | void* _arg; |
243 | | }; |
244 | | |
245 | | template <typename Tp> |
246 | | class BasicPassiveStatus : public PassiveStatus<Tp> { |
247 | | public: |
248 | | BasicPassiveStatus(const butil::StringPiece& name, |
249 | | Tp (*getfn)(void*), void* arg) |
250 | | : PassiveStatus<Tp>(name, getfn, arg) {} |
251 | | |
252 | | BasicPassiveStatus(const butil::StringPiece& prefix, |
253 | | const butil::StringPiece& name, |
254 | | Tp (*getfn)(void*), void* arg) |
255 | | : PassiveStatus<Tp>(prefix, name, getfn, arg) {} |
256 | | |
257 | | BasicPassiveStatus(Tp (*getfn)(void*), void* arg) |
258 | | : PassiveStatus<Tp>(getfn, arg) {} |
259 | | }; |
260 | | |
261 | | template <> |
262 | | class BasicPassiveStatus<std::string> : public PassiveStatus<std::string> { |
263 | | public: |
264 | | BasicPassiveStatus(const butil::StringPiece& name, |
265 | | void (*print)(std::ostream&, void*), void* arg) |
266 | 0 | : PassiveStatus<std::string>(name, print, arg) {} |
267 | | |
268 | | BasicPassiveStatus(const butil::StringPiece& prefix, |
269 | | const butil::StringPiece& name, |
270 | | void (*print)(std::ostream&, void*), void* arg) |
271 | 0 | : PassiveStatus<std::string>(prefix, name, print, arg) {} |
272 | | |
273 | | BasicPassiveStatus(void (*print)(std::ostream&, void*), void* arg) |
274 | 0 | : PassiveStatus<std::string>(print, arg) {} |
275 | | }; |
276 | | |
277 | | |
278 | | } // namespace bvar |
279 | | |
280 | | #endif //BVAR_PASSIVE_STATUS_H |