示例#1
0
static VALUE Buffer_initialize(int argc, VALUE* argv, VALUE self)
{
    VALUE io = Qnil;
    VALUE options = Qnil;

    if(argc == 0 || (argc == 1 && argv[0] == Qnil)) {
        /* Qnil */

    } else if(argc == 1) {
        VALUE v = argv[0];
        if(rb_type(v) == T_HASH) {
            options = v;
        } else {
            io = v;
        }

    } else if(argc == 2) {
        io = argv[0];
        options = argv[1];
        if(rb_type(options) != T_HASH) {
            rb_raise(rb_eArgError, "expected Hash but found %s.", rb_obj_classname(io));
        }

    } else {
        rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
    }

    BUFFER(self, b);

    MessagePack_Buffer_initialize(b, io, options);

    return self;
}
示例#2
0
octave_value OR_Variable::to_octave()
{
  if (ruby_val == Qtrue) {
    return true;
  } else if (ruby_val == Qfalse) {
    return false;
  } else if (ruby_val == Qnil) {
    return octave_NaN;
  } else if (rb_type(ruby_val) == T_FLOAT) {
    return RFLOAT_VALUE(ruby_val);
  } else if (rb_type(ruby_val) == T_FIXNUM) {
    return FIX2LONG(ruby_val);
  } else if (rb_obj_is_kind_of(ruby_val, rb_path2class("Array")) == Qtrue) {
    return OR_Array(ruby_val).to_octave();
  } else if (rb_obj_is_kind_of(ruby_val, rb_path2class("Hash")) == Qtrue) {
    return OR_Hash(ruby_val).to_octave();
  } else if (rb_obj_is_kind_of(ruby_val, rb_path2class("Octave::StructMatrix")) == Qtrue) {
    return OR_StructMatrix(ruby_val).to_octave();
  } else if (rb_obj_is_kind_of(ruby_val, rb_path2class("Octave::CellMatrix")) == Qtrue) {
    return OR_CellMatrix(ruby_val).to_octave();
  } else if (rb_obj_is_kind_of(ruby_val, rb_path2class("Octave::Matrix")) == Qtrue) {
    return OR_Matrix(ruby_val).to_octave();
  } else {
    return OR_String(ruby_val).to_octave();
  }
}
示例#3
0
octave_value OR_Matrix::to_octave()
{
  int row_index, column_index;
  int number_of_rows = FIX2INT(rb_iv_get(ruby_val, "@m"));
  int number_of_columns = FIX2INT(rb_iv_get(ruby_val, "@n"));
  VALUE cells = rb_iv_get(ruby_val, "@cells");
  VALUE row, cell;
  Matrix matrix = Matrix(number_of_rows, number_of_columns);
  
  for (row_index = 0; row_index < number_of_rows; row_index++) {
    row = RARRAY_PTR(cells)[row_index];
    
    for (column_index = 0; column_index < number_of_columns; column_index++) {
      cell = RARRAY_PTR(row)[column_index];
      
      if (rb_type(cell) == T_FLOAT) {
        matrix(row_index, column_index) = RFLOAT_VALUE(cell);
      } else if (rb_type(cell) == T_FIXNUM) {
        matrix(row_index, column_index) = FIX2LONG(cell);
      } else {
        matrix(row_index, column_index) = octave_NaN;
      }
    }
  }
  
  return matrix;
}
示例#4
0
VALUE smatrix_rb_set(VALUE self, VALUE x, VALUE y, VALUE value) {
  smatrix_t* smatrix = NULL;
  smatrix_rb_gethandle(self, &smatrix);

  if (!smatrix) {
    rb_raise(rb_eTypeError, "smatrix @handle is Nil, something is very bad :'(");
    return Qnil;
  }

  if (rb_type(x) != RUBY_T_FIXNUM) {
    rb_raise(rb_eTypeError, "first argument (x) must be a Fixnum");
    return Qnil;
  }

  if (rb_type(y) != RUBY_T_FIXNUM) {
    rb_raise(rb_eTypeError, "second argument (y) must be a Fixnum");
    return Qnil;
  }

  if (rb_type(value) != RUBY_T_FIXNUM) {
    rb_raise(rb_eTypeError, "third argument must be a Fixnum");
    return Qnil;
  }

  return INT2NUM(smatrix_set(smatrix, NUM2INT(x), NUM2INT(y), NUM2INT(value)));
}
示例#5
0
MQ_BFL NS(argv2bufl) (struct MqS * const mqctx, struct MqBufferLS * args, int argc, VALUE *argv)
{
  if (argc != 0) {
    int i = 0;
    if (args == NULL) args = MqBufferLCreate (argc);
    
    if (argc >= 2) {
      VALUE v = rb_type(argv[1]) == T_ARRAY ? RARRAY_PTR(argv[1])[0] : argv[1];
      if (!strcmp(VAL2CST(v), MqFactoryCtxIdentGet(mqctx))) {
	argc--;
	argv++;
      }
    }

    for (i=0; i < argc; i++, argv++) {
      const VALUE argv2 = *argv;
      if (rb_type(argv2) == T_ARRAY) {
	int j;
	const int argv2l = RARRAY_LEN(argv2);
	VALUE *argv2P = RARRAY_PTR(argv2);
	for (j=0; j<argv2l; j++, argv2P++) {
	  MqBufferLAppendC (args, VAL2CST(*argv2P));
	}
      } else {
	MqBufferLAppendC (args, VALP2CST(argv));
      }
    }
  }
  return args;
}
示例#6
0
VALUE
subextSubletSend(VALUE self,
  VALUE value)
{
  VALUE id = Qnil;

  /* Check ruby object */
  rb_check_frozen(self);
  GET_ATTR(self, "@id", id);

  /* Check object type */
  if(T_STRING == rb_type(value))
    {
      char *list = NULL;
      SubMessageData data = { { 0, 0, 0, 0, 0 } };

      /* Store data */
      list = strdup(RSTRING_PTR(value));
      subSharedPropertySetStrings(display, DefaultRootWindow(display),
        XInternAtom(display, "SUBTLE_DATA", False), &list, 1);
      free(list);

      data.l[0] = FIX2INT(id);

      subSharedMessage(display, DefaultRootWindow(display),
        "SUBTLE_SUBLET_DATA", data, 32, True);
    }
  else rb_raise(rb_eArgError, "Unexpected value-type `%s'",
    rb_obj_classname(value));

  return self;
} /* }}} */
示例#7
0
/* SubletFind {{{ */
static VALUE
SubletFind(VALUE value,
  int first)
{
  int flags = 0;
  VALUE parsed = Qnil;
  char buf[50] = { 0 };

  subextSubtlextConnect(NULL); ///< Implicit open connection

  /* Check object type */
  switch(rb_type(parsed = subextSubtlextParse(
      value, buf, sizeof(buf), &flags)))
    {
      case T_SYMBOL:
        if(CHAR2SYM("all") == parsed)
          return subextSubletSingList(Qnil);
        break;
      case T_OBJECT:
        if(rb_obj_is_instance_of(value, rb_const_get(mod, rb_intern("Sublet"))))
          return parsed;
    }

  return subextSubtlextFindObjectsGeometry("SUBTLE_SUBLET_LIST",
    "Sublet", buf, flags, first);
} /* }}} */
static VALUE dh_control_write_transfer(int argc, VALUE *argv, VALUE self)
{
  VALUE obmRequestType, obRequest, owValue, owIndex, oData;
  rb_scan_args(argc, argv, "41", &obmRequestType, &obRequest, &owValue, &owIndex, &oData);

  unsigned int timeout = 300; // TODO: make this a settable option

  unsigned char * buffer = 0;
  unsigned int wLength = 0;
  if (oData != Qnil)
  {
    if (rb_type(oData) != RUBY_T_STRING)
    {
      rb_raise(rb_eTypeError, "Expected data to be a string or nil.");
    }
    buffer = RSTRING_PTR(oData);
    wLength = RSTRING_LEN(oData);
    if (wLength > 0xFFFF)
    {
      rb_raise(rb_eRangeError, "Expected length of data to be at most 65535.");
    }
  }
  int result = libusb_control_transfer
    (dh_extract(self),
		 FIX2INT(obmRequestType), FIX2INT(obRequest),
		 FIX2INT(owValue), FIX2INT(owIndex),
		 buffer, wLength, timeout);
  if (result < 0){ raise_usb_exception(result); }
  return Qnil;
}
示例#9
0
文件: subtle.c 项目: guns/subtle
VALUE
subSubtleSingSpawn(VALUE self,
  VALUE cmd)
{
  VALUE ret = Qnil;

  /* Check object type */
  if(T_STRING == rb_type(cmd))
    {
      pid_t pid = 0;

      subSubtlextConnect(NULL); ///< Implicit open connection

      /* Create client with empty window id since we cannot
       * know the real window id at this point (race) */
      if(0 < (pid = subSharedSpawn(RSTRING_PTR(cmd))))
        {
          ret = subClientInstantiate((int)pid);
          rb_iv_set(ret, "@pid", INT2FIX((int)pid));
        }
    }
  else rb_raise(rb_eArgError, "Unexpected value-type `%s'",
    rb_obj_classname(cmd));

  return ret;
} /* }}} */
示例#10
0
static VALUE Scalar_init(VALUE self, VALUE v)
{
    vx_scalar scalar = 0;
    int type = rb_type(v);
    switch (type)
    {
        case T_FIXNUM:  // int32_t or int64_t based on ARCH depth
        {
#if defined(ARCH_16) // microcontrollers?
            vx_int16 value = FIX2INT(v);
            scalar = vxCreateScalar(context, VX_TYPE_INT16, &value);
#elif defined(ARCH_32) // ARM, mobile processors
            vx_int32 value = FIX2INT(v);
            scalar = vxCreateScalar(context, VX_TYPE_INT32, &value);
#elif defined(ARCH_64) // Desktops
            vx_int64 value = FIX2INT(v);
            scalar = vxCreateScalar(context, VX_TYPE_INT64, &value);
#endif
            break;
        }
        case T_BIGNUM:  // "infinite" length, don't know what to do with this...
            Check_Type(v, T_FIXNUM);
            break;
        case T_FLOAT: // doubles
        {
            vx_float64 value = NUM2DBL(v);
            scalar = vxCreateScalar(context, VX_TYPE_FLOAT64, &value);
            break;
        }
    }
    DATA_PTR(self) = (void *)scalar;
    return Qnil;
}
示例#11
0
文件: gravity.c 项目: guns/subtle
VALUE
subGravitySingFind(VALUE self,
  VALUE value)
{
  int flags = 0;
  VALUE parsed = Qnil;
  char buf[50] = { 0 };

  subSubtlextConnect(NULL); ///< Implicit open connection

  /* Check object type */
  switch(rb_type(parsed = subSubtlextParse(
      value, buf, sizeof(buf), &flags)))
    {
      case T_SYMBOL:
        if(CHAR2SYM("all") == parsed)
          return subGravitySingAll(Qnil);
        break;
      case T_OBJECT:
        if(rb_obj_is_instance_of(value, rb_const_get(mod, rb_intern("Gravity"))))
          return parsed;
    }

  return GravityFind(buf, flags);
} /* }}} */
示例#12
0
static void decode_lat_lon(VALUE vlat, VALUE vlon, GeographicLib::Math::real &lat, GeographicLib::Math::real &lon)
{
  std::string slat, slon;
  if (rb_type(vlat) == T_STRING && rb_type(vlon) == T_STRING) {
    slat = rb_string_value_cstr(&vlat);
    slon = rb_string_value_cstr(&vlon);
    try {
      GeographicLib::DMS::DecodeLatLon(slat, slon, lat, lon);
    } catch (GeographicLib::GeographicErr e) {
      rb_raise(rb_eRuntimeError, "This is not a valid position.");
    }
  } else {
    lat = rb_num2dbl(vlat);
    lon = rb_num2dbl(vlon);
  }
}
示例#13
0
static VALUE stringForceUTF8(VALUE arg)
{
    if (rb_type(arg) == RUBY_T_STRING && ENCODING_IS_ASCII8BIT(arg))
        rb_enc_associate_index(arg, rb_utf8_encindex());

    return arg;
}
示例#14
0
文件: view.c 项目: AlexTalker/subtle
/* ViewFind {{{ */
static VALUE
ViewFind(VALUE value,
  int first)
{
  int flags = 0;
  VALUE parsed = Qnil;
  char buf[50] = { 0 };

  subextSubtlextConnect(NULL); ///< Implicit open connection

  /* Check object type */
  switch(rb_type(parsed = subextSubtlextParse(
      value, buf, sizeof(buf), &flags)))
    {
      case T_SYMBOL:
        if(CHAR2SYM("visible") == parsed)
          return subextViewSingVisible(Qnil);
        else if(CHAR2SYM("all") == parsed)
          return subextViewSingList(Qnil);
        else if(CHAR2SYM("current") == parsed)
          return subextViewSingCurrent(Qnil);
        break;
      case T_OBJECT:
        if(rb_obj_is_instance_of(value, rb_const_get(mod, rb_intern("View"))))
          return parsed;
    }

  return subextSubtlextFindObjects("_NET_DESKTOP_NAMES", "View",
    buf, flags, first);
} /* }}} */
示例#15
0
static int formadd_files(VALUE data_key, VALUE data_value, VALUE self) {
  struct curl_state *state;
  Data_Get_Struct(self, struct curl_state, state);

  VALUE name = rb_obj_as_string(data_key);
  VALUE filename;
  VALUE filepath;

  if (rb_type(data_value) == T_HASH) {
    VALUE ary;
    ary = rb_ary_new();
    rb_hash_foreach(data_value, convert_hash_to_a, ary);

    filename = rb_ary_entry(ary, 0);
    filepath = rb_ary_entry(ary, 1);
  } else {
    filename = name;
    filepath = rb_obj_as_string(data_value);
  }

  curl_formadd(&state->post, &state->last, 
                CURLFORM_PTRNAME, RSTRING_PTR(name),
                CURLFORM_FILE, RSTRING_PTR(filepath),
                CURLFORM_FILENAME, RSTRING_PTR(filename),
                CURLFORM_END);
                
  return 0;
}
示例#16
0
static VALUE application_initialize(VALUE self, VALUE args) {
    if (rb_thread_main() != rb_thread_current()) {
        rb_raise(rb_eThreadError, "Initializing QML::Application outside the main thread");
    }

    application_t *data;
    TypedData_Get_Struct(self, application_t, &data_type, data);

    if (rb_type(args) != T_ARRAY) {
        rb_raise(rb_eTypeError, "Expected Array");
    }

    args = rb_ary_concat(rb_ary_new_from_args(1, rb_argv0), args);

    int argc = RARRAY_LEN(args);
    char **argv = malloc(argc * sizeof(char *));

    for (int i = 0; i < argc; ++i) {
        VALUE arg = RARRAY_AREF(args, i);
        argv[i] = rb_string_value_cstr(&arg);
    }

    data->application = qmlbind_application_new(argc, argv);

    return self;
}
示例#17
0
grn_obj *
rb_grn_value_from_ruby_object (VALUE object, grn_ctx *context,
                               grn_obj *value, grn_id type_id, grn_obj *type)
{
    grn_bool string_p, table_type_p;

    string_p = rb_type(object) == T_STRING;
    table_type_p = (GRN_TABLE_HASH_KEY <= type->header.type &&
                    type->header.type <= GRN_TABLE_NO_KEY);
    if (!string_p) {
        return RVAL2GRNBULK_WITH_TYPE(object, context, value, type_id, type);
    }

    if (table_type_p && RSTRING_LEN(object) == 0) {
        if (value) {
            if (value->header.domain != type_id) {
                grn_obj_reinit(context, value, type_id, 0);
            }
        } else {
            value = grn_obj_open(context, GRN_BULK, 0, type_id);
            rb_grn_context_check(context, object);
        }
        GRN_RECORD_SET(context, value, GRN_ID_NIL);
        return value;
    }

    return RVAL2GRNBULK(object, context, value);
}
示例#18
0
VALUE smatrix_rb_initialize(VALUE self, VALUE filename) {
  smatrix_t* smatrix = NULL;
  VALUE      smatrix_handle;

  switch (rb_type(filename)) {

    case RUBY_T_STRING:
      smatrix = smatrix_open(RSTRING_PTR(filename));
      break;

    case RUBY_T_NIL:
      smatrix = smatrix_open(NULL);
      break;

    default:
      rb_raise(rb_eTypeError, "first argument (filename) must be nil or a string");
      break;

  }

  if (smatrix) {
    smatrix_handle = Data_Wrap_Struct(rb_cObject, NULL, smatrix_rb_free, smatrix);
    rb_iv_set(self, "@handle", smatrix_handle);
  }

  return self;
}
示例#19
0
VALUE MessagePack_Unpacker_initialize(int argc, VALUE* argv, VALUE self)
{
    VALUE io = Qnil;
    VALUE options = Qnil;

    if(argc == 0 || (argc == 1 && argv[0] == Qnil)) {
        /* Qnil */

    } else if(argc == 1) {
        VALUE v = argv[0];
        if(rb_type(v) == T_HASH) {
            options = v;
            if(rb_type(options) != T_HASH) {
                rb_raise(rb_eArgError, "expected Hash but found %s.", rb_obj_classname(options));
            }
        } else {
            io = v;
        }

    } else if(argc == 2) {
        io = argv[0];
        options = argv[1];
        if(rb_type(options) != T_HASH) {
            rb_raise(rb_eArgError, "expected Hash but found %s.", rb_obj_classname(options));
        }

    } else {
        rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
    }

    UNPACKER(self, uk);

    MessagePack_Buffer_set_options(UNPACKER_BUFFER_(uk), io, options);

    if(options != Qnil) {
        VALUE v;

        v = rb_hash_aref(options, ID2SYM(rb_intern("symbolize_keys")));
        msgpack_unpacker_set_symbolized_keys(uk, RTEST(v));

        v = rb_hash_aref(options, ID2SYM(rb_intern("allow_unknown_ext")));
        msgpack_unpacker_set_allow_unknown_ext(uk, RTEST(v));
    }

    return self;
}
示例#20
0
文件: yaramc.c 项目: simulacre/Yaram
/*
 * Gives us access to the mkfifo system call so that
 * we don't need to rely on exec.
 */
