Skip to content

Commit e235133

Browse files
committed
Extract abort_callback as a function
1 parent 0b30133 commit e235133

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

bindings/ruby/ext/ruby_whisper.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,28 @@ static void progress_callback(struct whisper_context *ctx, struct whisper_state
231231
}
232232
}
233233

234+
static bool abort_callback(void * user_data) {
235+
const ruby_whisper_callback_container *container = (ruby_whisper_callback_container *)user_data;
236+
if (!NIL_P(container->callback)) {
237+
VALUE result = rb_funcall(container->callback, id_call, 1, container->user_data);
238+
if (!NIL_P(result) && Qfalse != result) {
239+
return true;
240+
}
241+
}
242+
const long callbacks_len = RARRAY_LEN(container->callbacks);
243+
if (0 == callbacks_len) {
244+
return false;
245+
}
246+
for (int j = 0; j < callbacks_len; j++) {
247+
VALUE cb = rb_ary_entry(container->callbacks, j);
248+
VALUE result = rb_funcall(cb, id_call, 1, container->user_data);
249+
if (!NIL_P(result) && Qfalse != result) {
250+
return true;
251+
}
252+
}
253+
return false;
254+
}
255+
234256
static VALUE ruby_whisper_params_allocate(VALUE klass) {
235257
ruby_whisper_params *rwp;
236258
rwp = ALLOC(ruby_whisper_params);
@@ -407,28 +429,8 @@ static VALUE ruby_whisper_transcribe(int argc, VALUE *argv, VALUE self) {
407429
}
408430

409431
if (!NIL_P(rwp->abort_callback_container->callback) || 0 != RARRAY_LEN(rwp->abort_callback_container->callbacks)) {
410-
rwp->params.abort_callback = [](void * user_data) {
411-
const ruby_whisper_callback_container *container = (ruby_whisper_callback_container *)user_data;
412-
if (!NIL_P(container->callback)) {
413-
VALUE result = rb_funcall(container->callback, id_call, 1, container->user_data);
414-
if (!NIL_P(result) && Qfalse != result) {
415-
return true;
416-
}
417-
}
418-
const long callbacks_len = RARRAY_LEN(container->callbacks);
419-
if (0 == callbacks_len) {
420-
return false;
421-
}
422-
for (int j = 0; j < callbacks_len; j++) {
423-
VALUE cb = rb_ary_entry(container->callbacks, j);
424-
VALUE result = rb_funcall(cb, id_call, 1, container->user_data);
425-
if (!NIL_P(result) && Qfalse != result) {
426-
return true;
427-
}
428-
}
429-
return false;
430-
};
431432
rwp->abort_callback_container->context = &self;
433+
rwp->params.abort_callback = abort_callback;
432434
rwp->params.abort_callback_user_data = rwp->abort_callback_container;
433435
}
434436

0 commit comments

Comments
 (0)