示例#1
0
VALUE
counts_size(VALUE self)
{
    Counts *counts;
    Data_Get_Struct(self, Counts, counts);

    return rb_int2inum(counts->size);
}
示例#2
0
VALUE
data_size(VALUE self)
{
    Data *data;
    Data_Get_Struct(self, Data, data);

    return rb_int2inum(data->size);
}
示例#3
0
VALUE rb_Fonts_get_default_size(VALUE self, VALUE id)
{
    long lid = rb_num2long(id);
    if(lid >= rb_Fonts_Size_Tbl.size())
    {
        return LONG2FIX(16);
    }
    return rb_int2inum(static_cast<long>(rb_Fonts_Size_Tbl[lid]));
}
示例#4
0
文件: rbsigar.c 项目: mdkent/sigar
static VALUE rb_sigar_new_intlist(int *data, int number)
{
    int i;
    VALUE av = rb_ary_new2(number);

    for (i=0; i<number; i++) {
        rb_ary_push(av, rb_int2inum(data[i]));
    }

    return av;
}
示例#5
0
/*
 *  call-seq:
 *     dir.pos => integer
 *     dir.tell => integer
 *
 *  Returns the current position in <em>dir</em>. See also
 *  <code>Dir#seek</code>.
 *
 *     d = Dir.new("testdir")
 *     d.tell   #=> 0
 *     d.read   #=> "."
 *     d.tell   #=> 12
 */
static VALUE
dir_tell(VALUE dir)
{
#ifdef HAVE_TELLDIR
    struct dir_data *dirp;
    long pos;

    GetDIR(dir, dirp);
    pos = telldir(dirp->dir);
    return rb_int2inum(pos);
#else
    rb_notimplement();
#endif
}
示例#6
0
文件: otama.c 项目: kyama/otama
static VALUE
variant2rubyobj(otama_variant_t *var)
{
	switch (otama_variant_type(var)) {
	case OTAMA_VARIANT_TYPE_NULL:
		return Qnil;
	case OTAMA_VARIANT_TYPE_INT:
		return rb_int2inum(otama_variant_to_int(var));
	case OTAMA_VARIANT_TYPE_FLOAT:
		return rb_float_new((double)otama_variant_to_float(var));
	case OTAMA_VARIANT_TYPE_STRING:
		return rb_str_new2(otama_variant_to_string(var));
	case OTAMA_VARIANT_TYPE_ARRAY: {
		long count = otama_variant_array_count(var);
		long i;
		VALUE ary = rb_ary_new2(count);
		
		for (i = 0; i < count; ++i) {
			rb_ary_store(ary, i, variant2rubyobj(otama_variant_array_at(var, i)));
		}
		return ary;
	}
	case OTAMA_VARIANT_TYPE_HASH: {
		otama_variant_t *keys = otama_variant_hash_keys(var);
		long count = otama_variant_array_count(keys);
		long i;
		VALUE hash = rb_hash_new();
		
		for (i = 0; i < count; ++i) {
			rb_hash_aset(hash,
						 ID2SYM(rb_intern(otama_variant_to_string(otama_variant_array_at(keys, i)))),
						 variant2rubyobj(otama_variant_hash_at2(var,
															otama_variant_array_at(keys, i))));
		}
		return hash;
	}
	default:
		break;
	}
	
	return Qnil;
}
示例#7
0
static VALUE
counts_initialize(int argc, VALUE* argv, VALUE self)
{
    Counts *counts;
    Data_Get_Struct(self, Counts, counts);

    VALUE rb_page_size;
    rb_scan_args(argc, argv, "01", &rb_page_size);

    if (NIL_P(rb_page_size))
        rb_page_size = rb_int2inum(DEFAULT_PAGE_SIZE);

    long page_size = rb_fix2int(rb_page_size);
    long *values = (long*)malloc(sizeof(long)*page_size);
    if (values == NULL) {
        rb_raise(rb_eNoMemError, "allocation of values failed");
    }

    counts->max_size = page_size;
    counts->size = 0;
    counts->values = values;

    return self;
}
示例#8
0
static VALUE numeric_spec_rb_int2inum_14(VALUE self) {
  return rb_int2inum(14);
}
示例#9
0
VALUE CRbWin32API::call(int argc, VALUE * argv, VALUE obj)
{
	struct 
	{
		u32 params[16];
	} param;

	VALUE obj_proc		= rb_iv_get(obj, "__proc__");
	VALUE obj_import	= rb_iv_get(obj, "__import__");
	VALUE obj_export	= rb_iv_get(obj, "__export__");
	FARPROC ApiFunction	= (FARPROC)rb_num2ulong(obj_proc);

	VALUE args;

	int items	= rb_scan_args(argc, argv, "0*", &args);
	int nimport	= RARRAY_LEN(obj_import);

	if (items != nimport)
		rb_raise(rb_eSinError, "wrong number of parameters: expected %d, got %d", nimport, items);

	for (int i = 0; i < nimport; ++i) 
	{
		u32 lParam = 0;
		switch (FIX2INT(rb_ary_entry(obj_import, i))) 
		{
			VALUE str;
		case _T_NUMBER:
		case _T_INTEGER:
		default:
			lParam = rb_num2ulong(rb_ary_entry(args, i));
			break;
		case _T_POINTER:
			str = rb_ary_entry(args, i);
			if (NIL_P(str)) 
			{
				lParam = 0;
			} 
			else if (FIXNUM_P(str))
			{
				lParam = rb_num2ulong(str);
			} 
			else 
			{
				rb_string_value(&str);
				rb_str_modify(str);
				lParam = (u32)rb_string_value_ptr(&str);
			}
			break;
		}
		param.params[i] = lParam;
	}

	u32 retval;

	__try
	{
		__asm
		{
			mov			ebx, esp
			sub			esp, 40h
			mov			ecx, 10h
			lea			esi, [param]
			mov			edi, esp
			rep movs	dword ptr es:[edi], dword ptr [esi] 
			call        dword ptr [ApiFunction] 
			mov         esp, ebx
			mov         dword ptr [retval], eax 
		}
	}
	__except(EXCEPTION_EXECUTE_HANDLER)
	{
		rb_raise(rb_eSinError, "Api Crashed...");
	}

	switch (FIX2INT(obj_export)) 
	{
	case _T_NUMBER:
	case _T_INTEGER:
		return rb_int2inum(retval);
	case _T_POINTER:
		return (retval ? rb_str_new2((char *)retval) : Qnil);
	case _T_VOID:
	default:
		return INT2FIX(0);
	}
}