File indexing completed on 2024-05-12 03:47:20

0001 /*
0002     File                 : VariableParser.h
0003     Project              : LabPlot
0004     Description          : Variable parser for different CAS backends
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2015 Garvit Khatri <garvitdelhi@gmail.com>
0007     SPDX-FileCopyrightText: 2016 Alexander Semke <alexander.semke@web.de>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef VARIABLEPARSER_H
0012 #define VARIABLEPARSER_H
0013 
0014 class QString;
0015 #include <QDateTime>
0016 #include <QVector>
0017 
0018 #include "backend/core/AbstractColumn.h"
0019 
0020 class VariableParser {
0021 public:
0022     VariableParser(QString name, QString value);
0023     ~VariableParser() {
0024         clearValues();
0025         m_parsed = false;
0026     }
0027     QVector<int>& integers();
0028     QVector<qint64>& bigInt();
0029     QVector<double>& doublePrecision();
0030     QVector<QDateTime>& dateTime();
0031     QVector<QString>& text();
0032     bool isParsed();
0033 
0034     enum class Datatype {
0035         uint8,
0036         int8,
0037         uint16,
0038         int16,
0039         uint32,
0040         int32,
0041         uint64,
0042         int64,
0043         float32,
0044         float64,
0045         datetime64_ms,
0046         datetime64_s,
0047         datetime64_m,
0048         datetime64_h, // hour is smallest unit
0049         datetime64_D, // day is smallest unit
0050         text,
0051     };
0052 
0053     AbstractColumn::ColumnMode dataType() {
0054         return m_dataType;
0055     }
0056 
0057 private:
0058     QString m_backendName;
0059     QString m_string;
0060     void* m_values{nullptr};
0061     bool m_parsed{false};
0062     AbstractColumn::ColumnMode m_dataType{AbstractColumn::ColumnMode::Double};
0063 
0064     void parseMaximaValues();
0065     void parsePythonValues();
0066     void parseRValues();
0067     void parseOctaveValues();
0068     void parseValues(const QStringList&, Datatype type = Datatype::float64);
0069     Datatype convertNumpyDatatype(const QString& datatype);
0070 
0071     void clearValues();
0072 };
0073 
0074 #endif // VARIABLEPARSER_H