| Index: mojo/public/dart/src/types.dart
|
| diff --git a/mojo/public/dart/src/types.dart b/mojo/public/dart/src/types.dart
|
| index fa9e46579c2f0ce310e9e0311ae0f1f988c80f05..54c5319a8ce86a2eef7e06b0c3043d8b4a099ec1 100644
|
| --- a/mojo/public/dart/src/types.dart
|
| +++ b/mojo/public/dart/src/types.dart
|
| @@ -69,7 +69,8 @@ class MojoResult {
|
| case kDataLoss: return DATA_LOSS;
|
| case kBusy: return BUSY;
|
| case kShouldWait: return SHOULD_WAIT;
|
| - default: return null;
|
| + default:
|
| + throw 'Invalid Mojo result';
|
| }
|
| }
|
|
|
| @@ -119,36 +120,82 @@ class MojoResult {
|
|
|
|
|
| class MojoHandleSignals {
|
| - static const int NONE = 0;
|
| - static const int READABLE = 1 << 0;
|
| - static const int WRITABLE = 1 << 1;
|
| - static const int PEER_CLOSED = 1 << 2;
|
| - static const int READWRITE = READABLE | WRITABLE;
|
| -
|
| - static bool isNone(int mask) => mask == NONE;
|
| - static bool isReadable(int mask) => (mask & READABLE) == READABLE;
|
| - static bool isWritable(int mask) => (mask & WRITABLE) == WRITABLE;
|
| - static bool isReadWrite(int mask) => (mask & READWRITE) == READWRITE;
|
| - static int toggleWrite(int mask) =>
|
| - isWritable(mask) ? (mask & ~WRITABLE) : (mask | WRITABLE);
|
| - static bool isPeerClosed(int mask) => (mask & PEER_CLOSED) == PEER_CLOSED;
|
| + static const int kNone = 0;
|
| + static const int kReadable = 1 << 0;
|
| + static const int kWritable = 1 << 1;
|
| + static const int kPeerClosed = 1 << 2;
|
| + static const int kReadWrite = kReadable | kWritable;
|
| + static const int kAll = kReadable | kWritable | kPeerClosed;
|
| +
|
| + // TODO(zra): Does PEER_CLOSED | anything else make sense?
|
| + static const NONE = const MojoHandleSignals._(kNone);
|
| + static const READABLE = const MojoHandleSignals._(kReadable);
|
| + static const WRITABLE = const MojoHandleSignals._(kWritable);
|
| + static const PEER_CLOSED = const MojoHandleSignals._(kPeerClosed);
|
| + static const READWRITE = const MojoHandleSignals._(kReadWrite);
|
| + static const ALL = const MojoHandleSignals._(kAll);
|
| +
|
| + final int value;
|
| +
|
| + const MojoHandleSignals._(this.value);
|
| +
|
| + factory MojoHandleSignals(int value) {
|
| + switch (value) {
|
| + case kNone: return NONE;
|
| + case kReadable: return READABLE;
|
| + case kWritable: return WRITABLE;
|
| + case kPeerClosed: return PEER_CLOSED;
|
| + case kReadWrite: return READWRITE;
|
| + case kAll: return ALL;
|
| + default:
|
| + throw 'Invalid handle signal';
|
| + }
|
| + }
|
| +
|
| + bool get isNone => (this == NONE);
|
| + bool get isReadable => (value & kReadable) == kReadable;
|
| + bool get isWritable => (value & kWritable) == kWritable;
|
| + bool get isPeerClosed => (value & kPeerClosed) == kPeerClosed;
|
| + bool get isReadWrite => (value & kReadWrite) == kReadWrite;
|
| + bool get isAll => (this == ALL);
|
| +
|
| + MojoHandleSignals operator +(MojoHandleSignals other) {
|
| + return new MojoHandleSignals(value | other.value);
|
| + }
|
| +
|
| + MojoHandleSignals operator -(MojoHandleSignals other) {
|
| + return new MojoHandleSignals(value & ~other.value);
|
| + }
|
| +
|
| + String toString() {
|
| + switch (value) {
|
| + case kNone: return "NONE";
|
| + case kReadable: return "READABLE";
|
| + case kWritable: return "WRITABLE";
|
| + case kPeerClosed: return "PEER_CLOSED";
|
| + case kReadWrite: return "READWRITE";
|
| + case kAll: return "ALL";
|
| + default: return "<invalid signal>";
|
| + }
|
| + }
|
| }
|
|
|
|
|
| class MojoHandleSignalsState {
|
| MojoHandleSignalsState(this.satisfied_signals,
|
| this.satisfiable_signals);
|
| -
|
| final int satisfied_signals;
|
| final int satisfiable_signals;
|
| }
|
|
|
| +
|
| class MojoWaitResult {
|
| MojoWaitResult(this.result, this.state);
|
| final MojoResult result;
|
| MojoHandleSignalsState state;
|
| }
|
|
|
| +
|
| class MojoWaitManyResult {
|
| MojoWaitManyResult(this.result, this.index, this.states);
|
| final MojoResult result;
|
|
|