qstringlist.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:9k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QSTRINGLIST_H
  38. #define QSTRINGLIST_H
  39. #include <QtCore/qalgorithms.h>
  40. #include <QtCore/qdatastream.h>
  41. #include <QtCore/qlist.h>
  42. #include <QtCore/qregexp.h>
  43. #include <QtCore/qstring.h>
  44. #include <QtCore/qstringmatcher.h>
  45. #ifdef QT_INCLUDE_COMPAT
  46. #include <Qt3Support/q3valuelist.h>
  47. #endif
  48. QT_BEGIN_HEADER
  49. QT_BEGIN_NAMESPACE
  50. QT_MODULE(Core)
  51. class QRegExp;
  52. typedef QListIterator<QString> QStringListIterator;
  53. typedef QMutableListIterator<QString> QMutableStringListIterator;
  54. class QStringList : public QList<QString>
  55. {
  56. public:
  57.     inline QStringList() { }
  58.     inline explicit QStringList(const QString &i) { append(i); }
  59.     inline QStringList(const QStringList &l) : QList<QString>(l) { }
  60.     inline QStringList(const QList<QString> &l) : QList<QString>(l) { }
  61.     inline void sort();
  62.     inline QString join(const QString &sep) const;
  63.     inline QStringList filter(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
  64.     inline QBool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
  65.     inline QStringList &replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
  66.     inline QStringList operator+(const QStringList &other) const
  67.     { QStringList n = *this; n += other; return n; }
  68.     inline QStringList &operator<<(const QString &str)
  69.     { append(str); return *this; }
  70.     inline QStringList &operator<<(const QStringList &l)
  71.     { *this += l; return *this; }
  72. #ifndef QT_NO_REGEXP
  73.     inline QStringList filter(const QRegExp &rx) const;
  74.     inline QStringList &replaceInStrings(const QRegExp &rx, const QString &after);
  75.     inline int indexOf(const QRegExp &rx, int from = 0) const;
  76.     inline int lastIndexOf(const QRegExp &rx, int from = -1) const;
  77. #endif
  78. #if !defined(Q_NO_USING_KEYWORD)
  79.     using QList<QString>::indexOf;
  80.     using QList<QString>::lastIndexOf;
  81. #else
  82.     inline int indexOf(const QString &str, int from = 0) const
  83.     { return QList<QString>::indexOf(str, from); }
  84.     inline int lastIndexOf(const QString &str, int from = -1) const
  85.     { return QList<QString>::lastIndexOf(str, from); }
  86. #endif
  87. #ifdef QT3_SUPPORT
  88.     static inline QT3_SUPPORT QStringList split(const QString &sep, const QString &str, bool allowEmptyEntries = false);
  89.     static inline QT3_SUPPORT QStringList split(const QChar &sep, const QString &str, bool allowEmptyEntries = false);
  90.     inline QT3_SUPPORT QStringList grep(const QString &str, bool cs = true) const
  91.         { return filter(str, cs ? Qt::CaseSensitive : Qt::CaseInsensitive); }
  92. #ifndef QT_NO_REGEXP
  93.     static inline QT3_SUPPORT QStringList split(const QRegExp &sep, const QString &str, bool allowEmptyEntries = false);
  94.     inline QT3_SUPPORT QStringList grep(const QRegExp &rx) const { return filter(rx); }
  95.     inline QT3_SUPPORT QStringList &gres(const QRegExp &rx, const QString &after)
  96.         { return replaceInStrings(rx, after); }
  97. #endif
  98.     inline QT3_SUPPORT QStringList &gres(const QString &before, const QString &after, bool cs = true)
  99.         { return replaceInStrings(before, after, cs ? Qt::CaseSensitive : Qt::CaseInsensitive); }
  100.     inline Iterator QT3_SUPPORT fromLast() { return (isEmpty() ? end() : --end()); }
  101.     inline ConstIterator QT3_SUPPORT fromLast() const { return (isEmpty() ? end() : --end()); }
  102. #endif
  103. };
  104. namespace QtPrivate {
  105.     void Q_CORE_EXPORT QStringList_sort(QStringList *that);
  106.     QString Q_CORE_EXPORT QStringList_join(const QStringList *that, const QString &sep);
  107.     QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QString &str,
  108.                                                Qt::CaseSensitivity cs);
  109.     QBool Q_CORE_EXPORT QStringList_contains(const QStringList *that, const QString &str, Qt::CaseSensitivity cs);
  110.     void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QString &before, const QString &after,
  111.                                       Qt::CaseSensitivity cs);
  112. #ifndef QT_NO_REGEXP
  113.     void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QRegExp &rx, const QString &after);
  114.     QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QRegExp &re);
  115.     int Q_CORE_EXPORT QStringList_indexOf(const QStringList *that, const QRegExp &rx, int from);
  116.     int Q_CORE_EXPORT QStringList_lastIndexOf(const QStringList *that, const QRegExp &rx, int from);
  117. #endif
  118. }
  119. inline void QStringList::sort()
  120. {
  121.     QtPrivate::QStringList_sort(this);
  122. }
  123. inline QString QStringList::join(const QString &sep) const
  124. {
  125.     return QtPrivate::QStringList_join(this, sep);
  126. }
  127. inline QStringList QStringList::filter(const QString &str, Qt::CaseSensitivity cs) const
  128. {
  129.     return QtPrivate::QStringList_filter(this, str, cs);
  130. }
  131. inline QBool QStringList::contains(const QString &str, Qt::CaseSensitivity cs) const
  132. {
  133.     return QtPrivate::QStringList_contains(this, str, cs);
  134. }
  135. inline QStringList &QStringList::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
  136. {
  137.     QtPrivate::QStringList_replaceInStrings(this, before, after, cs);
  138.     return *this;
  139. }
  140. #ifndef QT_NO_REGEXP
  141. inline QStringList &QStringList::replaceInStrings(const QRegExp &rx, const QString &after)
  142. {
  143.     QtPrivate::QStringList_replaceInStrings(this, rx, after);
  144.     return *this;
  145. }
  146. inline QStringList QStringList::filter(const QRegExp &rx) const
  147. {
  148.     return QtPrivate::QStringList_filter(this, rx);
  149. }
  150. inline int QStringList::indexOf(const QRegExp &rx, int from) const
  151. {
  152.     return QtPrivate::QStringList_indexOf(this, rx, from);
  153. }
  154. inline int QStringList::lastIndexOf(const QRegExp &rx, int from) const
  155. {
  156.     return QtPrivate::QStringList_lastIndexOf(this, rx, from);
  157. }
  158. #endif
  159. #ifdef QT3_SUPPORT
  160. inline QStringList QStringList::split(const QChar &sep, const QString &str, bool allowEmptyEntries)
  161. {
  162.     if (str.isEmpty())
  163.         return QStringList();
  164.     return str.split(sep, allowEmptyEntries ? QString::KeepEmptyParts
  165.                                             : QString::SkipEmptyParts);
  166. }
  167. inline QStringList QStringList::split(const QString &sep, const QString &str, bool allowEmptyEntries)
  168. {
  169.     if (str.isEmpty())
  170.         return QStringList();
  171.     return str.split(sep, allowEmptyEntries ? QString::KeepEmptyParts
  172.                                             : QString::SkipEmptyParts);
  173. }
  174. #ifndef QT_NO_REGEXP
  175. inline QStringList QStringList::split(const QRegExp &sep, const QString &str, bool allowEmptyEntries)
  176. {
  177.     if (str.isEmpty())
  178.         return QStringList();
  179.     return str.split(sep, allowEmptyEntries ? QString::KeepEmptyParts
  180.                                             : QString::SkipEmptyParts);
  181. }
  182. #endif // QT_NO_REGEXP
  183. #endif // QT3_SUPPORT
  184. #ifndef QT_NO_DATASTREAM
  185. inline QDataStream &operator>>(QDataStream &in, QStringList &list)
  186. {
  187.     return operator>>(in, static_cast<QList<QString> &>(list));
  188. }
  189. inline QDataStream &operator<<(QDataStream &out, const QStringList &list)
  190. {
  191.     return operator<<(out, static_cast<const QList<QString> &>(list));
  192. }
  193. #endif // QT_NO_DATASTREAM
  194. QT_END_NAMESPACE
  195. QT_END_HEADER
  196. #endif // QSTRINGLIST_H