diff --git a/mainwindow.cpp b/mainwindow.cpp index 8a580ba..5849729 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1050,15 +1050,16 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->tableWidgetCalls->addAction(clearActionSep); ui->tableWidgetCalls->addAction(clearActionAll); +#if 0 // TESTING :P qint64 a = QDateTime::currentSecsSinceEpoch(); qDebug() << a << Varicode::pack64bits(a) << Varicode::unpack64bits(Varicode::pack64bits(a)); qDebug() << a << Varicode::bitsToStr(Varicode::intToBits(a)) << Varicode::bitsToInt(Varicode::strToBits(Varicode::bitsToStr(Varicode::intToBits(a)))); - - auto input = "HELLO BRAVE NEW WORLD!"; - auto encoded = Varicode::huffEncode(input); - auto decoded = Varicode::huffDecode(encoded); - qDebug() << input << Varicode::bitsToStr(encoded) << decoded; + auto input = "HELLO BRAVE NEW WORLD!\x04"; + auto encoded = Varicode::huffEncode(input) + QList> {Varicode::strToBits("000000000")}; + auto decoded = Varicode::huffDecode(Varicode::huffFlatten(encoded)); + qDebug() << input << Varicode::bitsToStr(Varicode::huffFlatten(encoded)) << decoded; +#endif // this must be the last statement of constructor if (!m_valid) throw std::runtime_error {"Fatal initialization exception"}; diff --git a/varicode.cpp b/varicode.cpp index 2f497d3..cd23f61 100644 --- a/varicode.cpp +++ b/varicode.cpp @@ -62,6 +62,8 @@ QMap huff = { {'\x04' , "110101100010" }, // 1 <- eot }; +QChar huffeot = '\x04'; + QStringList Varicode::parseCallsigns(QString const &input){ QStringList callsigns; QRegularExpression re(callsign_pattern2); @@ -99,19 +101,27 @@ QStringList Varicode::parseGrids(const QString &input){ return grids; } -QVector Varicode::huffEncode(QString const& text){ - QVector out; +QList> Varicode::huffEncode(QString const& text){ + QList> out; foreach(auto ch, text){ if(!huff.contains(ch)){ continue; } - out += strToBits(huff[ch]); + out.append(strToBits(huff[ch])); } return out; } +QVector Varicode::huffFlatten(QList> &list){ + QVector out; + foreach(auto vec, list){ + out += vec; + } + return out; +} + QString Varicode::huffDecode(QVector const& bitvec){ QString out; @@ -122,6 +132,9 @@ QString Varicode::huffDecode(QVector const& bitvec){ bool found = false; foreach(auto key, huff.keys()){ if(bits.startsWith(huff[key])){ + if(key == huffeot){ + break; + } out.append(key); bits = bits.mid(huff[key].length()); found = true; diff --git a/varicode.h b/varicode.h index 1970400..e56830b 100644 --- a/varicode.h +++ b/varicode.h @@ -20,7 +20,8 @@ public: static QStringList parseCallsigns(QString const &input); static QStringList parseGrids(QString const &input); - static QVector huffEncode(QString const& text); + static QList> huffEncode(QString const& text); + static QVector huffFlatten(QList> &list); static QString huffDecode(QVector const& bitvec); static QVector strToBits(QString const& bitvec);