Logger.hpp

Go to the documentation of this file.
00001 //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00002 //
00003 //        This file is part of E-Cell Simulation Environment package
00004 //
00005 //                Copyright (C) 2000-2004 Keio University
00006 //
00007 //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00008 //
00009 //
00010 // E-Cell is free software; you can redistribute it and/or
00011 // modify it under the terms of the GNU General Public
00012 // License as published by the Free Software Foundation; either
00013 // version 2 of the License, or (at your option) any later version.
00014 // 
00015 // E-Cell 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.
00018 // See the GNU General Public License for more details.
00019 // 
00020 // You should have received a copy of the GNU General Public
00021 // License along with E-Cell -- see the file COPYING.
00022 // If not, write to the Free Software Foundation, Inc.,
00023 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00024 // 
00025 //END_HEADER
00026 //
00027 // written by Masayuki Okayama <smash@e-cell.org>,
00028 // E-Cell Project.
00029 //
00030 // modified by Gabor Bereczki <gabor.bereczki@talk21.com>
00031 // modified by Koichi Takahashi <shafi@e-cell.org>
00032 
00033 
00034 
00035 #if !defined(__LOGGER_HPP)
00036 #define __LOGGER_HPP
00037 
00038 #include <vector>
00039 
00040 #include <boost/utility.hpp>
00041 
00042 #include "libecs.hpp"
00043 #include "LoggerAdapter.hpp"
00044 #include "PhysicalLogger.hpp"
00045 #include "DataPointVector.hpp"
00046 
00047 
00048 namespace libecs
00049 {
00050 
00051 
00052   /** @addtogroup logging The Data Logging Module.
00053       The Data Logging Module.
00054 
00055       @ingroup libecs
00056       
00057       @{ 
00058    */ 
00059 
00060   /** @file */
00061 
00062   /**
00063 
00064   Logger module for logging and retrieving data runtime.
00065    
00066   */
00067 
00068   class Logger
00069     :
00070     private boost::noncopyable
00071   {
00072 
00073   public:
00074 
00075     DECLARE_TYPE( PhysicalLogger::size_type, size_type );
00076     
00077     // enumeration for logging policy
00078     enum Policy
00079       {
00080         STEP_SIZE = 0,
00081         TIME_INTERVAL,
00082         END_POLICY,
00083         MAX_SPACE
00084       };
00085 
00086 
00087   public:
00088 
00089     /**
00090        Constructor.
00091 
00092        Takes up the ownership of the given LoggerAdapter.
00093 
00094     */
00095   
00096     Logger( LoggerAdapterPtr aLoggerAdapter );
00097   
00098     /// Destructor
00099 
00100     ~Logger( void );
00101 
00102 
00103     /**
00104     
00105     Sets logging policy that is a vector of 4 numerical values. 
00106     0 (int)  - minimum step size between logs
00107     1 (real) - minimum time interval between logs
00108     2 (int) - action to be taken when disk space runs out
00109     3 (int) - user set max disk space, if 0 nothing 
00110     
00111     */
00112 
00113     void setLoggerPolicy( IntegerParam aMinimumStep,
00114                           RealParam    aMinimumTimeInterval,
00115                           IntegerParam anEndPolicy,
00116                           IntegerParam aMaxSpace );
00117 
00118     /**
00119     
00120     Sets logging policy as a PolymorphVector of 4 numerical values. 
00121     
00122     */
00123 
00124     ECELL_API void setLoggerPolicy( PolymorphCref aParamList );
00125 
00126 
00127     /**
00128 
00129     Returns logging policy vector.
00130 
00131     */
00132 
00133     ECELL_API const Polymorph getLoggerPolicy( void );
00134 
00135     /**
00136 
00137       Log current value that theLoggerAdapter gives with aTime.
00138 
00139     */
00140 
00141     void log( RealParam aTime );
00142 
00143 
00144     /**
00145        Returns contents of the whole logger.
00146 
00147     */
00148 
00149     ECELL_API DataPointVectorSharedPtr getData( void ) const;
00150 
00151     /**
00152        Returns a slice of the data from aStartTime to anEndTime.
00153 
00154     */
00155 
00156     ECELL_API DataPointVectorSharedPtr getData( RealParam aStartTime,
00157                                       RealParam anEndTime ) const;
00158 
00159     /**
00160        Returns a summary of the data from aStartTime to anEndTime with
00161        intervals anInterval between data elements.
00162     */
00163 
00164     ECELL_API DataPointVectorSharedPtr getData( RealParam aStartTime,
00165                                       RealParam anEndTime, 
00166                                       RealParam anInterval ) const;
00167     
00168 
00169 
00170     /**
00171        Returns time of the first element  in Logger.
00172     */
00173 
00174     ECELL_API const Real getStartTime( void ) const;
00175 
00176     /**
00177        Returns time of the last element in Logger
00178     */
00179 
00180     ECELL_API const Real getEndTime( void ) const;
00181 
00182     /**
00183       Returns size of logger
00184     */
00185 
00186     const size_type getSize() const
00187     {
00188       return thePhysicalLogger.size();
00189     }
00190 
00191     /**
00192        DEPRECATED - Use setLoggerPolicy 
00193     */
00194 
00195     ECELL_API void setMinimumInterval( RealParam anInterval );
00196 
00197     /**
00198        DEPRECATED - Use getLoggerPolicy
00199 
00200     */
00201 
00202     const Real getMinimumInterval( void ) const
00203     {
00204       return theMinimumInterval;
00205     }
00206 
00207 
00208 
00209     /**
00210        This method does nothing as of version 3.1.103.
00211     */
00212 
00213     void flush()
00214     {
00215       ; // do nothing
00216     }
00217 
00218 
00219   protected:
00220 
00221     /**
00222 
00223     @internal
00224 
00225     */
00226 
00227     DataPointVectorIterator binary_search( DataPointVectorIterator begin,
00228                                            DataPointVectorIterator end,
00229                                            RealParam t ) 
00230     {
00231       return thePhysicalLogger.lower_bound( thePhysicalLogger.begin(), 
00232                                             thePhysicalLogger.end(), 
00233                                             t );
00234     }
00235     
00236   protected:
00237 
00238     /**
00239        Writes data (aTime, aValue ) onto the logger
00240     */
00241 
00242     void pushData( RealParam aTime, RealParam aValue )
00243     {
00244       thePhysicalLogger.push( DataPoint( aTime, aValue ) );
00245     }
00246 
00247     static DataPointVectorSharedPtr createEmptyVector();
00248 
00249   private:
00250 
00251     /// no default constructor
00252     Logger( void );
00253 
00254 
00255   private:
00256 
00257     /// Data members
00258 
00259     PhysicalLogger              thePhysicalLogger;
00260 
00261     LoggerAdapterPtr                     theLoggerAdapter;
00262 
00263     PhysicalLogger::size_type   theStepCounter;
00264     Integer                              theMinimumStep; 
00265 
00266     Real                                 theLastTime;
00267     Real                                 theMinimumInterval;
00268 
00269   };
00270 
00271 
00272   /** @} */ // logging module
00273 
00274 } // namespace libecs
00275 
00276 
00277 #endif /* __LOGGER_HPP */
00278 

Generated on Fri Aug 31 18:32:07 2007 for E-CELL C++ libraries (libecs and libemc) 3.1.105 by  doxygen 1.5.3