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 ) ; };
/* 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 ) ; } }