Method: RCSimCinterface.rcsim_make_timeWait

Defined in:
ext/hruby_sim/hruby_rcsim_build.c

.rcsim_make_timeWait(unitV, delayV) ⇒ Object

Creating a time wait C object.



543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
# File 'ext/hruby_sim/hruby_rcsim_build.c', line 543

VALUE rcsim_make_timeWait(VALUE mod, VALUE unitV, VALUE delayV) {
    // printf("rcsim_make_timeWait\n");
    /* Allocates the time wait. */
    TimeWait timeWait = (TimeWait)malloc(sizeof(TimeWaitS));
    // printf("timeWait=%p\n",timeWait);
    /* Set it up. */
    timeWait->kind = TIME_WAIT;
    timeWait->owner = NULL;
    /* Compute the delay. */
    unsigned long long delay;
    delay = NUM2LL(delayV);
    /* Adjust the delay depending on the unit. */
    const char* unit = rb_id2name(SYM2ID(unitV));
    switch(unit[0]) {
        case 'f': delay /= 1000;          break;
        case 'p': /* Ok as is. */         break;
        case 'n': delay *= 1000;          break;
        case 'u': delay *= 1000000;       break;
        case 'm': delay *= 1000000000;    break;
        case 's': delay *= 1000000000000; break;
        default:
                  perror("Invalid delay unit.");
    }
    timeWait->delay = delay;
    /* Returns the C time wait embedded into a ruby VALUE. */
    VALUE res;
    rcsim_to_value(TimeWaitS,timeWait,res);
    return res;
}