1 | /* |
2 | * Copyright 2017-present Facebook, Inc. |
3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. |
6 | * You may obtain a copy of the License at |
7 | * |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * |
10 | * Unless required by applicable law or agreed to in writing, software |
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. |
15 | */ |
16 | |
17 | #pragma once |
18 | |
19 | #include <folly/Executor.h> |
20 | |
21 | namespace folly { |
22 | class EventBase; |
23 | } // namespace folly |
24 | |
25 | namespace folly { |
26 | |
27 | // An IOExecutor is an executor that operates on at least one EventBase. One of |
28 | // these EventBases should be accessible via getEventBase(). The event base |
29 | // returned by a call to getEventBase() is implementation dependent. |
30 | // |
31 | // Note that IOExecutors don't necessarily loop on the base themselves - for |
32 | // instance, EventBase itself is an IOExecutor but doesn't drive itself. |
33 | // |
34 | // Implementations of IOExecutor are eligible to become the global IO executor, |
35 | // returned on every call to getIOExecutor(), via setIOExecutor(). |
36 | // These functions are declared in GlobalExecutor.h |
37 | // |
38 | // If getIOExecutor is called and none has been set, a default global |
39 | // IOThreadPoolExecutor will be created and returned. |
40 | class IOExecutor : public virtual folly::Executor { |
41 | public: |
42 | ~IOExecutor() override = default; |
43 | virtual folly::EventBase* getEventBase() = 0; |
44 | }; |
45 | |
46 | } // namespace folly |
47 | |