File indexing completed on 2024-11-10 04:40:47
0001 /* 0002 SPDX-FileCopyrightText: 2017 Daniel Vrátil <dvratil@kde.og> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "typehelper.h" 0008 #include "nodetree.h" 0009 0010 #include <QMetaType> 0011 #include <QString> 0012 0013 bool TypeHelper::isNumericType(const QString &name) 0014 { 0015 const int metaTypeId = QMetaType::fromName(qPrintable(name)).id(); 0016 if (metaTypeId == -1) { 0017 return false; 0018 } 0019 0020 switch (metaTypeId) { 0021 case QMetaType::Int: 0022 case QMetaType::UInt: 0023 case QMetaType::Double: 0024 case QMetaType::Long: 0025 case QMetaType::LongLong: 0026 case QMetaType::Short: 0027 case QMetaType::ULong: 0028 case QMetaType::ULongLong: 0029 case QMetaType::UShort: 0030 case QMetaType::Float: 0031 return true; 0032 default: 0033 return false; 0034 } 0035 } 0036 0037 bool TypeHelper::isBoolType(const QString &name) 0038 { 0039 const int metaTypeId = QMetaType::fromName(qPrintable(name)).id(); 0040 if (metaTypeId == -1) { 0041 return false; 0042 } 0043 0044 switch (metaTypeId) { 0045 case QMetaType::Bool: 0046 return true; 0047 default: 0048 return false; 0049 } 0050 } 0051 0052 bool TypeHelper::isBuiltInType(const QString &type) 0053 { 0054 // TODO: should be smarter than this.... 0055 return !type.startsWith(QLatin1StringView("Akonadi::Protocol")) || type == QLatin1StringView("Akonadi::Protocol::Attributes") // typedef to QMap 0056 || (type.startsWith(QLatin1StringView("Akonadi::Protocol")) // enums 0057 && type.count(QStringLiteral("::")) > 2); 0058 } 0059 0060 bool TypeHelper::isContainer(const QString &type) 0061 { 0062 const int tplB = type.indexOf(QLatin1Char('<')); 0063 const int tplE = type.lastIndexOf(QLatin1Char('>')); 0064 return tplB > -1 && tplE > -1 && tplB < tplE; 0065 } 0066 0067 QString TypeHelper::containerType(const QString &type) 0068 { 0069 const int tplB = type.indexOf(QLatin1Char('<')); 0070 const int tplE = type.indexOf(QLatin1Char('>')); 0071 return type.mid(tplB + 1, tplE - tplB - 1); 0072 } 0073 0074 QString TypeHelper::containerName(const QString &type) 0075 { 0076 const int tplB = type.indexOf(QLatin1Char('<')); 0077 return type.left(tplB); 0078 } 0079 0080 bool TypeHelper::isPointerType(const QString &type) 0081 { 0082 return type.endsWith(QLatin1StringView("Ptr")); 0083 }