Пример #1
0
/* call-seq:
 *   window.setSize( new_width, new_height )
 *
 * Change the size of the rendering region of the window. 
 */
static VALUE Window_SetSize( VALUE self, VALUE aWidth, VALUE aHeight )
{
	sf::Window *object = NULL;
	Data_Get_Struct( self, sf::Window, object );
	object->SetSize( FIX2UINT( aWidth ), FIX2UINT( aHeight ) );
	return Qnil;
}
Пример #2
0
/*
 * call-seq:
 *   OCI8::ConnectionPool.new(conn_min, conn_max, conn_incr, username = nil, password = nil, dbname = nil) -> connection pool
 *   OCI8::ConnectionPool.new(conn_min, conn_max, conn_incr, connect_string) -> connection pool
 *
 * Creates a connection pool.
 *
 * <i>conn_min</i> specifies the minimum number of connections in the
 * connection pool. Valid values are 0 and higher.
 *
 * <i>conn_max</i> specifies the maximum number of connections that
 * can be opened to the database. Once this value is reached, no more
 * connections are opened. Valid values are 1 and higher.
 *
 * <i>conn_incr</i> allows the application to set the next increment
 * for connections to be opened to the database if the current number
 * of connections are less than <i>conn_max</i>. Valid values are 0
 * and higher.
 *
 * <i>username</i> and <i>password</i> are required to establish an
 * implicit primary session. When both are nil, external
 * authentication is used.
 *
 * <i>dbname</i> specifies the database server to connect to.
 *
 * If the number of arguments is four, <i>username</i>,
 * <i>password</i> and <i>dbname</i> are extracted from the fourth
 * argument <i>connect_string</i>. The syntax is "username/password" or
 * "username/password@dbname".
 */
static VALUE oci8_cpool_initialize(int argc, VALUE *argv, VALUE self)
{
    VALUE conn_min;
    VALUE conn_max;
    VALUE conn_incr;
    VALUE username;
    VALUE password;
    VALUE dbname;
    oci8_cpool_t *cpool = DATA_PTR(self);
    OraText *pool_name;
    sb4 pool_name_len;
    sword rv;

    /* check arguments */
    rb_scan_args(argc, argv, "42", &conn_min, &conn_max, &conn_incr,
                 &username, &password, &dbname);
    Check_Type(conn_min, T_FIXNUM);
    Check_Type(conn_max, T_FIXNUM);
    Check_Type(conn_incr, T_FIXNUM);
    if (argc == 4) {
        VALUE mode;
        VALUE conn_str = username;

        OCI8SafeStringValue(conn_str);
        oci8_do_parse_connect_string(conn_str, &username, &password, &dbname, &mode);
        if (!NIL_P(mode)) {
            rb_raise(rb_eArgError, "invalid connect string \"%s\": Connection pooling doesn't support sysdba and sysoper privileges.", RSTRING_PTR(conn_str));
        }
    } else {
        if (!NIL_P(username)) {
            OCI8SafeStringValue(username);
        }
        if (!NIL_P(password)) {
            OCI8SafeStringValue(password);
        }
        if (!NIL_P(dbname)) {
            OCI8SafeStringValue(dbname);
        }
    }

    rv = OCIHandleAlloc(oci8_envhp, &cpool->base.hp.ptr, OCI_HTYPE_CPOOL, 0, NULL);
    if (rv != OCI_SUCCESS)
        oci8_env_raise(oci8_envhp, rv);
    cpool->base.type = OCI_HTYPE_CPOOL;

    oci_lc(OCIConnectionPoolCreate(oci8_envhp, oci8_errhp, cpool->base.hp.poolhp,
                                   &pool_name, &pool_name_len,
                                   NIL_P(dbname) ? NULL : RSTRING_ORATEXT(dbname),
                                   NIL_P(dbname) ? 0 : RSTRING_LEN(dbname),
                                   FIX2UINT(conn_min), FIX2UINT(conn_max),
                                   FIX2UINT(conn_incr),
                                   NIL_P(username) ? NULL : RSTRING_ORATEXT(username),
                                   NIL_P(username) ? 0 : RSTRING_LEN(username),
                                   NIL_P(password) ? NULL : RSTRING_ORATEXT(password),
                                   NIL_P(password) ? 0 : RSTRING_LEN(password),
                                   OCI_DEFAULT));
    cpool->pool_name = rb_str_new(TO_CHARPTR(pool_name), pool_name_len);
    rb_str_freeze(cpool->pool_name);
    return Qnil;
}
Пример #3
0
/*
 * Document-method: PinkTrace::StringArray.decode
 * call-seq:
 *   PinkTrace::StringArray.decode(pid, arg, index, [[maxlen=-1], [bitness=PinkTrace::Bitness::DEFAULT]]) -> String or nil
 *
 * This function decodes the member of the string array pointed by the address
 * +arg+. The +index+ argument specifies the index of the member in the string
 * array.
 *
 * Note: If the string array member was NULL, this function returns nil.
 */
