Ejemplo n.º 1
0
rigid_sys::RK rigid_sys::delta(vector<dynamic_info> &start,number_t t0,number_t h)
{
	int i,N=start.size();

	vector<dynamic_info> temp=start;

	vector<dynamic_info> k1=get_dynamic(t0,temp);
	for(i=0;i<N;i++)
		k1[i]=k1[i]*h;

	
	for(i=0;i<N;i++)
		temp[i]=start[i]+k1[i]/4;
	vector<dynamic_info> k2=get_dynamic(t0+h/4,temp);
	for(i=0;i<N;i++)
		k2[i]=k2[i]*h;


	for(i=0;i<N;i++)
		temp[i]=start[i]+3.0/32*k1[i]+9.0/32*k2[i];
	vector<dynamic_info> k3=get_dynamic(t0+3.0/8*h,temp);
	for(i=0;i<N;i++)
		k3[i]=k3[i]*h;



	for(i=0;i<N;i++)
		temp[i]=start[i]+1932.0/2197*k1[i]-7200.0/2197*k2[i]+7296.0/2197*k3[i];
	vector<dynamic_info> k4=get_dynamic(t0+12.0/13*h,temp);
	for(i=0;i<N;i++)
		k4[i]=k4[i]*h;


	for(i=0;i<N;i++)
		temp[i]=start[i]+439.0/216*k1[i]-8*k2[i]+3680.0/513*k3[i]-845.0/4104*k4[i];
	vector<dynamic_info> k5=get_dynamic(t0+h,temp);
	for(i=0;i<N;i++)
		k5[i]=k5[i]*h;


	for(i=0;i<N;i++)
		temp[i]=start[i]-8.0/27*k1[i]+2*k2[i]-3544.0/2565*k3[i]+1859.0/4104*k4[i]-11.0/40*k5[i];
	vector<dynamic_info> k6=get_dynamic(t0+h/2,temp);
	for(i=0;i<N;i++)
		k6[i]=k6[i]*h;
	

	
	RK rk;
	for(i=0;i<N;i++)
	{
		temp[i]=25.0/216*k1.at(i)+1408.0/2565*k3.at(i)+2197.0/4104*k4.at(i)-1.0/5*k5.at(i);
		rk.RK4.push_back(temp[i]);
		
		temp[i]=16.0/135*k1.at(i)+6656.0/12825*k3.at(i)+28561.0/56430*k4.at(i)-9.0/50*k5.at(i)+2.0/55*k6.at(i);
		rk.RK5.push_back(temp[i]);
	}

	return rk;
}
Ejemplo n.º 2
0
my_bool get_dynamic_string_array(DYNAMIC_STRING_ARRAY *array,
                                 char **dst,
                                 size_t *dst_len,
                                 size_t idx)
{
    dynstr_pos_info pos_info;
    DBUG_ENTER("get_dynamic_string_array");
    if (!array || !dst || idx >= array->pos_info_arr->elements) {
        DBUG_RETURN(TRUE);
    }

    get_dynamic(array->pos_info_arr, (uchar *) &pos_info, idx);
    *dst = array->dynstr->str + pos_info.elem_off;
	if (!*dst) {
        DBUG_RETURN(TRUE);
    }
	
    if (dst_len) {
        *dst_len = pos_info.elem_size;
    }
    
    DBUG_RETURN(FALSE);
}
Ejemplo n.º 3
0
/* $begin doit */
void doit(int fd) 
{
    int is_static,contentLength=0,isGet=1;
    struct stat sbuf;
    char buf[MAXLINE], method[MAXLINE], uri[MAXLINE], version[MAXLINE];
    char filename[MAXLINE], cgiargs[MAXLINE],httpspostdata[MAXLINE];
    rio_t rio;

    memset(buf,0,MAXLINE);	
    if(ishttps)
    {
        ssl=SSL_new(ssl_ctx);
	SSL_set_fd(ssl,fd);
	if(SSL_accept(ssl)==0)
	{
		ERR_print_errors_fp(stderr);
		exit(1);
	}
	SSL_read(ssl,buf,sizeof(buf));
	printf(".............\n");
	printf("%s",buf);
	printf(".............\n");
    }
    else
    {
	/* Read request line and headers */
    	Rio_readinitb(&rio, fd);
	Rio_readlineb(&rio, buf, MAXLINE);
    }

    sscanf(buf, "%s %s %s", method, uri, version);

/*
    if (strcasecmp(method, "GET")!=0&&strcasecmp(method,"POST")!=0) 
    { 
       clienterror(fd, method, "501", "Not Implemented",
                "Tiny does not implement this method");
        return;
    }
    */

    
    /* Parse URI from GET request */
    is_static = parse_uri(uri, filename, cgiargs);
    

    if (lstat(filename, &sbuf) < 0) 
    {
	clienterror(fd, filename, "404", "Not found",
		    "Tiny couldn't find this file");
	return;
    }

    if(S_ISDIR(sbuf.st_mode)&&isShowdir)
    	serve_dir(fd,filename);


    if (strcasecmp(method, "POST")==0) 
    	isGet=0;


    if (is_static) 
    { /* Serve static content */
    	if(!ishttps) 
    		get_requesthdrs(&rio);  /* because https already read the headers -> SSL_read()  */

	if (!(S_ISREG(sbuf.st_mode)) || !(S_IRUSR & sbuf.st_mode)) 
	{
	    clienterror(fd, filename, "403", "Forbidden",
			"Tiny couldn't read the file");
	    return;
	}
	serve_static(fd, filename, sbuf.st_size);
    }
    else 
    { /* Serve dynamic content */
	if (!(S_ISREG(sbuf.st_mode)) || !(S_IXUSR & sbuf.st_mode)) 
	{
	    clienterror(fd, filename, "403", "Forbidden",
			"Tiny couldn't run the CGI program");
	    return;
	}

	if(isGet)
	{
		if(!ishttps)
			get_requesthdrs(&rio);   /* because https already read headers by SSL_read() */

		get_dynamic(fd, filename, cgiargs);
	}
	else
	{
		printf("ishttps:%d\n",ishttps);
		if(ishttps)
			https_getlength(buf,&contentLength);
		else
			post_requesthdrs(&rio,&contentLength);

		post_dynamic(fd, filename,contentLength,&rio);
	}
    }
}