Rev 1 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*defines Settings - class that stores all the settings used by bob_dom_bob andbob_dom_cut when loading/saving bob1/cut1 data*/#ifndef SETTINGS_INCLUDED#define SETTINGS_INCLUDED#include "../common/ext_list.h"class Settings{public:#ifdef X2BC_USE_INI_FORMATStemplate <class Ty1, class Ty2>class pair{public:Ty1 left;Ty2 right;pair(const Ty1 &val1, const Ty2 &val2) { left=val1; right=val2; }pair(const pair &other) { left=other.left; right=other.right; }pair() { }};struct NumberFormat{enum OutputFormat{Float,Integer};char type;double multiplier;OutputFormat outformat;};class StatFormat{public:struct token{int count;char type;char *data;NumberFormat *numFormat;token() { data=0; }~token() { delete[] data; }};int id;private:typedef ext::list<token*> TokenList;public:typedef TokenList::iterator iterator;typedef TokenList::const_iterator const_iterator;TokenList tokens;bool issueWarning;TokenList::size_type cumulativeTokenCount;StatFormat() { issueWarning=false; cumulativeTokenCount=0; }~StatFormat(){for(iterator &it=tokens.begin(); it!=tokens.end(); ++it){delete *it;}}};typedef pair<const char *, const char*> conststringpair;#endif // defined(X2BC_USE_INI_FORMATS)enum ErrorType{Error,Warning};enum ErrorCodes{E_BadConstantDeclaration,E_BadFormatDeclaration,E_SectionEmpty,W_LineIgnored,W_ConstantAlwaysZero};enum SwitchValue{on,off,notSet};struct ErrorMsg{ErrorType type;ErrorCodes code;char message[255];};private:typedef ext::list<ErrorMsg*> ErrorList;#ifdef X2BC_USE_INI_FORMATStypedef ext::list<StatFormat*> FormatList;#endifpublic:typedef ErrorList::iterator ErrorIterator;#ifdef X2BC_USE_INI_FORMATStypedef FormatList::iterator iterator;typedef FormatList::const_iterator const_iterator;#endifprivate:#ifdef X2BC_USE_INI_FORMATStypedef bool ParsePairCallback(const char *pszSectionName, conststringpair &);typedef ext::list<NumberFormat*> NumberFormatList;NumberFormatList m_constants;#endifbool m_bOutputWarnings; // write warnings to filebool m_bConvert; // convert valuesbool m_bStatFormatWarnings; // make warning if format is marked with warning signbool m_bXtraPntInfo; // whether extra point info is outputed to BODbool m_bXtraX3BobInfo; // extra x3 bob info//SwitchValue m_X3BOB; // force/suppress extra bob3 info loadingvoid error(ErrorType type, ErrorCodes code, const char *format, ...);#ifdef X2BC_USE_INI_FORMATSchar * readSection(const char *pszSection, const char *pszFileName, size_t *size);conststringpair parsePair(const char *left, const char *right);bool parseLines(const char *pszSectionName, char *pszData, size_t size, ParsePairCallback *callback);bool parseStatFormat(const char *pszSectionName, conststringpair &p);bool parseFormatString(const char *pszSectionName, StatFormat *f, char *format);NumberFormat * findNumberFormat(char ch);#endifpublic:ErrorList errors;#ifdef X2BC_USE_INI_FORMATSFormatList formats;bool parseConstant(const char *pszSectionName, conststringpair &p);bool parseFormat(const char *pszSectionName, conststringpair &p);#endifbool loadINI(const char *pszFileName);bool outputWarnings() const { return m_bOutputWarnings; }void outputWarnings(bool val) { m_bOutputWarnings=val; }bool convert() const { return m_bConvert; }void convert(bool val) { m_bConvert=val; }bool statFormatWarnings() const { return m_bStatFormatWarnings; }void statFormatWarnings(bool val) { m_bStatFormatWarnings=val; }bool extraPntInfo() const { return m_bXtraPntInfo; }void extraPntInfo(bool val) { m_bXtraPntInfo=val; }bool extraX3BobInfo() const { return m_bXtraX3BobInfo; }void extraX3BobInfo(bool val) { m_bXtraX3BobInfo=val; }//SwitchValue X3BOB() const { return m_X3BOB; }//void X3BOB(SwitchValue val) { m_X3BOB=val; }void clearErrors(){for(ErrorIterator &it=errors.begin(); it!=errors.end(); ++it){delete *it;}errors.clear();}Settings() { outputWarnings(false); convert(true); statFormatWarnings(true); extraPntInfo(true); /*X3BOB(notSet);*/ }~Settings(){#ifdef X2BC_USE_INI_FORMATSfor(iterator &it=formats.begin(); it!=formats.end(); ++it){delete *it;}#endifclearErrors();}#ifdef X2BC_USE_INI_FORMATSconst StatFormat* findStatFormat(int ID) const{for(const_iterator &it=formats.begin(); it!=formats.end(); ++it){if(it->id==ID) return *it;}return 0;}#endif};#endif // !defined(SETTINGS_INCLUDED)