VALUE
pinkrb_decode_strarray(int argc, VALUE *argv, VALUE mod)
{
    bool nil;
    pid_t pid;
    unsigned bit, ind;
    long arg;
    int maxlen;
    char *str;
    VALUE vpid, varg, vind, vmax, vbit, vret;

    switch (rb_scan_args(argc, argv, "32", &vpid, &varg, &vind, &vmax, &vbit)) {
    case 3:
        maxlen = -1;
        bit = PINKTRACE_BITNESS_DEFAULT;
        break;
    case 4:
        maxlen = NUM2INT(vmax);
        bit = PINKTRACE_BITNESS_DEFAULT;
        break;
    case 5:
        maxlen = NUM2INT(vmax);
        bit = FIX2UINT(vbit);
        break;
    default:
        abort();
    }
    pid = NUM2PIDT(vpid);
    arg = NUM2LONG(varg);
    ind = FIX2UINT(vind);

    if (maxlen < 0) {
        /* Use pink_decode_string_array_member_persistent() */
        errno = 0;
        str = pink_decode_string_array_member_persistent(pid, bit, arg, ind);
        if (!str) {
            if (errno)
                rb_sys_fail("pink_decode_string_array_member_persistent()");
            return Qnil;
        }

        vret = rb_str_new2(str);
        free(str);
        return vret;
    }

    /* Use pink_decode_string_array_member() */
    str = ALLOC_N(char, maxlen);
    if (!pink_decode_string_array_member(pid, bit, arg, ind, str, maxlen, &nil))
        rb_sys_fail("pink_decode_string_array_member()");
    if (nil) {
        free(str);
        return Qnil;
    }

    vret = rb_str_new2(str);
    if (str)
        free(str);
    return vret;
}
Пример #4
0
/*
 * PhysicsFS::File#read obj_size, num_objects
 *
 * Read *objCount* objects which are *objSize* each.
 * return String instance containing raw data or nil if failure.
 * #length of string will reflect real number of objects read.
 */
VALUE physfs_file_read (VALUE self, VALUE objSize, VALUE objCount)
{
    int objRead;
    void *buffer;
    VALUE result;
    PHYSFS_File *file;

    Data_Get_Struct (self, PHYSFS_File, file);
    if (file == 0)
	return Qnil; //wasted file - no read possible

    buffer  = malloc (FIX2UINT(objSize) * FIX2UINT(objCount));
    if (buffer == 0)
	return Qnil;

    objRead = PHYSFS_read (file, buffer, FIX2UINT(objSize), FIX2UINT(objCount));
    if (objRead == -1)
    {
        free (buffer);
        return Qnil;
    }

    result = rb_str_new (buffer, objRead * FIX2UINT(objSize));
    free (buffer);
    return result;
}
Пример #5
0
static VALUE
rg_add(VALUE self, VALUE target, VALUE flags, VALUE info)
{
    gtk_target_list_add(_SELF(self), RVAL2ATOM(target),
                        FIX2UINT(flags), FIX2UINT(info));
    return self;
}
Пример #6
0
/* call-seq:
 *   window.setCursorPosition( new_x, new_y )
 *
 * Change the position of the mouse cursor. 
 */
static VALUE Window_SetCursorPosition( VALUE self, VALUE aX, VALUE aY )
{
	sf::Window *object = NULL;
	Data_Get_Struct( self, sf::Window, object );
	object->SetCursorPosition( FIX2UINT( aX ), FIX2UINT( aY ) );
	return Qnil;
}
Пример #7
0
/*
 * call-seq:
 *   session_begin(cred, mode)
 *
 * <b>internal use only</b>
 *
 * Begins the session by the OCI function OCISessionBegin().
 */
