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);
}
|