mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 05:38:46 -05:00
Starting branch hotfix-2.0.0-rc5.
This commit is contained in:
parent
875c308d52
commit
43a5d7b519
@ -1708,11 +1708,11 @@ endif ()
|
|||||||
|
|
||||||
set (CPACK_DEBIAN_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION}")
|
set (CPACK_DEBIAN_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION}")
|
||||||
set (CPACK_DEBIAN_PACKAGE_HOMEPAGE "${PROJECT_HOMEPAGE}")
|
set (CPACK_DEBIAN_PACKAGE_HOMEPAGE "${PROJECT_HOMEPAGE}")
|
||||||
set (CPACK_DEBIAN_PACKAGE_DEPENDS "libgfortran3 (>=4.8.2), libqt5serialport5 (>=5.2), libqt5multimedia5-plugins (>=5.2), libqt5widgets5 (>=5.2), libusb-1.0-0, libudev1, libc6 (>=2.19)")
|
set (CPACK_DEBIAN_PACKAGE_DEPENDS "libgfortran3 (>=4.8.2), libqt5serialport5 (>=5.5), libqt5multimedia5-plugins (>=5.5), libqt5widgets5 (>=5.5), libqt5sql5-sqlite (>=5.5), libusb-1.0-0, libudev1, libc6 (>=2.19)")
|
||||||
set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||||
|
|
||||||
set (CPACK_RPM_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
|
set (CPACK_RPM_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
set (CPACK_RPM_PACKAGE_REQUIRES "qt5-qtserialport >= 5.2, qt5-qtmultimedia >= 5.2, qt5-qtsvg, libusb, systemd-udev, glibc >= 2, libgfortran >= 4.8.2")
|
set (CPACK_RPM_PACKAGE_REQUIRES "qt5-qtserialport >= 5.5, qt5-qtmultimedia >= 5.5, qt5-qtsvg, libusb, systemd-udev, glibc >= 2, libgfortran >= 4.8.2")
|
||||||
set (CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/share/pixmaps /usr/share/applications /usr/share/man /usr/share/man1)
|
set (CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/share/pixmaps /usr/share/applications /usr/share/man /usr/share/man1)
|
||||||
|
|
||||||
configure_file ("${PROJECT_SOURCE_DIR}/CMakeCPackOptions.cmake.in"
|
configure_file ("${PROJECT_SOURCE_DIR}/CMakeCPackOptions.cmake.in"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Version number components
|
# Version number components
|
||||||
set (WSJTX_VERSION_MAJOR 2)
|
set (WSJTX_VERSION_MAJOR 2)
|
||||||
set (WSJTX_VERSION_MINOR 0)
|
set (WSJTX_VERSION_MINOR 0)
|
||||||
set (WSJTX_VERSION_PATCH 1)
|
set (WSJTX_VERSION_PATCH 0)
|
||||||
#set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions
|
set (WSJTX_RC 5) # release candidate number, comment out or zero for development versions
|
||||||
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
|
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
|
||||||
|
@ -57,8 +57,9 @@ subroutine sync65(nfa,nfb,naggressive,ntol,nqsym,ca,ncand,nrobust, &
|
|||||||
freq=i*df
|
freq=i*df
|
||||||
itry=0
|
itry=0
|
||||||
! if(naggressive.gt.0 .and. ntol.lt.1000 .and. ccfmax.ge.thresh0) then
|
! if(naggressive.gt.0 .and. ntol.lt.1000 .and. ccfmax.ge.thresh0) then
|
||||||
if(naggressive.gt.0 .and. ccfmax.ge.thresh0) then
|
! if(naggressive.gt.0 .and. ccfmax.ge.thresh0) then
|
||||||
if(i.ne.ipk) cycle
|
if(bVHF) then
|
||||||
|
if(i.ne.ipk .or. ccfmax.lt.thresh0) cycle
|
||||||
itry=1
|
itry=1
|
||||||
ncand=ncand+1
|
ncand=ncand+1
|
||||||
else
|
else
|
||||||
|
@ -1,18 +1,34 @@
|
|||||||
#include "WorkedBefore.hpp"
|
#include "WorkedBefore.hpp"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <boost/functional/hash.hpp>
|
||||||
#include <boost/multi_index_container.hpp>
|
#include <boost/multi_index_container.hpp>
|
||||||
|
#include <boost/multi_index/hashed_index.hpp>
|
||||||
#include <boost/multi_index/ordered_index.hpp>
|
#include <boost/multi_index/ordered_index.hpp>
|
||||||
#include <boost/multi_index/key_extractors.hpp>
|
#include <boost/multi_index/key_extractors.hpp>
|
||||||
|
#include <QChar>
|
||||||
|
#include <QString>
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
#include <QDebug>
|
||||||
|
#include "qt_helpers.hpp"
|
||||||
#include "pimpl_impl.hpp"
|
#include "pimpl_impl.hpp"
|
||||||
|
|
||||||
using namespace boost::multi_index;
|
using namespace boost::multi_index;
|
||||||
|
|
||||||
|
// hash function for QString members in hashed indexes
|
||||||
|
inline
|
||||||
|
std::size_t hash_value (QString const& s)
|
||||||
|
{
|
||||||
|
return std::hash<QString> {} (s);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
// worked before set element
|
// worked before set element
|
||||||
|
//
|
||||||
struct worked_entry
|
struct worked_entry
|
||||||
{
|
{
|
||||||
explicit worked_entry (QString const& call, QString const& grid, QString const& band
|
explicit worked_entry (QString const& call, QString const& grid, QString const& band
|
||||||
@ -39,7 +55,52 @@ struct worked_entry
|
|||||||
int ITU_zone_;
|
int ITU_zone_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// less then predidate for the Continent enum class
|
bool operator == (worked_entry const& lhs, worked_entry const& rhs)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
lhs.continent_ == rhs.continent_ // check 1st as it is fast
|
||||||
|
&& lhs.CQ_zone_ == rhs.CQ_zone_ // ditto
|
||||||
|
&& lhs.ITU_zone_ == rhs.ITU_zone_ // ditto
|
||||||
|
&& lhs.call_ == rhs.call_ // check the rest in decreasing
|
||||||
|
&& lhs.grid_ == rhs.grid_ // domain size order to shortcut
|
||||||
|
&& lhs.country_ == rhs.country_ // differences as quickly as possible
|
||||||
|
&& lhs.band_ == rhs.band_
|
||||||
|
&& lhs.mode_ == rhs.mode_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t hash_value (worked_entry const& we)
|
||||||
|
{
|
||||||
|
std::size_t seed {0};
|
||||||
|
boost::hash_combine (seed, we.call_);
|
||||||
|
boost::hash_combine (seed, we.grid_);
|
||||||
|
boost::hash_combine (seed, we.band_);
|
||||||
|
boost::hash_combine (seed, we.mode_);
|
||||||
|
boost::hash_combine (seed, we.country_);
|
||||||
|
boost::hash_combine (seed, we.continent_);
|
||||||
|
boost::hash_combine (seed, we.CQ_zone_);
|
||||||
|
boost::hash_combine (seed, we.ITU_zone_);
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined (QT_NO_DEBUG_STREAM)
|
||||||
|
QDebug operator << (QDebug dbg, worked_entry const& e)
|
||||||
|
{
|
||||||
|
QDebugStateSaver saver {dbg};
|
||||||
|
dbg.nospace () << "worked_entry("
|
||||||
|
<< e.call_ << ", "
|
||||||
|
<< e.grid_ << ", "
|
||||||
|
<< e.band_ << ", "
|
||||||
|
<< e.mode_ << ", "
|
||||||
|
<< e.country_ << ", "
|
||||||
|
<< e.continent_ << ", "
|
||||||
|
<< e.CQ_zone_ << ", "
|
||||||
|
<< e.ITU_zone_ << ')';
|
||||||
|
return dbg;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// less then predidate for the Continent enum class, needed for
|
||||||
|
// ordered indexes
|
||||||
struct Continent_less
|
struct Continent_less
|
||||||
{
|
{
|
||||||
bool operator () (AD1CCty::Continent lhs, AD1CCty::Continent rhs) const
|
bool operator () (AD1CCty::Continent lhs, AD1CCty::Continent rhs) const
|
||||||
@ -48,7 +109,7 @@ struct Continent_less
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// tags
|
// index tags
|
||||||
struct call_mode_band {};
|
struct call_mode_band {};
|
||||||
struct call_band {};
|
struct call_band {};
|
||||||
struct grid_mode_band {};
|
struct grid_mode_band {};
|
||||||
@ -62,85 +123,92 @@ struct CQ_zone_band {};
|
|||||||
struct ITU_zone_mode_band {};
|
struct ITU_zone_mode_band {};
|
||||||
struct ITU_zone_band {};
|
struct ITU_zone_band {};
|
||||||
|
|
||||||
// set with multiple ordered unique indexes that allow for efficient
|
// set with multiple ordered unique indexes that allow for optimally
|
||||||
// determination of various categories of worked before status
|
// efficient determination of various categories of worked before
|
||||||
|
// status
|
||||||
typedef multi_index_container<
|
typedef multi_index_container<
|
||||||
worked_entry,
|
worked_entry,
|
||||||
indexed_by<
|
indexed_by<
|
||||||
|
// basic unordered set constraint - we don't need duplicate worked entries
|
||||||
|
hashed_unique<identity<worked_entry>>,
|
||||||
|
|
||||||
|
//
|
||||||
|
// The following indexes are used to discover worked before stuff.
|
||||||
|
//
|
||||||
|
// They are ordered so as to support partial lookups and
|
||||||
|
// non-unique because container inserts must be valid for all
|
||||||
|
// indexes.
|
||||||
|
//
|
||||||
|
|
||||||
// call+mode+band
|
// call+mode+band
|
||||||
ordered_unique<tag<call_mode_band>,
|
ordered_non_unique<tag<call_mode_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, QString, &worked_entry::call_>,
|
member<worked_entry, QString, &worked_entry::call_>,
|
||||||
member<worked_entry, QString, &worked_entry::mode_>,
|
member<worked_entry, QString, &worked_entry::mode_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// call+band
|
// call+band
|
||||||
ordered_unique<tag<call_band>,
|
ordered_non_unique<tag<call_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, QString, &worked_entry::call_>,
|
member<worked_entry, QString, &worked_entry::call_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// grid+mode+band
|
// grid+mode+band
|
||||||
ordered_unique<tag<grid_mode_band>,
|
ordered_non_unique<tag<grid_mode_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, QString, &worked_entry::grid_>,
|
member<worked_entry, QString, &worked_entry::grid_>,
|
||||||
member<worked_entry, QString, &worked_entry::mode_>,
|
member<worked_entry, QString, &worked_entry::mode_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// grid+band
|
// grid+band
|
||||||
ordered_unique<tag<grid_band>,
|
ordered_non_unique<tag<grid_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, QString, &worked_entry::grid_>,
|
member<worked_entry, QString, &worked_entry::grid_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// country+mode+band
|
// country+mode+band
|
||||||
ordered_unique<tag<entity_mode_band>,
|
ordered_non_unique<tag<entity_mode_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, QString, &worked_entry::country_>,
|
member<worked_entry, QString, &worked_entry::country_>,
|
||||||
member<worked_entry, QString, &worked_entry::mode_>,
|
member<worked_entry, QString, &worked_entry::mode_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// country+band
|
// country+band
|
||||||
ordered_unique<tag<entity_band>,
|
ordered_non_unique<tag<entity_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, QString, &worked_entry::country_>,
|
member<worked_entry, QString, &worked_entry::country_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// continent+mode+band
|
// continent+mode+band
|
||||||
ordered_unique<tag<continent_mode_band>,
|
ordered_non_unique<tag<continent_mode_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, AD1CCty::Continent, &worked_entry::continent_>,
|
member<worked_entry, AD1CCty::Continent, &worked_entry::continent_>,
|
||||||
member<worked_entry, QString, &worked_entry::mode_>,
|
member<worked_entry, QString, &worked_entry::mode_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> >,
|
member<worked_entry, QString, &worked_entry::band_> >,
|
||||||
composite_key_compare<
|
composite_key_compare<Continent_less, std::less<QString>, std::less<QString> > >,
|
||||||
Continent_less,
|
|
||||||
std::less<QString>,
|
|
||||||
std::less<QString> > >,
|
|
||||||
// continent+band
|
// continent+band
|
||||||
ordered_unique<tag<continent_band>,
|
ordered_non_unique<tag<continent_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, AD1CCty::Continent, &worked_entry::continent_>,
|
member<worked_entry, AD1CCty::Continent, &worked_entry::continent_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> >,
|
member<worked_entry, QString, &worked_entry::band_> >,
|
||||||
composite_key_compare<
|
composite_key_compare<Continent_less, std::less<QString> > >,
|
||||||
Continent_less,
|
|
||||||
std::less<QString> > >,
|
|
||||||
// CQ-zone+mode+band
|
// CQ-zone+mode+band
|
||||||
ordered_unique<tag<CQ_zone_mode_band>,
|
ordered_non_unique<tag<CQ_zone_mode_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, int, &worked_entry::CQ_zone_>,
|
member<worked_entry, int, &worked_entry::CQ_zone_>,
|
||||||
member<worked_entry, QString, &worked_entry::mode_>,
|
member<worked_entry, QString, &worked_entry::mode_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// CQ-zone+band
|
// CQ-zone+band
|
||||||
ordered_unique<tag<CQ_zone_band>,
|
ordered_non_unique<tag<CQ_zone_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, int, &worked_entry::CQ_zone_>,
|
member<worked_entry, int, &worked_entry::CQ_zone_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// ITU-zone+mode+band
|
// ITU-zone+mode+band
|
||||||
ordered_unique<tag<ITU_zone_mode_band>,
|
ordered_non_unique<tag<ITU_zone_mode_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, int, &worked_entry::ITU_zone_>,
|
member<worked_entry, int, &worked_entry::ITU_zone_>,
|
||||||
member<worked_entry, QString, &worked_entry::mode_>,
|
member<worked_entry, QString, &worked_entry::mode_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > >,
|
member<worked_entry, QString, &worked_entry::band_> > >,
|
||||||
// ITU-zone+band
|
// ITU-zone+band
|
||||||
ordered_unique<tag<ITU_zone_band>,
|
ordered_non_unique<tag<ITU_zone_band>,
|
||||||
composite_key<worked_entry,
|
composite_key<worked_entry,
|
||||||
member<worked_entry, int, &worked_entry::ITU_zone_>,
|
member<worked_entry, int, &worked_entry::ITU_zone_>,
|
||||||
member<worked_entry, QString, &worked_entry::band_> > > >
|
member<worked_entry, QString, &worked_entry::band_> > > >
|
||||||
> worked_type;
|
> worked_before_database_type;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@ -188,7 +256,7 @@ public:
|
|||||||
|
|
||||||
QString path_;
|
QString path_;
|
||||||
AD1CCty prefixes_;
|
AD1CCty prefixes_;
|
||||||
worked_type worked_;
|
worked_before_database_type worked_;
|
||||||
};
|
};
|
||||||
|
|
||||||
WorkedBefore::WorkedBefore ()
|
WorkedBefore::WorkedBefore ()
|
||||||
@ -196,7 +264,7 @@ WorkedBefore::WorkedBefore ()
|
|||||||
QFile inputFile {m_->path_};
|
QFile inputFile {m_->path_};
|
||||||
if (inputFile.open (QFile::ReadOnly))
|
if (inputFile.open (QFile::ReadOnly))
|
||||||
{
|
{
|
||||||
QTextStream in(&inputFile);
|
QTextStream in {&inputFile};
|
||||||
QString buffer;
|
QString buffer;
|
||||||
bool pre_read {false};
|
bool pre_read {false};
|
||||||
int end_position {-1};
|
int end_position {-1};
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QChar>
|
||||||
#include <QMetaObject>
|
#include <QMetaObject>
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
#include <QDataStream>
|
#include <QDataStream>
|
||||||
@ -77,6 +78,26 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
// std::hash<> specialization for QString based on the dbj2
|
||||||
|
// algorithm http://www.cse.yorku.ca/~oz/hash.html because qHash()
|
||||||
|
// is poor on 64-bit platforms due to being a 32-bit hash value
|
||||||
|
template<>
|
||||||
|
struct hash<QString>
|
||||||
|
{
|
||||||
|
std::size_t operator () (QString const& s) const noexcept
|
||||||
|
{
|
||||||
|
std::size_t hash {5381};
|
||||||
|
for (int i = 0; i < s.size (); ++i)
|
||||||
|
{
|
||||||
|
hash = ((hash << 5) + hash) + ((s.at (i).row () << 8) | s.at (i).cell ());
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Register some useful Qt types with QMetaType
|
// Register some useful Qt types with QMetaType
|
||||||
Q_DECLARE_METATYPE (QHostAddress);
|
Q_DECLARE_METATYPE (QHostAddress);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user