File indexing completed on 2024-06-23 05:48:57

0001 /*
0002     This file is part of the Okteta Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2009, 2012 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 #ifndef KASTEN_ENUMDEFINITION_HPP
0010 #define KASTEN_ENUMDEFINITION_HPP
0011 #include "../../allprimitivetypes.hpp"
0012 #include "../primitivedatatype.hpp"
0013 // Qt core
0014 #include <QMap>
0015 #include <QSharedData>
0016 #include <QSharedDataPointer>
0017 #include <QString>
0018 #include <QPair>
0019 
0020 class QScriptValue;
0021 struct LoggerWithContext;
0022 
0023 class EnumDefinition : public QSharedData
0024 {
0025 public:
0026     using Ptr = QSharedDataPointer<EnumDefinition>;
0027 
0028     EnumDefinition(const QMap<AllPrimitiveTypes, QString>& values, const QString& name,
0029                    PrimitiveDataType type)
0030         : mName(name)
0031         , mValues(values)
0032         , mType(type)
0033     {}
0034     EnumDefinition(const EnumDefinition& e)
0035         : QSharedData(e)
0036         , mValues(e.mValues)
0037         , mType(e.mType)
0038     {}
0039 
0040     const QMap<AllPrimitiveTypes, QString>& values() const;
0041     AllPrimitiveTypes key(QString& value) const;
0042     QString value(AllPrimitiveTypes key) const;
0043     PrimitiveDataType type() const;
0044     const QString& name() const;
0045     void setValues(const QMap<AllPrimitiveTypes, QString>& newValues);
0046 
0047     static QMap<AllPrimitiveTypes, QString> parseEnumValues(const QScriptValue& val,
0048                                                             const LoggerWithContext& logger, PrimitiveDataType type = PrimitiveDataType::UInt64);
0049     /** @return a pair containing the converted value. A default constructed pair means error! */
0050     static QPair<AllPrimitiveTypes, QString> convertToEnumEntry(const QString& name, const QVariant& value,
0051                                                                 const LoggerWithContext& logger, PrimitiveDataType type);
0052 
0053 protected:
0054     const QString mName;
0055     QMap<AllPrimitiveTypes, QString> mValues;
0056     const PrimitiveDataType mType;
0057 };
0058 
0059 inline const QMap<AllPrimitiveTypes, QString>& EnumDefinition::values() const
0060 {
0061     return mValues;
0062 }
0063 
0064 inline AllPrimitiveTypes EnumDefinition::key(QString& value) const
0065 {
0066     return mValues.key(value);
0067 }
0068 
0069 inline QString EnumDefinition::value(AllPrimitiveTypes key) const
0070 {
0071     return mValues.value(key);
0072 }
0073 
0074 inline PrimitiveDataType EnumDefinition::type() const
0075 {
0076     return mType;
0077 }
0078 
0079 inline const QString& EnumDefinition::name() const
0080 {
0081     return mName;
0082 }
0083 
0084 inline void EnumDefinition::setValues(const QMap<AllPrimitiveTypes, QString>& newValues)
0085 {
0086     mValues = newValues; // causes the QSharedPointer to detach and copy
0087 }
0088 
0089 #endif /* KASTEN_ENUMDEFINITION_HPP */