static VALUE oci8_session_begin(VALUE self, VALUE cred, VALUE mode)
{
    oci8_svcctx_t *svcctx = DATA_PTR(self);

    if (svcctx->logoff_strategy != &complex_logoff) {
        rb_raise(rb_eRuntimeError, "Use this method only for the service context handle created by OCI8#server_handle().");
    }
    if (svcctx->state & OCI8_STATE_SESSION_BEGIN_WAS_CALLED) {
        rb_raise(rb_eRuntimeError, "Could not use this method twice.");
    }

    /* check arguments */
    Check_Type(cred, T_FIXNUM);
    Check_Type(mode, T_FIXNUM);

    /* begin session */
    oci_lc(OCISessionBegin_nb(svcctx, svcctx->base.hp.ptr, oci8_errhp,
                              svcctx->usrhp, FIX2UINT(cred),
                              FIX2UINT(mode)));
    oci_lc(OCIAttrSet(svcctx->base.hp.ptr, OCI_HTYPE_SVCCTX,
                      svcctx->usrhp, 0, OCI_ATTR_SESSION,
                      oci8_errhp));
    svcctx->state |= OCI8_STATE_SESSION_BEGIN_WAS_CALLED;
    return Qnil;
}
Пример #8
0
void rugged_parse_merge_options(git_merge_options *opts, VALUE rb_options)
{
	if (!NIL_P(rb_options)) {
		VALUE rb_value;
		Check_Type(rb_options, T_HASH);

		rb_value = rb_hash_aref(rb_options, CSTR2SYM("rename_threshold"));
		if (!NIL_P(rb_value)) {
			Check_Type(rb_value, T_FIXNUM);
			opts->rename_threshold = FIX2UINT(rb_value);
		}

		rb_value = rb_hash_aref(rb_options, CSTR2SYM("target_limit"));
		if (!NIL_P(rb_value)) {
			Check_Type(rb_value, T_FIXNUM);
			opts->target_limit = FIX2UINT(rb_value);
		}

		rb_value = rb_hash_aref(rb_options, CSTR2SYM("favor"));
		if (!NIL_P(rb_value)) {
			ID id_favor;

			Check_Type(rb_value, T_SYMBOL);
			id_favor = SYM2ID(rb_value);

			if (id_favor == rb_intern("normal")) {
				opts->file_favor = GIT_MERGE_FILE_FAVOR_NORMAL;
			} else if (id_favor == rb_intern("ours")) {
				opts->file_favor = GIT_MERGE_FILE_FAVOR_OURS;
			} else if (id_favor == rb_intern("theirs")) {
				opts->file_favor = GIT_MERGE_FILE_FAVOR_THEIRS;
			} else if (id_favor == rb_intern("union")) {
				opts->file_favor = GIT_MERGE_FILE_FAVOR_UNION;
			} else {
				rb_raise(rb_eTypeError,
					"Invalid favor mode. Expected `:normal`, `:ours`, `:theirs` or `:union`");
			}
		}

		if (RTEST(rb_hash_aref(rb_options, CSTR2SYM("renames")))) {
			opts->flags |= GIT_MERGE_FIND_RENAMES;
		}

		if (RTEST(rb_hash_aref(rb_options, CSTR2SYM("fail_on_conflict")))) {
			opts->flags |= GIT_MERGE_FAIL_ON_CONFLICT;
		}

		if (RTEST(rb_hash_aref(rb_options, CSTR2SYM("skip_reuc")))) {
			opts->flags |= GIT_MERGE_SKIP_REUC;
		}

		if (RTEST(rb_hash_aref(rb_options, CSTR2SYM("no_recursive")))) {
			opts->flags |= GIT_MERGE_NO_RECURSIVE;
		}
	}
}
Пример #9
0
/* call-seq:
 *   window.size=( vector2 )
 *
 * Change the size of the rendering region of the window. 
 */
