Exemple #1
0
void CMouthComponent::renderComponentInColor( std::vector<cv::Point> templatePoints, cv::Mat templateMat, int width, int height )
{
	warpedTemplate = cvCreateMat(height, width, CV_8UC3);
	warpedTemplate.setTo(255);
	std::vector<cv::Point> mouthPoints = getLocatedPoints();
	for (int i = 0; i< mouthPoints.size(); i++)
	{
		int j;
		if ( i == 11 || i == 19)
		{
			j = 0;
		}
		else
		{
			j = i + 1;
		}
		cv::Point kp1 = mouthPoints[i];
		cv::Point kp2 = mouthPoints[j];
		cv::line(warpedTemplate, kp1, kp2,cv::Scalar(70, 75, 170), 1);
	}

	cv::Mat_<cv::Vec3b> _I = warpedTemplate;

	#pragma omp parallel for
	for( int row = 0; row < warpedTemplate.rows; ++row){
		for( int col = 0; col < warpedTemplate.cols; ++col )
		{
			double isMouthPoint = pointPolygonTest( mouthPoints, cv::Point2f(col,row), false );
			if(isMouthPoint > 0){
				_I(row,col)[0] = 100;
				_I(row,col)[1] = 100;
				_I(row,col)[2] = 200;
			}
		}
	}
	warpedTemplate = _I;
}
Exemple #2
0
static void p2_test_onelarger2(void)
{
	// Square centered on 2,2
	struct PC_vertex_ll * r1 = createRect(2,2,4,4);
	
	// Square centered on 3,4
	struct PC_vertex_ll * r2 = createRect(3,3,6,6);
	
	enum PC_op_t op = PC_op_union;
	bool result = PC_phase_one(r1, r2); 
	
	
	LT_REQUIRE(polySize(r1) == 4); 
	LT_REQUIRE(polySize(r2) == 6);
	
	PC_phase_two(r1, r2, op);
	
	LT_ASSERT(_I(r1, 0)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 1)->flag == FLG_EN);
	LT_ASSERT(_I(r1, 2)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 3)->flag == FLG_EX);
	
	LT_ASSERT(_I(r2, 0)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 1)->flag == FLG_EX);
	LT_ASSERT(_I(r2, 2)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 3)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 4)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 5)->flag == FLG_EN);
	
	LT_ASSERT(no_couples(r1));
	LT_ASSERT(no_couples(r2));
    
    
    PC_free_verticies(r1);
    PC_free_verticies(r2);
}
std::list<cv::Mat> partition(cv::Mat &I)
{
    cv::Mat mat = I.clone();
    cv::Mat_<cv::Vec3b> _I = mat;
    std::list< cv::Mat > list;

    for( int i = 0; i < mat.rows; ++i){
        for( int j = 0; j < mat.cols; ++j ){
            if(_I(i, j)[0] == 0){
                list.push_back(floodCutting(mat, i, j));
            }
        }
    }

    return list;
}
Exemple #4
0
void erose(cv::Mat &I) {
	Matrix _I = I;
	cv::Mat R = I.clone();
	Matrix _R = R;
	for_pixel(I,
		[&_I, &I, &_R] (int row, int col) {
			for_neighbour(row, col,
				[&_R, &_I, &I, row, col] (int x, int y) {
					Point point = normalize(I, x ,y);
					if (gray(_R(point.x, point.y)) == 255) {
						_I(row, col) = {255, 255, 255};
						return false;
					}
					return true;
				}
			);
			return true;
	}
	);
}
Exemple #5
0
inline void Fluid::diffuse(int b, float* x0, float* x, float diff, float dt)
{
	int i, j, k, l;
	float a=dt*diff*N*N*N;
	for (l=0; l<20; l++) 
	{
		for (k=1; k<=N; k++)
		{
			for (j=1; j<=N; j++)
			{
				for (i=1; i<=N; i++)
				{
					x[_I(i,j,k)] = (x0[_I(i,j,k)] + a*(
						x[_I(i-1,j,k)]+x[_I(i+1,j,k)]+
						x[_I(i,j-1,k)]+x[_I(i,j+1,k)]+
						x[_I(i,j,k-1)]+x[_I(i,j,k+1)]))/(1+6*a);
				}
			}
		}
		set_bnd(b,x);
	}
}
const ExprApply& Function::operator()(const IntervalVector& arg0, const ExprNode& arg1, const Interval& arg2)       { return (*this)(_V(1,0), arg1, _I(1,2)); }
const ExprApply& Function::operator()(const ExprNode& arg0, const IntervalMatrix& arg1, const Interval& arg2)       { return (*this)(arg0, _M(0,1), _I(0,2)); }
const ExprApply& Function::operator()(const Interval& arg0, const ExprNode& arg1)       { return (*this)(_I(1,0),arg1); }
const ExprApply& Function::operator()(const ExprNode& arg0, const Interval& arg1)       { return (*this)(arg0,_I(0,1)); }
int
nsc_cache_sizes(int *asize, int *wsize)
{
	return (_nsc_call_io(_I(sizes), (blind_t)asize, (blind_t)wsize, 0));
}
int
nsc_node_hints_set(uint_t hints)
{
	return (_nsc_call_io(_I(nodehints), (blind_t)(unsigned long)hints,
	    (blind_t)NSC_SET_NODE_HINT, 0));
}
Exemple #12
0
static void p2_test_overlapping_rects_2(void)
{
	// Square centered on 2,2
	struct PC_vertex_ll * r1 = createRect(2,2,4,4);
	
	// Square centered on 4,4
	struct PC_vertex_ll * r2 = createRectCW(4,4,4,4);
	
	enum PC_op_t op = PC_op_union;
	
	bool result = PC_phase_one(r1, r2); 
	PC_phase_two(r1, r2, op);
	
	// Should be:
	/*
	 *
	 *
	 *           R2_2-------------------R2_3
	 *             |                      |
	 *             |                      |
	 *    R1_5--R1_4/R2_1--R1_3           |
	 *     |       |         |            |
	 *     |       |         |            |
	 *     |     R2_0------R1_2/R2_5----R2_4
	 *     |                 |
	 *     |                 |
	 *    R1_0-------------R1_1
	 *
	 */
	
	
	LT_ASSERT(_I(r1, 0)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 1)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 2)->flag == FLG_EN);
	LT_ASSERT(_I(r1, 3)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 4)->flag == FLG_EX);
	LT_ASSERT(_I(r1, 5)->flag == FLG_NONE);
	
	LT_ASSERT(_I(r2, 0)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 1)->flag == FLG_EX);
	LT_ASSERT(_I(r2, 2)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 3)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 4)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 5)->flag == FLG_EN);
	
	
	LT_ASSERT(no_couples(r1));
	LT_ASSERT(no_couples(r2));
    
    
    PC_free_verticies(r1);
    PC_free_verticies(r2);
}
Exemple #13
0
int icmp(const void *a, const void *b)
{
#define _I(x) *(int*)x
	return _I(a) &lt; _I(b) ? -1 : _I(a) &gt; _I(b);
#undef _I
}
Exemple #14
0
inline void DIV(int &a, int b){MUL(a, _I(b));}
Exemple #15
0
void Fluid::vorticity_confinement(float dt)
{
	int i,j,k,ijk;
	float *curlx = u0, *curly = v0, *curlz=w0, *curl=T0;		// temp buffers
	float dt0 = dt * vc_eps;
	float x,y,z;


	for (k=1; k<N; k++) {
		for (j=1; j<N; j++) {
			for (i=1; i<N; i++) {
				ijk = _I(i,j,k);
					// curlx = dw/dy - dv/dz
				x = curlx[ijk] = (w[_I(i,j+1,k)] - w[_I(i,j-1,k)]) * 0.5f -
					(v[_I(i,j,k+1)] - v[_I(i,j,k-1)]) * 0.5f;

					// curly = du/dz - dw/dx
				y = curly[ijk] = (u[_I(i,j,k+1)] - u[_I(i,j,k-1)]) * 0.5f -
					(w[_I(i+1,j,k)] - w[_I(i-1,j,k)]) * 0.5f;

					// curlz = dv/dx - du/dy
				z = curlz[ijk] = (v[_I(i+1,j,k)] - v[_I(i-1,j,k)]) * 0.5f -
					(u[_I(i,j+1,k)] - u[_I(i,j-1,k)]) * 0.5f;

					// curl = |curl|
				curl[ijk] = sqrtf(x*x+y*y+z*z);
			}
		}
	}

	for (k=1; k<N; k++) {
		for (j=1; j<N; j++) {
			for (i=1; i<N; i++) {
				ijk = _I(i,j,k);
				float Nx = (curl[_I(i+1,j,k)] - curl[_I(i-1,j,k)]) * 0.5f;
				float Ny = (curl[_I(i,j+1,k)] - curl[_I(i,j-1,k)]) * 0.5f;
				float Nz = (curl[_I(i,j,k+1)] - curl[_I(i,j,k-1)]) * 0.5f;
				float len1 = 1.0f/(sqrtf(Nx*Nx+Ny*Ny+Nz*Nz)+0.0000001f);
				Nx *= len1;
				Ny *= len1;
				Nz *= len1;
				u[ijk] += (Ny*curlz[ijk] - Nz*curly[ijk]) * dt0;
				v[ijk] += (Nz*curlx[ijk] - Nx*curlz[ijk]) * dt0;
				w[ijk] += (Nx*curly[ijk] - Ny*curlx[ijk]) * dt0;
			}
		}
	}
}
Exemple #16
0
void Fluid::project(void)
{
	float* p = u0;	float* div = v0;	// temporary buffers, use old velocity buffers
	int i, j, k, l;
	float h;
	h = 1.0f/N;
	for (k=1; k<=N; k++) {
		for (j=1; j<=N; j++) {
			for (i=1; i<=N; i++) {
				div[_I(i,j,k)] = -h*(
					u[_I(i+1,j,k)]-u[_I(i-1,j,k)]+
					v[_I(i,j+1,k)]-v[_I(i,j-1,k)]+
					w[_I(i,j,k+1)]-w[_I(i,j,k-1)])/3;
				p[_I(i,j,k)] = 0;
			}
		}
	}
	set_bnd(0,div); set_bnd(0,p);
	for (l=0; l<20; l++) 
	{
		for (k=1; k<=N; k++) {
			for (j=1; j<=N; j++) {
				for (i=1; i<=N; i++) {
					p[_I(i,j,k)] = (div[_I(i,j,k)]+
						p[_I(i-1,j,k)]+p[_I(i+1,j,k)]+
						p[_I(i,j-1,k)]+p[_I(i,j+1,k)]+
						p[_I(i,j,k-1)]+p[_I(i,j,k+1)])/6;
				}
			}
		}
		set_bnd(0,p);
	}
	for (k=1; k<=N; k++) {
		for (j=1; j<=N; j++) {
			for (i=1; i<=N; i++) {
				u[_I(i,j,k)] -= (p[_I(i+1,j,k)]-p[_I(i-1,j,k)])/3/h;
				v[_I(i,j,k)] -= (p[_I(i,j+1,k)]-p[_I(i,j-1,k)])/3/h;
				w[_I(i,j,k)] -= (p[_I(i,j,k+1)]-p[_I(i,j,k-1)])/3/h;
			}
		}
	}
	set_bnd(1,u); set_bnd(2,v);
}
Exemple #17
0
inline void Fluid::advect_cool(int b, float* x0, float* x, float* y0, float* y, float* uu, float* vv, float* ww, float dt)
{
	int i, j, k, i0, j0, k0, i1, j1, k1;
	float sx0, sx1, sy0, sy1, sz0, sz1, v0, v1;
	float xx, yy, zz, dt0, c0;
	dt0 = dt*N;
	c0 = 1.0f - cooling*dt;
	for (k=1; k<=N; k++)
	{
		for (j=1; j<=N; j++)
		{
			for (i=1; i<=N; i++)
			{
				xx = i-dt0*uu[_I(i,j,k)];
				yy = j-dt0*vv[_I(i,j,k)];
				zz = k-dt0*ww[_I(i,j,k)];
				if (xx<0.5) xx=0.5f; if (xx>N+0.5) xx=N+0.5f; i0=(int)xx; i1=i0+1;
				if (yy<0.5) yy=0.5f; if (yy>N+0.5) yy=N+0.5f; j0=(int)yy; j1=j0+1;
				if (zz<0.5) zz=0.5f; if (zz>N+0.5) zz=N+0.5f; k0=(int)zz; k1=k0+1;
				sx1 = xx-i0; sx0 = 1-sx1;
				sy1 = yy-j0; sy0 = 1-sy1;
				sz1 = zz-k0; sz0 = 1-sz1;
				v0 = sx0*(sy0*x0[_I(i0,j0,k0)]+sy1*x0[_I(i0,j1,k0)])+sx1*(sy0*x0[_I(i1,j0,k0)]+sy1*x0[_I(i1,j1,k0)]);
				v1 = sx0*(sy0*x0[_I(i0,j0,k1)]+sy1*x0[_I(i0,j1,k1)])+sx1*(sy0*x0[_I(i1,j0,k1)]+sy1*x0[_I(i1,j1,k1)]);
				x[_I(i,j,k)] = sz0*v0 + sz1*v1;
				v0 = sx0*(sy0*y0[_I(i0,j0,k0)]+sy1*y0[_I(i0,j1,k0)])+sx1*(sy0*y0[_I(i1,j0,k0)]+sy1*y0[_I(i1,j1,k0)]);
				v1 = sx0*(sy0*y0[_I(i0,j0,k1)]+sy1*y0[_I(i0,j1,k1)])+sx1*(sy0*y0[_I(i1,j0,k1)]+sy1*y0[_I(i1,j1,k1)]);
				y[_I(i,j,k)] = (sz0*v0 + sz1*v1)*c0;
			}
		}
	}
	set_bnd(b,d);
}
IplImage* callback(IplImage* image)
{

    IplImage* Show1 = cvCreateImage( cvSize(640,480), IPL_DEPTH_8U, 1);
    IplImage* Show2 = cvCreateImage( cvSize(640,480), IPL_DEPTH_8U, 1);
    IplImage* ImageC1 = cvCreateImage( cvSize(640,480), IPL_DEPTH_8U, 1);

    //转换为灰度图
    cvCvtColor( image, ImageC1, CV_RGB2GRAY);
   // cvFlip( ImageC1, NULL, 0);
    
    double *mi;
    double *md;

    mi = new double[3*3];
    md = new double[4];

    CvMat intrinsic_matrix,distortion_coeffs;

    //摄像机内参数
    cvInitMatHeader(&intrinsic_matrix,3,3,CV_64FC1,mi);
    
    //镜头畸变参数
    cvInitMatHeader(&distortion_coeffs,1,4,CV_64FC1,md);

    ///////////////////////////////////////////////// 
    double fc1,fc2,cc1,cc2,kc1,kc2,kc3,kc4;
  /*fc1 = 636.796592;
    fc2 = 639.002846;
    cc1 = 320.575856;
    cc2 = 238.909624;
    kc1 = 0.008447;
    kc2 = -0.072905;
    kc3 = -0.001818;
    kc4 = -0.000562; */
    
    fc1 = 426.331624;
    fc2 = 426.556478;
    cc1 = 365.956413;
    cc2 = 202.451300;
    kc1 = -0.422263;
    kc2 = 0.182853;
    kc3 = -0.007801;
    kc4 = 0.002509;

    cvmSet(&intrinsic_matrix, 0, 0, fc1);
    cvmSet(&intrinsic_matrix, 0, 1, 0);
    cvmSet(&intrinsic_matrix, 0, 2, cc1);
    cvmSet(&intrinsic_matrix, 1, 0, 0);
    cvmSet(&intrinsic_matrix, 1, 1, fc2);
    cvmSet(&intrinsic_matrix, 1, 2, cc2);
    cvmSet(&intrinsic_matrix, 2, 0, 0);
    cvmSet(&intrinsic_matrix, 2, 1, 0);
    cvmSet(&intrinsic_matrix, 2, 2, 1);

    cvmSet(&distortion_coeffs, 0, 0, kc1);
    cvmSet(&distortion_coeffs, 0, 1, kc2);
    cvmSet(&distortion_coeffs, 0, 2, kc3);
    cvmSet(&distortion_coeffs, 0, 3, kc4);
    /////////////////////////////////////////////////
    //下面有两种矫正方法,第一种用opencv库,第二种自定义方法
    //矫正畸变(opencv)
    cvUndistort2( ImageC1, Show1, &intrinsic_matrix, &distortion_coeffs);

    //矫正畸变
    for (int nx=0; nx<640; nx++)
    {
        for (int ny=0; ny<480; ny++)
        {
          //  double x=nx-50;
          //  double y=ny-50;
            double x=nx;
            double y=ny;
            double xx=(x-cc1)/fc1;
            double yy=(y-cc2)/fc2;
            double r2=pow(xx,2)+pow(yy,2);
            double r4=pow(r2,2);
            double xxx=xx*(1+kc1*r2+kc2*r4)+2*kc3*xx*yy+kc4*(r2+2*xx*xx);
            double yyy=yy*(1+kc1*r2+kc2*r4)+2*kc4*xx*yy+kc3*(r2+2*yy*yy);
            double xxxx = xxx*fc1+cc1;
            double yyyy = yyy*fc2+cc2;
            if (xxxx>0 && xxxx<640 && yyyy>0 && yyyy<480)
            {
                _I(Show2,nx,ny) = (int)_IF(ImageC1,xxxx,yyyy);
            }
            else
            {
                _I(Show2,nx,ny) = 0;
            }

        }
    }


    //显示
   // cvShowImage("径向矫正1", Show1);
  //  cvShowImage("径向矫正2", Show2);
  //  cvWaitKey(1);
    cvReleaseImage( &Show1 );    
  //  cvReleaseImage( &Show2 );    
    cvReleaseImage( &ImageC1 );   
    return Show2; //选了第二种方法

}
const ExprApply& Function::operator()(const IntervalMatrix& arg0, const Interval& arg1, const ExprNode& arg2)       { return (*this)(_M(2,0), _I(2,1), arg2); }
Exemple #20
0
bool CleanTask::performTask()
{
	Logger l( className(), "performTask" );
	DataSet to_delete;
	int index = 0;
	
	try{
		//marking to remove outliers
		Logger::log_info( "searching for outliers..." );
		Logger::log_info_end();
		while( valid_for_cleaning_column[index] != _IND(DatabaseColumnFinal) )
		{
			DataSet ad;
			ad = PreProcessingTask::standartDeviation( _data_set, valid_for_cleaning_column[index] );

			for( int i = 1; i < _data_set.size(); i++ ){
				to_delete[i] = 0;
			}
			for( int i = 1; i < _data_set.size(); i++ ){
				double value = _data_set[i][valid_for_cleaning_column[index]].getType() == DataSet::TypeInt ?
								_D(_I(_data_set[i][valid_for_cleaning_column[index]])) :
								_D(_data_set[i][valid_for_cleaning_column[index]]);

				double avg = _D(ad["avg"]);
				double dev = _outlierDeviation*_D(ad["dev"]);
				if( (value < 0) || (absf( value - _D(ad["avg"])) > (_outlierDeviation*_D(ad["dev"])))){
					to_delete[i] = 1;
				}
			}

			index++;
		}
		//marking to remove invalid values
		index = 0;
		while( valid_for_normalizing_column[index] != _IND(DatabaseColumnFinal) )
		{
			DataSet ad;
			for( int i = 1; i < _data_set.size(); i++ ){
				double value = _data_set[i][valid_for_normalizing_column[index]].getType() == DataSet::TypeInt ?
								_D(_I(_data_set[i][valid_for_normalizing_column[index]])) :
								_D(_data_set[i][valid_for_normalizing_column[index]]);
				if( value < 0 ){
					to_delete[i] = 1;
				}
			}
			index++;
		}

		//removing items
		Logger::log_info( "cleaning data..." );
		Logger::log_info_end();
		DataSet ds;
		index = 1;

		ds[0] = _data_set[0];
		for( int i = 1; i < _data_set.size(); i++ ){
			if( !_I(to_delete[i]) )
				ds[index++] = _data_set[i];
		}

		_data_set.clear();
		_data_set = ds;
		ds.clear();

	} catch( Exception &e ){
		Logger::log_except( "Problem performing CleanTask", e.what() );
		return false;
	} catch( ... ){
		Logger::log_except( "Problem performing CleanTask"  );
		return false;
	}

	return true;
}
int icmp(const void *a, const void *b)
{
#define _I(x) *(const int*)x
	return _I(a) < _I(b) ? -1 : _I(a) > _I(b);
#undef _I
}
Exemple #22
0
static void p2_test_semi2(void)
{
	struct PC_vertex_ll * r1 = createRect(2,2,4,4);
	struct PC_vertex_ll * r2 = createRectCW(4,3,2,2);
	
	enum PC_op_t op = PC_op_union;
	bool result = PC_phase_one(r1, r2); 
	
	
	
	LT_REQUIRE(polySize(r1) == 6); 
	LT_REQUIRE(polySize(r2) == 6);
	
	PC_phase_two(r1, r2, op);
	

	LT_ASSERT(_I(r1, 0)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 1)->flag == FLG_NONE);
	LT_ASSERT(_I(r1, 2)->flag == FLG_EN);
	LT_ASSERT(_I(r1, 3)->flag == FLG_EX);
	LT_ASSERT(_I(r1, 4)->flag == FLG_EX);
	LT_ASSERT(_I(r1, 5)->flag == FLG_NONE);
	
	LT_ASSERT(_I(r2, 0)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 1)->flag == FLG_EX);
	LT_ASSERT(_I(r2, 2)->flag == FLG_EX);
	LT_ASSERT(_I(r2, 3)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 4)->flag == FLG_NONE);
	LT_ASSERT(_I(r2, 5)->flag == FLG_EN);
	
	
	// Test couple creation
	LT_ASSERT(_I(r1, 0)->couple == NULL);
	LT_ASSERT(_I(r1, 1)->couple == NULL);
	LT_ASSERT(_I(r1, 2)->couple == NULL);
	LT_ASSERT(_I(r1, 3)->couple == _I(r1, 4));
	LT_ASSERT(_I(r1, 4)->couple == _I(r1, 3));
	LT_ASSERT(_I(r1, 5)->couple == NULL);
	
	LT_ASSERT(_I(r2, 0)->couple == NULL);
	LT_ASSERT(_I(r2, 1)->couple == _I(r2, 2));
	LT_ASSERT(_I(r2, 2)->couple == _I(r2, 1));
	LT_ASSERT(_I(r2, 3)->couple == NULL);
	LT_ASSERT(_I(r2, 4)->couple == NULL);
	LT_ASSERT(_I(r2, 5)->couple == NULL);
    
    
    PC_free_verticies(r1);
    PC_free_verticies(r2);
}
Exemple #23
0
inline int qtt(int a, int b){return pdt(a, _I(b));}
#define	__NSC_GEN__
#include "nsc_dev.h"

