本文整理汇总了C++中RB_GC_GUARD函数的典型用法代码示例。如果您正苦于以下问题:C++ RB_GC_GUARD函数的具体用法?C++ RB_GC_GUARD怎么用?C++ RB_GC_GUARD使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RB_GC_GUARD函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ImageList_map
/**
* Call MapImages.
*
* Ruby usage:
* - @verbatim ImageList#map(reference) @endverbatim
* - @verbatim ImageList#map(reference, dither) @endverbatim
*
* Notes:
* - Default dither is false
* - Sets \@scene to self.scene
*
* @param argc number of input arguments
* @param argv array of input arguments
* @param self this object
* @return a new ImageList with mapped images.
*/
VALUE
ImageList_map(int argc, VALUE *argv, VALUE self)
{
Image *images, *new_images = NULL;
Image *map;
unsigned int dither = MagickFalse;
VALUE scene, new_imagelist, t;
ExceptionInfo *exception;
#if defined(HAVE_REMAPIMAGES)
QuantizeInfo quantize_info;
rb_warning("ImageList#map is deprecated. Use ImageList#remap instead.");
#endif
switch (argc)
{
case 2:
dither = RTEST(argv[1]);
case 1:
t = rm_cur_image(argv[0]);
map = rm_check_destroyed(t);
break;
default:
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
break;
}
// Convert image array to image sequence, clone image sequence.
exception = AcquireExceptionInfo();
images = images_from_imagelist(self);
new_images = CloneImageList(images, exception);
rm_split(images);
rm_check_exception(exception, new_images, DestroyOnError);
(void) DestroyExceptionInfo(exception);
rm_ensure_result(new_images);
// Call ImageMagick
#if defined(HAVE_REMAPIMAGES)
GetQuantizeInfo(&quantize_info);
quantize_info.dither = dither;
(void) RemapImages(&quantize_info, new_images, map);
#else
(void) MapImages(new_images, map, dither);
#endif
rm_check_image_exception(new_images, DestroyOnError);
// Set @scene in new ImageList object to same value as in self.
new_imagelist = rm_imagelist_from_images(new_images);
scene = rb_iv_get(self, "@scene");
(void) imagelist_scene_eq(new_imagelist, scene);
RB_GC_GUARD(scene);
RB_GC_GUARD(new_imagelist);
RB_GC_GUARD(t);
return new_imagelist;
}
开发者ID:ABaumgaertner,项目名称:rmagick,代码行数:76,代码来源:rmilist.c
示例2: images_from_imagelist
/**
* Convert an array of Image *s to an ImageMagick scene sequence (i.e. a
* doubly-linked list of Images).
*
* No Ruby usage (internal function)
*
* @param imagelist the imagelist
* @return a pointer to the head of the scene sequence list
* @see rm_imagelist_from_images
*/
static Image *
images_from_imagelist(VALUE imagelist)
{
long x, len;
Image *head = NULL;
VALUE images, t;
len = check_imagelist_length(imagelist);
images = rb_iv_get(imagelist, "@images");
for (x = 0; x < len; x++)
{
Image *image;
t = rb_ary_entry(images, x);
image = rm_check_destroyed(t);
// avoid a loop in this linked imagelist, issue #202
if (head == image || GetPreviousImageInList(image) != NULL)
{
image = rm_clone_image(image);
}
AppendImageToList(&head, image);
}
RB_GC_GUARD(images);
RB_GC_GUARD(t);
return head;
}
开发者ID:ABaumgaertner,项目名称:rmagick,代码行数:39,代码来源:rmilist.c
示例3: custom_trampoline
static VALUE
custom_trampoline(int argc, VALUE* argv, VALUE self, Closure* handle)
{
FunctionType* fnInfo = (FunctionType *) handle->info;
VALUE rbReturnValue;
RB_GC_GUARD(rbReturnValue) = (*fnInfo->invoke)(argc, argv, handle->function, fnInfo);
RB_GC_GUARD(self);
return rbReturnValue;
}
开发者ID:AJCHN,项目名称:sonic-pi,代码行数:11,代码来源:MethodHandle.c
示例4: rb_name_err_mesg_new
/* :nodoc: */
VALUE
rb_name_err_mesg_new(VALUE obj, VALUE mesg, VALUE recv, VALUE method)
{
VALUE *ptr = ALLOC_N(VALUE, NAME_ERR_MESG_COUNT);
VALUE result;
ptr[0] = mesg;
ptr[1] = recv;
ptr[2] = method;
result = TypedData_Wrap_Struct(rb_cNameErrorMesg, &name_err_mesg_data_type, ptr);
RB_GC_GUARD(mesg);
RB_GC_GUARD(recv);
RB_GC_GUARD(method);
return result;
}
开发者ID:knugie,项目名称:ruby,代码行数:16,代码来源:error.c
示例5: lazy_init_iterator
static VALUE
lazy_init_iterator(VALUE val, VALUE m, int argc, VALUE *argv)
{
VALUE result;
if (argc == 1) {
VALUE args[2];
args[0] = m;
args[1] = val;
result = rb_yield_values2(2, args);
}
else {
VALUE args;
int len = rb_long2int((long)argc + 1);
args = rb_ary_tmp_new(len);
rb_ary_push(args, m);
if (argc > 0) {
rb_ary_cat(args, argv, argc);
}
result = rb_yield_values2(len, RARRAY_PTR(args));
RB_GC_GUARD(args);
}
if (result == Qundef) rb_iter_break();
return Qnil;
}
开发者ID:takuto-h,项目名称:ruby,代码行数:25,代码来源:enumerator.c
示例6: rm_imagelist_from_images
/**
* Construct a new imagelist object from a list of images.
*
* No Ruby usage (internal function)
*
* Notes:
* - Sets \@scene to 0.
*
* @param images the images
* @return a new imagelist
* @see images_from_imagelist
*/
VALUE
rm_imagelist_from_images(Image *images)
{
VALUE new_imagelist;
Image *image;
if (!images)
{
rb_bug("rm_imagelist_from_images called with NULL argument");
}
new_imagelist = ImageList_new();
while (images)
{
image = RemoveFirstImageFromList(&images);
imagelist_push(new_imagelist, rm_image_new(image));
}
(void) rb_iv_set(new_imagelist, "@scene", INT2FIX(0));
RB_GC_GUARD(new_imagelist);
return new_imagelist;
}
开发者ID:ABaumgaertner,项目名称:rmagick,代码行数:37,代码来源:rmilist.c
示例7: rb_feature_provided
int
rb_feature_provided(const char *feature, const char **loading)
{
const char *ext = strrchr(feature, '.');
VALUE fullpath = 0;
if (*feature == '.' &&
(feature[1] == '/' || strncmp(feature+1, "./", 2) == 0)) {
fullpath = rb_file_expand_path_fast(rb_get_path(rb_str_new2(feature)), Qnil);
feature = RSTRING_PTR(fullpath);
}
if (ext && !strchr(ext, '/')) {
if (IS_RBEXT(ext)) {
if (rb_feature_p(feature, ext, TRUE, FALSE, loading)) return TRUE;
return FALSE;
}
else if (IS_SOEXT(ext) || IS_DLEXT(ext)) {
if (rb_feature_p(feature, ext, FALSE, FALSE, loading)) return TRUE;
return FALSE;
}
}
if (rb_feature_p(feature, 0, TRUE, FALSE, loading))
return TRUE;
RB_GC_GUARD(fullpath);
return FALSE;
}
开发者ID:scorpion007,项目名称:ruby,代码行数:26,代码来源:load.c
示例8: transcode_string
static VALUE transcode_string(VALUE src, int * parser_encoding)
{
int utf8 = rb_utf8_encindex();
int utf16le = rb_enc_find_index("UTF16_LE");
int utf16be = rb_enc_find_index("UTF16_BE");
int source_encoding = rb_enc_get_index(src);
if (source_encoding == utf8) {
*parser_encoding = YAML_UTF8_ENCODING;
return src;
}
if (source_encoding == utf16le) {
*parser_encoding = YAML_UTF16LE_ENCODING;
return src;
}
if (source_encoding == utf16be) {
*parser_encoding = YAML_UTF16BE_ENCODING;
return src;
}
src = rb_str_export_to_enc(src, rb_utf8_encoding());
RB_GC_GUARD(src);
*parser_encoding = YAML_UTF8_ENCODING;
return src;
}
开发者ID:eregon,项目名称:psych,代码行数:28,代码来源:parser.c
示例9: oci8_lob_write
/*
* @overload write(data)
*
* Writes +data+ to LOB.
*
* @param [String] data
* @return [Integer] number of characters written if +self+ is a {CLOB} or a {NCLOB}.
* number of bytes written if +self+ is a {BLOB} or a {BFILE}.
*/
static VALUE oci8_lob_write(VALUE self, VALUE data)
{
oci8_lob_t *lob = TO_LOB(self);
oci8_svcctx_t *svcctx = check_svcctx(lob);
volatile VALUE str;
ub8 byte_amt;
ub8 char_amt;
lob_open(lob);
if (TYPE(data) != T_STRING) {
str = rb_obj_as_string(data);
} else {
str = data;
}
if (lob->lobtype == OCI_TEMP_CLOB) {
str = rb_str_export_to_enc(str, oci8_encoding);
}
byte_amt = RSTRING_LEN(str);
if (byte_amt == 0) {
/* to avoid ORA-24801: illegal parameter value in OCI lob function */
return INT2FIX(0);
}
char_amt = 0;
chker2(OCILobWrite2_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, &byte_amt, &char_amt, lob->pos + 1, RSTRING_PTR(str), byte_amt, OCI_ONE_PIECE, NULL, NULL, 0, lob->csfrm),
&svcctx->base);
RB_GC_GUARD(str);
if (lob->lobtype == OCI_TEMP_CLOB) {
lob->pos += char_amt;
return UINT2NUM(char_amt);
} else {
lob->pos += byte_amt;
return UINT2NUM(byte_amt);
}
}
开发者ID:Captnwalker1,项目名称:ruby-oci8,代码行数:43,代码来源:lob.c
示例10: MessagePack_pack
VALUE MessagePack_pack(int argc, VALUE* argv)
{
VALUE v;
if (argc < 0 || argc > 3) {
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..3)", argc);
}
v = argv[0];
VALUE self = MessagePack_Factory_packer(argc - 1, argv + 1, cMessagePack_DefaultFactory);
PACKER(self, pk);
msgpack_packer_write_value(pk, v);
VALUE retval;
if(msgpack_buffer_has_io(PACKER_BUFFER_(pk))) {
msgpack_buffer_flush(PACKER_BUFFER_(pk));
retval = Qnil;
} else {
retval = msgpack_buffer_all_as_string(PACKER_BUFFER_(pk));
}
msgpack_buffer_clear(PACKER_BUFFER_(pk)); /* to free rmem before GC */
#ifdef RB_GC_GUARD
/* This prevents compilers from optimizing out the `self` variable
* from stack. Otherwise GC free()s it. */
RB_GC_GUARD(self);
#endif
return retval;
}
开发者ID:blazux,项目名称:Live,代码行数:32,代码来源:packer_class.c
示例11: str_compat_and_valid
static VALUE
str_compat_and_valid(VALUE str, rb_encoding *enc)
{
int cr;
str = StringValue(str);
cr = rb_enc_str_coderange(str);
if (cr == ENC_CODERANGE_BROKEN) {
#ifdef PRIsVALUE
rb_raise(rb_eArgError, "replacement must be valid byte sequence '%+"PRIsVALUE"'", str);
#else
str = rb_inspect(str);
rb_raise(rb_eArgError, "replacement must be valid byte sequence '%s'", RSTRING_PTR(str));
RB_GC_GUARD(str);
#endif
}
else if (cr == ENC_CODERANGE_7BIT) {
rb_encoding *e = STR_ENC_GET(str);
if (!rb_enc_asciicompat(enc)) {
rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s",
rb_enc_name(enc), rb_enc_name(e));
}
}
else { /* ENC_CODERANGE_VALID */
rb_encoding *e = STR_ENC_GET(str);
if (enc != e) {
rb_raise(rb_eEncCompatError, "incompatible character encodings: %s and %s",
rb_enc_name(enc), rb_enc_name(e));
}
}
return str;
}
开发者ID:BukhariH,项目名称:string-scrub,代码行数:31,代码来源:scrub.c
示例12: image_to_str
/**
* Convert an image to a blob and the blob to a String.
*
* No Ruby usage (internal function)
*
* Notes:
* - Returns Qnil if there is no image
*
* @param image the Image to convert
* @return Ruby string representation of image
* @see str_to_image
*/
static VALUE
image_to_str(Image *image)
{
VALUE dimg = Qnil;
unsigned char *blob;
size_t length;
Info *info;
ExceptionInfo *exception;
if (image)
{
info = CloneImageInfo(NULL);
exception = AcquireExceptionInfo();
blob = ImageToBlob(info, image, &length, exception);
DestroyImageInfo(info);
CHECK_EXCEPTION();
DestroyExceptionInfo(exception);
dimg = rb_str_new((char *)blob, (long)length);
magick_free((void*)blob);
}
RB_GC_GUARD(dimg);
return dimg;
}
开发者ID:Watson1978,项目名称:rmagick,代码行数:37,代码来源:rmdraw.c
示例13: imagelist_length
/**
* return the # of images in an imagelist.
*
* No Ruby usage (internal function)
*
* @param imagelist the imagelist
* @return the number of images
*/
static long
imagelist_length(VALUE imagelist)
{
VALUE images = rb_iv_get(imagelist, "@images");
RB_GC_GUARD(images);
return RARRAY_LEN(images);
}
开发者ID:ABaumgaertner,项目名称:rmagick,代码行数:17,代码来源:rmilist.c
示例14: Draw_marshal_load
/**
* Support Marsal.load.
*
* Ruby usage:
* - @verbatim Draw#marshal_load @endverbatim
*
* Notes:
* - On entry all fields are all-bits-0
*
* @param self this object
* @param ddraw the marshalled object
* @return self, once marshalled
*/
VALUE
Draw_marshal_load(VALUE self, VALUE ddraw)
{
Draw *draw;
VALUE val;
Data_Get_Struct(self, Draw, draw);
OBJ_TO_MAGICK_STRING(draw->info->geometry, rb_hash_aref(ddraw, CSTR2SYM("geometry")));
//val = rb_hash_aref(ddraw, CSTR2SYM("viewbox"));
//Export_RectangleInfo(&draw->info->viewbox, val);
val = rb_hash_aref(ddraw, CSTR2SYM("affine"));
Export_AffineMatrix(&draw->info->affine, val);
draw->info->gravity = (GravityType) FIX2INT(rb_hash_aref(ddraw, CSTR2SYM("gravity")));
val = rb_hash_aref(ddraw, CSTR2SYM("fill"));
Color_to_PixelColor(&draw->info->fill, val);
val = rb_hash_aref(ddraw, CSTR2SYM("stroke"));
Color_to_PixelColor(&draw->info->stroke, val);
draw->info->stroke_width = NUM2DBL(rb_hash_aref(ddraw, CSTR2SYM("stroke_width")));
draw->info->fill_pattern = str_to_image(rb_hash_aref(ddraw, CSTR2SYM("fill_pattern")));
draw->info->stroke_pattern = str_to_image(rb_hash_aref(ddraw, CSTR2SYM("stroke_pattern")));
draw->info->stroke_antialias = RTEST(rb_hash_aref(ddraw, CSTR2SYM("stroke_antialias")));
draw->info->text_antialias = RTEST(rb_hash_aref(ddraw, CSTR2SYM("text_antialias")));
draw->info->decorate = (DecorationType) FIX2INT(rb_hash_aref(ddraw, CSTR2SYM("decorate")));
OBJ_TO_MAGICK_STRING(draw->info->font, rb_hash_aref(ddraw, CSTR2SYM("font")));
OBJ_TO_MAGICK_STRING(draw->info->family, rb_hash_aref(ddraw, CSTR2SYM("family")));
draw->info->style = (StyleType) FIX2INT(rb_hash_aref(ddraw, CSTR2SYM("style")));
draw->info->stretch = (StretchType) FIX2INT(rb_hash_aref(ddraw, CSTR2SYM("stretch")));
draw->info->weight = NUM2ULONG(rb_hash_aref(ddraw, CSTR2SYM("weight")));
OBJ_TO_MAGICK_STRING(draw->info->encoding, rb_hash_aref(ddraw, CSTR2SYM("encoding")));
draw->info->pointsize = NUM2DBL(rb_hash_aref(ddraw, CSTR2SYM("pointsize")));
OBJ_TO_MAGICK_STRING(draw->info->density, rb_hash_aref(ddraw, CSTR2SYM("density")));
draw->info->align = (AlignType) FIX2INT(rb_hash_aref(ddraw, CSTR2SYM("align")));
val = rb_hash_aref(ddraw, CSTR2SYM("undercolor"));
Color_to_PixelColor(&draw->info->undercolor, val);
draw->info->clip_units = FIX2INT(rb_hash_aref(ddraw, CSTR2SYM("clip_units")));
draw->info->opacity = NUM2QUANTUM(rb_hash_aref(ddraw, CSTR2SYM("opacity")));
draw->info->kerning = NUM2DBL(rb_hash_aref(ddraw, CSTR2SYM("kerning")));
draw->info->interword_spacing = NUM2DBL(rb_hash_aref(ddraw, CSTR2SYM("interword_spacing")));
draw->primitives = rb_hash_aref(ddraw, CSTR2SYM("primitives"));
RB_GC_GUARD(val);
return self;
}
开发者ID:Watson1978,项目名称:rmagick,代码行数:68,代码来源:rmdraw.c
示例15: MessagePack_unpack
VALUE MessagePack_unpack(int argc, VALUE* argv)
{
VALUE src;
switch(argc) {
case 1:
src = argv[0];
break;
default:
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
}
VALUE io = Qnil;
if(rb_type(src) != T_STRING) {
io = src;
src = Qnil;
}
VALUE self = Unpacker_alloc(cMessagePack_Unpacker);
UNPACKER(self, uk);
//msgpack_unpacker_reset(s_unpacker);
//msgpack_buffer_reset_io(UNPACKER_BUFFER_(s_unpacker));
/* prefer reference than copying */
msgpack_buffer_set_write_reference_threshold(UNPACKER_BUFFER_(uk), 0);
if(io != Qnil) {
MessagePack_Buffer_initialize(UNPACKER_BUFFER_(uk), io, Qnil);
}
if(src != Qnil) {
/* prefer reference than copying; see MessagePack_Unpacker_module_init */
msgpack_buffer_append_string(UNPACKER_BUFFER_(uk), src);
}
int r = msgpack_unpacker_read(uk, 0);
if(r < 0) {
raise_unpacker_error(r);
}
/* raise if extra bytes follow */
if(msgpack_buffer_top_readable_size(UNPACKER_BUFFER_(uk)) > 0) {
rb_raise(eMalformedFormatError, "extra bytes follow after a deserialized object");
}
#ifdef RB_GC_GUARD
/* This prevents compilers from optimizing out the `self` variable
* from stack. Otherwise GC free()s it. */
RB_GC_GUARD(self);
#endif
return msgpack_unpacker_get_last_object(uk);
}
开发者ID:fiksu,项目名称:msgpack-ruby,代码行数:53,代码来源:unpacker_class.c
示例16: pg_define_coder
void
pg_define_coder( const char *name, void *func, VALUE base_klass, VALUE nsp )
{
VALUE cfunc_obj = Data_Wrap_Struct( rb_cObject, NULL, NULL, func );
VALUE coder_klass = rb_define_class_under( nsp, name, base_klass );
if( nsp==rb_mPG_BinaryEncoder || nsp==rb_mPG_BinaryDecoder )
rb_include_module( coder_klass, rb_mPG_BinaryFormatting );
rb_define_const( coder_klass, "CFUNC", cfunc_obj );
RB_GC_GUARD(cfunc_obj);
}
开发者ID:bpaysen,项目名称:simplecodecasts_saas,代码行数:12,代码来源:pg_coder.c
示例17: pg_define_coder
void
pg_define_coder( const char *name, void *func, VALUE klass, VALUE nsp )
{
VALUE type_obj = Data_Wrap_Struct( klass, NULL, NULL, func );
VALUE objname = rb_str_dup(rb_mod_name(nsp));
rb_str_cat2( objname, "::");
rb_str_cat2( objname, name);
rb_iv_set( type_obj, "@name", rb_obj_freeze(objname) );
rb_define_const( nsp, name, rb_obj_freeze(type_obj) );
RB_GC_GUARD(type_obj);
}
开发者ID:willbryant,项目名称:ruby-pg,代码行数:13,代码来源:pg_coder.c
示例18: rbffi_Type_Find
/**
* rbffi_Type_Find() is like rbffi_Type_Lookup, but an error is raised if the
* type is not found.
*/
VALUE
rbffi_Type_Find(VALUE name)
{
VALUE rbType = rbffi_Type_Lookup(name);
if (!RTEST(rbType)) {
VALUE s = rb_inspect(name);
rb_raise(rb_eTypeError, "invalid type, %s", RSTRING_PTR(s));
RB_GC_GUARD(s);
}
return rbType;
}
开发者ID:ChrisLundquist,项目名称:ffi,代码行数:17,代码来源:Type.c
示例19: MessagePack_pack_v
mrb_value
MessagePack_pack_v(mrb_state *mrb, int argc, mrb_value* argv)
{
//mrb_value *argv;
//int argc; /* Number of arguments */
/* TODO options */
mrb_value v;
mrb_value io = mrb_nil_value();
//mrb_get_args(mrb, "*", &argv, &argc);
switch (argc) {
case 2:
io = argv[1];
/* Pass-through */
case 1:
v = argv[0];
break;
default:
mrb_raisef(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (%S for 1..2)", mrb_fixnum_value(argc));
}
mrb_value self = Packer_alloc(mrb, cMessagePack_Packer);
PACKER(mrb, self, pk);
//msgpack_packer_reset(s_packer);
//msgpack_buffer_reset_io(PACKER_BUFFER_(s_packer));
if (!mrb_nil_p(io)) {
MessagePack_Buffer_initialize(mrb, PACKER_BUFFER_(pk), io, mrb_nil_value());
}
msgpack_packer_write_value(mrb, pk, v);
mrb_value retval;
if (!mrb_nil_p(io)) {
msgpack_buffer_flush(mrb, PACKER_BUFFER_(pk));
retval = mrb_nil_value();
} else {
retval = msgpack_buffer_all_as_string(mrb, PACKER_BUFFER_(pk));
}
//msgpack_buffer_clear(mrb, PACKER_BUFFER_(pk)); /* to free rmem before GC */
#ifdef RB_GC_GUARD
/* This prevents compilers from optimizing out the `self` variable
* from stack. Otherwise GC free()s it. */
RB_GC_GUARD(self);
#endif
return retval;
}
开发者ID:ysei,项目名称:mruby-msgpack,代码行数:51,代码来源:packer_class.c
示例20: Draw_clone
/**
* Clones this object.
*
* Ruby usage:
* - @verbatim Draw#clone @endverbatim
*
* @param self this object
* @return the clone
* @see Draw_dup
* @see Draw_init_copy
*/
VALUE
Draw_clone(VALUE self)
{
VALUE clone;
clone = Draw_dup(self);
if (OBJ_FROZEN(self))
{
OBJ_FREEZE(clone);
}
RB_GC_GUARD(clone);
return clone;
}
开发者ID:Watson1978,项目名称:rmagick,代码行数:26,代码来源:rmdraw.c
注:本文中的RB_GC_GUARD函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论