static VALUE Window_SetSize2( VALUE self, VALUE anArgument )
{
	VALUE argument = Vector2_ForceType( anArgument );
	sf::Window *object = NULL;
	Data_Get_Struct( self, sf::Window, object );
	VALUE argumentX = Vector2_GetX( argument );
	VALUE argumentY = Vector2_GetY( argument );
	object->SetSize( FIX2UINT( argumentX ), FIX2UINT( argumentY ) );
	return Qnil;
}
Пример #10
0
/* call-seq:
 *    fill( color )
 *    fill( color, start [, length] )
 *    fill( color, range )
 *    fill { |index| block }
 *    fill( start [, length] ) { |index| block }
 *    fill( range ) { |index| block }
 *
 * Set the selected LEDs to the given `color`. The `color` msut be given as a
 * 24-bit RGB value. You can also supply a block that receives an LED index and
 * returns a 24-bit RGB color.
 *
 * Examples:
 *    leds.fill( 0x00FF00 )
 *    leds.fill( 0xFF0000, 2, 2 )
 *    leds.fill( 0x0000FF, (4...8) )
 *    leds.fill { |i| 256 << i }
 *
 * Returns this PixelPi::Leds instance.
 */
static VALUE
pp_leds_fill( int argc, VALUE* argv, VALUE self )
{
  ws2811_t *ledstring = pp_leds_struct( self );
  ws2811_channel_t channel = ledstring->channel[0];
  ws2811_led_t color = 0;

  VALUE item, arg1, arg2, v;
  long ii, beg = 0, end = 0, len = 0;
  int block_p = 0;

  if (rb_block_given_p()) {
    block_p = 1;
    rb_scan_args( argc, argv, "02", &arg1, &arg2 );
    argc += 1;
  } else {
    rb_scan_args( argc, argv, "12", &item, &arg1, &arg2 );
    color = FIX2UINT(item);
  }

  switch (argc) {
    case 1:
      beg = 0;
      len = channel.count;
      break;
    case 2:
      if (rb_range_beg_len(arg1, &beg, &len, channel.count, 1)) {
        break;
      }
      /* fall through */
    case 3:
      beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);
      if (beg < 0) {
        beg = channel.count + beg;
        if (beg < 0) beg = 0;
      }
      len = NIL_P(arg2) ? channel.count - beg : NUM2LONG(arg2);
      break;
  }

  if (len < 0) return self;

  end = beg + len;
  end = MIN((long) channel.count, end);

  for (ii=beg; ii<end; ii++) {
    if (block_p) {
      v = rb_yield(INT2NUM(ii));
      color = FIX2UINT(v);
    }
    channel.leds[ii] = color;
  }

  return self;
}
Пример #11
0
Файл: memory.c Проект: dche/rcl
static VALUE
rcl_mem_info(VALUE self, VALUE param_name)
{
    EXPECT_RCL_CONST(param_name);

    cl_mem_info mi = FIX2UINT(param_name);
    cl_mem m = MemoryPtr(self);
    intptr_t param_value;

    cl_int res = clGetMemObjectInfo(m, mi, sizeof(intptr_t), &param_value, NULL);
    CHECK_AND_RAISE(res);

    switch (mi) {
    case CL_MEM_TYPE:
    case CL_MEM_FLAGS:
    case CL_MEM_SIZE:
    case CL_MEM_MAP_COUNT:
    case CL_MEM_REFERENCE_COUNT:
        return UINT2NUM(param_value);
    case CL_MEM_HOST_PTR:   // CHECK: Should be wrapped to a HostPoiner? MappedPointer? No.
        return ULONG2NUM(param_value);
    case CL_MEM_CONTEXT:
        return RContext((cl_context)param_value);
    default:
        break;
    }

    return Qnil;
}
Пример #12
0
/**
 * :call-seq:
 *   <span class="name">eeread</span> <span class="arguments">(addr) -> integer</span>
 *
 * Returns an EEPROM byte.
 */
static VALUE rb_blink1_eeread(VALUE self, VALUE addr) {
  struct Blink1Instance *ins;
  uint8_t val = 0;
  Data_Get_Struct(self, struct Blink1Instance, ins);
  blink1_eeread(ins->dev, FIX2UINT(addr), &val);
  return UINT2NUM(val);
}
Пример #13
0
/* call-seq:
 *    brightness = 128   # value between 0 and 255
 *
 * Set the pixel brightness. This is a value between 0 and 255. All pixels will
 * be scaled by this value. The hue is not affected; only the luminosity is
 * affected.
 *
 * Returns the new brightness.
 */
