Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
iparse.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "base/src/baseqt.h"
4 
5 #include "dim.h"
6 #include "utility/interface/itextinput.h"
7 
13 namespace itasca {
14  class ITextOutput;
15 
17 
50  class IParse {
51  public:
53  class IMark {
54  public:
56  virtual void destroy()=0;
57  };
58 
60  enum RetCode {
61  rcOK,
66  };
67 
69  virtual ~IParse() { }
70 
72  virtual bool interactiveSource() const=0;
73  virtual void tagLastInputForSmartUndo(const QString &label,quint64 maxLevel,
74  const QString &undoCommand)=0;
75 
79  virtual int getTokenIndex(IMark *p=nullptr) const=0;
83  virtual int getLineNumber(IMark *p=nullptr) const=0;
87  virtual IVect2 getTokenExtent(IMark *p=nullptr) const=0;
88 
90  virtual ITextOutput *getITextOutput()=0;
92  virtual const ITextInput *getITextInput() const=0;
94  virtual ITextInput *getITextInput()=0;
95 
97  virtual const QList<InputLine> &getOriginalInput() const=0;
98 
100  virtual IParse * createTemporaryParse(const QString &)=0;
101 
104  virtual IMark *createMark(int pos=0) const=0;
105 
109  virtual IMark *createMarkCopy(IMark *p=nullptr) const=0;
110 
112  virtual void increment(IMark *p=nullptr) const=0;
114  virtual void decrement(IMark *p=nullptr) const=0;
116  virtual void setMark(IMark *pNew,IMark *p=nullptr) const=0;
117 
120  virtual QString getToken(IMark *p=nullptr) const=0;
121 
126  virtual bool isToken(IMark *p=nullptr) const=0;
127 
130  virtual void checkError(RetCode rc,IMark *p=nullptr) const=0;
131  virtual bool checkError(bool b,IMark *p=nullptr) const=0;
132 
134  virtual void addHelp(const QString &s) const=0;
135 
137  virtual bool isHelp(IMark *p=nullptr) const=0;
138 
139 
143  virtual RetCode isString(QString *ps=nullptr,IMark *p=nullptr,bool encodeBackslash=true) const=0;
147  virtual RetCode isBool(bool *pb=nullptr,IMark *p=nullptr,bool implicitOn=false) const=0;
151  virtual RetCode isInt(int *pi=nullptr,IMark *p=nullptr,int iMin=limits<int>::min(),
152  int iMax=limits<int>::max()) const=0;
156  virtual RetCode isLong(qint64 *pl=nullptr,IMark *p=nullptr,qint64 lMin=limits<qint64>::min(),
157  qint64 lMax=limits<qint64>::max()) const=0;
161  virtual RetCode isUInt(uint *pu=nullptr,IMark *p=nullptr,uint uMin=0,
162  uint uMax=limits<uint>::max()) const=0;
166  virtual RetCode isULong(quint64 *pu=nullptr,IMark *p=nullptr,quint64 uMin=0,
167  quint64 uMax=limits<quint64>::max()) const=0;
168  virtual RetCode isName(QString *ps=nullptr,IMark *p=nullptr) const=0;
172  virtual RetCode isDouble(double *pd=nullptr,IMark *p=nullptr,
173  double dMin=-limits<double>::max(),
174  double dMax= limits<double>::max()) const=0;
186  virtual RetCode isKeyword(const QString &key,uint *pPos=nullptr,IMark *p=nullptr) const=0;
187  virtual RetCode isDVect2(DVect2 *pv=nullptr,IMark *p=nullptr) const=0;
191  virtual RetCode isDVect3(DVect3 *pv=nullptr,IMark *p=nullptr) const=0;
195  virtual RetCode isDVect(DVect *pv=nullptr,IMark *p=nullptr) const=0;
199  virtual RetCode isSymTensor(SymTensor *pv=nullptr,IMark *p=nullptr) const=0;
203  //virtual RetCode isDVect(DVect *pv=nullptr,IMark *p=nullptr) const=0;
207  //virtual RetCode isDAVect(DAVect *pv=nullptr,IMark *p=nullptr) const=0;
211  virtual RetCode isVariant(int type,QVariant *pv=nullptr,IMark *p=nullptr,uint len=0) const=0;
216  virtual RetCode isVariant(QVariant *pv=nullptr,IMark *p=nullptr) const=0;
217 
218 
229  virtual RetCode isFilename(QString *ps=nullptr,const QString &def_ext=QString(),bool openForRead=false,IMark *p=nullptr) const=0;
230 
234  virtual QString toString(IMark *p=nullptr) const=0;
238  virtual bool toBool(IMark *p=nullptr,bool implicitOn=false) const=0;
242  virtual int toInt(IMark *p=nullptr,int iMin=limits<int>::min(),
243  int iMax=limits<int>::max()) const=0;
247  virtual qint64 toLong(IMark *p=nullptr,qint64 lMin=limits<qint64>::min(),
248  qint64 lMax=limits<qint64>::max()) const=0;
252  virtual uint toUInt(IMark *p=nullptr,uint uMin=0,
253  uint uMax=limits<uint>::max()) const=0;
257  virtual quint64 toULong(IMark *p=nullptr,quint64 uMin=0,
258  quint64 uMax=limits<quint64>::max()) const=0;
259  virtual QString toName(IMark *p=nullptr) const=0;
263  virtual double toDouble(IMark *p=nullptr,double dMin=-limits<double>::max(),
264  double dMax= limits<double>::max()) const=0;
269  virtual uint toKeyword(const QString &key,IMark *p=nullptr) const=0;
273  virtual DVect toDVect(IMark *p = 0) const = 0;
277  virtual DVect2 toDVect2(IMark *p=nullptr) const=0;
281  virtual DVect3 toDVect3(IMark *p=nullptr) const=0;
285  virtual SymTensor toSymTensor(IMark *p=nullptr) const=0;
289  //virtual DVect toDVect(IMark *p=nullptr) const=0;
293  //virtual DAVect toDAVect(IMark *p=nullptr) const=0;
297  virtual QVariant toVariant(int type,IMark *p=nullptr,uint len=0) const=0;
302  virtual QVariant toVariant(IMark *p=nullptr) const=0;
305  virtual QString toFilename(const QString &def_ext=QString(),bool openForRead=false,IMark *p=nullptr) const=0;
310  virtual int isStringCharStart(QChar c) const=0;
315  virtual int isStringCharEnd(QChar c) const=0;
316 
318  virtual QStringList getSkipList() const=0;
321  virtual bool checkSkipPre(QStringList *skipList,QChar c,IMark *p=nullptr) const=0;
324  virtual bool checkSkipPost(QStringList *skipList,QChar c,IMark *p=nullptr) const=0;
326  virtual void addSkipPre(QStringList *skipList,QChar c,IMark *p=nullptr) const=0;
328  virtual void addSkipPost(QStringList *skipList,QChar c,IMark *p=nullptr) const=0;
332  virtual bool findKeyword(const QString &keyword,IMark *pFound,IMark *pStart=nullptr) const=0;
336  virtual void stripTokens(IMark *mBegin,IMark *mEnd,IMark *p=nullptr)=0;
338  virtual bool activateHelp(bool b)=0;
340  virtual bool hasHelpToken() const=0;
341  virtual void destroy()=0;
342  };
343 
344 #ifdef THREED
345  inline IParse::RetCode isDVect(const IParse &par,DVect3 *v=nullptr,IParse::IMark *m=nullptr) { return par.isDVect3(v,m); }
348  inline IParse::RetCode isDAvect(const IParse &par,DAVect3 *v=nullptr,IParse::IMark *m=nullptr) { return par.isDVect3(v,m); }
350  inline DVect3 toDVect(const IParse &par,IParse::IMark *m=nullptr) { return par.toDVect3(m); }
352  inline DAVect3 toDAVect(const IParse &par,IParse::IMark *m=nullptr) { return par.toDVect3(m); }
353 #endif
354 #ifdef TWOD
355  inline IParse::RetCode isDVect(const IParse &par,DVect2 *v=nullptr,IParse::IMark *m=nullptr) { return par.isDVect2(v,m); }
358  inline IParse::RetCode isDAvect(const IParse &par,DAVect2 *v=nullptr,IParse::IMark *m=nullptr) { double d; IParse::RetCode rc = par.isDouble(&d,m); if (rc==IParse::rcOK && v) *v = DAVect2(d); return rc; }
360  inline DVect2 toDVect(const IParse &par,IParse::IMark *m=nullptr) { return par.toDVect2(m); }
362  inline DAVect2 toDAVect(const IParse &par,IParse::IMark *m=nullptr) { return DAVect2(par.toDouble(m)); }
363 #endif
364 } // namespace itascaxd
365 // EoF
virtual void destroy()=0
Destroys this mark.
virtual bool checkSkipPost(QStringList *skipList, QChar c, IMark *p=nullptr) const =0
virtual RetCode isULong(quint64 *pu=nullptr, IMark *p=nullptr, quint64 uMin=0, quint64 uMax=limits< quint64 >::max()) const =0
virtual bool interactiveSource() const =0
Returns TRUE if the input source for the command being processed was interactive.
virtual bool hasHelpToken() const =0
Return a boolean indicating whether or not a help token is in the token list.
virtual bool isToken(IMark *p=nullptr) const =0
virtual bool isHelp(IMark *p=nullptr) const =0
Returns TRUE if the token matches one of the help_tokens.
namespace Itasca
Definition: basememory.cpp:9
virtual double toDouble(IMark *p=nullptr, double dMin=-limits< double >::max(), double dMax=limits< double >::max()) const =0
DIM - Provides code portability between 2D and 3D codes.
virtual QStringList getSkipList() const =0
Returns the original skip list parsed from the input line.
DAVect3 toDAVect(const IParse &par, IParse::IMark *m=nullptr)
Thin wrapper for IParse::toDVect3, designed to make it easier to write code that is the same in 2D an...
Definition: iparse.h:352
virtual RetCode isLong(qint64 *pl=nullptr, IMark *p=nullptr, qint64 lMin=limits< qint64 >::min(), qint64 lMax=limits< qint64 >::max()) const =0
virtual int toInt(IMark *p=nullptr, int iMin=limits< int >::min(), int iMax=limits< int >::max()) const =0
virtual ITextOutput * getITextOutput()=0
Returns an ITextIO interface associated with this parser.
virtual IParse * createTemporaryParse(const QString &)=0
A method to return a temporary IParse Object that must be deleted.
IParse::RetCode isDVect(const IParse &par, DVect3 *v=nullptr, IParse::IMark *m=nullptr)
Thin wrapper for IParse::isDVect3, designed to make it easier to write code that is the same in 2D an...
Definition: iparse.h:346
DVect3 toDVect(const IParse &par, IParse::IMark *m=nullptr)
Thin wrapper for IParse::toDVect3, designed to make it easier to write code that is the same in 2D an...
Definition: iparse.h:350
virtual RetCode isFilename(QString *ps=nullptr, const QString &def_ext=QString(), bool openForRead=false, IMark *p=nullptr) const =0
virtual quint64 toULong(IMark *p=nullptr, quint64 uMin=0, quint64 uMax=limits< quint64 >::max()) const =0
virtual RetCode isString(QString *ps=nullptr, IMark *p=nullptr, bool encodeBackslash=true) const =0
virtual const ITextInput * getITextInput() const =0
Returns an ITextInput interface associated with this parser.
virtual QString toString(IMark *p=nullptr) const =0
virtual bool findKeyword(const QString &keyword, IMark *pFound, IMark *pStart=nullptr) const =0
virtual void addHelp(const QString &s) const =0
Adds a QString representing a token type to the help list. Multiple matching Strings are filtered.
virtual bool toBool(IMark *p=nullptr, bool implicitOn=false) const =0
virtual uint toUInt(IMark *p=nullptr, uint uMin=0, uint uMax=limits< uint >::max()) const =0
virtual DVect toDVect(IMark *p=0) const =0
debug checked shorthand for std::numeric_limits<T>::
Definition: limit.h:25
virtual qint64 toLong(IMark *p=nullptr, qint64 lMin=limits< qint64 >::min(), qint64 lMax=limits< qint64 >::max()) const =0
virtual RetCode isDVect3(DVect3 *pv=nullptr, IMark *p=nullptr) const =0
Provides a interface for simple writing of text.
Definition: itextoutput.h:9
virtual void addSkipPre(QStringList *skipList, QChar c, IMark *p=nullptr) const =0
Adds a character to the end of the skip string BEFORE the current token.
virtual RetCode isSymTensor(SymTensor *pv=nullptr, IMark *p=nullptr) const =0
virtual DVect3 toDVect3(IMark *p=nullptr) const =0
token was interpreted successfully.
Definition: iparse.h:61
A symmetric 2nd order tensor.
Definition: symtensor.h:19
virtual bool checkSkipPre(QStringList *skipList, QChar c, IMark *p=nullptr) const =0
the token was interpreted correctly but it's value fell outside of a restricted range given.
Definition: iparse.h:64
the token could not be interepreted as asked.
Definition: iparse.h:63
virtual void setMark(IMark *pNew, IMark *p=nullptr) const =0
Sets the internal position indicator to p.
virtual RetCode isDVect(DVect *pv=nullptr, IMark *p=nullptr) const =0
virtual RetCode isKeyword(const QString &key, uint *pPos=nullptr, IMark *p=nullptr) const =0
virtual QVariant toVariant(int type, IMark *p=nullptr, uint len=0) const =0
virtual void increment(IMark *p=nullptr) const =0
Increments the provided or internal mark.
RetCode
Possible return codes for isXXX() functions.
Definition: iparse.h:60
virtual RetCode isVariant(int type, QVariant *pv=nullptr, IMark *p=nullptr, uint len=0) const =0
Definition: itextinput.h:40
virtual DVect2 toDVect2(IMark *p=nullptr) const =0
virtual int getLineNumber(IMark *p=nullptr) const =0
virtual IMark * createMark(int pos=0) const =0
virtual bool activateHelp(bool b)=0
Turne help on/off.
virtual SymTensor toSymTensor(IMark *p=nullptr) const =0
DVect3 DVect
Vector of doubles, either 2D or 3D.
Definition: dim.h:145
virtual RetCode isUInt(uint *pu=nullptr, IMark *p=nullptr, uint uMin=0, uint uMax=limits< uint >::max()) const =0
virtual uint toKeyword(const QString &key, IMark *p=nullptr) const =0
virtual int getTokenIndex(IMark *p=nullptr) const =0
Opaque position indicator class. Do not attempt to use directly for anything.
Definition: iparse.h:53
virtual int isStringCharStart(QChar c) const =0
IParse::RetCode isDAvect(const IParse &par, DAVect3 *v=nullptr, IParse::IMark *m=nullptr)
Thin wrapper for IParse::isDVect3, designed to make it easier to write code that is the same in 2D an...
Definition: iparse.h:348
virtual QString toFilename(const QString &def_ext=QString(), bool openForRead=false, IMark *p=nullptr) const =0
Interface to the main command processing class.
Definition: iparse.h:50
virtual void stripTokens(IMark *mBegin, IMark *mEnd, IMark *p=nullptr)=0
an extra unused token was found at the end of the command line.
Definition: iparse.h:65
virtual void decrement(IMark *p=nullptr) const =0
Decrements the provided or internal mark.
virtual void addSkipPost(QStringList *skipList, QChar c, IMark *p=nullptr) const =0
Adds a character to the start of the skip string AFTER the current token.
virtual QString getToken(IMark *p=nullptr) const =0
All default base headers if Qt is being used.
virtual void checkError(RetCode rc, IMark *p=nullptr) const =0
virtual RetCode isInt(int *pi=nullptr, IMark *p=nullptr, int iMin=limits< int >::min(), int iMax=limits< int >::max()) const =0
virtual ~IParse()
Virtual destructor.
Definition: iparse.h:69
virtual RetCode isDouble(double *pd=nullptr, IMark *p=nullptr, double dMin=-limits< double >::max(), double dMax=limits< double >::max()) const =0
virtual IVect2 getTokenExtent(IMark *p=nullptr) const =0
virtual const QList< InputLine > & getOriginalInput() const =0
Returns the original strings used to generate the set of command tokens.
virtual int isStringCharEnd(QChar c) const =0
virtual IMark * createMarkCopy(IMark *p=nullptr) const =0
virtual RetCode isBool(bool *pb=nullptr, IMark *p=nullptr, bool implicitOn=false) const =0
no token was present at that position.
Definition: iparse.h:62