Index: mojo/edk/system/handle_signals_state.h |
diff --git a/mojo/edk/system/handle_signals_state.h b/mojo/edk/system/handle_signals_state.h |
index f2412787cbf61ce31d1c8d16997d6981bb12c4e5..1c47a288c1e27914798e2f8395f2122b873a5172 100644 |
--- a/mojo/edk/system/handle_signals_state.h |
+++ b/mojo/edk/system/handle_signals_state.h |
@@ -5,9 +5,45 @@ |
#ifndef MOJO_EDK_SYSTEM_HANDLE_SIGNALS_STATE_H_ |
#define MOJO_EDK_SYSTEM_HANDLE_SIGNALS_STATE_H_ |
-#include "mojo/public/cpp/system/handle_signals_state.h" |
+#include "mojo/edk/system/system_impl_export.h" |
+#include "mojo/public/c/system/types.h" |
-// TODO(rockot): Remove this header and use the C++ system library type |
-// directly inside the EDK. |
+namespace mojo { |
+namespace edk { |
+ |
+// Just "add" some constructors and methods to the C struct |
+// |MojoHandleSignalsState| (for convenience). This should add no overhead. |
+struct MOJO_SYSTEM_IMPL_EXPORT HandleSignalsState final |
+ : public MojoHandleSignalsState { |
+ HandleSignalsState() { |
+ satisfied_signals = MOJO_HANDLE_SIGNAL_NONE; |
+ satisfiable_signals = MOJO_HANDLE_SIGNAL_NONE; |
+ } |
+ HandleSignalsState(MojoHandleSignals satisfied, |
+ MojoHandleSignals satisfiable) { |
+ satisfied_signals = satisfied; |
+ satisfiable_signals = satisfiable; |
+ } |
+ |
+ bool equals(const HandleSignalsState& other) const { |
+ return satisfied_signals == other.satisfied_signals && |
+ satisfiable_signals == other.satisfiable_signals; |
+ } |
+ |
+ bool satisfies(MojoHandleSignals signals) const { |
+ return !!(satisfied_signals & signals); |
+ } |
+ |
+ bool can_satisfy(MojoHandleSignals signals) const { |
+ return !!(satisfiable_signals & signals); |
+ } |
+ |
+ // (Copy and assignment allowed.) |
+}; |
+static_assert(sizeof(HandleSignalsState) == sizeof(MojoHandleSignalsState), |
+ "HandleSignalsState should add no overhead"); |
+ |
+} // namespace edk |
+} // namespace mojo |
#endif // MOJO_EDK_SYSTEM_HANDLE_SIGNALS_STATE_H_ |