File indexing completed on 2024-06-23 05:49:00

0001 /*
0002     This file is part of the Okteta Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2010 Alex Richardson <alex.richardson@gmx.de>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "primitivefactory.hpp"
0010 #include "primitive/primitivetemplateinfo.hpp"
0011 #include "../script/scriptlogger.hpp"
0012 
0013 namespace PrimitiveFactory {
0014 
0015 PrimitiveDataType typeStringToType(const QString& string, const LoggerWithContext& logger)
0016 {
0017     const QString typeStr = string.trimmed().toLower();
0018     if (typeStr == QLatin1String("bool8")) {
0019         return PrimitiveDataType::Bool8;
0020     }
0021     if (typeStr == QLatin1String("bool16")) {
0022         return PrimitiveDataType::Bool16;
0023     }
0024     if (typeStr == QLatin1String("bool32")) {
0025         return PrimitiveDataType::Bool32;
0026     }
0027     if (typeStr == QLatin1String("bool64")) {
0028         return PrimitiveDataType::Bool64;
0029     }
0030     if (typeStr == QLatin1String("int8")) {
0031         return PrimitiveDataType::Int8;
0032     }
0033     if (typeStr == QLatin1String("uint8")) {
0034         return PrimitiveDataType::UInt8;
0035     }
0036     if (typeStr == QLatin1String("int16")) {
0037         return PrimitiveDataType::Int16;
0038     }
0039     if (typeStr == QLatin1String("uint16")) {
0040         return PrimitiveDataType::UInt16;
0041     }
0042     if (typeStr == QLatin1String("int32")) {
0043         return PrimitiveDataType::Int32;
0044     }
0045     if (typeStr == QLatin1String("uint32")) {
0046         return PrimitiveDataType::UInt32;
0047     }
0048     if (typeStr == QLatin1String("int64")) {
0049         return PrimitiveDataType::Int64;
0050     }
0051     if (typeStr == QLatin1String("uint64")) {
0052         return PrimitiveDataType::UInt64;
0053     }
0054     if (typeStr == QLatin1String("char")) {
0055         return PrimitiveDataType::Char;
0056     }
0057     if (typeStr == QLatin1String("float")) {
0058         return PrimitiveDataType::Float;
0059     }
0060     if (typeStr == QLatin1String("double")) {
0061         return PrimitiveDataType::Double;
0062     }
0063     logger.warn() << typeStr << "does not name a valid primitive type";
0064     return PrimitiveDataType::Invalid; // just return a default value
0065 }
0066 PrimitiveDataInformation* newInstance(const QString& name, PrimitiveDataType type,
0067                                       const LoggerWithContext& logger, DataInformation* parent)
0068 {
0069     switch (type)
0070     {
0071     case PrimitiveDataType::Char:
0072         return new PrimitiveInfo<PrimitiveDataType::Char>::Class(name, parent);
0073     case PrimitiveDataType::Int8:
0074         return new PrimitiveInfo<PrimitiveDataType::Int8>::Class(name, parent);
0075     case PrimitiveDataType::Int16:
0076         return new PrimitiveInfo<PrimitiveDataType::Int16>::Class(name, parent);
0077     case PrimitiveDataType::Int32:
0078         return new PrimitiveInfo<PrimitiveDataType::Int32>::Class(name, parent);
0079     case PrimitiveDataType::Int64:
0080         return new PrimitiveInfo<PrimitiveDataType::Int64>::Class(name, parent);
0081     case PrimitiveDataType::UInt8:
0082         return new PrimitiveInfo<PrimitiveDataType::UInt8>::Class(name, parent);
0083     case PrimitiveDataType::UInt16:
0084         return new PrimitiveInfo<PrimitiveDataType::UInt16>::Class(name, parent);
0085     case PrimitiveDataType::UInt32:
0086         return new PrimitiveInfo<PrimitiveDataType::UInt32>::Class(name, parent);
0087     case PrimitiveDataType::UInt64:
0088         return new PrimitiveInfo<PrimitiveDataType::UInt64>::Class(name, parent);
0089     case PrimitiveDataType::Bool8:
0090         return new PrimitiveInfo<PrimitiveDataType::Bool8>::Class(name, parent);
0091     case PrimitiveDataType::Bool16:
0092         return new PrimitiveInfo<PrimitiveDataType::Bool16>::Class(name, parent);
0093     case PrimitiveDataType::Bool32:
0094         return new PrimitiveInfo<PrimitiveDataType::Bool32>::Class(name, parent);
0095     case PrimitiveDataType::Bool64:
0096         return new PrimitiveInfo<PrimitiveDataType::Bool64>::Class(name, parent);
0097     case PrimitiveDataType::Float:
0098         return new PrimitiveInfo<PrimitiveDataType::Float>::Class(name, parent);
0099     case PrimitiveDataType::Double:
0100         return new PrimitiveInfo<PrimitiveDataType::Double>::Class(name, parent);
0101     default:
0102         logger.error().nospace() << "could not convert '" << type << "' to a primitive type";
0103         return nullptr; // invalid type
0104     }
0105 }
0106 
0107 }