static VALUE
rb_yaram_mbox_mkfifo(VALUE self, VALUE name)
{
    if (rb_type(name) != T_STRING)
        rb_raise(rb_eArgError, "name must be a string");
    if (mkfifo(RSTRING_PTR(name), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) < 0)
        rb_raise(rb_eException, "can't create named pipe");
    return name;
}
示例#21
0
文件: oj.c 项目: MSNexploder/oj
static void
parse_options(VALUE ropts, Options copts) {
    struct _YesNoOpt    ynos[] = {
        { circular_sym, &copts->circular },
        { auto_define_sym, &copts->auto_define },
        { symbol_keys_sym, &copts->sym_key },
        { ascii_only_sym, &copts->ascii_only },
        { Qnil, 0 }
    };
    YesNoOpt    o;
    
    if (rb_cHash == rb_obj_class(ropts)) {
        VALUE   v;
        
        if (Qnil != (v = rb_hash_lookup(ropts, indent_sym))) {
            if (rb_cFixnum != rb_obj_class(v)) {
                rb_raise(rb_eArgError, ":indent must be a Fixnum.\n");
            }
            copts->indent = NUM2INT(v);
        }
#ifdef HAVE_RUBY_ENCODING_H
        if (Qnil != (v = rb_hash_lookup(ropts, encoding_sym))) {
	    if (T_STRING == rb_type(v)) {
		oj_default_options.encoding = rb_enc_find(StringValuePtr(v));
	    } else if (rb_cEncoding == rb_obj_class(v)) {
		oj_default_options.encoding = rb_to_encoding(v);
	    } else {
		rb_raise(rb_eArgError, ":encoding must be nil, a String, or an Encoding.\n");
	    }
        }
#endif
        if (Qnil != (v = rb_hash_lookup(ropts, mode_sym))) {
            if (object_sym == v) {
                copts->mode = ObjectMode;
            } else if (strict_sym == v) {
                copts->mode = StrictMode;
            } else if (compat_sym == v) {
                copts->mode = CompatMode;
            } else if (null_sym == v) {
                copts->mode = NullMode;
            } else {
                rb_raise(rb_eArgError, ":mode must be :object, :strict, :compat, or :null.\n");
            }
        }
        for (o = ynos; 0 != o->attr; o++) {
            if (Qnil != (v = rb_hash_lookup(ropts, o->sym))) {
                if (Qtrue == v) {
                    *o->attr = Yes;
                } else if (Qfalse == v) {
                    *o->attr = No;
                } else {
                    rb_raise(rb_eArgError, "%s must be true or false.\n", rb_id2name(SYM2ID(o->sym)));
                }
            }
        }
    }
 }
