本文整理汇总了C++中rb_ensure函数的典型用法代码示例。如果您正苦于以下问题:C++ rb_ensure函数的具体用法?C++ rb_ensure怎么用?C++ rb_ensure使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rb_ensure函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rb_query
/* call-seq:
* client.query(sql, options = {})
*
* Query the database with +sql+, with optional +options+. For the possible
* options, see default_query_options on the Mysql2::Client class.
*/
static VALUE rb_query(VALUE self, VALUE sql, VALUE current) {
#ifndef _WIN32
struct async_query_args async_args;
#endif
struct nogvl_send_query_args args;
GET_CLIENT(self);
REQUIRE_CONNECTED(wrapper);
args.mysql = wrapper->client;
(void)RB_GC_GUARD(current);
Check_Type(current, T_HASH);
rb_iv_set(self, "@current_query_options", current);
Check_Type(sql, T_STRING);
#ifdef HAVE_RUBY_ENCODING_H
/* ensure the string is in the encoding the connection is expecting */
args.sql = rb_str_export_to_enc(sql, rb_to_encoding(wrapper->encoding));
#else
args.sql = sql;
#endif
args.sql_ptr = RSTRING_PTR(args.sql);
args.sql_len = RSTRING_LEN(args.sql);
args.wrapper = wrapper;
rb_mysql_client_set_active_thread(self);
#ifndef _WIN32
rb_rescue2(do_send_query, (VALUE)&args, disconnect_and_raise, self, rb_eException, (VALUE)0);
if (rb_hash_aref(current, sym_async) == Qtrue) {
return Qnil;
} else {
async_args.fd = wrapper->client->net.fd;
async_args.self = self;
rb_rescue2(do_query, (VALUE)&async_args, disconnect_and_raise, self, rb_eException, (VALUE)0);
return rb_ensure(rb_mysql_client_async_result, self, disconnect_and_mark_inactive, self);
}
#else
do_send_query(&args);
/* this will just block until the result is ready */
return rb_ensure(rb_mysql_client_async_result, self, disconnect_and_mark_inactive, self);
#endif
}
示例2: thread_exclusive
static VALUE
thread_exclusive(VALUE (*func)(ANYARGS), VALUE arg)
{
VALUE critical = rb_thread_critical;
rb_thread_critical = 1;
return rb_ensure(func, arg, set_critical, (VALUE)critical);
}
示例3: rbg_pangologattrs2rval_free
static VALUE
rbg_pangologattrs2rval_free(PangoLogAttr *attrs, long n)
{
struct rbg_pangologattrs2rval_free_args args = { attrs, n };
return rb_ensure(rbg_pangologattrs2rval_free_body, (VALUE)&args,
rbg_pangologattrs2rval_free_ensure, (VALUE)&args);
}
示例4: rg_lock
/*
* Get lock on media list items
*
* @yield
* @return self
* @todo fixme
*/
static VALUE
rg_lock(VALUE self)
{
libvlc_media_list_lock(_SELF(self));
if (rb_block_given_p())
rb_ensure(rb_yield, self, rg_unlock, self);
return self;
}
示例5: rbgio_cstr_to_rval_tainted_free
VALUE
rbgio_cstr_to_rval_tainted_free(char *string, gsize length)
{
struct rbgio_cstr_to_rval_tainted_free_data data = { string, length };
return rb_ensure(rbgio_cstr_to_rval_tainted_free_body, (VALUE)&data,
rbgio_cstr_to_rval_tainted_free_ensure, (VALUE)&data);
}
示例6: aspirin_response_set_body
static void
aspirin_response_set_body(struct evhttp_request* request, VALUE body)
{
VALUE buff = Data_Wrap_Struct(rb_cData, 0, 0, request->output_buffer);
VALUE args = rb_ary_new3(2, body, buff);
rb_ensure(aspirin_response_each_body, args, aspirin_response_close_body, body);
DATA_PTR(buff) = NULL;
}
示例7: rb_format_exception_message
VALUE
rb_format_exception_message(VALUE exc)
{
const int old_level = rb_safe_level();
rb_set_safe_level_force(0);
return rb_ensure(format_message, exc, restore_level, (VALUE)old_level);
}
示例8: oci8_get_rowid_attr
VALUE oci8_get_rowid_attr(oci8_base_t *base, ub4 attrtype)
{
rowid_arg_t arg;
arg.base = base;
arg.attrtype = attrtype;
arg.ridp = NULL;
return rb_ensure(get_rowid_attr, (VALUE)&arg, rowid_ensure, (VALUE)&arg);
}
示例9: rbgutil_gslist2ary_boxed_and_free
VALUE
rbgutil_gslist2ary_boxed_and_free(GSList *const list, GType gtype)
{
struct rbgutil_gslist2ary_boxed_and_free_data data = { list, gtype };
return rb_ensure(rbgutil_gslist2ary_boxed_and_free_body, (VALUE)&data,
rbgutil_gslist2ary_boxed_and_free_ensure, (VALUE)&data);
}
示例10: stackprof_run
static VALUE
stackprof_run(int argc, VALUE *argv, VALUE self)
{
rb_need_block();
stackprof_start(argc, argv, self);
rb_ensure(rb_yield, Qundef, stackprof_stop, self);
return stackprof_results(0, 0, self);
}
示例11: rb_grn_array_s_create
//.........这里部分代码省略.........
* @example
* #無名一時テーブルを生成する。
* Groonga::Array.create
*
* #無名永続テーブルを生成する。
* Groonga::Array.create(:path => "/tmp/array.grn")
*
* #名前付き永続テーブルを生成する。ただし、ファイル名は気にしない。
* Groonga::Array.create(:name => "Bookmarks",
* :persistent => true)
*
* #それぞれのレコードに512バイトの値を格納できる無名一時テーブルを生成する。
* Groonga::Array.create(:value => 512)
*
* @param [::Hash] options The name and value
* pairs. Omitted names are initialized as the default value.
* @option options [Grrnga::Context] :context (Groonga::Context.default) The context
* テーブルが利用するGrrnga::Context
* @option options :name The name
* テーブルの名前。名前をつけると、Groonga::Context#[]に名
* 前を指定してテーブルを取得することができる。省略すると
* 無名テーブルになり、テーブルIDでのみ取得できる。
* @option options :path The path
* テーブルを保存するパス。パスを指定すると永続テーブルとな
* り、プロセス終了後もレコードは保持される。次回起動時に
* Groonga::Context#[]で保存されたレコードを利用することが
* できる。省略すると一時テーブルになり、プロセスが終了する
* とレコードは破棄される。
* @option options :persistent The persistent
* +true+ を指定すると永続テーブルとなる。 +path+ を省略した
* 場合は自動的にパスが付加される。 +:context+ で指定した
* Groonga::Contextに結びついているデータベースが一時デー
* タベースの場合は例外が発生する。
* @option options :value_type (nil) The value_type
* 値の型を指定する。省略すると値のための領域を確保しない。
* 値を保存したい場合は必ず指定すること。
* 参考: Groonga::Type.new
* @option options [Groonga::Record#n_sub_records] :sub_records The sub_records
* +true+ を指定すると#groupでグループ化したときに、
* Groonga::Record#n_sub_recordsでグループに含まれるレコー
* ドの件数を取得できる。
*/
static VALUE
rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass)
{
grn_ctx *context = NULL;
grn_obj *value_type = NULL, *table;
const char *name = NULL, *path = NULL;
unsigned name_size = 0;
grn_obj_flags flags = GRN_OBJ_TABLE_NO_KEY;
VALUE rb_table;
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
VALUE rb_value_type, rb_sub_records;
rb_scan_args(argc, argv, "01", &options);
rb_grn_scan_options(options,
"context", &rb_context,
"name", &rb_name,
"path", &rb_path,
"persistent", &rb_persistent,
"value_type", &rb_value_type,
"sub_records", &rb_sub_records,
NULL);
context = rb_grn_context_ensure(&rb_context);
if (!NIL_P(rb_name)) {
name = StringValuePtr(rb_name);
name_size = RSTRING_LEN(rb_name);
flags |= GRN_OBJ_PERSISTENT;
}
if (!NIL_P(rb_path)) {
path = StringValueCStr(rb_path);
flags |= GRN_OBJ_PERSISTENT;
}
if (RVAL2CBOOL(rb_persistent))
flags |= GRN_OBJ_PERSISTENT;
if (!NIL_P(rb_value_type))
value_type = RVAL2GRNOBJECT(rb_value_type, &context);
if (RVAL2CBOOL(rb_sub_records))
flags |= GRN_OBJ_WITH_SUBREC;
table = grn_table_create(context, name, name_size, path,
flags, NULL, value_type);
if (!table)
rb_grn_context_check(context, rb_ary_new4(argc, argv));
rb_table = GRNOBJECT2RVAL(klass, context, table, GRN_TRUE);
rb_grn_context_check(context, rb_table);
rb_iv_set(rb_table, "@context", rb_context);
if (rb_block_given_p())
return rb_ensure(rb_yield, rb_table, rb_grn_object_close, rb_table);
else
return rb_table;
}
示例12: rb_aio_s_read
/*
* call-seq:
* AIO.read(cb) -> string
*
* Asynchronously reads a file.This is an initial *blocking* implementation until
* cross platform notification is supported.
*/
static VALUE
rb_aio_s_read(VALUE aio, VALUE cb)
{
rb_aiocb_t *cbs = GetCBStruct(cb);
if (rb_block_given_p()){
cbs->rcb = rb_block_proc();
}
return rb_ensure(rb_aio_read, (VALUE)&cbs->cb, control_block_close, cb);
}
示例13: yield_or_return_result
VALUE
yield_or_return_result( VALUE result)
{
struct pgresult_data *r;
Data_Get_Struct( result, struct pgresult_data, r);
return rb_block_given_p() ?
rb_ensure( rb_yield, result, pgresult_clear, result) : result;
}
示例14: rg_activate
static VALUE
rg_activate(VALUE self)
{
pango_renderer_activate(_SELF(self));
if (rb_block_given_p()) {
rb_ensure(rb_yield, self, rg_deactivate, self);
}
return self;
}
示例15: gobj_freeze_notify
static VALUE
gobj_freeze_notify(VALUE self)
{
g_object_freeze_notify(RVAL2GOBJ(self));
if (rb_block_given_p()) {
return rb_ensure(rb_yield, self, gobj_thaw_notify, self);
}
return self;
}