OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
watermark.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2016 Juniper Networks, Inc. All rights reserved.
3 //
4 
5 // watermark.h
6 // class to handle multiple level high/low watermarks
7 // this is NOT thread-safe, caller needs take mutex.
8 //
9 #ifndef BASE_WATERMARK_H_
10 #define BASE_WATERMARK_H_
11 
12 #include <set>
13 #include <boost/function.hpp>
14 #include <base/util.h>
15 
16 // WaterMarkInfo
17 typedef boost::function<void (size_t)> WaterMarkCallback;
18 
19 struct WaterMarkInfo {
20  WaterMarkInfo(size_t count, WaterMarkCallback cb) :
21  count_(count),
22  cb_(cb) {
23  }
24  friend inline bool operator<(const WaterMarkInfo& lhs,
25  const WaterMarkInfo& rhs);
26  friend inline bool operator==(const WaterMarkInfo& lhs,
27  const WaterMarkInfo& rhs);
28  size_t count_;
30 };
31 
32 inline bool operator<(const WaterMarkInfo& lhs, const WaterMarkInfo& rhs) {
33  return lhs.count_ < rhs.count_;
34 }
35 
36 inline bool operator==(const WaterMarkInfo& lhs, const WaterMarkInfo& rhs) {
37  return lhs.count_ == rhs.count_;
38 }
39 
40 typedef std::set<WaterMarkInfo> WaterMarkInfos;
41 
43 public:
45 
46  void SetHighWaterMark(const WaterMarkInfos &high_water);
47  void SetHighWaterMark(const WaterMarkInfo& hwm_info);
48  void ResetHighWaterMark();
50  void SetLowWaterMark(const WaterMarkInfos &low_water);
51  void SetLowWaterMark(const WaterMarkInfo& lwm_info);
52  void ResetLowWaterMark();
54  void ProcessWaterMarks(size_t in_count, size_t curr_count);
55  bool AreWaterMarksSet() const;
56  void ProcessHighWaterMarks(size_t count);
57  void ProcessLowWaterMarks(size_t count);
58 
59 private:
62  size_t last_count_;
63 
65 };
66 
67 #endif /* BASE_WATERMARK_H_ */
bool operator<(const WaterMarkInfo &lhs, const WaterMarkInfo &rhs)
Definition: watermark.h:32
boost::function< void(size_t)> WaterMarkCallback
Definition: watermark.h:17
void ProcessLowWaterMarks(size_t count)
Definition: watermark.cc:74
bool AreWaterMarksSet() const
Definition: watermark.cc:51
WaterMarkCallback cb_
Definition: watermark.h:29
size_t last_count_
Definition: watermark.h:62
void ProcessWaterMarks(size_t in_count, size_t curr_count)
Definition: watermark.cc:43
WaterMarkInfos GetLowWaterMark() const
Definition: watermark.cc:39
std::set< WaterMarkInfo > WaterMarkInfos
Definition: watermark.h:40
size_t count_
Definition: watermark.h:28
void SetLowWaterMark(const WaterMarkInfos &low_water)
Definition: watermark.cc:27
bool operator==(const WaterMarkInfo &lhs, const WaterMarkInfo &rhs)
Definition: watermark.h:36
void SetHighWaterMark(const WaterMarkInfos &high_water)
Definition: watermark.cc:11
void ResetLowWaterMark()
Definition: watermark.cc:35
friend bool operator==(const WaterMarkInfo &lhs, const WaterMarkInfo &rhs)
Definition: watermark.h:36
DISALLOW_COPY_AND_ASSIGN(WaterMarkTuple)
WaterMarkInfos GetHighWaterMark() const
Definition: watermark.cc:23
friend bool operator<(const WaterMarkInfo &lhs, const WaterMarkInfo &rhs)
Definition: watermark.h:32
WaterMarkInfos high_water_
Definition: watermark.h:60
void ProcessHighWaterMarks(size_t count)
Definition: watermark.cc:55
WaterMarkInfos low_water_
Definition: watermark.h:61
WaterMarkInfo(size_t count, WaterMarkCallback cb)
Definition: watermark.h:20
void ResetHighWaterMark()
Definition: watermark.cc:19