PenetrateBase/PenetrateBasic/data_types.h

100 lines
2.5 KiB
C
Raw Normal View History

2024-11-11 08:29:59 +00:00
#pragma once
#include <QString>
2024-11-16 13:37:42 +00:00
#include <memory>
2024-11-11 08:29:59 +00:00
namespace datas {
2024-11-18 14:59:45 +00:00
class IDataComplex {
2024-11-11 08:29:59 +00:00
public:
2024-11-18 14:59:45 +00:00
virtual ~IDataComplex() = default;
2024-11-11 08:29:59 +00:00
2024-11-16 13:37:42 +00:00
/**
* @brief <EFBFBD>Ƿ<EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD>.
2024-11-18 14:59:45 +00:00
*
2024-11-16 13:37:42 +00:00
* \return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual bool isEmpty() const = 0;
2024-11-18 14:59:45 +00:00
2024-11-16 13:37:42 +00:00
/**
2024-11-18 14:59:45 +00:00
* @brief <EFBFBD>Ƿ<EFBFBD>Array.
2024-11-16 13:37:42 +00:00
*
2024-11-18 14:59:45 +00:00
* \return
2024-11-16 13:37:42 +00:00
*/
2024-11-11 08:29:59 +00:00
virtual bool isArray() const = 0;
2024-11-18 14:59:45 +00:00
2024-11-16 13:37:42 +00:00
/**
2024-11-18 14:59:45 +00:00
* @brief <EFBFBD>Ƿ<EFBFBD>Object.
2024-11-16 13:37:42 +00:00
*
* \return
*/
2024-11-18 14:59:45 +00:00
virtual bool isObject() const = 0;
};
class IDataArray;
class IDataObject : public datas::IDataComplex {
public:
virtual ~IDataObject() = default;
2024-11-11 08:29:59 +00:00
2024-11-16 13:37:42 +00:00
/**
2024-11-18 14:59:45 +00:00
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>Array<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*
* \return
*/
virtual std::shared_ptr<IDataArray> newArray() const = 0;;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>Object.
*
* \return
*/
virtual std::shared_ptr<IDataObject> newObject() const = 0;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD>.
2024-11-16 13:37:42 +00:00
*
* \param key
* \return
*/
2024-11-18 14:59:45 +00:00
virtual std::shared_ptr<datas::IDataComplex> getChild(const QString &key) const = 0;
virtual void setChild(const QString &key, std::shared_ptr<datas::IDataComplex> obj) = 0;
/**
* @brief ָ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*
* \param key
* \return
*/
virtual bool isValueField(const QString& key) const = 0;
virtual bool getBool(const QString& key) const = 0;
virtual double getDouble(const QString& key) const = 0;
virtual int32_t getInt32(const QString& key) const = 0;
virtual int64_t getInt64(const QString& key) const = 0;
2024-11-20 12:03:31 +00:00
virtual uint64_t getUInt64(const QString& key) const = 0;
2024-11-18 14:59:45 +00:00
virtual QString getString(const QString& key) const = 0;
2024-11-16 05:11:57 +00:00
2024-11-11 08:29:59 +00:00
virtual void setBool(const QString& key, bool value) = 0;
virtual void setDouble(const QString& key, double value) = 0;
virtual void setInt32(const QString& key, int32_t value) = 0;
virtual void setInt64(const QString& key, int64_t value) = 0;
2024-11-20 12:03:31 +00:00
virtual void setUInt64(const QString& key, uint64_t value) = 0;
2024-11-11 08:29:59 +00:00
virtual void setString(const QString& key, const QString& value) = 0;
2024-11-16 05:11:57 +00:00
virtual QString toText() const = 0;
virtual void loadFrom(const QString &text) = 0;
2024-11-11 08:29:59 +00:00
};
2024-11-18 14:59:45 +00:00
class IDataArray : public datas::IDataComplex {
2024-11-11 08:29:59 +00:00
public:
virtual ~IDataArray() = default;
virtual int32_t size() const = 0;
2024-11-18 14:59:45 +00:00
virtual std::shared_ptr<datas::IDataComplex> get(int index) const = 0;
virtual void insert(int index, std::shared_ptr<datas::IDataComplex> value) = 0;
virtual void append(std::shared_ptr<datas::IDataComplex> value) = 0;
2024-11-11 08:29:59 +00:00
};
template<typename T> void dataSet(IDataObject& object, const QString& key, T value);
template<typename T> T dataGet(IDataObject& object, const QString& key);
}