Class: Channel
- Inherits:
-
Object
- Object
- Channel
- Defined in:
- ext/channel/channel.c
Instance Method Summary collapse
- #<<(obj) ⇒ Object
- #deferrable? ⇒ Boolean
- #initialize(*args) ⇒ Object constructor
- #size ⇒ Object
- #subscribe(*args) ⇒ Object
- #subscribers ⇒ Object
Constructor Details
#initialize(*args) ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'ext/channel/channel.c', line 58 static VALUE rb_channel_initialize( int argc, VALUE *argv, VALUE ch ) { VALUE size, defer; int channel_size, def; rb_scan_args(argc, argv, "02", &size, &defer); channel_size = NIL_P(size) ? 0 : FIX2INT(size); def = (defer == Qtrue) ? 1 : 0; return rb_channel_new(ch, channel_size, def); } |
Instance Method Details
#<<(obj) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'ext/channel/channel.c', line 112 static VALUE rb_channel_push( VALUE ch, VALUE obj ) { void *args[3]; RChannel* chs = GetChannelStruct(ch); if (chs->defer == 1){ args[0] = chs; args[1] = &ch; args[2] = &obj; rb_thread_create( rb_channel_push0, &args); }else{ rb_channel_push0(chs,&ch,&obj); } return ch; } |
#deferrable? ⇒ Boolean
83 84 85 86 87 88 |
# File 'ext/channel/channel.c', line 83 static VALUE rb_channel_deferrable_p( VALUE ch ) { RChannel* chs = GetChannelStruct(ch); return (chs->defer == 1) ? Qtrue : Qfalse; } |
#size ⇒ Object
69 70 71 72 73 74 |
# File 'ext/channel/channel.c', line 69 static VALUE rb_channel_size( VALUE ch ) { RChannel* chs = GetChannelStruct(ch); return INT2FIX(chs->size); } |
#subscribe(*args) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'ext/channel/channel.c', line 90 static VALUE rb_channel_subscribe( int argc, VALUE *argv, VALUE ch ) { VALUE cb; RChannel* chs = GetChannelStruct(ch); if (!rb_block_given_p()) rb_raise(rb_eArgError, "Block callback required!"); if (chs->sbs == chs->size) rb_raise(rb_eArgError, "Maximum number of subscribers exceeded!"); cb = rb_block_proc(); chs->subscribers[chs->sbs] = cb; chs->sbs++; return ch; } |
#subscribers ⇒ Object
76 77 78 79 80 81 |
# File 'ext/channel/channel.c', line 76 static VALUE rb_channel_subscribers( VALUE ch ) { RChannel* chs = GetChannelStruct(ch); return INT2FIX(chs->sbs); } |