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 }