#pragma once #include #include namespace datas { class IDataComplex { public: virtual ~IDataComplex() = default; /** * @brief 是否空对象. * * \return 结果 */ virtual bool isEmpty() const = 0; /** * @brief 是否Array. * * \return */ virtual bool isArray() const = 0; /** * @brief 是否Object. * * \return */ virtual bool isObject() const = 0; }; class IDataArray; class IDataObject : public datas::IDataComplex { public: virtual ~IDataObject() = default; /** * @brief 构建一个新的Array对象. * * \return */ virtual std::shared_ptr newArray() const = 0;; /** * @brief 构建一个新的Object. * * \return */ virtual std::shared_ptr newObject() const = 0; /** * @brief 获取子对象. * * \param key * \return */ virtual std::shared_ptr getChild(const QString &key) const = 0; virtual void setChild(const QString &key, std::shared_ptr obj) = 0; /** * @brief 指定字段是值类型. * * \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; virtual QString getString(const QString& key) const = 0; 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; virtual void setString(const QString& key, const QString& value) = 0; virtual QString toText() const = 0; virtual void loadFrom(const QString &text) = 0; }; class IDataArray : public datas::IDataComplex { public: virtual ~IDataArray() = default; virtual int32_t size() const = 0; virtual std::shared_ptr get(int index) const = 0; virtual void insert(int index, std::shared_ptr value) = 0; virtual void append(std::shared_ptr value) = 0; }; template void dataSet(IDataObject& object, const QString& key, T value); template T dataGet(IDataObject& object, const QString& key); }