|  | // 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_ENVIRONMENT_H | 
|  | #define EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H | 
|  |  | 
|  | #include "./InternalHeaderCheck.h" | 
|  |  | 
|  | namespace Eigen { | 
|  |  | 
|  | struct StlThreadEnvironment { | 
|  | struct Task { | 
|  | std::function<void()> f; | 
|  | }; | 
|  |  | 
|  | // EnvThread constructor must start the thread, | 
|  | // destructor must join the thread. | 
|  | class EnvThread { | 
|  | public: | 
|  | EnvThread(std::function<void()> f) : thr_(std::move(f)) {} | 
|  | ~EnvThread() { thr_.join(); } | 
|  | // This function is called when the threadpool is cancelled. | 
|  | void OnCancel() { } | 
|  |  | 
|  | private: | 
|  | std::thread thr_; | 
|  | }; | 
|  |  | 
|  | EnvThread* CreateThread(std::function<void()> f) { return new EnvThread(std::move(f)); } | 
|  | Task CreateTask(std::function<void()> f) { return Task{std::move(f)}; } | 
|  | void ExecuteTask(const Task& t) { t.f(); } | 
|  | }; | 
|  |  | 
|  | }  // namespace Eigen | 
|  |  | 
|  | #endif  // EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H |