示例#22
0
void smatrix_rb_gethandle(VALUE self, smatrix_t** handle) {
  VALUE handle_wrapped = rb_iv_get(self, "@handle");

  if (rb_type(handle_wrapped) != RUBY_T_DATA) {
    rb_raise(rb_eTypeError, "smatrix @handle is of the wrong type, something went horribly wrong :(");
    return;
  }

  Data_Get_Struct(handle_wrapped, smatrix_t, *handle);
}
示例#23
0
文件: subtle.c 项目: guns/subtle
VALUE
subSubtleSingDisplayWriter(VALUE self,
  VALUE display_string)
{
  /* Explicit open connection */
  subSubtlextConnect(T_STRING == rb_type(display_string) ?
    RSTRING_PTR(display_string) : NULL);

  return Qnil;
} /* }}} */
示例#24
0
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);
}
示例#25
0
static void curl_multi_free(ruby_curl_multi *rbcm) {

  if (rbcm && !rbcm->requests == Qnil && rb_type(rbcm->requests) == T_HASH && RHASH_LEN(rbcm->requests) > 0) {

    rb_hash_foreach( rbcm->requests, (int (*)())curl_multi_flush_easy, (VALUE)rbcm );

    rb_hash_foreach(rbcm->requests, rb_hash_clear_i, 0); //rb_hash_clear(rbcm->requests);
    rbcm->requests = Qnil;
  }
  curl_multi_cleanup(rbcm->handle);
  free(rbcm);
}
示例#26
0
VALUE smatrix_rb_get(VALUE self, VALUE x, VALUE y) {
  smatrix_t* smatrix = NULL;
  smatrix_rb_gethandle(self, &smatrix);

  if (!smatrix) {
    rb_raise(rb_eTypeError, "smatrix @handle is Nil, something went horribly wrong :(");
    return Qnil;
  }

  if (rb_type(x) != RUBY_T_FIXNUM) {
    rb_raise(rb_eTypeError, "first argument (x) must be a Fixnum");
    return Qnil;
  }

  if (rb_type(y) != RUBY_T_FIXNUM) {
    rb_raise(rb_eTypeError, "second argument (y) must be a Fixnum");
    return Qnil;
  }

  return INT2NUM(smatrix_get(smatrix, NUM2INT(x), NUM2INT(y)));
}
示例#27
0
static int
check_breakpoint_by_method(VALUE rb_breakpoint, VALUE klass, ID mid, VALUE self)
{
  breakpoint_t *breakpoint;

  if (NIL_P(rb_breakpoint))
    return 0;

  Data_Get_Struct(rb_breakpoint, breakpoint_t, breakpoint);

  if (Qfalse == breakpoint->enabled || breakpoint->type != BP_METHOD_TYPE
      || breakpoint->pos.mid != mid)
    return 0;

  if (classname_cmp(breakpoint->source, klass)
      || ((rb_type(self) == T_CLASS || rb_type(self) == T_MODULE)
          && classname_cmp(breakpoint->source, self)))
    return 1;

  return 0;
}
示例#28
0
文件: oj.c 项目: MSNexploder/oj
static VALUE
load_with_opts(VALUE input, Options copts) {
    char        *json;
    size_t	len;
    VALUE	obj;

    if (rb_type(input) == T_STRING) {
	// the json string gets modified so make a copy of it
	len = RSTRING_LEN(input) + 1;
	if (SMALL_JSON < len) {
	    json = ALLOC_N(char, len);
	} else {
示例#29
0
VALUE MessagePack_Packer_initialize(int argc, VALUE* argv, VALUE self)
{
    VALUE io = Qnil;
    VALUE options = Qnil;

    if(argc == 0 || (argc == 1 && argv[0] == Qnil)) {
        /* Qnil */

    } else if(argc == 1) {
        VALUE v = argv[0];
        if(rb_type(v) == T_HASH) {
            options = v;
        } else {
            io = v;
        }

    } else if(argc == 2) {
        io = argv[0];
        options = argv[1];
        if(rb_type(options) != T_HASH) {
            rb_raise(rb_eArgError, "expected Hash but found %s.", rb_obj_classname(options));
        }

    } else {
        rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
    }

    PACKER(self, pk);

    MessagePack_Buffer_set_options(PACKER_BUFFER_(pk), io, options);

    if(options != Qnil) {
        VALUE v;

        v = rb_hash_aref(options, ID2SYM(rb_intern("compatibility_mode")));
        msgpack_packer_set_compat(pk, RTEST(v));
    }

    return self;
}
示例#30
0
文件: compat.c 项目: SebastianZaha/oj
VALUE
oj_compat_parse(int argc, VALUE *argv, VALUE self) {
    struct _ParseInfo	pi;

    pi.options = oj_default_options;
    oj_set_compat_callbacks(&pi);

    if (T_STRING == rb_type(*argv)) {
	return oj_pi_parse(argc, argv, &pi, 0, 0, 1);
    } else {
	return oj_pi_sparse(argc, argv, &pi, 0);
    }
}