real_clock.cpp
Go to the documentation of this file.
00001 /*
00002  *    This file is part of ACADO Toolkit.
00003  *
00004  *    ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
00005  *    Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
00006  *    Milan Vukov, Rien Quirynen, KU Leuven.
00007  *    Developed within the Optimization in Engineering Center (OPTEC)
00008  *    under supervision of Moritz Diehl. All rights reserved.
00009  *
00010  *    ACADO Toolkit is free software; you can redistribute it and/or
00011  *    modify it under the terms of the GNU Lesser General Public
00012  *    License as published by the Free Software Foundation; either
00013  *    version 3 of the License, or (at your option) any later version.
00014  *
00015  *    ACADO Toolkit is distributed in the hope that it will be useful,
00016  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018  *    Lesser General Public License for more details.
00019  *
00020  *    You should have received a copy of the GNU Lesser General Public
00021  *    License along with ACADO Toolkit; if not, write to the Free Software
00022  *    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00023  *
00024  */
00025 
00026 
00034 #include <acado/clock/real_clock.hpp>
00035 
00036 
00037 
00038 BEGIN_NAMESPACE_ACADO
00039 
00040 
00041 
00042 RealClock::RealClock( ) : Clock( )
00043 {
00044         lastTimeInstant = 0.0;
00045 }
00046 
00047 
00048 RealClock::RealClock( const RealClock &rhs ) : Clock( rhs )
00049 {
00050         lastTimeInstant = rhs.lastTimeInstant;
00051 }
00052 
00053 
00054 RealClock::~RealClock( )
00055 {
00056 }
00057 
00058 
00059 RealClock& RealClock::operator=( const RealClock &rhs )
00060 {
00061         if( this != &rhs )
00062         {
00063                 Clock::operator=( rhs );
00064 
00065                 lastTimeInstant = rhs.lastTimeInstant;
00066         }
00067 
00068         return *this;
00069 }
00070 
00071 
00072 Clock* RealClock::clone( ) const
00073 {
00074         return new RealClock( *this );
00075 }
00076 
00077 
00078 returnValue RealClock::start( )
00079 {
00080         if ( status != CS_STOPPED )
00081                 return ACADOERROR( RET_CLOCK_NOT_READY );
00082 
00083         lastTimeInstant = acadoGetTime( );
00084 
00085         if ( lastTimeInstant < 0.0 )
00086                 return ACADOERROR( RET_NO_SYSTEM_TIME );
00087 
00088         status = CS_RUNNING;
00089 
00090         return SUCCESSFUL_RETURN;
00091 }
00092 
00093 
00094 returnValue RealClock::step(    double _timeShift
00095                                                                 )
00096 {
00097         returnValue returnvalue = stop( );
00098         if ( returnvalue != SUCCESSFUL_RETURN )
00099                 return returnvalue;
00100 
00101         elapsedTime += _timeShift;
00102 
00103         return start( );
00104 }
00105 
00106 
00107 returnValue RealClock::stop( )
00108 {
00109         if ( status == CS_NOT_INITIALIZED )
00110                 return ACADOERROR( RET_CLOCK_NOT_READY );
00111 
00112         if ( status == CS_STOPPED )
00113                 return SUCCESSFUL_RETURN;
00114 
00115         // actually stop the clock
00116         double currentTimeInstant = acadoGetTime( );
00117         
00118         if ( currentTimeInstant < 0.0 )
00119                 return ACADOERROR( RET_NO_SYSTEM_TIME );
00120         
00121         elapsedTime += currentTimeInstant - lastTimeInstant;
00122 
00123         status = CS_STOPPED;
00124 
00125         return SUCCESSFUL_RETURN;
00126 }
00127 
00128 
00129 
00130 CLOSE_NAMESPACE_ACADO
00131 
00132 
00133 /*
00134  *      end of file
00135  */


acado
Author(s): Milan Vukov, Rien Quirynen
autogenerated on Thu Aug 27 2015 11:59:51