static VALUE
pp_leds_brightness_set( VALUE self, VALUE brightness )
{
  ws2811_t *ledstring = pp_leds_struct( self );
  ledstring->channel[0].brightness = (FIX2UINT(brightness) & 0xff);
  return brightness;
}
Пример #14
0
/*
 * @overload read(count, is_stderr: false, timeout: -1)
 *  Read data from a channel.
 *  @since 0.1.0
 *  @param [Fixnum] count The count of bytes to be read.
 *  @param [Boolean] is_stderr Read from the stderr flow or not.
 *  @param [Fixnum] timeout A timeout in seconds. +-1+ means infinite timeout.
 *  @return [String] Data read from the channel.
 *  @see http://api.libssh.org/stable/group__libssh__channel.html
 *    ssh_channel_read_timeout
 */
static VALUE m_read(int argc, VALUE *argv, VALUE self) {
  ChannelHolder *holder;
  VALUE count, opts;
  const ID table[] = {id_stderr, id_timeout};
  VALUE kwvals[sizeof(table) / sizeof(*table)];
  struct nogvl_read_args args;
  VALUE ret;

  TypedData_Get_Struct(self, ChannelHolder, &channel_type, holder);
  rb_scan_args(argc, argv, "10:", &count, &opts);
  Check_Type(count, T_FIXNUM);
  rb_get_kwargs(opts, table, 0, 2, kwvals);
  if (kwvals[0] == Qundef) {
    args.is_stderr = 0;
  } else {
    args.is_stderr = RTEST(kwvals[0]) ? 1 : 0;
  }
  if (kwvals[1] == Qundef) {
    args.timeout = -1;
  } else {
    Check_Type(kwvals[1], T_FIXNUM);
    args.timeout = FIX2INT(kwvals[1]);
  }
  args.channel = holder->channel;
  args.count = FIX2UINT(count);
  args.buf = ALLOC_N(char, args.count);
  rb_thread_call_without_gvl(nogvl_read, &args, RUBY_UBF_IO, NULL);

  ret = rb_utf8_str_new(args.buf, args.rc);
  ruby_xfree(args.buf);
  return ret;
}
Пример #15
0
// ----------------------------------------
// Update the texture coordinates when a new image is chosen.
VALUE Ashton_ParticleEmitter_set_image(VALUE self, VALUE image)
{
    EMITTER();

    emitter->rb_image = image;

    // Pixel size of image.
    emitter->width = NUM2UINT(rb_funcall(image, rb_intern("width"), 0));
    emitter->height = NUM2UINT(rb_funcall(image, rb_intern("height"), 0));

    // Fill the array with all the same coords (won't be used if the image changes dynamically).
    VALUE tex_info = rb_funcall(image, rb_intern("gl_tex_info"), 0);
    emitter->texture_info.id     = FIX2UINT(rb_funcall(tex_info, rb_intern("tex_name"), 0));
    emitter->texture_info.left   = NUM2DBL(rb_funcall(tex_info, rb_intern("left"), 0));
    emitter->texture_info.right  = NUM2DBL(rb_funcall(tex_info, rb_intern("right"), 0));
    emitter->texture_info.top    = NUM2DBL(rb_funcall(tex_info, rb_intern("top"), 0));
    emitter->texture_info.bottom = NUM2DBL(rb_funcall(tex_info, rb_intern("bottom"), 0));

    write_texture_coords_for_all_particles(emitter->texture_coords_array,
                                           &emitter->texture_info,
                                           emitter->max_particles);

    // Push whole array to graphics card.
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, emitter->vbo_id);

    glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, emitter->texture_coords_array_offset,
                       sizeof(Vertex2d) * VERTICES_IN_PARTICLE * emitter->max_particles,
                       emitter->texture_coords_array);

    glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

    return image;
}
Пример #16
0
VALUE JoystickWrapper::rb_get_axis_name(VALUE self, VALUE stick_num, VALUE axis_num)
{
    Joystick *joy;
    Data_Get_Struct(self, Joystick, joy);

    return rb_str_new2(joy->get_axis_name(FIX2INT(stick_num), FIX2UINT(axis_num)));
}
Пример #17
0
Файл: kernel.c Проект: dche/rcl
/*
 * call-seq:
 *      Kernel#info(CL_KERNEL_FUNCTION_NAME)
 *
 * Wrapps +clGetKernelInfo()+.
 */
