Пример #1
0
EXPORT	void	print_machine_parameters(
	FILE *file)
{
	struct utsname Uts;

	(void) foutput(file);
	(void) fprintf(file,"#MACHINE PARAMETERS\n");
	(void) uname(&Uts);
	(void) fprintf(file,"#\tHostname                 = %s\n",Uts.nodename);
	(void) fprintf(file,"#\tOperating System         = %s\n",Uts.sysname);
	(void) fprintf(file,"#\tOS Release               = %s\n",Uts.release);
	(void) fprintf(file,"#\tOS Version               = %s\n",Uts.version);
	(void) fprintf(file,"#\tCPU Type                 = %s\n",Uts.machine);
	(void) fprintf(file,"#\tByte Ordering            = ");
	switch (ft_endian_type())
	{
	case FT_BIG_ENDIAN:
	    (void) fprintf(file,"Big Endian\n");
	    break;
	case FT_LITTLE_ENDIAN:
	    (void) fprintf(file,"Little Endian\n");
	    break;
	case FT_UNKNOWN_ENDIAN:
	default:
 	    (void) printf("Undetermined Endian\n");
	    break;
	}
	(void) fprintf(file,"#\tFloating Point Word Size = %lu\n",
	               sizeof(double));
	(void) fprintf(file,"\n");
}		/*end print_machine_parameters*/
Пример #2
0
void moduleToPTX(terra_State * T, llvm::Module * M, int major, int minor, std::string * buf) {
    
#if LLVM_VERSION < 38
    for(llvm::Module::iterator it = M->begin(), end = M->end(); it != end; ++it) {
        it->setAttributes(llvm::AttributeSet()); //remove annotations because syntax doesn't match
        RemoveAttr A;
        A.visit(&*it); //remove annotations on CallInsts as well.
    }
#endif
    int nmajor,nminor;
    CUDA_DO(T->cuda->nvvmVersion(&nmajor,&nminor));
    int nversion = nmajor*10 + nminor;
    if(nversion >= 12)
        M->setTargetTriple("nvptx64-unknown-cuda");
    else
        M->setTargetTriple(""); //clear these because nvvm doesn't like them
    M->setDataLayout(""); //nvvm doesn't like data layout either
    
    std::stringstream device;
    device << "-arch=compute_" << major << minor;
    std::string deviceopt = device.str();
    
    std::string llvmir;
    {
        llvm::raw_string_ostream output(llvmir);
        #if LLVM_VERSION >= 38
        M->setDataLayout(cudadatalayout);
        llvm::WriteBitcodeToFile(M, output);
        #else
        llvm::formatted_raw_ostream foutput(output);
        foutput << "target datalayout = \"" << cudadatalayout << "\";\n";
        foutput << *M;
        #endif
    }
    
    nvvmProgram prog;
    CUDA_DO(T->cuda->nvvmCreateProgram(&prog));
    CUDA_DO(T->cuda->nvvmAddModuleToProgram(prog, llvmir.data(), llvmir.size(), M->getModuleIdentifier().c_str()));
    int numOptions = 1;
    const char * options[] = { deviceopt.c_str() };
    
    size_t size;
    int err = T->cuda->nvvmCompileProgram(prog, numOptions, options);
    if (err != CUDA_SUCCESS) {
        CUDA_DO(T->cuda->nvvmGetProgramLogSize(prog,&size));
        buf->resize(size);
        CUDA_DO(T->cuda->nvvmGetProgramLog(prog, &(*buf)[0]));
        terra_reporterror(T,"%s:%d: nvvm error reported (%d)\n %s\n",__FILE__,__LINE__,err,buf->c_str());
        
    }
    CUDA_DO(T->cuda->nvvmGetCompiledResultSize(prog, &size));
    buf->resize(size);
    CUDA_DO(T->cuda->nvvmGetCompiledResult(prog, &(*buf)[0]));
}
Пример #3
0
LOCAL	void	print_ses_tri_solution_data(
	FILE		*file,
	Front		*fr,
	Wave		*wv,
	const char	*tri_header,
	const char	*table_name,
	size_t		num_plots,
	float		(**plot_fns)(float*,Front*,POINTER,COMPONENT,Locstate),
	SESAME_EOS	*seos)
{
	RECT_GRID	*rgr;
	float		area;
	static const char	*FORMAT =
		"\n      stop_time = %-10g               stop_step = %-10d\n";

	if (file != stdout)
	{
	    record_print_version(file);
	    print_title_for_sesame(file,seos);
	}
	rgr = fr->rect_grid;
	(void) foutput(file);
	(void) fprintf(file,"\t\t\tINITIAL DATA:\n\n\n");
	fprint_rectangular_grid(file,rgr);
	(void) fprintf(file,FORMAT,0.0,0);
	area = (rgr->U[0] - rgr->L[0])*(rgr->U[1] - rgr->L[1]);
	(void) fprintf(file,"\n\t\tComputational Area = %g\n",area);
	(void) fprintf(file,"\n\t\tRemap Geometry:  IDENTITY_REMAP\n");
	(void) fprintf(file,"\n\t\tPrinting Interval:  1 mesh units\n\n\n\n\n");
	(void) fprintf(file,"\n\n\n\n");
	(void) foutput(file);
	(void) fprintf(file,"%s INTERFACE\n",table_name);
	(void) fprintf(file,"\n\n\n\n");
	(void) foutput(file);
	(void) fprintf(file,"\t\t\tFRONT DATA:\n");
	(void) fprintf(file," \n\t\t\tFront Rectangular Grid:\n\n");
	fprint_rectangular_grid(file,rgr);
	(void) fprintf(file,"\n\t\t\tInterface Topological Grid:\n\n");
	fprint_rectangular_grid(file,&topological_grid(fr->interf));
	fprint_interface(file,fr->interf);
	(void) fprintf(file,"\n\n\n\n");
	(void) foutput(file);
	(void) fprintf(file,"\t\t\tEND OF FRONT DATA:\n");

	(void) foutput(file);
	(void) fprintf(file,"\t\t\tSTATE DATA:\n");
	(void) foutput(file);
	(void) fprintf(file,"%s",tri_header);
	(void) fprintf(file,"\n");
	(void) fprintf(file,"#Point Source Data\n#0\n");
	print_tri_soln(file,fr,wv,wave_tri_soln(wv),num_plots,plot_fns);
	(void) fprintf(file,"END OF TRI_SOLN\n");
	(void) fprintf(file,"\n\n\n\n");
	(void) foutput(file);
	(void) fprintf(file,"\t\t\tEND OF STATE DATA\n");
}		/*end print_ses_tri_solution_data*/
void SimpleProfilerWriteToFile( const std::string& filename, bool to_std_cout )
{
	std::fstream foutput( filename.c_str(), std::ios::out );

	SimpleProfilerGlobal* global = ceng::GetSingletonPtr< SimpleProfilerGlobal >();
	for( std::map< std::string, SimpleProfilerGlobal::TProfilerData* >::const_iterator i = global->mDataMap.begin(); i != global->mDataMap.end(); ++i )
	{
		std::string name = i->first;
		const SimpleProfilerGlobal::TProfilerData* data = i->second;

		foutput << name << ": average " << data->GetAverage()  << ", max " << data->GetMax() << ", total " << data->GetTotal() << std::endl;
		if( to_std_cout ) 
			std::cout << name << ": average " << data->GetAverage()  << ", max " << data->GetMax() << ", total " << data->GetTotal() << std::endl;
	}

	foutput.close();
}
Пример #5
0
int main()
{
	std::string stringFilePath = "";					//FileInput Path
	std::vector<std::string> vectorStringNumbers;		//Literals
	int numberOfLiterals = 0;							//Assigned from the size of vectorNumbers
	std::string numberOfXLiterals = "";					//Number of X unique literals
	std::string numberOfClauses = "";					//Will be read from text file
	std::multimap<std::string, 
	std::vector<std::string>> multiMapLiteralClause;	//Multi map for data structure
	std::multimap<std::string, bool> mapClauseValues;	    //TRUE/FALSE SAT clauses map
	std::map<std::string, bool> mapLiteralValues;	    //TRUE/FALSE literals map
	std::vector<std::string> initialClusterCollection;  //Cluster collection that contains initial clusters (made randomly)
	std::vector<std::string> clusterCollection;			//Cluster collection that contains clusters
	int levelCounter = 0;							    //Level counter
	std::map<std::string, std::string> mapLevelClusters;//Map that contains level and the clusters within that level
	int bestSoFar = 0;
	double timeElapsedMultilevelClustering = 0;
	double timeElapsedTabuSearch = 0;
	double totalTimeElapsed = 0;
	std::string outputFile = "";
	std::string problemName = "";

	/**The objects that we need**/
	TimeElapsed te;
	OpenFileWindow ofw;
	FileInput fileInput;
	MultilevelClustering mc;
	TabuSearch ts;

	/**OpenFileDialog**/
	TCHAR * filePath = ofw.open();
	char charFilePath[260] = {0};
	
	if(filePath != NULL)
	{	
		for(int i = 0; i < wcslen((wchar_t*)filePath); i++)
			charFilePath[i] = filePath[i];
		for(int j = 0; j < sizeof(charFilePath)/sizeof(char); j++)
			stringFilePath += charFilePath[j];

		std::string fileFormat = "";
		int counter = 0;
		for(int i = stringFilePath.length() - 1; i > 0; i--)
		{
			if(counter == 3)
				break;

			if(stringFilePath[i] != 0)
			{
				fileFormat += stringFilePath[i];
				counter++;
			}
		}	

		if(fileFormat == "txt")
		{
			/**Read text file (Input)**/
			std::string collectionString = fileInput.readFile(stringFilePath);
			std::string noLettersCollectionString = fileInput.removeLetters(collectionString, numberOfXLiterals, numberOfClauses);

			/**Output file**/
			for(int i = stringFilePath.length() - 1; i > 0; i--)
			{
				if(stringFilePath[i] == '\\')
					break;
				
				if(stringFilePath[i] != 0)
					outputFile += stringFilePath[i];
			}

			std::reverse(outputFile.begin(), outputFile.end());

			while(outputFile[outputFile.length() - 1] != '.')
				outputFile.erase(outputFile.end() - 1);
			
			if(outputFile[outputFile.length() - 1] == '.')
				outputFile.erase(outputFile.end() - 1);

			problemName = outputFile;
			outputFile += "_output.txt";
			std::ofstream foutput(outputFile);
			foutput << "Problem: " << problemName << "\n";

			/**Initialize literals**/
			std::vector<int> vectorNumbers = mc.initializeNumbers(noLettersCollectionString, numberOfLiterals);

			/**Initialize data structure**/
			mc.initializeDataStructure(vectorStringNumbers, vectorNumbers, multiMapLiteralClause);

			/**Start timer**/
			clock_t begin = clock();

			/**Start clustering (Multilevel)**/
			mc.cluster(foutput, bestSoFar, numberOfXLiterals, levelCounter, mapLevelClusters, vectorStringNumbers, numberOfLiterals, numberOfClauses, initialClusterCollection, clusterCollection, mapLiteralValues, mapClauseValues, begin);

			/**Stop timer**/
			clock_t end = clock();

			timeElapsedMultilevelClustering = te.GetTimeElapsed(end, begin)/1000;

			/**Start timer**/
			begin = clock();

			/**Run Tabu Search, print out results**/
			ts.run(foutput, bestSoFar, noLettersCollectionString, numberOfLiterals, levelCounter, mapLevelClusters, vectorStringNumbers, initialClusterCollection, clusterCollection, mapLiteralValues, mapClauseValues, numberOfXLiterals, numberOfClauses, multiMapLiteralClause, begin);
			
			/**Stop timer**/
			end = clock();

			timeElapsedTabuSearch = te.GetTimeElapsed(end, begin)/1000;

			std::cout << "Time elapsed Multilevel: " << timeElapsedMultilevelClustering << " seconds" << std::endl;
			std::cout << "Time elapsed Tabu Search: " << timeElapsedTabuSearch << " seconds" << std::endl;
			std::cout << "Total time elapsed: " << timeElapsedMultilevelClustering + timeElapsedTabuSearch << " seconds" << std::endl << std::endl;
			foutput << "\nTotal time elapsed: " << timeElapsedMultilevelClustering + timeElapsedTabuSearch << " seconds";
			foutput.close();

			//Finished!
			Beep(800, 2000);
			system("pause");
		}
		
		else
		{			
			std::cout << "Incorrect file format. Input must be a text file. Exiting....." << std::endl << std::endl;
			system("pause");
		}
	}
	
	else
	{	
		std::cout << "No file input. Exiting....." << std::endl << std::endl;
		system("pause");
	}

	return 0;
}
Пример #6
0
void UserProcessingCenter::handleWebChgPwd(CMazeMsg* context)
{
    string input(context->getMsg());
	MBlockSocket *pclient = context->getSocket();
	UserDatabase *userdb = UserDatabase::getInstance();

	cout <<" : WebChgPwd : "<<endl;

	string old_pwd = MXMLHandler::GetNode(input,"OldPwd");
	string new_pwd = MXMLHandler::GetNode(input,"NewPwd");

	USERDB* one = new USERDB;
	memset(one, 0, sizeof(USERDB));
	string error_msg="";
	ofstream foutput("/home/maze/usr_epoll/run/chpwd_test.log",ios::app);

	bool success = true;
	string output = MXMLHandler::CreateNode ("Err","");
	if(MXMLHandler::isExistNode(input,"UID"))
	{
		unsigned long uid = CConvert::StringToInt (MXMLHandler::GetNode(input,"UID"));

		if(userdb->get_record( uid, one)!=0)
		{
		    error_msg+="uid not exist";
		    foutput<<error_msg<<endl;
		    output = MXMLHandler::CreateNode("Err","NotExist");
		    success = false;
		}
	}
	else if(MXMLHandler::isExistNode(input,"EmailAddr"))
	{
		string newmail=MXMLHandler::GetNode(input,"EmailAddr");
		if(userdb->get_record( newmail, one)!=0)
		{
		    error_msg+="email addr not exist";
		    foutput<<error_msg<<endl;
		    output = MXMLHandler::CreateNode("Err","NotExist");
		    success = false;
		}
	}
	else
	{
	    error_msg+="other error";
	    foutput<<error_msg<<endl;
	    return;
	}
			
	if(success)
	{
		if(old_pwd==string(one->Pwd) || strcmp("maze.#@!",old_pwd.c_str())==0)
		{
			strcpy(one->Pwd,MXMLHandler::GetNode(input,"NewPwd").substr(0,63).c_str());
			if(userdb->put_record( one->UID, one) == 0)
				output=MXMLHandler::CreateNode ("Success","");
			else{
			    error_msg+="can not put_record";
			    foutput<<error_msg<<endl;
			    output=MXMLHandler::CreateNode ("Err","SaveErr");
			}
					
		}
		else{
		    error_msg+="not match";
		    foutput<<error_msg<<endl;
		    output=MXMLHandler::CreateNode ("Err","PasswordNotMatch");
		}
	}

	pclient->SendPacket(output.c_str(), output.length()+1);
	//cout<<"WebChgPwd -> "<<one->UID<<endl;
	delete one;
	foutput.close();
}
Пример #7
0
 void UserProcessingCenter::handleWebRegister(CMazeMsg* context)
{
       cout<<" : WebRegister : " << endl;
       ofstream foutput("/home/maze/usr_epoll/run/webreg_test.log",ios::app);	   
       string input(context->getMsg());
       MBlockSocket *pclient = context->getSocket();
       UserDatabase *userdb = UserDatabase::getInstance();
	   
	string output = MXMLHandler::CreateNode ("Err","");
	unsigned long uid;
	bool success = true;

	USERDB* one = new USERDB;
	memset(one, 0, sizeof(USERDB));

       one->Account = START_ACCOUNT;
       one->Level = LOW_LEVEL;
       strcpy(one->MailAddr,MXMLHandler::GetNode(input,"EmailAddr").substr(0,127).c_str());
       strcpy(one->NickName, MXMLHandler::GetNode(input,"Name").substr(0,63).c_str());
       strcpy(one->Pwd, MXMLHandler::GetNode(input,"Pwd").substr(0,63).c_str());

       string	desc = MXMLHandler::CreateNode("MachineID",MXMLHandler::GetNode(input,"MachineID"));
	desc += MXMLHandler::CreateNode("Q",MXMLHandler::GetNode(input,"Q"));
	desc += MXMLHandler::CreateNode("A",MXMLHandler::GetNode(input,"A"));
	desc += MXMLHandler::CreateNode("Intro",MXMLHandler::GetNode(input,"Intro"));

	strcpy(one->Describe, desc.substr(0,255).c_str());
	one->LastLoginIP = CConvert::StringToInt(MXMLHandler::GetNode(input,"IP"));
	one->LastLogin = time(NULL);

	string gender = MXMLHandler::GetNode(input,"Gender");
	//string career = MXMLHandler::GetNode(input,"Identity");
	int identity = 0;
	if(gender == "1")
		identity |= 2;
	else if(gender == "0")
		identity |= 4;

	//if(career == "1")
		//	identity |= 8;
	//else if(career == "0")
		//	identity |= 16;
	foutput<<"everything is ok."<<endl;
	//gooduid
	if(MXMLHandler::isExistNode(input,"Uid"))
	{
	    foutput<<"exist uid"<<endl;
		uid = CConvert::StringToInt (MXMLHandler::GetNode(input,"Uid"));
		USERDB* temp = new USERDB;
		memset(temp, 0, sizeof(USERDB));
				
		int ret = userdb->get_record(uid, temp);
		if(ret==0)
		{
		    foutput<<"then get success."<<endl;
			time_t nowTime;
			time(&nowTime);
			int offsetTime = 365*24*3600;//两年
			unsigned long judgePoint = nowTime -  offsetTime;
			//不是过期的号码
			if(temp->LastLogin>judgePoint)
			{
			    foutput<<"not offtime"<<endl;
				g_csUser.Lock();
				uid = g_UserCount;
				g_UserCount++;
				g_csUser.Unlock();
			}
		}
		else if(ret==DB_NOTFOUND)
		{
		    foutput<<"db not found"<<endl;
					//do nothing
		}
		else
		{
		    foutput<<"db error"<<endl;
		    output = MXMLHandler::CreateNode ("Err","Save");
		    pclient->SendPacket (output.c_str(), output.length()+1);
		    delete one;
		    return;
		}
		delete temp;
	}
	else
	{
	    foutput<<"not exist uid"<<endl;
	    g_csUser.Lock();
	    uid = g_UserCount;
	    g_UserCount++;
	    g_csUser.Unlock();
	}
	foutput<<"uid: "<<uid<<endl;
	one->UID = uid;
	one->Identity = identity;
	if(userdb->isExist(uid)){
	    foutput<<"already exist uid,can not reg"<<endl;
	    output = MXMLHandler::CreateNode ("Err","Save");
	}
	else{
	    if(userdb->put_record( uid, one) == 0)
	    {
		foutput<<"put_record success"<<endl;
		output = MXMLHandler::CreateNode("Success", "");
		string uidstr = CConvert::IntToString(uid);
		output += MXMLHandler::CreateNode("UID", uidstr);
	    }
	    else
	    {
		foutput<<"put record error"<<endl;
		output = MXMLHandler::CreateNode ("Err","Save");
	    }
	}
	pclient->SendPacket (output.c_str(), output.length()+1);
	//cout<<" : WebRegister : "<<one->UID<<endl;
	delete one;
	userdb->setCount(g_UserCount);
				
	char buf[256];
	time_t timep;
	struct tm *p;
	time(&timep);
	p=localtime(&timep);
	sprintf(buf,"%d%0.2d%0.2d_register.txt",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);
	Configuration config = Configuration::getInstance();
	string logDir = config.get("log");
	string logName = logDir + buf;

	ofstream registerLogOutput(logName.c_str(),ofstream::app);
	registerLogOutput<<uid<<" "<<timep<<endl;
	foutput<<"web  reg handle done"<<endl;
	foutput.close();
}
Пример #8
0
void UserProcessingCenter::handleRefreshPersonalInfo(CMazeMsg* context)
{
    string input(context->getMsg());
    MBlockSocket *pclient = context->getSocket();
    UserDatabase *userdb = UserDatabase::getInstance();
    ofstream foutput("/home/maze/usr_epoll/run/refreshPI_test.log",ios::app);	   
	cout<<" refresh personal information"<<endl;
	USERDB* one = new USERDB;
	memset(one, 0, sizeof(USERDB));

	string output = MXMLHandler::CreateNode("Cmd","ReplyPersonalInfo");
	bool success = true;
	unsigned long uid;
			
       if(MXMLHandler::isExistNode(input,"UID"))
	{
		uid = CConvert::StringToInt (MXMLHandler::GetNode(input,"UID"));

		if(userdb->get_record(uid, one)!=0)
		{
		    foutput<<"uid not exist"<<endl;
			output += MXMLHandler::CreateNode("Err","NotExist");
			success = false;
		}
	}
	else if(MXMLHandler::isExistNode(input,"EmailAddr"))
	{
		string newmail=MXMLHandler::GetNode(input,"EmailAddr");

		if(userdb->get_record( newmail, one)!=0)
		{
		    foutput<<"Email not exist"<<endl;
			output += MXMLHandler::CreateNode("Err","NotExist");
			success = false;
		}
		else
			uid = one->UID;
	}
	else
	{
	    foutput<<"both not exist"<<endl;
	    return;
	}
	output += MXMLHandler::CreateNode("UID",CConvert::IntToString(uid));
	if(success == false)
	{
	    foutput<<"not success"<<endl;
              pclient->SendPacket(output.c_str(),output.length() + 1);
		delete one;
	}
	else
	{
	    foutput<<"find! now create output..."<<endl;
		int imageid = one->Identity | 0x00008000;
		if(find(admin.begin(),admin.end(),uid) != admin.end())
			imageid += 32;
              output += MXMLHandler::CreateNode("NickName",one->NickName);
              output += MXMLHandler::CreateNode("Credits",CConvert::IntToString(one->Account).c_str());
              output += MXMLHandler::CreateNode("Level",CConvert::IntToString(one->Level).c_str());
              output += MXMLHandler::CreateNode("FaceImage",CConvert::IntToString(imageid).c_str());
	      foutput<<"to send..."<<endl;
              pclient->SendPacket(output.c_str(),output.length() + 1);
	      foutput<<"sended,ok!"<<endl;
	      delete one;
	}
	foutput.close();
}
Пример #9
0
int main(){
		Convexhull h;
		vector<Point> point;
		vector<Point> result;
		vector<Point> internal;

		while(1){
				int i,option,n;
				cout << "Please choose method: (1)brute force (2)Jarvis's march (3)exit" <<endl;
				cin >> option;
				
				ifstream finput("Input.txt");
			
				internal.clear();
				point.clear();
				result.clear();
				
				finput >> n; // Ū¤F´X­Ó¦r¤¸
				for(i=0; i<n; i++){
						double x,y;
						finput >> x >> y;
						Point a = Point(x,y);
						point.push_back(a);
				}
				struct timeval tv, tv2;
				unsigned long long int start_utime, end_utime;
				if(option == 1){
						gettimeofday(&tv, NULL);
						h.FindConvexHull_bf(point, result);
						gettimeofday(&tv2, NULL);
						start_utime = tv.tv_sec*1000000 + tv.tv_usec;
						end_utime = tv2.tv_sec*1000000 + tv2.tv_usec;
				}
				else if(option == 2){
						gettimeofday(&tv, NULL);
						h.FindConvexHull_jm(point, result);
						gettimeofday(&tv2, NULL);
						start_utime = tv.tv_sec*1000000 + tv.tv_usec;
						end_utime = tv2.tv_sec*1000000 + tv2.tv_usec;
				}
				else
						break;
				cout << "cost time: " << end_utime - start_utime << " us" <<endl;
				internal = h.FindInternalPoint(point,result);
				
				ofstream foutput("Output.txt");
				foutput << internal.size() << endl;
				
				vector<Point> upper;
				vector<Point> lower;
				upper.clear();
				lower.clear();
				for(i=0; i<internal.size(); i++){
						if(internal[i].y >= 0)
								upper.push_back(internal[i]);
						else
								lower.push_back(internal[i]);
				}
				sort(upper.begin(), upper.end(), up_compare);
				sort(lower.begin(), lower.end(), low_compare);
		
				for(i=0; i<upper.size(); i++)
						foutput << upper[i].x << " " << upper[i].y << endl;
				for(i=0; i<lower.size(); i++)
						foutput << lower[i].x << " " << lower[i].y << endl;
				foutput << endl;

				foutput << result.size() << endl;

				Point start_p = FindStartPoint(result);
				upper.clear();
				lower.clear();
				for(i=0; i<result.size(); i++){
						if(result[i] == start_p)
								continue;
						if(result[i].y > start_p.y)
								upper.push_back(result[i]);
						else
								lower.push_back(result[i]);
				}
				sort(upper.begin(), upper.end(), up_compare);
				sort(lower.begin(), lower.end(), low_compare);
				foutput << start_p.x << " " << start_p.y << endl;
				for(i=0; i<upper.size(); i++)
						foutput << upper[i].x << " " << upper[i].y << endl;
				for(i=0; i<lower.size(); i++)
						foutput << lower[i].x << " " << lower[i].y << endl;
		}

		return 0;
}