예제 #1
0
파일: util.hpp 프로젝트: G-Node/nix
T convertToSeconds(const std::string &unit, T value) {
    T seconds;
    if (unit == "min") {
        seconds = value * 60;
    } else if (unit == "h") {
        std::string new_unit = "min";
        seconds = convertToSeconds(new_unit, value * 60);
    } else if (unit == "s" || unit == "sec") {
        seconds = value;
    } else if (isScalable(unit, "s")) {
        double scaled = value * getSIScaling(unit, "s");
        seconds = static_cast<T>(std::is_integral<T>::value ? std::round(scaled) : scaled);
    } else {
        std::cerr << "[nix::util::convertToSeconds]";
        std::cerr << " Warning: given unit [" + unit + "] is not supported!" << std::endl;
        seconds = value;
    }
    return seconds;
}
예제 #2
0
/**
 *@param info - "miles \t p_min \t p_sec \t tt_hour \t tt_min \t tt_sec"
 *    one of three sections will be all " ";
 *@return  the missing part of the equation
 */
string RunLog::PaceCalculator( string& p_Info )
{
	double numbers[6];
	int calcCase;
	string retval = "";
	for( int i = 0; i<6; i++)
	{
		size_t found = p_Info.find( "\t" );
		if( found != string::npos )
		{
			string num = p_Info.substr( 0, found );
			if( num == " " )
				calcCase = i;
			else
			{
				numbers[i] = atof( num.c_str() );
			}
			p_Info = p_Info.substr( found +1 );
		}
		else
		{
			return "";
		} 
	}
	
	double pace,tt,temp, zero = 0.0;
	switch( calcCase )
	{
		case 0:
			//convert pace and tt to seconds		
			pace = convertToSeconds( zero, numbers[1], numbers[2] );
			tt = convertToSeconds( numbers[3], numbers[4], numbers[5] );
			temp = tt / pace;//divide
			retval = DoubleToStr( temp );
			break;
			
		case 1:
		case 2:
		
			//convert tt to seconds 
			tt = convertToSeconds( numbers[3], numbers[4], numbers[5] );
			temp = tt / numbers[0];
			
			//divide by miles
			convertToMinSec( &numbers[1], temp );
			//convert to min and seconds
			retval = DoubleToStr( numbers[2] );
			if( retval.size() == 1 ) retval = "0" + retval;
			retval = DoubleToStr( numbers[1] ) + " " +  retval;
			break;
		case 4:
		case 3:
		case 5:
			
			double tempM;
			//multiply miles by pace min adn sec
			temp = numbers[0] * numbers[1];
			if( temp > 59 )
			{
				numbers[3] =  (int)temp / 60;
				tempM =  (int)temp % 60;
			}
			
			temp = numbers[0] * numbers[2];
			if( temp > 60 )
			{
				tempM += (int)temp / 60;
				
				
				if (tempM > 59){
					numbers[3]++;
				tempM -= 60;}
				numbers[5] = (int)temp %60;
			}
			
			retval = DoubleToStr( numbers[3] ) + " " 
			+ DoubleToStr( numbers[4] )+ " " + DoubleToStr( numbers[5] );
			break;
	}
	return retval;
}