static VALUE
rcl_kernel_info(VALUE self, VALUE param_name)
{
    EXPECT_RCL_CONST(param_name);

    cl_kernel k = KernelPtr(self);
    cl_kernel_info ki = FIX2UINT(param_name);

    char param_value[128];
    size_t sz_ret;
    cl_int res = clGetKernelInfo(k, ki, 128, param_value, &sz_ret);
    CHECK_AND_RAISE(res);

    switch (ki) {
    case CL_KERNEL_FUNCTION_NAME:
        return rb_str_new2(param_value);
    case CL_KERNEL_NUM_ARGS:
    case CL_KERNEL_REFERENCE_COUNT:
        return UINT2NUM((*(cl_uint *)param_value));
    case CL_KERNEL_CONTEXT:
        return RContext(*(cl_context *)param_value);
    case CL_KERNEL_PROGRAM:
        return RProgram(*(cl_program *)param_value);
    default:
        break;
    }
    return Qnil;
}
Пример #18
0
static void
tcp_getaddr(struct addrinfo *hints, struct sockaddr_storage *addr,
             VALUE ip, VALUE port)
{
	int rc;
	struct addrinfo *res;
	const char *ipname = StringValuePtr(ip);
	char ipport[6];
	unsigned uport;

	if (TYPE(port) != T_FIXNUM)
		rb_raise(rb_eTypeError, "port must be a non-negative integer");
	uport = FIX2UINT(port);

	rc = snprintf(ipport, sizeof(ipport), "%u", uport);
	if (rc >= (int)sizeof(ipport) || rc <= 0)
		rb_raise(rb_eArgError, "invalid TCP port: %u", uport);
	memset(hints, 0, sizeof(struct addrinfo));
	hints->ai_family = AF_UNSPEC;
	hints->ai_socktype = SOCK_STREAM;
	hints->ai_protocol = IPPROTO_TCP;
	/* disallow non-deterministic DNS lookups */
	hints->ai_flags = AI_NUMERICHOST;

	rc = getaddrinfo(ipname, ipport, hints, &res);
	if (rc != 0)
		rb_raise(rb_eArgError, "getaddrinfo(%s:%s): %s",
			 ipname, ipport, gai_strerror(rc));

	/* copy needed data and free ASAP to avoid needing rb_ensure */
	hints->ai_family = res->ai_family;
	hints->ai_addrlen = res->ai_addrlen;
	memcpy(addr, res->ai_addr, res->ai_addrlen);
	freeaddrinfo(res);
}
Пример #19
0
/* call-seq:
 *   window.setFramerateLimit( new_limit )
 *
 * Limit the framerate to a maximum fixed frequency.
 *
 * If a limit is set, the window will use a small delay after each call to Display() to ensure that the current frame 
 * lasted long enough to match the framerate limit.
 */
static VALUE Window_SetFramerateLimit( VALUE self, VALUE aLimit )
{
	sf::Window *object = NULL;
	Data_Get_Struct( self, sf::Window, object );
	object->SetFramerateLimit( FIX2UINT( aLimit ) );
	return Qnil;
}
Пример #20
0
Файл: memory.c Проект: dche/rcl
static VALUE
rcl_mem_image_info(VALUE self, VALUE param_name)
{
    EXPECT_RCL_CONST(param_name);
    cl_image_info ii = FIX2UINT(param_name);
    cl_mem m = MemoryPtr(self);

    cl_image_format imgfmt;

    cl_int res = clGetImageInfo(m, ii, sizeof(cl_image_format), (void *)&imgfmt, NULL);
    CHECK_AND_RAISE(res);

    switch (ii) {
    case CL_IMAGE_FORMAT:
        return RImageFormat(&imgfmt);
    case CL_IMAGE_ELEMENT_SIZE:
    case CL_IMAGE_ROW_PITCH:
    case CL_IMAGE_SLICE_PITCH:
    case CL_IMAGE_WIDTH:
    case CL_IMAGE_HEIGHT:
    case CL_IMAGE_DEPTH:
        return ULONG2NUM(*(size_t *)&imgfmt);
    }
    return Qnil;
}
Пример #21
0
/*
 * call-seq:
 *   server_attach(dbname, mode)
 *
 * <b>internal use only</b>
 *
 * Attachs to the server by the OCI function OCIServerAttach().
 */
