Method: RCSimCinterface.rcsim_add_code_events
- Defined in:
- ext/hruby_sim/hruby_rcsim_build.c
.rcsim_add_code_events(codeV, eventVs) ⇒ Object
Adds events to a C code.
1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 |
# File 'ext/hruby_sim/hruby_rcsim_build.c', line 1208
VALUE rcsim_add_code_events(VALUE mod, VALUE codeV, VALUE eventVs) {
/* Get the C code from the Ruby value. */
Code code;
value_to_rcsim(CodeS,codeV,code);
// printf("rcsim_add_codee_events with code=%p\n",code);
/* Prepare the size for the events. */
long num = RARRAY_LEN(eventVs);
long old_num = code->num_events;
code->num_events += num;
// printf("first code->events=%p\n",code->events); fflush(stdout);
code->events = realloc(code->events,
sizeof(Event[code->num_events]));
// printf("now code->events=%p\n",code->events); fflush(stdout);
// printf("access test: %p\n",code->events[0]); fflush(stdout);
/* Get and add the events from the Ruby value. */
for(long i=0; i< num; ++i) {
Event event;
value_to_rcsim(EventS,rb_ary_entry(eventVs,i),event);
code->events[old_num + i] = event;
/* Update the signal of the event to say it activates the code. */
SignalI sig = event->signal;
switch(event->edge) {
case ANYEDGE:
sig->num_any++;
sig->any = realloc(sig->any,sizeof(Object[sig->num_any]));
sig->any[sig->num_any-1] = (Object)code;
break;
case POSEDGE:
sig->num_pos++;
sig->pos = realloc(sig->pos,sizeof(Object[sig->num_pos]));
sig->pos[sig->num_pos-1] = (Object)code;
break;
case NEGEDGE:
sig->num_neg++;
sig->neg = realloc(sig->neg,sizeof(Object[sig->num_neg]));
sig->neg[sig->num_neg-1] = (Object)code;
break;
default:
perror("Invalid value for an edge.");
}
}
return codeV;
}
|