1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MOJO_PUBLIC_PYTHON_SRC_PYTHON_SYSTEM_HELPER_H_ 6 #define MOJO_PUBLIC_PYTHON_SRC_PYTHON_SYSTEM_HELPER_H_ 7 8 // Python must be the first include, as it defines preprocessor variable without 9 // checking if they already exist. 10 #include <Python.h> 11 12 #include <map> 13 14 #include "mojo/public/c/environment/async_waiter.h" 15 #include "mojo/public/c/system/types.h" 16 #include "mojo/public/cpp/bindings/callback.h" 17 #include "mojo/public/cpp/bindings/lib/shared_ptr.h" 18 19 namespace mojo { 20 namespace python { 21 22 // Create a mojo::Closure from a callable python object. 23 mojo::Closure BuildClosure(PyObject* callable); 24 25 class PythonAsyncWaiter { 26 public: 27 PythonAsyncWaiter(); 28 ~PythonAsyncWaiter(); 29 MojoAsyncWaitID AsyncWait(MojoHandle handle, 30 MojoHandleSignals signals, 31 MojoDeadline deadline, 32 PyObject* callable); 33 34 void CancelWait(MojoAsyncWaitID wait_id); 35 36 private: 37 class AsyncWaiterRunnable; 38 39 typedef std::map<MojoAsyncWaitID, 40 internal::SharedPtr<mojo::Callback<void(MojoResult)> > > 41 CallbackMap; 42 43 CallbackMap callbacks_; 44 const MojoAsyncWaiter* async_waiter_; 45 }; 46 47 } // namespace python 48 } // namespace mojo 49 50 #endif // MOJO_PUBLIC_PYTHON_SRC_PYTHON_SYSTEM_HELPER_H_ 51