static VALUE oci8_server_attach(VALUE self, VALUE dbname, VALUE mode)
{
    oci8_svcctx_t *svcctx = oci8_get_svcctx(self);

    if (svcctx->logoff_strategy != &complex_logoff) {
        rb_raise(rb_eRuntimeError, "Use this method only for the service context handle created by OCI8#server_handle().");
    }
    if (svcctx->state & OCI8_STATE_SERVER_ATTACH_WAS_CALLED) {
        rb_raise(rb_eRuntimeError, "Could not use this method twice.");
    }

    /* check arguments */
    if (!NIL_P(dbname)) {
        OCI8SafeStringValue(dbname);
    }
    Check_Type(mode, T_FIXNUM);

    /* attach to the server */
    oci_lc(OCIServerAttach_nb(svcctx, svcctx->srvhp, oci8_errhp,
                              NIL_P(dbname) ? NULL : RSTRING_ORATEXT(dbname),
                              NIL_P(dbname) ? 0 : RSTRING_LEN(dbname),
                              FIX2UINT(mode)));
    oci_lc(OCIAttrSet(svcctx->base.hp.ptr, OCI_HTYPE_SVCCTX,
                      svcctx->srvhp, 0, OCI_ATTR_SERVER,
                      oci8_errhp));
    svcctx->state |= OCI8_STATE_SERVER_ATTACH_WAS_CALLED;
    return self;
}
Пример #22
0
static VALUE erlix_uint_init(VALUE self,VALUE fix){
    ErlixTerm* euint;
    unsigned int i=FIX2UINT(fix);
    Data_Get_Struct(self,ErlixTerm,euint);
    euint->term=erl_mk_uint(i);
    return self;
}
Пример #23
0
static VALUE
test_fix2uint(VALUE obj, VALUE num)
{
    char buf[128];
    sprintf(buf, "%u", FIX2UINT(num));
    return rb_str_new_cstr(buf);
}
Пример #24
0
static VALUE tcp_connect(VALUE klass, VALUE ip, VALUE port, int io_wait)
{
	struct addrinfo hints;
	struct sockaddr_storage addr;
	int rc;
	struct addrinfo *res;
	VALUE sock;
	const char *ipname = StringValuePtr(ip);
	char ipport[6];
	unsigned uport = FIX2UINT(port);

	rc = snprintf(ipport, sizeof(ipport), "%u", uport);
	if (rc >= (int)sizeof(ipport) || rc <= 0)
		rb_raise(rb_eArgError, "invalid TCP port: %u", uport);
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;
	/* disallow non-deterministic DNS lookups */
	hints.ai_flags = AI_NUMERICHOST;

	rc = getaddrinfo(ipname, ipport, &hints, &res);
	if (rc != 0)
		rb_raise(rb_eArgError, "getaddrinfo(%s:%s): %s",
			 ipname, ipport, gai_strerror(rc));

	/* copy needed data and free ASAP to avoid needing rb_ensure */
	hints.ai_family = res->ai_family;
	hints.ai_addrlen = res->ai_addrlen;
	memcpy(&addr, res->ai_addr, res->ai_addrlen);
	freeaddrinfo(res);

	return my_connect(klass, io_wait, hints.ai_family,
	                  &addr, hints.ai_addrlen);
}
Пример #25
0
/*
 * PhysicsFS::File#write buffer, obj_size, num_objects
 *
 * return nil on failure or number of objects written.
 */
VALUE physfs_file_write (VALUE self, VALUE buf, VALUE objSize, VALUE objCount)
{
    int result;
    PHYSFS_File *file;

    Data_Get_Struct (self, PHYSFS_File, file);
    if (file == 0)
	return Qnil;

    result = PHYSFS_write (file, STR2CSTR(buf), 
                           FIX2UINT(objSize), FIX2UINT(objCount));
    if (result == -1)
        return Qnil;

    return INT2FIX(result);
}
Пример #26
0
Файл: kernel.c Проект: dche/rcl
/*
 * call-seq:
 *      Kernel#workgroup_info(Device, CL_KERNEL_WORK_GROUP_SIZE)
 *
 * Wrapps +clGetKernelWorkGroupInfo()+.
 *
 * deivce - A Device object. Can be +nil+ if there is only single device
 *          is used by the context to which the receiver belongs.
 * param_name - The information to query.
 */
