IceReportSkipper.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2011-2017, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5 *
6 * ArmarX is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * ArmarX is distributed in the hope that it will be useful, but
11 * 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, see <http://www.gnu.org/licenses/>.
17 *
18 * @package ArmarX
19 * @author Mirko Waechter( mirko.waechter at kit dot edu)
20 * @date 2017
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
24#pragma once
25
26#include <map>
27#include <mutex>
28#include <optional>
29
30#include <Ice/Current.h>
31#include <IceUtil/Time.h>
32
33namespace armarx
34{
35
37 {
38 public:
39 IceReportSkipper(float maxFrequency);
40
41 /**
42 * @brief checks the frequency and returns true if the minimum required time for the frequency has passed.
43 * Usage:
44 \code
45 if(!skipper.checkFrequency())
46 {
47 // skip
48 return;
49 }
50 // do your calculations
51 \endcode
52 * @param c
53 * @param frequency
54 * @return
55 */
56 bool checkFrequency(const Ice::Current& c,
57 const std::optional<float>& frequency = std::nullopt);
58 bool checkFrequency(const std::string& operationName,
59 const std::optional<float>& frequency = std::nullopt);
60
61 private:
62 struct SkippingData
63 {
64 IceUtil::Time lastTimestamp;
65 float maxFrequency;
66 };
67
68 std::map<std::string, SkippingData> operationData;
69 float maxFrequency;
70 std::mutex mutex;
71 };
72
73} // namespace armarx
constexpr T c
bool checkFrequency(const Ice::Current &c, const std::optional< float > &frequency=std::nullopt)
checks the frequency and returns true if the minimum required time for the frequency has passed.
IceReportSkipper(float maxFrequency)
This file offers overloads of toIce() and fromIce() functions for STL container types.