#ifndef SCIQLOP_VARIABLE2_H #define SCIQLOP_VARIABLE2_H #include "CoreGlobal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class SCIQLOP_CORE_EXPORT Variable2 : public QObject { Q_OBJECT public: explicit Variable2(const QString& name, const QVariantHash& metadata = {}); /// Copy ctor explicit Variable2(const Variable2& other); std::shared_ptr clone() const; QString name(); void setName(const QString& name); DateTimeRange range(); void setRange(const DateTimeRange& range); std::optional realRange(); std::size_t nbPoints(); /// @return the data of the variable, nullptr if there is no data std::shared_ptr data(); /// @return the type of data that the variable holds DataSeriesType type(); QVariantHash metadata() const noexcept; // void setData(const std::vector& dataSeries, // const DateTimeRange& range, bool notify = true); void setData(const std::vector& dataSeries, const DateTimeRange& range, bool notify = true); static QByteArray mimeData(const std::vector>& variables) { auto encodedData = QByteArray{}; QDataStream stream{&encodedData, QIODevice::WriteOnly}; for(auto& var : variables) { stream << var->ID().toByteArray(); } return encodedData; } static std::vector IDs(QByteArray mimeData) { std::vector variables; QDataStream stream{mimeData}; QVariantList ids; stream >> ids; std::transform(std::cbegin(ids), std::cend(ids), std::back_inserter(variables), [](const auto& id) { return id.toByteArray(); }); return variables; } operator QUuid() { return _uuid; } QUuid ID() { return _uuid; } signals: void updated(QUuid ID); private: struct VariablePrivate; spimpl::unique_impl_ptr impl; QUuid _uuid; QReadWriteLock m_lock; }; // Required for using shared_ptr in signals/slots SCIQLOP_REGISTER_META_TYPE(VARIABLE_PTR_REGISTRY, std::shared_ptr) SCIQLOP_REGISTER_META_TYPE(VARIABLE_PTR_VECTOR_REGISTRY, QVector>) #endif // SCIQLOP_VARIABLE2_H