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