Class: UringMachine::AsyncOp

Inherits:
Object
  • Object
show all
Defined in:
ext/um/um_async_op_class.c

Instance Method Summary collapse

Constructor Details

#initializeObject



41
42
43
44
45
# File 'ext/um/um_async_op_class.c', line 41

VALUE AsyncOp_initialize(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  memset(async_op, 0, sizeof(struct um_async_op));
  return self;
}

Instance Method Details

#awaitObject



97
98
99
100
101
102
103
104
105
# File 'ext/um/um_async_op_class.c', line 97

VALUE AsyncOp_await(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  if (async_op_is_done(async_op))
    return INT2NUM(async_op->op->result.res);

  return um_async_op_await(async_op);
}

#cancelObject



107
108
109
110
111
112
113
114
115
# File 'ext/um/um_async_op_class.c', line 107

VALUE AsyncOp_cancel(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  if (!async_op_is_done(async_op))
    um_async_op_cancel(async_op);

  return self;
}

#cancelled?Boolean

Returns:

  • (Boolean)


88
89
90
91
92
93
94
95
# File 'ext/um/um_async_op_class.c', line 88

VALUE AsyncOp_cancelled_p(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  if (!async_op_is_done(async_op)) return Qnil;

  return (async_op->op->result.res == -ECANCELED) ? Qtrue : Qfalse;
}

#done?Boolean

Returns:

  • (Boolean)


74
75
76
77
78
79
# File 'ext/um/um_async_op_class.c', line 74

VALUE AsyncOp_done_p(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  return async_op_is_done(async_op) ? Qtrue : Qfalse;
}

#joinObject



97
98
99
100
101
102
103
104
105
# File 'ext/um/um_async_op_class.c', line 97

VALUE AsyncOp_await(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  if (async_op_is_done(async_op))
    return INT2NUM(async_op->op->result.res);

  return um_async_op_await(async_op);
}

#kindObject



62
63
64
65
66
67
68
69
70
71
72
# File 'ext/um/um_async_op_class.c', line 62

VALUE AsyncOp_kind(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  switch(async_op->op->kind) {
    case OP_TIMEOUT:
      return SYM_timeout;
    default:
      um_raise_internal_error("Invalid op kind");
  }
}

#resultObject



81
82
83
84
85
86
# File 'ext/um/um_async_op_class.c', line 81

VALUE AsyncOp_result(VALUE self) {
  struct um_async_op *async_op = AsyncOp_data(self);
  raise_on_missing_op(async_op);

  return async_op_is_done(async_op) ? INT2NUM(async_op->op->result.res) : Qnil;
}