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 19namespace mojo { 20namespace python { 21 22// Create a mojo::Closure from a callable python object. 23mojo::Closure BuildClosure(PyObject* callable); 24 25class 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