Serialization converter example: const-ify the Converter type
Its methods act on their parameters without changing the converter, so can all be const. Its instances thus have no non-const members to exercise, so can always be const. Task-number: QTBUG-111228 Change-Id: Ifcdb2f2159c2cfcd7998dd118aa327a32d299ccf Reviewed-by: Dennis Oberst <dennis.oberst@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit 77fdd21cbf1a053efe6eec51356c665ed982d47c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
2d9935cc6d
commit
50b51d2b50
@ -120,33 +120,33 @@ static QCborValue convertFromVariant(const QVariant &v, TrimFloatingPoint fpTrim
|
|||||||
}
|
}
|
||||||
//! [1]
|
//! [1]
|
||||||
|
|
||||||
QString CborDiagnosticDumper::name()
|
QString CborDiagnosticDumper::name() const
|
||||||
{
|
{
|
||||||
return "cbor-dump"_L1;
|
return "cbor-dump"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction CborDiagnosticDumper::directions()
|
Converter::Direction CborDiagnosticDumper::directions() const
|
||||||
{
|
{
|
||||||
return Out;
|
return Out;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options CborDiagnosticDumper::outputOptions()
|
Converter::Options CborDiagnosticDumper::outputOptions() const
|
||||||
{
|
{
|
||||||
return SupportsArbitraryMapKeys;
|
return SupportsArbitraryMapKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *CborDiagnosticDumper::optionsHelp()
|
const char *CborDiagnosticDumper::optionsHelp() const
|
||||||
{
|
{
|
||||||
return diagnosticHelp;
|
return diagnosticHelp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CborDiagnosticDumper::probeFile(QIODevice *f)
|
bool CborDiagnosticDumper::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(f);
|
Q_UNUSED(f);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant CborDiagnosticDumper::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant CborDiagnosticDumper::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
Q_UNREACHABLE();
|
Q_UNREACHABLE();
|
||||||
Q_UNUSED(f);
|
Q_UNUSED(f);
|
||||||
@ -155,7 +155,7 @@ QVariant CborDiagnosticDumper::loadFile(QIODevice *f, Converter *&outputConverte
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents,
|
void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
const QStringList &options)
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
QCborValue::DiagnosticNotationOptions opts = QCborValue::LineWrapped;
|
QCborValue::DiagnosticNotationOptions opts = QCborValue::LineWrapped;
|
||||||
for (const QString &s : options) {
|
for (const QString &s : options) {
|
||||||
@ -192,27 +192,27 @@ CborConverter::CborConverter()
|
|||||||
qRegisterMetaType<QCborTag>();
|
qRegisterMetaType<QCborTag>();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CborConverter::name()
|
QString CborConverter::name() const
|
||||||
{
|
{
|
||||||
return "cbor";
|
return "cbor";
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction CborConverter::directions()
|
Converter::Direction CborConverter::directions() const
|
||||||
{
|
{
|
||||||
return InOut;
|
return InOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options CborConverter::outputOptions()
|
Converter::Options CborConverter::outputOptions() const
|
||||||
{
|
{
|
||||||
return SupportsArbitraryMapKeys;
|
return SupportsArbitraryMapKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *CborConverter::optionsHelp()
|
const char *CborConverter::optionsHelp() const
|
||||||
{
|
{
|
||||||
return cborOptionHelp;
|
return cborOptionHelp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CborConverter::probeFile(QIODevice *f)
|
bool CborConverter::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
if (QFile *file = qobject_cast<QFile *>(f)) {
|
if (QFile *file = qobject_cast<QFile *>(f)) {
|
||||||
if (file->fileName().endsWith(".cbor"_L1))
|
if (file->fileName().endsWith(".cbor"_L1))
|
||||||
@ -222,7 +222,7 @@ bool CborConverter::probeFile(QIODevice *f)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! [2]
|
//! [2]
|
||||||
QVariant CborConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant CborConverter::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
const char *ptr = nullptr;
|
const char *ptr = nullptr;
|
||||||
if (auto file = qobject_cast<QFile *>(f))
|
if (auto file = qobject_cast<QFile *>(f))
|
||||||
@ -258,7 +258,7 @@ QVariant CborConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
}
|
}
|
||||||
//! [2]
|
//! [2]
|
||||||
//! [3]
|
//! [3]
|
||||||
void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) const
|
||||||
{
|
{
|
||||||
//! [3]
|
//! [3]
|
||||||
bool useSignature = true;
|
bool useSignature = true;
|
||||||
|
@ -10,13 +10,14 @@ class CborDiagnosticDumper : public Converter
|
|||||||
{
|
{
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CborConverter : public Converter
|
class CborConverter : public Converter
|
||||||
@ -26,13 +27,14 @@ public:
|
|||||||
|
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CBORCONVERTER_H
|
#endif // CBORCONVERTER_H
|
||||||
|
@ -39,13 +39,14 @@ public:
|
|||||||
|
|
||||||
virtual ~Converter() = 0;
|
virtual ~Converter() = 0;
|
||||||
|
|
||||||
virtual QString name() = 0;
|
virtual QString name() const = 0;
|
||||||
virtual Direction directions() = 0;
|
virtual Direction directions() const = 0;
|
||||||
virtual Options outputOptions() = 0;
|
virtual Options outputOptions() const = 0;
|
||||||
virtual const char *optionsHelp() = 0;
|
virtual const char *optionsHelp() const = 0;
|
||||||
virtual bool probeFile(QIODevice *f) = 0;
|
virtual bool probeFile(QIODevice *f) const = 0;
|
||||||
virtual QVariant loadFile(QIODevice *f, Converter *&outputConverter) = 0;
|
virtual QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const = 0;
|
||||||
virtual void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) = 0;
|
virtual void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_OPERATORS_FOR_FLAGS(Converter::Options)
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Converter::Options)
|
||||||
|
@ -48,32 +48,32 @@ DataStreamConverter::DataStreamConverter()
|
|||||||
qRegisterMetaType<VariantOrderedMap>();
|
qRegisterMetaType<VariantOrderedMap>();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DataStreamConverter::name()
|
QString DataStreamConverter::name() const
|
||||||
{
|
{
|
||||||
return "datastream"_L1;
|
return "datastream"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction DataStreamConverter::directions()
|
Converter::Direction DataStreamConverter::directions() const
|
||||||
{
|
{
|
||||||
return InOut;
|
return InOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options DataStreamConverter::outputOptions()
|
Converter::Options DataStreamConverter::outputOptions() const
|
||||||
{
|
{
|
||||||
return SupportsArbitraryMapKeys;
|
return SupportsArbitraryMapKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *DataStreamConverter::optionsHelp()
|
const char *DataStreamConverter::optionsHelp() const
|
||||||
{
|
{
|
||||||
return dataStreamOptionHelp;
|
return dataStreamOptionHelp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataStreamConverter::probeFile(QIODevice *f)
|
bool DataStreamConverter::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
return f->isReadable() && f->peek(sizeof(signature) - 1) == signature;
|
return f->isReadable() && f->peek(sizeof(signature) - 1) == signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant DataStreamConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant DataStreamConverter::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
if (!outputConverter)
|
if (!outputConverter)
|
||||||
outputConverter = &debugTextDumper;
|
outputConverter = &debugTextDumper;
|
||||||
@ -97,7 +97,7 @@ QVariant DataStreamConverter::loadFile(QIODevice *f, Converter *&outputConverter
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DataStreamConverter::saveFile(QIODevice *f, const QVariant &contents,
|
void DataStreamConverter::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
const QStringList &options)
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
QDataStream::Version version = QDataStream::Qt_6_0;
|
QDataStream::Version version = QDataStream::Qt_6_0;
|
||||||
auto order = QDataStream::ByteOrder(QSysInfo::ByteOrder);
|
auto order = QDataStream::ByteOrder(QSysInfo::ByteOrder);
|
||||||
|
@ -13,13 +13,14 @@ public:
|
|||||||
|
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DATASTREAMCONVERTER_H
|
#endif // DATASTREAMCONVERTER_H
|
||||||
|
@ -43,33 +43,33 @@ static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DebugTextDumper::name()
|
QString DebugTextDumper::name() const
|
||||||
{
|
{
|
||||||
return "debugtext-dump"_L1;
|
return "debugtext-dump"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction DebugTextDumper::directions()
|
Converter::Direction DebugTextDumper::directions() const
|
||||||
{
|
{
|
||||||
return Out;
|
return Out;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options DebugTextDumper::outputOptions()
|
Converter::Options DebugTextDumper::outputOptions() const
|
||||||
{
|
{
|
||||||
return SupportsArbitraryMapKeys;
|
return SupportsArbitraryMapKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *DebugTextDumper::optionsHelp()
|
const char *DebugTextDumper::optionsHelp() const
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DebugTextDumper::probeFile(QIODevice *f)
|
bool DebugTextDumper::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(f);
|
Q_UNUSED(f);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant DebugTextDumper::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant DebugTextDumper::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
Q_UNREACHABLE();
|
Q_UNREACHABLE();
|
||||||
Q_UNUSED(f);
|
Q_UNUSED(f);
|
||||||
@ -77,7 +77,8 @@ QVariant DebugTextDumper::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebugTextDumper::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void DebugTextDumper::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(options);
|
Q_UNUSED(options);
|
||||||
QString s = dumpVariant(contents);
|
QString s = dumpVariant(contents);
|
||||||
|
@ -10,13 +10,14 @@ class DebugTextDumper : public Converter
|
|||||||
{
|
{
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DEBUGTEXTDUMPER_H
|
#endif // DEBUGTEXTDUMPER_H
|
||||||
|
@ -25,27 +25,27 @@ static QJsonDocument convertFromVariant(const QVariant &v)
|
|||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString JsonConverter::name()
|
QString JsonConverter::name() const
|
||||||
{
|
{
|
||||||
return "json"_L1;
|
return "json"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction JsonConverter::directions()
|
Converter::Direction JsonConverter::directions() const
|
||||||
{
|
{
|
||||||
return InOut;
|
return InOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options JsonConverter::outputOptions()
|
Converter::Options JsonConverter::outputOptions() const
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *JsonConverter::optionsHelp()
|
const char *JsonConverter::optionsHelp() const
|
||||||
{
|
{
|
||||||
return jsonOptionHelp;
|
return jsonOptionHelp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JsonConverter::probeFile(QIODevice *f)
|
bool JsonConverter::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
if (QFile *file = qobject_cast<QFile *>(f)) {
|
if (QFile *file = qobject_cast<QFile *>(f)) {
|
||||||
if (file->fileName().endsWith(".json"_L1))
|
if (file->fileName().endsWith(".json"_L1))
|
||||||
@ -59,7 +59,7 @@ bool JsonConverter::probeFile(QIODevice *f)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant JsonConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant JsonConverter::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
if (!outputConverter)
|
if (!outputConverter)
|
||||||
outputConverter = this;
|
outputConverter = this;
|
||||||
@ -84,7 +84,8 @@ QVariant JsonConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
return doc.toVariant();
|
return doc.toVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void JsonConverter::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
QJsonDocument::JsonFormat format = QJsonDocument::Indented;
|
QJsonDocument::JsonFormat format = QJsonDocument::Indented;
|
||||||
for (const QString &s : options) {
|
for (const QString &s : options) {
|
||||||
|
@ -10,13 +10,14 @@ class JsonConverter : public Converter
|
|||||||
{
|
{
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // JSONCONVERTER_H
|
#endif // JSONCONVERTER_H
|
||||||
|
@ -13,12 +13,12 @@
|
|||||||
|
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
static QList<Converter *> *availableConverters;
|
static QList<const Converter *> *availableConverters;
|
||||||
|
|
||||||
Converter::Converter()
|
Converter::Converter()
|
||||||
{
|
{
|
||||||
if (!availableConverters)
|
if (!availableConverters)
|
||||||
availableConverters = new QList<Converter *>;
|
availableConverters = new QList<const Converter *>;
|
||||||
availableConverters->append(this);
|
availableConverters->append(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
QStringList inputFormats;
|
QStringList inputFormats;
|
||||||
QStringList outputFormats;
|
QStringList outputFormats;
|
||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (const Converter *conv : std::as_const(*availableConverters)) {
|
||||||
auto direction = conv->directions();
|
auto direction = conv->directions();
|
||||||
QString name = conv->name();
|
QString name = conv->name();
|
||||||
if (direction & Converter::In)
|
if (direction & Converter::In)
|
||||||
@ -86,7 +86,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (parser.isSet(formatOptionsOption)) {
|
if (parser.isSet(formatOptionsOption)) {
|
||||||
QString format = parser.value(formatOptionsOption);
|
QString format = parser.value(formatOptionsOption);
|
||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (const Converter *conv : std::as_const(*availableConverters)) {
|
||||||
if (conv->name() == format) {
|
if (conv->name() == format) {
|
||||||
const char *help = conv->optionsHelp();
|
const char *help = conv->optionsHelp();
|
||||||
if (help) {
|
if (help) {
|
||||||
@ -103,10 +103,10 @@ int main(int argc, char *argv[])
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter *inconv = nullptr;
|
const Converter *inconv = nullptr;
|
||||||
QString format = parser.value(inputFormatOption);
|
QString format = parser.value(inputFormatOption);
|
||||||
if (format != "auto"_L1) {
|
if (format != "auto"_L1) {
|
||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (const Converter *conv : std::as_const(*availableConverters)) {
|
||||||
if (conv->name() == format) {
|
if (conv->name() == format) {
|
||||||
inconv = conv;
|
inconv = conv;
|
||||||
break;
|
break;
|
||||||
@ -119,10 +119,10 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter *outconv = nullptr;
|
const Converter *outconv = nullptr;
|
||||||
format = parser.value(outputFormatOption);
|
format = parser.value(outputFormatOption);
|
||||||
if (format != "auto"_L1) {
|
if (format != "auto"_L1) {
|
||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (const Converter *conv : std::as_const(*availableConverters)) {
|
||||||
if (conv->name() == format) {
|
if (conv->name() == format) {
|
||||||
outconv = conv;
|
outconv = conv;
|
||||||
break;
|
break;
|
||||||
@ -161,7 +161,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (!inconv) {
|
if (!inconv) {
|
||||||
// probe the input to find a file format
|
// probe the input to find a file format
|
||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (const Converter *conv : std::as_const(*availableConverters)) {
|
||||||
if (conv->directions() & Converter::In && conv->probeFile(&input)) {
|
if (conv->directions() & Converter::In && conv->probeFile(&input)) {
|
||||||
inconv = conv;
|
inconv = conv;
|
||||||
break;
|
break;
|
||||||
@ -176,7 +176,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (!outconv) {
|
if (!outconv) {
|
||||||
// probe the output to find a file format
|
// probe the output to find a file format
|
||||||
for (Converter *conv : std::as_const(*availableConverters)) {
|
for (const Converter *conv : std::as_const(*availableConverters)) {
|
||||||
if (conv->directions() & Converter::Out && conv->probeFile(&output)) {
|
if (conv->directions() & Converter::Out && conv->probeFile(&output)) {
|
||||||
outconv = conv;
|
outconv = conv;
|
||||||
break;
|
break;
|
||||||
|
@ -8,33 +8,33 @@ using namespace Qt::StringLiterals;
|
|||||||
static NullConverter nullConverter;
|
static NullConverter nullConverter;
|
||||||
Converter *Converter::null = &nullConverter;
|
Converter *Converter::null = &nullConverter;
|
||||||
|
|
||||||
QString NullConverter::name()
|
QString NullConverter::name() const
|
||||||
{
|
{
|
||||||
return "null"_L1;
|
return "null"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction NullConverter::directions()
|
Converter::Direction NullConverter::directions() const
|
||||||
{
|
{
|
||||||
return Out;
|
return Out;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options NullConverter::outputOptions()
|
Converter::Options NullConverter::outputOptions() const
|
||||||
{
|
{
|
||||||
return SupportsArbitraryMapKeys;
|
return SupportsArbitraryMapKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *NullConverter::optionsHelp()
|
const char *NullConverter::optionsHelp() const
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NullConverter::probeFile(QIODevice *f)
|
bool NullConverter::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(f);
|
Q_UNUSED(f);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant NullConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant NullConverter::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(f);
|
Q_UNUSED(f);
|
||||||
Q_UNUSED(outputConverter);
|
Q_UNUSED(outputConverter);
|
||||||
@ -42,7 +42,8 @@ QVariant NullConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NullConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void NullConverter::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
if (!options.isEmpty()) {
|
if (!options.isEmpty()) {
|
||||||
fprintf(stderr, "Unknown option '%s' to null output. This format has no options.\n",
|
fprintf(stderr, "Unknown option '%s' to null output. This format has no options.\n",
|
||||||
|
@ -10,13 +10,14 @@ class NullConverter : public Converter
|
|||||||
{
|
{
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NULLCONVERTER_H
|
#endif // NULLCONVERTER_H
|
||||||
|
@ -44,34 +44,34 @@ static void dumpVariant(QTextStream &out, const QVariant &v)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TextConverter::name()
|
QString TextConverter::name() const
|
||||||
{
|
{
|
||||||
return "text"_L1;
|
return "text"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction TextConverter::directions()
|
Converter::Direction TextConverter::directions() const
|
||||||
{
|
{
|
||||||
return InOut;
|
return InOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options TextConverter::outputOptions()
|
Converter::Options TextConverter::outputOptions() const
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *TextConverter::optionsHelp()
|
const char *TextConverter::optionsHelp() const
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextConverter::probeFile(QIODevice *f)
|
bool TextConverter::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
if (QFile *file = qobject_cast<QFile *>(f))
|
if (QFile *file = qobject_cast<QFile *>(f))
|
||||||
return file->fileName().endsWith(".txt"_L1);
|
return file->fileName().endsWith(".txt"_L1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant TextConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant TextConverter::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
if (!outputConverter)
|
if (!outputConverter)
|
||||||
outputConverter = this;
|
outputConverter = this;
|
||||||
@ -94,7 +94,8 @@ QVariant TextConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void TextConverter::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
if (!options.isEmpty()) {
|
if (!options.isEmpty()) {
|
||||||
fprintf(stderr, "Unknown option '%s' to text output. This format has no options.\n",
|
fprintf(stderr, "Unknown option '%s' to text output. This format has no options.\n",
|
||||||
|
@ -10,13 +10,14 @@ class TextConverter : public Converter
|
|||||||
{
|
{
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TEXTCONVERTER_H
|
#endif // TEXTCONVERTER_H
|
||||||
|
@ -396,27 +396,27 @@ static void variantToXml(QXmlStreamWriter &xml, const QVariant &v)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString XmlConverter::name()
|
QString XmlConverter::name() const
|
||||||
{
|
{
|
||||||
return "xml"_L1;
|
return "xml"_L1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Direction XmlConverter::directions()
|
Converter::Direction XmlConverter::directions() const
|
||||||
{
|
{
|
||||||
return InOut;
|
return InOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
Converter::Options XmlConverter::outputOptions()
|
Converter::Options XmlConverter::outputOptions() const
|
||||||
{
|
{
|
||||||
return SupportsArbitraryMapKeys;
|
return SupportsArbitraryMapKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *XmlConverter::optionsHelp()
|
const char *XmlConverter::optionsHelp() const
|
||||||
{
|
{
|
||||||
return xmlOptionHelp;
|
return xmlOptionHelp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XmlConverter::probeFile(QIODevice *f)
|
bool XmlConverter::probeFile(QIODevice *f) const
|
||||||
{
|
{
|
||||||
if (QFile *file = qobject_cast<QFile *>(f)) {
|
if (QFile *file = qobject_cast<QFile *>(f)) {
|
||||||
if (file->fileName().endsWith(".xml"_L1))
|
if (file->fileName().endsWith(".xml"_L1))
|
||||||
@ -426,7 +426,7 @@ bool XmlConverter::probeFile(QIODevice *f)
|
|||||||
return f->isReadable() && f->peek(5) == "<?xml";
|
return f->isReadable() && f->peek(5) == "<?xml";
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant XmlConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
QVariant XmlConverter::loadFile(QIODevice *f, const Converter *&outputConverter) const
|
||||||
{
|
{
|
||||||
if (!outputConverter)
|
if (!outputConverter)
|
||||||
outputConverter = this;
|
outputConverter = this;
|
||||||
@ -442,7 +442,8 @@ QVariant XmlConverter::loadFile(QIODevice *f, Converter *&outputConverter)
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmlConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
|
void XmlConverter::saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const
|
||||||
{
|
{
|
||||||
bool compact = false;
|
bool compact = false;
|
||||||
for (const QString &s : options) {
|
for (const QString &s : options) {
|
||||||
|
@ -10,13 +10,14 @@ class XmlConverter : public Converter
|
|||||||
{
|
{
|
||||||
// Converter interface
|
// Converter interface
|
||||||
public:
|
public:
|
||||||
QString name() override;
|
QString name() const override;
|
||||||
Direction directions() override;
|
Direction directions() const override;
|
||||||
Options outputOptions() override;
|
Options outputOptions() const override;
|
||||||
const char *optionsHelp() override;
|
const char *optionsHelp() const override;
|
||||||
bool probeFile(QIODevice *f) override;
|
bool probeFile(QIODevice *f) const override;
|
||||||
QVariant loadFile(QIODevice *f, Converter *&outputConverter) override;
|
QVariant loadFile(QIODevice *f, const Converter *&outputConverter) const override;
|
||||||
void saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) override;
|
void saveFile(QIODevice *f, const QVariant &contents,
|
||||||
|
const QStringList &options) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // XMLCONVERTER_H
|
#endif // XMLCONVERTER_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user