Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
baseqstring.h
1 #pragma once
2 
9 #include "basetoqt.h"
10 //#include <xfunctional>
11 
22 BASE_EXPORT QString toQString(const QString &s,int width=0,char fill=' ');
23 BASE_EXPORT QString toQString(const char *str,int width=0,char fill=' ');
24 BASE_EXPORT QString toQString(const qint8 &v,int width=0,char fill=' ');
25 BASE_EXPORT QString toQString(const quint8 &v,int width=0,char fill=' ');
26 BASE_EXPORT QString toQString(const qint16 &v,int width=0,char fill=' ');
27 BASE_EXPORT QString toQString(const quint16 &v,int width=0,char fill=' ');
28 BASE_EXPORT QString toQString(const qint32 &v,int width=0,char fill=' ');
29 BASE_EXPORT QString toQString(const quint32 &v,int width=0,char fill=' ');
30 BASE_EXPORT QString toQString(const qint64 &v,int width=0,char fill=' ');
31 BASE_EXPORT QString toQString(const quint64 &v,int width=0,char fill=' ');
32 BASE_EXPORT QString toQString(const String &v,int width,char fill=' ');
33 BASE_EXPORT QString toQString(const float & v,int width=0,char format='g',int precision=-1,char fill=' ');
34 BASE_EXPORT QString toQString(const double &v,int width=0,char format='g',int precision=-1,char fill=' ');
35 BASE_EXPORT QString toQString(const SymTensor &v,int width=0,char format='g',int precision=-1,char fill=' ');
36 BASE_EXPORT QString toQString(const QVariant &v,int width=0,char fill=' ',char format='g',int precision=-1);
37 BASE_EXPORT QString toQString(const void *v,int width=0,char fill=' ');
41 BASE_EXPORT QString toQString(bool b,const QString &out="on,off",int width=0,char fill=' ');
42 
43 
44 // Template version of toQString, that uses the same argument list
45 template <class T>
46 QString toQStringT(const T &t,int width=0,char fill=' ',char format='g',int precision=-1) {
47  format; precision;
48  return toQString(t,width,fill);
49 }
50 template <>
51 inline QString toQStringT(const float &t,int width,char fill,char format,int precision) {
52  return toQString(t,width,format,precision,fill);
53 }
54 template <>
55 inline QString toQStringT(const double &t,int width,char fill,char format,int precision) {
56  return toQString(t,width,format,precision,fill);
57 }
58 template <>
59 inline QString toQStringT(const QVariant &t,int width,char fill,char format,int precision) {
60  return toQString(t,width,fill,format,precision);
61 }
62 template <>
63 inline QString toQStringT(const bool &b,int width,char fill,char format,int precision) {
64  format; precision;
65  return toQString(b,"on,off",width,fill);
66 }
67 
71 template <class T> inline QString toQString(const Vector2<T> &v,int width=0,char fmt='g',int prec=-1,char fill=' ') {
72  QString s("(%1,%2)");
73  int w = (std::abs(width) - 3) / 2;
74  if (width<0) w = -1;
75  s = s.arg(toQStringT(v.x(),w,fill,fmt,prec));
76  s = s.arg(toQStringT(v.y(),w,fill,fmt,prec));
77  return s;
78 }
82 template <class T> inline QString toQString(const Vector3<T> &v,int width=0,char fmt='g',int prec=-1,char fill=' ') {
83  QString s("(%1,%2,%3)");
84  int w = (std::abs(width) - 4) / 3;
85  if (width<0) w = -1;
86  s = s.arg(toQStringT(v.x(),w,fill,fmt,prec));
87  s = s.arg(toQStringT(v.y(),w,fill,fmt,prec));
88  s = s.arg(toQStringT(v.z(),w,fill,fmt,prec));
89  return s;
90 }
91 
95 template <class T> inline QString toQString(const AVector2<T> &v,int width=0,char fmt='g',int prec=-1,char fill=' ') {
96  QString s("(%1)");
97  int w = (std::abs(width) - 3) / 2;
98  if (width<0) w = -1;
99  s = s.arg(toQStringT(v.z(),w,fill,fmt,prec));
100  return s;
101 }
105 template <class T> inline QString toQString(const AVector3<T> &v,int width=0,char fmt='g',int prec=-1,char fill=' ') {
106  QString s("(%1,%2,%3)");
107  int w = (std::abs(width) - 4) / 3;
108  if (width<0) w = -1;
109  s = s.arg(v.x(),w,fill,fmt,prec);
110  s = s.arg(v.y(),w,fill,fmt,prec);
111  s = s.arg(v.z(),w,fill,fmt,prec);
112  return s;
113 }
114 
120 BASE_EXPORT QString clip(const QString &in,int length);
131 BASE_EXPORT bool match(const QString &keyword,const QString &token);
132 BASE_EXPORT void matchSynonymsAllowed(bool b);
139 BASE_EXPORT QString build(const QString &s,const QVariant &v1=QVariant(),const QVariant &v2=QVariant(),
140  const QVariant &v3=QVariant(),const QVariant &v4=QVariant(),
141  const QVariant &v5=QVariant(),const QVariant &v6=QVariant());
142 
147 BASE_EXPORT QString toBytes(const quint64 &ul);
148 
150 BASE_EXPORT QString readLine(QDataStream &ds,qint64 maxlen=0);
152 BASE_EXPORT QString readWord(QDataStream &ds,qint64 maxlen=0,const QString &separators=" \t\r\n");
153 BASE_EXPORT QString cleanupTypename(const char *name);
154 // Converts the string This is a "test" to "This ia a \"test\""
155 BASE_EXPORT QString enquoteString(const QString &s,QChar quote='"');
156 
157 
162 BASE_EXPORT bool isInt(const QString &in,int *i=0);
163 BASE_EXPORT bool isUInt(const QString &in,uint *u=0);
164 BASE_EXPORT bool isLong(const QString &in,qint64 *l=0);
165 BASE_EXPORT bool isULong(const QString &in,quint64 *ul=0);
166 BASE_EXPORT bool isDouble(const QString &in,double *d=0);
167 
173 BASE_EXPORT bool isBool(const QString &in,bool *b=0,const QString &out="on,off,true,false,yes,no");
177 BASE_EXPORT bool toBool(const QString &in,bool *ok=0,const QString &out="on,off,true,false,yes,no");
179 inline String toString(const QString &in) { return in.toStdWString(); }
181 inline String toString(const std::wstring &in) { return in; }
183 inline String toString(const string &in) { return QString::fromUtf8(in.c_str()).toStdWString(); }
185 inline QString toQString(const std::wstring &in) { return QString::fromStdWString(in); }
187 inline QString toQString(const string &in) { return QString::fromUtf8(in.c_str()); }
188 // compares two Strings
189 inline int compare(const String &s1,const String &s2,bool case_sensitive=false) {
190  if (case_sensitive) return s1.compare(s2);
191 #ifdef __LINUX
192  else return wcscasecmp(s1.c_str(),s2.c_str());
193 #else
194  else return _wcsicmp(s1.c_str(),s2.c_str());
195 #endif
196 }
197 // std::hash interface for QStrings!
198 //namespace std {
199 // template <>
200 // class hash<QString> {
201 // public:
202 // size_t operator()(const QString &s) const { return qHash(s); }
203 // };
204 //}
205 
206 // < and == functors for strings - to use in std containers when CI comparisons are wanted!
208 public:
209  bool operator()(const QString &left, const QString &right) const {
210  return left.compare(right,Qt::CaseInsensitive) < 0;
211  }
212 };
214 public:
215  bool operator()(const QString &left, const QString &right) const {
216  return QString::localeAwareCompare(left,right) < 0;
217  }
218 };
220 public:
221  bool operator()(const QString &left, const QString &right) const {
222  return left.compare(right,Qt::CaseInsensitive) == 0;
223  }
224 };
226 public:
227  uint operator()(const QString &in) const {
228  uint h = 0;
229  auto len = in.size();
230  auto *p = in.constData();
231  for (size_t i = 0; i<len; ++i) {
232  h = 31 * h + p[i].toUpper().unicode();
233  }
234  return h;
235  }
236 };
237 
238 
239 inline string tostring(const QString &s) { return s.toStdString(); }
240 
241 template <typename T> using QStringMap = std::map<QString, T, QStringCILess2>;
242 
243 template <typename T> using QStringHashMap = std::unordered_map<QString, T, QStringCIHash2, QStringCIEqual2>;
244 
245 using QStringSet = std::set<QString,QStringCILess2>;
246 
247 using QStringHashSet = std::unordered_set<QString, QStringCIHash2, QStringCIEqual2>;
248 
250 // EoF
BASE_EXPORT bool isDouble(const QString &in, double *d=0)
Definition: baseqstring.cpp:326
BASE_EXPORT QString toBytes(const quint64 &ul)
Converts number ul into a memory size string.
BASE_EXPORT bool toBool(const QString &in, bool *ok=0, const QString &out="on,off,true,false,yes,no")
Definition: baseqstring.cpp:333
Definition: baseqstring.h:207
const T & z() const
Member access - returns the z component of the 2D angular vector.
Definition: avect.h:69
BASE_EXPORT QString clip(const QString &in, int length)
Definition: baseqstring.cpp:237
BASE_EXPORT QString readWord(QDataStream &ds, qint64 maxlen=0, const QString &separators=" \t\r\n")
Reads a single whitespace delimited word from the QDataStream (since QTextStream is bugged),...
Definition: baseqstring.cpp:393
BASE_EXPORT bool isULong(const QString &in, quint64 *ul=0)
Definition: baseqstring.cpp:319
BASE_EXPORT bool isInt(const QString &in, int *i=0)
Definition: baseqstring.cpp:298
#define BASE_EXPORT
Definition: basedef.h:21
BASE_EXPORT QString readLine(QDataStream &ds, qint64 maxlen=0)
Reads a single QString line from a QDataStream (since QTextStream is bugged), uses '\n' as an end-of-...
Definition: baseqstring.cpp:381
A symmetric 2nd order tensor.
Definition: symtensor.h:19
const T & y() const
Y component access.
Definition: vect.h:56
BASE_EXPORT QString toQString(const QString &s, int width=0, char fill=' ')
Converts from a base type to a QString, using the width and fill character specified.
Definition: baseqstring.cpp:11
2D vector utility class.
Definition: vect.h:31
const T & z() const
The z-component of the vector.
Definition: vect.h:186
Combines base interface with Qt – allows Qt to interact with other Base types transparently.
BASE_EXPORT bool isUInt(const QString &in, uint *u=0)
Definition: baseqstring.cpp:305
BASE_EXPORT bool match(const QString &keyword, const QString &token)
Performs "itasca match" of this string (as keyword) to token.
Definition: baseqstring.cpp:246
3D vector utility class.
Definition: vect.h:161
String toString(const QString &in)
converts a QString into a base string.
Definition: baseqstring.h:179
BASE_EXPORT bool isBool(const QString &in, bool *b=0, const QString &out="on,off,true,false,yes,no")
Definition: baseqstring.cpp:284
const T & x() const
X component access.
Definition: vect.h:54
2D Angular vector class.
Definition: avect.h:43
Definition: baseqstring.h:225
BASE_EXPORT bool isLong(const QString &in, qint64 *l=0)
Definition: baseqstring.cpp:312
3D Angular vector class.
Definition: avect.h:176
Definition: baseqstring.h:219
BASE_EXPORT QString build(const QString &s, const QVariant &v1=QVariant(), const QVariant &v2=QVariant(), const QVariant &v3=QVariant(), const QVariant &v4=QVariant(), const QVariant &v5=QVariant(), const QVariant &v6=QVariant())
Uses %1, %2, %3,... as replacement tokens.
Definition: baseqstring.cpp:340
const T & y() const
The y-component of the vector.
Definition: vect.h:184
const T & x() const
The x-component of the vector.
Definition: vect.h:182
Definition: baseqstring.h:213