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

0001 /*
0002     This file is part of the Okteta Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2010, 2011, 2013 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_ADDITIONALDATA_HPP
0010 #define KASTEN_ADDITIONALDATA_HPP
0011 
0012 #include <QScriptValue>
0013 #include <QVariant>
0014 
0015 /** Additional data which is not needed frequently. Store this in a QHash to save memory */
0016 class AdditionalData
0017 {
0018 public:
0019     enum class AdditionalDataType
0020     {
0021         UpdateFunction,
0022         ValidationFunction,
0023         ValidationError,
0024         ArrayLengthFunction,
0025         CustomTypeName,
0026         ToStringFunction,
0027         PointerInterpreterFunction,
0028     };
0029     explicit AdditionalData();
0030     AdditionalData(const AdditionalData& data);
0031     ~AdditionalData();
0032     AdditionalData& operator=(const AdditionalData& data);
0033     QVariant get(AdditionalDataType entry) const;
0034     void set(AdditionalDataType entry, const QVariant& value);
0035     void remove(AdditionalDataType entry);
0036 
0037 private:
0038     QHash<int, QVariant> mData;
0039 };
0040 Q_STATIC_ASSERT(sizeof(AdditionalData) == sizeof(void*));
0041 
0042 Q_DECLARE_METATYPE(QScriptValue)
0043 
0044 inline AdditionalData::AdditionalData() = default;
0045 
0046 inline AdditionalData::AdditionalData(const AdditionalData& data) = default;
0047 
0048 inline AdditionalData::~AdditionalData() = default;
0049 
0050 inline AdditionalData& AdditionalData::operator=(const AdditionalData& data) = default;
0051 
0052 inline QVariant AdditionalData::get(AdditionalData::AdditionalDataType entry) const
0053 {
0054     return mData.value((int)entry);
0055 }
0056 
0057 inline void AdditionalData::set(AdditionalData::AdditionalDataType entry, const QVariant& value)
0058 {
0059     mData.insert((int)entry, value);
0060 }
0061 
0062 inline void AdditionalData::remove(AdditionalData::AdditionalDataType entry)
0063 {
0064     mData.remove((int)entry);
0065 }
0066 
0067 #endif /* KASTEN_ADDITIONALDATA_HPP */