Imported Upstream version 0.9.2
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / common / expiryTimer / include / ExpiryTimer.h
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #ifndef _EXPIRY_TIMER_H_
22 #define _EXPIRY_TIMER_H_
23
24 #include <functional>
25 #include <unordered_map>
26 #include <memory>
27
28 namespace OIC
29 {
30     namespace Service
31     {
32
33         class TimerTask;
34
35         class ExpiryTimer
36         {
37         public:
38             typedef unsigned int Id;
39             typedef std::function< void(Id) > Callback;
40             typedef long long DelayInMilliSec;
41
42         public:
43             ExpiryTimer();
44             ~ExpiryTimer();
45
46             ExpiryTimer(ExpiryTimer&&) = default;
47             ExpiryTimer& operator=(ExpiryTimer&&) = default;
48
49             ExpiryTimer(const ExpiryTimer&) = delete;
50             ExpiryTimer& operator=(const ExpiryTimer&) = delete;
51
52             Id post(DelayInMilliSec, Callback);
53             bool cancel(Id);
54             void cancelAll();
55
56             size_t getNumOfPending();
57             size_t getNumOfPending() const;
58
59         private:
60             void sweep();
61
62         private:
63             size_t m_nextSweep;
64
65             std::unordered_map< Id, std::shared_ptr< TimerTask > > m_tasks;
66         };
67
68     }
69 }
70 #endif //_EXPIRY_TIMER_H_