12b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// This file is part of Eigen, a lightweight C++ template library
22b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// for linear algebra.
32b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang//
42b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
52b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang//
62b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// This Source Code Form is subject to the terms of the Mozilla
72b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// Public License v. 2.0. If a copy of the MPL was not distributed
82b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
92b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
102b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#ifndef EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H
112b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#define EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H
122b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
132b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangnamespace Eigen {
142b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
152b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// This defines an interface that ThreadPoolDevice can take to use
162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// custom thread pools underneath.
172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangclass ThreadPoolInterface {
182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang public:
192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  virtual void Schedule(std::function<void()> fn) = 0;
202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  // Returns the number of threads in the pool.
222b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  virtual int NumThreads() const = 0;
232b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
242b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  // Returns a logical thread index between 0 and NumThreads() - 1 if called
252b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  // from one of the threads in the pool. Returns -1 otherwise.
262b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  virtual int CurrentThreadId() const = 0;
272b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  virtual ~ThreadPoolInterface() {}
292b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
302b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
312b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang}  // namespace Eigen
322b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
332b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#endif  // EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H
34