cantera/src/converters/CKParser.h
Ray Speth 2528df0f75 Reorganized source tree structure
These changes make it unnecessary to copy header files around during
the build process, which tends to confuse IDEs and debuggers. The
headers which comprise Cantera's external C++ interface are now in
the 'include' directory.

All of the samples and demos are now in the 'samples' subdirectory.
2012-02-12 02:27:14 +00:00

131 lines
3.2 KiB
C++

/**
* @file CKParser.h
*
*/
// Copyright 2001 California Institute of Technology
#ifndef CKR_CKPARSER_H
#define CKR_CKPARSER_H
#include <fstream>
#include <string>
#include <iostream>
#include "ckr_defs.h"
#include "Element.h"
#include "Species.h"
#include "Reaction.h"
namespace ckr
{
// typedefs
/// readability constants
//@{
const int NoThermoDatabase = 10;
const int HasTempRange = 11;
//@}
/// Exception class for syntax errors.
class CK_SyntaxError : public CK_Exception
{
public:
CK_SyntaxError(std::ostream& f, const std::string& s, int linenum = -1);
std::ostream& m_out;
};
/**
* Chemkin mechanism file parser. For internal use by class CKReader.
*/
class CKParser
{
public:
CKParser(std::string ckfile, std::ostream* log);
CKParser(std::istream* infile, const std::string& fname,
std::ostream* log);
/// Destructor.
~CKParser() {}
bool readElementSection(elementList& elements);
bool readSpeciesSection(speciesList& species);
bool readThermoSection(std::vector<std::string>& names,
speciesTable& speciesData, vector_fp& temp,
int& optionFlag, std::ostream& log);
bool readReactionSection(const std::vector<std::string>& speciesNames,
std::vector<std::string>& elementNames,
reactionList& reactions, ReactionUnits& units);
bool advanceToKeyword(const std::string& kw, const std::string& stop);
bool verbose;
bool debug;
bool readNASA9ThermoSection(std::vector<std::string>& names,
speciesTable& species, vector_fp& temp,
int& optionFlag, std::ostream& log);
void readNASA9ThermoRecord(Species& sp);
private:
//! Local value of the line number being read
/*!
* This is used for debug IO printout purposes
*/
int m_line;
std::string m_buf;
std::string m_comment;
//! This is the input file that is read
/*!
* It's an istream
*/
std::istream* m_ckfile;
std::string m_ckfilename;
//! Pointer to the ostream for writing debugging output log info
std::ostream* m_log;
bool m_nasafmt;
//! Boolean indicating new NASA input file format
/*!
* If this is true, a completely different input file parser is
* used.
*/
bool m_nasa9fmt;
char m_last_eol;
void readThermoRecord(Species& sp);
//! Get a line from the input file, and return it in string s.
/*!
* If the line contains a comment character (!), then return only the
* portion preceding it. Non-printing characters are replaced by
* spaces.
*
* The input file is m_ckfile, an istream.
*
* @param s On return, s contains the line read from the
* input file.
* @param comment On return, comment contains the text following the
* comment character on the line, if any.
*/
void getCKLine(std::string& s, std::string& comment);
void putCKLine(std::string& s, std::string& comment);
void missingAuxData(const std::string& kw);
void checkSpeciesName(std::string spname);
};
}
#endif