131 lines
4.9 KiB
C++
131 lines
4.9 KiB
C++
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
Header: FGOutputFile.h
|
|
Author: Bertrand Coconnier
|
|
Date started: 09/10/11
|
|
|
|
------------- Copyright (C) 2011 Bertrand Coconnier -------------
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU Lesser General Public License as published by the Free Software
|
|
Foundation; either version 2 of the License, or (at your option) any later
|
|
version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
|
details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
Further information about the GNU Lesser General Public License can also be found on
|
|
the world wide web at http://www.gnu.org.
|
|
|
|
HISTORY
|
|
--------------------------------------------------------------------------------
|
|
09/10/11 BC Created
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
SENTRY
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
#ifndef FGOUTPUTFILE_H
|
|
#define FGOUTPUTFILE_H
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
INCLUDES
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
#include "FGFDMExec.h"
|
|
#include "FGOutputType.h"
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
DEFINITIONS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
#define ID_OUTPUTFILE "$Id: FGOutputFile.h,v 1.3 2012/12/15 16:13:57 bcoconni Exp $"
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
FORWARD DECLARATIONS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
namespace JSBSim {
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
CLASS DOCUMENTATION
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
/** Abstract class that provide functions that are generic to all the outputs
|
|
that are directed to a file. A new class derived from FGOutputFile should
|
|
be created for each file format that JSBSim is able to output.
|
|
|
|
This class provides all the machinery necessary to manage the file naming
|
|
including the sequence in which the file should be opened then closed. The
|
|
logic of SetStartNewOutput() is also managed in this class. Derived class
|
|
should normally not need to reimplement this method. In most cases, derived
|
|
classes only need to implement the methods OpenFile(), CloseFile() and
|
|
Print().
|
|
*/
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
CLASS DECLARATION
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
class FGOutputFile : public FGOutputType
|
|
{
|
|
public:
|
|
/// Constructor
|
|
FGOutputFile(FGFDMExec* fdmex);
|
|
|
|
/// Destructor : closes the file.
|
|
virtual ~FGOutputFile() { CloseFile(); }
|
|
|
|
/** Init the output directives from an XML file.
|
|
@param element XML Element that is pointing to the output directives
|
|
*/
|
|
bool Load(Element* el);
|
|
|
|
/** Initializes the instance. This method basically opens the file to which
|
|
outputs will be directed.
|
|
@result true if the execution succeeded.
|
|
*/
|
|
bool InitModel(void);
|
|
/** Reset the output prior to a restart of the simulation. This method should
|
|
be called when the simulation is restarted with, for example, new initial
|
|
conditions. The current file is closed and reopened with a new name. The
|
|
new name is contructed from the base file name set by the class
|
|
constructor or SetOutputName() and is appended with an underscore _ and
|
|
an ID that is incremented at each call to this method.
|
|
*/
|
|
void SetStartNewOutput(void);
|
|
/** Overwrites the name identifier under which the output will be logged.
|
|
For this method to take effect, it must be called prior to
|
|
FGFDMExec::RunIC(). If it is called after, it will not take effect before
|
|
the next call to SetStartNewOutput().
|
|
@param name new name */
|
|
void SetOutputName(const std::string& fname) {
|
|
Name = Filename = FDMExec->GetRootDir() + fname;
|
|
runID_postfix = 0;
|
|
}
|
|
/** Generate the output. This is a pure method so it must be implemented by
|
|
the classes that inherits from FGOutputFile.
|
|
*/
|
|
void Print(void) = 0;
|
|
|
|
protected:
|
|
std::string Filename;
|
|
|
|
/// Opens the file
|
|
virtual bool OpenFile(void) = 0;
|
|
/// Closes the file
|
|
virtual void CloseFile(void) {}
|
|
|
|
private:
|
|
int runID_postfix;
|
|
};
|
|
}
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
#endif
|
|
|