Example #1
0
std::string CdDedJikan::CConv::encode( const CdDedJikan& aJikan )const 
{
	string	strRv ;
	{
		//  符号
		if ( m_bPlusDisplay )
		{
			strRv += "- +"[ sign( aJikan.getTotalSeconds() ) + 1 ] ;
		} 
		else if ( m_bPlusToSpace )
		{
			strRv += "-  "[ sign( aJikan.getTotalSeconds() ) + 1 ] ;
		}
		else
		{
			if ( aJikan.getTotalSeconds() < 0 )
			{
				strRv += "- +"[ sign( aJikan.getTotalSeconds() ) + 1 ] ;
			}
		}

		//	時
		{
			//char	szLs[16] ;
			//sprintf( szLs , "%d" , aJikan.getHour() ) ;
			//strRv += szLs ;
			strRv += OuLib::strprintf( "%d" , aJikan.getHour() ) ;
		}
		//	時のつぎのコロン
		{
			strRv += ":" ;
		}
		//	分
		{
			//char	szLs[16] ;
			//sprintf( szLs , "%02d" , aJikan.getMinute() ) ;
			//strRv += szLs ;
			strRv += OuLib::strprintf( "%02d" , aJikan.getMinute() ) ;
		}
		if ( !m_bNoSecond )
		{
			//	分のつぎのコロン
			{
				strRv += ":" ;
			}
			//	秒
			{
				//char	szLs[16] ;
				//sprintf( szLs , "%02d" , aJikan.getSecond() ) ;
				//strRv += szLs ;
				strRv += OuLib::strprintf( "%02d" , aJikan.getSecond()  ) ;
			}
		}
	}
	return ( strRv ) ;

};
Example #2
0
	/*
		readCentDedRessya() の下請関数
		(02)CentDedDgrEkiJikoku を生成し、 CentDedEkiJikoku で決まる属性を決定。
	*/
void CentDedDgrRessya::readCentDedRessya_02_CreateCentDedEkiJikoku( 
		const CentDedRessya* pCentDedRessya ) 
{
	//	直前の駅の駅時刻。
	CdDedJikoku	aCdDedJikokuLastStation ;


	//	直前の駅の駅時刻でのX座標。aCdDedJikokuLastStation がNULLの場合は
	//	無効です。
	//	最初の「NULLでない駅時刻」を見つかった場合は、その駅時刻から導出された
	//	X座標になります。
	//	2箇所目以降の「NULLでない駅時刻」以降は、
	//	前の駅時刻からの経過時間を加算します。
	//
	//	iXZahyouLastStation = iXZahyouLastStation 
	//		+ ( その駅の駅時刻 - aCdDedJikokuLastStation ) 
	//
	//	これにより、24:00をまたがって走る列車では、
	//	24:00以降の駅時刻に対応する X座標は 24:00 相当(24*60*60=86400) 以上
	//	になります。
	int	iXZahyouLastStation = 0 ;

	for ( int iEkiOrder = 0 ; 
		iEkiOrder < pCentDedRessya->getCentDedEkiJikokuCount() ; 
		iEkiOrder ++ )
	{
		CentDedEkiJikoku aCentDedEkiJikoku 
			= pCentDedRessya->getCentDedEkiJikoku( iEkiOrder ) ;

		//	駅時刻から、X座標を計算	
		int iDgrXZahyou[2] = { INT_MIN , INT_MIN } ;
		for ( int iChakuHatsu = 0 ; iChakuHatsu < 2 ; iChakuHatsu ++ )
		{
			int iX = INT_MIN ;
			CdDedJikokuOrder::EEkiJikokuItem eEkiJikokuItem = CdDedJikokuOrder::EkiJikokuItem_Chaku ;
			if ( iChakuHatsu == 1 )
			{
				eEkiJikokuItem = CdDedJikokuOrder::EkiJikokuItem_Hatsu ; 
			}


			CdDedJikokuOrder	aCdDedJikokuOrder ;
			aCdDedJikokuOrder.setEkiOrder( iEkiOrder , 
				eEkiJikokuItem ) ;
			CdDedJikoku	aCdDedJikoku 
				= pCentDedRessya->getEkiJikoku( aCdDedJikokuOrder ) ;

			if ( aCdDedJikoku.isNull() )
			{
				//	NULL 時刻なら、処理なし
			}
			else if ( aCdDedJikokuLastStation.isNull() )
			{
				//	1回目以降の、非NULL時刻
				iX = aCdDedJikoku.getTotalSeconds() ;	//	最初の、非NULL時刻
			}
			else
			{
				//	2回目以降の、非NULL時刻
				CdDedJikan	aCdDedJikan 
					= aCdDedJikoku.subJikoku( aCdDedJikokuLastStation ) ;
				iX = iXZahyouLastStation + aCdDedJikan.getTotalSeconds() ;
			}
			// --------------------------------
			if ( iX != INT_MIN )
			{
				aCdDedJikokuLastStation = aCdDedJikoku ;
				iXZahyouLastStation = iX ;
			}
			iDgrXZahyou[iChakuHatsu] = iX ;
		}

		CentDedDgrEkiJikoku	aCentDedDgrEkiJikoku( 
			aCentDedEkiJikoku.getEkiatsukai() ,
			iDgrXZahyou[0] ,
			iDgrXZahyou[1] ) ;
		
		m_MuCentDedDgrEkiJikoku.insert( aCentDedDgrEkiJikoku ) ;
	}
}