Get *=default*ed default constructors
[folly.git] / folly / io / async / TimeoutManager.h
1 /*
2  * Copyright 2015 Facebook, Inc.
3  *
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements. See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership. The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License. You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied. See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21 #pragma once
22
23 #include <chrono>
24 #include <stdint.h>
25
26 namespace folly {
27
28 class AsyncTimeout;
29
30 /**
31  * Base interface to be implemented by all classes expecting to manage
32  * timeouts. AsyncTimeout will use implementations of this interface
33  * to schedule/cancel timeouts.
34  */
35 class TimeoutManager {
36  public:
37   typedef std::chrono::milliseconds timeout_type;
38
39   enum class InternalEnum {
40     INTERNAL,
41     NORMAL
42   };
43
44   virtual ~TimeoutManager() = default;
45
46   /**
47    * Attaches/detaches TimeoutManager to AsyncTimeout
48    */
49   virtual void attachTimeoutManager(AsyncTimeout* obj,
50                                     InternalEnum internal) = 0;
51   virtual void detachTimeoutManager(AsyncTimeout* obj) = 0;
52
53   /**
54    * Schedules AsyncTimeout to fire after `timeout` milliseconds
55    */
56   virtual bool scheduleTimeout(AsyncTimeout* obj,
57                                timeout_type timeout) = 0;
58
59   /**
60    * Cancels the AsyncTimeout, if scheduled
61    */
62   virtual void cancelTimeout(AsyncTimeout* obj) = 0;
63
64   /**
65    * This is used to mark the beginning of a new loop cycle by the
66    * first handler fired within that cycle.
67    */
68   virtual bool bumpHandlingTime() = 0;
69
70   /**
71    * Helper method to know whether we are running in the timeout manager
72    * thread
73    */
74   virtual bool isInTimeoutManagerThread() = 0;
75 };
76
77 } // folly