static VALUE
rcl_kernel_workgroup_info(VALUE self, VALUE device, VALUE param_name)
{
    EXPECT_RCL_TYPE(device, Device);
    EXPECT_RCL_CONST(param_name);

    cl_kernel k = KernelPtr(self);
    cl_device_id dev = NIL_P(device) ? NULL : DevicePtr(device);
    cl_kernel_work_group_info kwi = FIX2UINT(param_name);

    size_t param_value[3];

    cl_uint res = clGetKernelWorkGroupInfo(k, dev, kwi, sizeof(size_t) * 3, param_value, NULL);
    CHECK_AND_RAISE(res);

    VALUE ret = Qnil;
    switch (kwi) {
    case CL_KERNEL_WORK_GROUP_SIZE:
    case CL_KERNEL_LOCAL_MEM_SIZE:
#ifdef CL_VERSION_1_1
    case CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE:
#endif
        return ULONG2NUM(param_value[0]);
    case CL_KERNEL_COMPILE_WORK_GROUP_SIZE:
        ret = rb_ary_new2(3);
        for (int i = 0; i < 3; i++) {
            rb_ary_push(ret, ULONG2NUM(param_value[i]));
        }
        return ret;
    default:
        break;
    }
    return Qnil;
}
Пример #27
0
/*
 * call-seq:
 *   reinitialize(min, max, incr)
 *
 * Changes the the number of minimum connections, the number of
 * maximum connections and the connection increment parameter.
 */
static VALUE oci8_cpool_reinitialize(VALUE self, VALUE conn_min, VALUE conn_max, VALUE conn_incr)
{
    oci8_cpool_t *cpool = DATA_PTR(self);
    OraText *pool_name;
    sb4 pool_name_len;

    /* check arguments */
    Check_Type(conn_min, T_FIXNUM);
    Check_Type(conn_max, T_FIXNUM);
    Check_Type(conn_incr, T_FIXNUM);

    oci_lc(OCIConnectionPoolCreate(oci8_envhp, oci8_errhp, cpool->base.hp.poolhp,
                                   &pool_name, &pool_name_len, NULL, 0, 
                                   FIX2UINT(conn_min), FIX2UINT(conn_max),
                                   FIX2UINT(conn_incr),
                                   NULL, 0, NULL, 0, OCI_CPOOL_REINITIALIZE));
    return self;
}
Пример #28
0
static VALUE Parameter_init(VALUE self, VALUE n, VALUE index)
{
    Check_Type(n, T_DATA);
    Check_Type(index, T_FIXNUM);
    vx_node node = (vx_node)DATA_PTR(n);
    vx_parameter param = vxGetParameterByIndex(node, FIX2UINT(index));
    DATA_PTR(self) = (void *)param;
    return Qnil;
}
Пример #29
0
static VALUE
trace_stop_span(VALUE self, VALUE span, VALUE time) {
  sky_trace_t* trace;

  My_Struct(trace, sky_trace_t, consumed_trace_msg);

  CHECK_NUMERIC(time);
  CHECK_TYPE(span, T_FIXNUM);

  if (sky_have_memprof()) {
    sky_trace_span_add_uint_annotation(trace, FIX2UINT(span), 1, sky_consume_allocations());
  }

  CHECK_FFI(
      sky_trace_span_done(trace, FIX2UINT(span), NUM2ULL(time)),
      "native Trace#stop_span failed");

  return Qnil;
}
Пример #30
0
sf::RenderTarget* rbRenderTarget::ToSFML( VALUE aValue )
{
	aValue = rbMacros::ToRuby( aValue, rbRenderTarget::Module );
	char* compensationPtr = reinterpret_cast< char* >( DATA_PTR( aValue ) );
	unsigned int ptrOffset = 0;
	VALUE offset = rb_iv_get( aValue, "@__internal__render_target_offset" );
	if( offset != Qnil )
		ptrOffset = FIX2UINT( offset );
	return reinterpret_cast< sf::RenderTarget* >( compensationPtr + ptrOffset );
}