| // This file is part of Eigen, a lightweight C++ template library | 
 | // for linear algebra. | 
 | // | 
 | // Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com> | 
 | // | 
 | // This Source Code Form is subject to the terms of the Mozilla | 
 | // Public License v. 2.0. If a copy of the MPL was not distributed | 
 | // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
 |  | 
 | #ifndef EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H | 
 | #define EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H | 
 |  | 
 | #include "./InternalHeaderCheck.h" | 
 |  | 
 | namespace Eigen { | 
 |  | 
 | // This defines an interface that ThreadPoolDevice can take to use | 
 | // custom thread pools underneath. | 
 | class ThreadPoolInterface { | 
 |  public: | 
 |   // Submits a closure to be run by a thread in the pool. | 
 |   virtual void Schedule(std::function<void()> fn) = 0; | 
 |  | 
 |   // Submits a closure to be run by threads in the range [start, end) in the | 
 |   // pool. | 
 |   virtual void ScheduleWithHint(std::function<void()> fn, int /*start*/, | 
 |                                 int /*end*/) { | 
 |     // Just defer to Schedule in case sub-classes aren't interested in | 
 |     // overriding this functionality. | 
 |     Schedule(fn); | 
 |   } | 
 |  | 
 |   // If implemented, stop processing the closures that have been enqueued. | 
 |   // Currently running closures may still be processed. | 
 |   // If not implemented, does nothing. | 
 |   virtual void Cancel() {} | 
 |  | 
 |   // Returns the number of threads in the pool. | 
 |   virtual int NumThreads() const = 0; | 
 |  | 
 |   // Returns a logical thread index between 0 and NumThreads() - 1 if called | 
 |   // from one of the threads in the pool. Returns -1 otherwise. | 
 |   virtual int CurrentThreadId() const = 0; | 
 |  | 
 |   virtual ~ThreadPoolInterface() {} | 
 | }; | 
 |  | 
 | }  // namespace Eigen | 
 |  | 
 | #endif  // EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H |