#ifdef DS_DDICT
#include "../contract.h"
#endif

#include "../nsctl.h"


#define	_I(x)	(((long)(&((nsc_io_t *)0)->x))/sizeof (long))


nsc_def_t _nsc_cache_def[] = {
	"AllocBuf",	(uintptr_t)nsc_ioerr,	_I(alloc_buf),
	"FreeBuf",	(uintptr_t)nsc_fatal,	_I(free_buf),
	"Read",		(uintptr_t)nsc_fatal,	_I(read),
	"Write",	(uintptr_t)nsc_fatal,	_I(write),
	"Zero",		(uintptr_t)nsc_fatal,	_I(zero),
	"Copy",		(uintptr_t)nsc_ioerr,	_I(copy),
	"CopyDirect",	(uintptr_t)nsc_ioerr,	_I(copy_direct),
	"Uncommit",	(uintptr_t)nsc_null,	_I(uncommit),
	"AllocHandle",	(uintptr_t)nsc_null,	_I(alloc_h),
	"FreeHandle",	(uintptr_t)nsc_fatal,	_I(free_h),
	"TrackSize",	(uintptr_t)nsc_null,	_I(trksize),
	"Discard",	(uintptr_t)nsc_null,	_I(discard),
	"Sizes",	(uintptr_t)nsc_null,	_I(sizes),
	"GetPinned",	(uintptr_t)nsc_null,	_I(getpin),
	"NodeHints",	(uintptr_t)nsc_inval,	_I(nodehints),
	0,		0,		0
Exemple #25
0
#endif

#define _FN0(rt, s, d, f) _FN(SEXP_OP_FCALL0, 0, 0, rt, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, s, d, f)
#define _FN1(rt, a1, s, d, f) _FN(SEXP_OP_FCALL1, 1, 0, rt, a1, SEXP_FALSE, SEXP_FALSE, s, d, f)
#define _FN1OPT(rt, a1, s, d, f) _FN(SEXP_OP_FCALL1, 0, 1, rt, a1, SEXP_FALSE, SEXP_FALSE, s, d, f)
#define _FN1OPTP(rt, a1, s, d, f) _FN(SEXP_OP_FCALL1, 0, 3, rt, a1, SEXP_FALSE, SEXP_FALSE, s, d, f)
#define _FN2(rt, a1, a2, s, d, f) _FN(SEXP_OP_FCALL2, 2, 0, rt, a1, a2, SEXP_FALSE, s, d, f)
#define _FN2OPT(rt, a1, a2, s, d, f) _FN(SEXP_OP_FCALL2, 1, 1, rt, a1, a2, SEXP_FALSE, s, d, f)
#define _FN2OPTP(rt, a1, a2, s, d, f) _FN(SEXP_OP_FCALL2, 1, 3, rt, a1, a2, SEXP_FALSE, s, d, f)
#define _FN3(rt, a1, a2, a3, s, d, f) _FN(SEXP_OP_FCALL3, 3, 0, rt, a1, a2, a3, s, d, f)
#define _FN3OPT(rt, a1, a2, a3, s, d, f) _FN(SEXP_OP_FCALL3, 2, 1, rt, a1, a2, a3, s, d, f)
#define _FN4(rt, a1, a2, a3, s, d, f) _FN(SEXP_OP_FCALL4, 4, 0, rt, a1, a2, a3, s, d, f)
#define _FN5(rt, a1, a2, a3, s, d, f) _FN(SEXP_OP_FCALLN, 5, 0, rt, a1, a2, a3, s, d, f)

static struct sexp_opcode_struct opcodes[] = {
_PARAM("current-input-port", _I(SEXP_IPORT)),
_PARAM("current-output-port", _I(SEXP_OPORT)),
_PARAM("current-error-port", _I(SEXP_OPORT)),
_PARAM("current-exception-handler", _I(SEXP_PROCEDURE)),
_PARAM("interaction-environment", _I(SEXP_ENV)),
_PARAM("current-usage-environment", _I(SEXP_ENV)),
_PARAM("current-transformer-environment", _I(SEXP_ENV)),
_PARAM("current-renamer", _I(SEXP_PROCEDURE)),
_PARAM("command-line", SEXP_NULL),
_OP(SEXP_OPC_GETTER, SEXP_OP_CAR, 1, 0, _I(SEXP_OBJECT), _I(SEXP_PAIR), SEXP_FALSE, SEXP_FALSE, 0, "car", 0, NULL),
_OP(SEXP_OPC_SETTER, SEXP_OP_SET_CAR, 2, 0, SEXP_VOID, _I(SEXP_PAIR), _I(SEXP_OBJECT), SEXP_FALSE, 0, "set-car!", 0, NULL),
_OP(SEXP_OPC_GETTER, SEXP_OP_CDR, 1, 0, _I(SEXP_OBJECT), _I(SEXP_PAIR), SEXP_FALSE, SEXP_FALSE, 0, "cdr", 0, NULL),
_OP(SEXP_OPC_SETTER, SEXP_OP_SET_CDR, 2, 0, SEXP_VOID, _I(SEXP_PAIR), _I(SEXP_OBJECT), SEXP_FALSE, 0, "set-cdr!", 0, NULL),
_GETTER("pair-source", SEXP_PAIR, 2),
_SETTER("pair-source-set!", SEXP_PAIR, 2),
_GETTER("syntactic-closure-rename", SEXP_SYNCLO, 3),
int
nsc_node_hints(uint_t *hints)
{
	return (_nsc_call_io(_I(nodehints), (blind_t)hints,
	    (blind_t)NSC_GET_NODE_HINT, 0));
}