diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bb0bd3724..183a871ef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -53,7 +53,7 @@ jobs: rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 - brew install ninja hdf5 automake armadillo lapack \ + brew install ninja hdf5 automake armadillo lapack libmatio \ gflags glog gnuradio log4cpp openssl pugixml protobuf pip3 install mako - name: configure @@ -82,8 +82,8 @@ jobs: rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 - brew install ninja pkg-config hdf5 automake armadillo lapack gflags glog \ - gnuradio log4cpp openssl pugixml protobuf + brew install ninja pkg-config hdf5 automake armadillo lapack libmatio \ + gflags glog gnuradio log4cpp openssl pugixml protobuf pip3 install mako - name: configure run: cd build && cmake -GXcode .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 348c2f2a1..afc81e834 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2061,7 +2061,7 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO) IMPORTED_LOCATION_RELWITHDEBINFO ${ARMADILLO_STATIC_LIBRARY} IMPORTED_LOCATION_MINSIZEREL ${ARMADILLO_STATIC_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES ${GNSSSDR_BINARY_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include - INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES}" "${LAPACK_LIBRARIES}" ${GFORTRAN} ${ARMADILLO_STATIC_LIBRARY} + INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES};${LAPACK_LIBRARIES};${GFORTRAN};${ARMADILLO_STATIC_LIBRARY}" ) if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) set_target_properties(Armadillo::armadillo PROPERTIES @@ -2069,7 +2069,7 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO) IMPORTED_LOCATION_RELEASE ${binary_dir}/Release/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${binary_dir}/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${binary_dir}/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} - INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES}" "${LAPACK_LIBRARIES}" ${GFORTRAN} ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} + INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES};${LAPACK_LIBRARIES};${GFORTRAN};${binary_dir}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}" ) endif() set_package_properties(Armadillo PROPERTIES diff --git a/cmake/Modules/AvoidAccelerate.cmake b/cmake/Modules/AvoidAccelerate.cmake index e3d3b029a..5d052296d 100644 --- a/cmake/Modules/AvoidAccelerate.cmake +++ b/cmake/Modules/AvoidAccelerate.cmake @@ -27,6 +27,7 @@ find_library(BLAS_LIBRARIES /opt/local/lib/lapack /opt/local/lib/ /usr/local/opt/lapack/lib + /opt/homebrew/opt/lapack/lib NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH @@ -47,6 +48,7 @@ find_library(LAPACK_LIBRARIES ${BLAS_ROOT_USER_DEFINED}/lapack /opt/local/lib/lapack /usr/local/opt/lapack/lib + /opt/homebrew/opt/lapack/lib NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH diff --git a/cmake/Modules/FindGFLAGS.cmake b/cmake/Modules/FindGFLAGS.cmake index c662faad0..2649380c9 100644 --- a/cmake/Modules/FindGFLAGS.cmake +++ b/cmake/Modules/FindGFLAGS.cmake @@ -44,6 +44,7 @@ if(APPLE) ${GFLAGS_ROOT_USER_PROVIDED}/lib /usr/local/lib /opt/local/lib + /opt/homebrew/opt/gflags/lib ) else() find_path(GFlags_ROOT_DIR @@ -84,6 +85,7 @@ else() endif() if(GFlags_ROOT_DIR) + unset(GFlags_INCLUDE_DIRS CACHE) # We are testing only a couple of files in the include directories find_path(GFlags_INCLUDE_DIRS gflags/gflags.h @@ -93,6 +95,7 @@ if(GFlags_ROOT_DIR) /usr/include /usr/local/include /opt/local/include + /opt/homebrew/opt/gflags/include ) # Find the libraries diff --git a/cmake/Modules/FindGLOG.cmake b/cmake/Modules/FindGLOG.cmake index e0e775539..e483dfbe9 100644 --- a/cmake/Modules/FindGLOG.cmake +++ b/cmake/Modules/FindGLOG.cmake @@ -109,6 +109,7 @@ else() /usr/include/glog /usr/local/include/glog /opt/local/include/glog # default location in Macports + /opt/homebrew/opt/glog/include/glog ${GLOG_ROOT}/include/glog ) endif() diff --git a/cmake/Modules/FindGOOGLETEST.cmake b/cmake/Modules/FindGOOGLETEST.cmake index 1d27e5d30..cf47a7062 100644 --- a/cmake/Modules/FindGOOGLETEST.cmake +++ b/cmake/Modules/FindGOOGLETEST.cmake @@ -47,6 +47,7 @@ find_path(LIBGTEST_DEV_DIR /usr/include/gtest /usr/local/src/googletest/googletest /opt/local/src/gtest-1.7.0 + /opt/homebrew/opt/googletest/include/googletest/googletest ) find_path(GTEST_INCLUDE_DIRS @@ -57,6 +58,7 @@ find_path(GTEST_INCLUDE_DIRS /usr/include /usr/local/include /opt/local/src/gtest-1.7.0/include + /opt/homebrew/opt/googletest/include ) include(FindPackageHandleStandardArgs) diff --git a/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cb.cc b/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cb.cc index ba08c7817..e0221ecc3 100644 --- a/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cb.cc +++ b/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cb.cc @@ -65,12 +65,7 @@ void direct_resampler_conditioner_cb::forecast(int noutput_items, gr_vector_int &ninput_items_required) { int nreqd = std::max(static_cast(1), static_cast(static_cast(noutput_items + 1) * sample_freq_in() / sample_freq_out()) + history() - 1); - unsigned ninputs = ninput_items_required.size(); - - for (unsigned i = 0; i < ninputs; i++) - { - ninput_items_required[i] = nreqd; - } + std::fill(ninput_items_required.begin(), ninput_items_required.end(), nreqd); } diff --git a/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cc.cc b/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cc.cc index f6f46b711..d3a9544a7 100644 --- a/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cc.cc +++ b/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cc.cc @@ -64,11 +64,7 @@ void direct_resampler_conditioner_cc::forecast(int noutput_items, gr_vector_int &ninput_items_required) { int nreqd = std::max(static_cast(1), static_cast(static_cast(noutput_items + 1) * sample_freq_in() / sample_freq_out()) + history() - 1); - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - { - ninput_items_required[i] = nreqd; - } + std::fill(ninput_items_required.begin(), ninput_items_required.end(), nreqd); } diff --git a/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cs.cc b/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cs.cc index 365728b01..8f8407343 100644 --- a/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cs.cc +++ b/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cs.cc @@ -66,12 +66,7 @@ void direct_resampler_conditioner_cs::forecast(int noutput_items, gr_vector_int &ninput_items_required) { int nreqd = std::max(static_cast(1), static_cast(static_cast(noutput_items + 1) * sample_freq_in() / sample_freq_out()) + history() - 1); - unsigned ninputs = ninput_items_required.size(); - - for (unsigned i = 0; i < ninputs; i++) - { - ninput_items_required[i] = nreqd; - } + std::fill(ninput_items_required.begin(), ninput_items_required.end(), nreqd); } diff --git a/src/core/system_parameters/beidou_dnav_navigation_message.cc b/src/core/system_parameters/beidou_dnav_navigation_message.cc index f1a0fc1b1..0444a3555 100644 --- a/src/core/system_parameters/beidou_dnav_navigation_message.cc +++ b/src/core/system_parameters/beidou_dnav_navigation_message.cc @@ -21,7 +21,7 @@ #include // for cos, sin, fmod, sqrt, atan2, fabs, floor #include // for string, operator<<, cout, ostream #include // for std::numeric_limits - +#include // for accumulate Beidou_Dnav_Navigation_Message::Beidou_Dnav_Navigation_Message() { @@ -30,9 +30,6 @@ Beidou_Dnav_Navigation_Message::Beidou_Dnav_Navigation_Message() for (uint32_t i = 1; i < 64; i++) { satelliteBlock[i] = gnss_sat.what_block(_system, i); - } - for (uint32_t i = 1; i < 64; i++) - { almanacHealth[i] = 0; } } @@ -48,16 +45,7 @@ bool Beidou_Dnav_Navigation_Message::read_navigation_bool( const std::bitset& bits, const std::vector>& parameter) const { - bool value; - - if (bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[0].first] == 1) - { - value = true; - } - else - { - value = false; - } + bool value = bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[0].first]; return value; } @@ -67,16 +55,11 @@ uint64_t Beidou_Dnav_Navigation_Message::read_navigation_unsigned( const std::vector>& parameter) const { uint64_t value = 0ULL; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& param : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < param.second; j++) { - value <<= 1U; // shift left - if (bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[i].first - j] == 1) - { - value += 1U; // insert the bit - } + value = (value << 1U) | static_cast(bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - param.first - j]); } } return value; @@ -87,29 +70,12 @@ int64_t Beidou_Dnav_Navigation_Message::read_navigation_signed( const std::bitset& bits, const std::vector>& parameter) const { - int64_t value = 0; - const int32_t num_of_slices = parameter.size(); - - // read the MSB and perform the sign extension - if (bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[0].first] == 1) + int64_t value = bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[0].first] ? -1LL : 0LL; + for (const auto& param : parameter) { - value ^= 0xFFFFFFFFFFFFFFFF; // 64 bits variable - } - else - { - value &= 0; - } - - for (int32_t i = 0; i < num_of_slices; i++) - { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < param.second; j++) { - value *= 2; // shift left the signed integer - value &= 0xFFFFFFFFFFFFFFFE; // reset the corresponding bit (for the 64 bits variable) - if (bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - parameter[i].first - j] == 1) - { - value += 1; // insert the bit - } + value = (value << 1) | static_cast(bits[BEIDOU_DNAV_SUBFRAME_DATA_BITS - param.first - j]); } } return value; diff --git a/src/core/system_parameters/galileo_fnav_message.cc b/src/core/system_parameters/galileo_fnav_message.cc index 1d313ceed..5dea81898 100644 --- a/src/core/system_parameters/galileo_fnav_message.cc +++ b/src/core/system_parameters/galileo_fnav_message.cc @@ -282,16 +282,12 @@ void Galileo_Fnav_Message::decode_page(const std::string& data) uint64_t Galileo_Fnav_Message::read_navigation_unsigned(const std::bitset& bits, const std::vector>& parameter) const { uint64_t value = 0ULL; - const int num_of_slices = parameter.size(); - for (int i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int j = 0; j < parameter[i].second; j++) + for (int j = 0; j < p.second; j++) { value <<= 1U; // shift left - if (static_cast(bits[GALILEO_FNAV_DATA_FRAME_BITS - parameter[i].first - j]) == 1) - { - value += 1; // insert the bit - } + value |= static_cast(bits[GALILEO_FNAV_DATA_FRAME_BITS - p.first - j]); } } return value; @@ -300,29 +296,12 @@ uint64_t Galileo_Fnav_Message::read_navigation_unsigned(const std::bitset& bits, const std::vector>& parameter) const { - int64_t value = 0LL; - const int num_of_slices = parameter.size(); - - // read the MSB and perform the sign extension - if (static_cast(bits[GALILEO_FNAV_DATA_FRAME_BITS - parameter[0].first]) == 1) + int64_t value = (bits[GALILEO_FNAV_DATA_FRAME_BITS - parameter[0].first] == 1) ? -1LL : 0LL; + for (const auto& p : parameter) { - value ^= 0x0FFFFFFFFFFFFFFF; // 64 bits variable - } - else - { - value &= 0; - } - - for (int i = 0; i < num_of_slices; i++) - { - for (int j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; j++) { - value <<= 1; // shift left - value &= 0xFFFFFFFFFFFFFFFE; // reset the corresponding bit (for the 64 bits variable) - if (static_cast(bits[GALILEO_FNAV_DATA_FRAME_BITS - parameter[i].first - j]) == 1) - { - value += 1; // insert the bit - } + value = (value << 1) | static_cast(bits[GALILEO_FNAV_DATA_FRAME_BITS - p.first - j]); } } return value; diff --git a/src/core/system_parameters/galileo_inav_message.cc b/src/core/system_parameters/galileo_inav_message.cc index 57d950e44..565009dc7 100644 --- a/src/core/system_parameters/galileo_inav_message.cc +++ b/src/core/system_parameters/galileo_inav_message.cc @@ -74,16 +74,12 @@ bool Galileo_Inav_Message::CRC_test(const std::bitset& uint64_t Galileo_Inav_Message::read_navigation_unsigned(const std::bitset& bits, const std::vector>& parameter) const { uint64_t value = 0ULL; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int j = 0; j < p.second; j++) { value <<= 1U; // shift left - if (static_cast(bits[GALILEO_DATA_JK_BITS - parameter[i].first - j]) == 1) - { - value += 1; // insert the bit - } + value |= static_cast(bits[GALILEO_DATA_JK_BITS - p.first - j]); } } return value; @@ -93,16 +89,12 @@ uint64_t Galileo_Inav_Message::read_navigation_unsigned(const std::bitset& bits, const std::vector>& parameter) const { uint8_t value = 0; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int j = 0; j < p.second; j++) { value <<= 1; // shift left - if (static_cast(bits[GALILEO_DATA_JK_BITS - parameter[i].first - j]) == 1) - { - value += 1; // insert the bit - } + value |= static_cast(bits[GALILEO_DATA_JK_BITS - p.first - j]); } } return value; @@ -112,16 +104,12 @@ uint8_t Galileo_Inav_Message::read_octet_unsigned(const std::bitset& bits, const std::vector>& parameter) const { uint64_t value = 0ULL; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int j = 0; j < p.second; j++) { - value <<= 1U; // shift left - if (static_cast(bits[GALILEO_PAGE_TYPE_BITS - parameter[i].first - j]) == 1) - { - value += 1ULL; // insert the bit - } + value <<= 1; // shift left + value |= static_cast(bits[GALILEO_PAGE_TYPE_BITS - p.first - j]); } } return value; @@ -130,29 +118,12 @@ uint64_t Galileo_Inav_Message::read_page_type_unsigned(const std::bitset& bits, const std::vector>& parameter) const { - int64_t value = 0LL; - const int32_t num_of_slices = parameter.size(); - - // read the MSB and perform the sign extension - if (static_cast(bits[GALILEO_DATA_JK_BITS - parameter[0].first]) == 1) + int64_t value = (bits[GALILEO_DATA_JK_BITS - parameter[0].first] == 1) ? -1LL : 0LL; + for (const auto& p : parameter) { - value ^= 0xFFFFFFFFFFFFFFFFLL; // 64 bits variable - } - else - { - value &= 0LL; - } - - for (int32_t i = 0; i < num_of_slices; i++) - { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; j++) { - value *= 2; // shift left the signed integer - value &= 0xFFFFFFFFFFFFFFFE; // reset the corresponding bit (for the 64 bits variable) - if (static_cast(bits[GALILEO_DATA_JK_BITS - parameter[i].first - j]) == 1) - { - value += 1LL; // insert the bit - } + value = (value << 1) | static_cast(bits[GALILEO_DATA_JK_BITS - p.first - j]); } } return value; @@ -161,15 +132,7 @@ int64_t Galileo_Inav_Message::read_navigation_signed(const std::bitset& bits, const std::vector>& parameter) const { - bool value; - if (static_cast(bits[GALILEO_DATA_JK_BITS - parameter[0].first]) == 1) - { - value = true; - } - else - { - value = false; - } + bool value = bits[GALILEO_DATA_JK_BITS - parameter[0].first]; return value; } diff --git a/src/core/system_parameters/glonass_gnav_navigation_message.cc b/src/core/system_parameters/glonass_gnav_navigation_message.cc index 586f795b2..9428875c4 100644 --- a/src/core/system_parameters/glonass_gnav_navigation_message.cc +++ b/src/core/system_parameters/glonass_gnav_navigation_message.cc @@ -156,16 +156,7 @@ bool Glonass_Gnav_Navigation_Message::CRC_test(std::bitset& bits, const std::vector>& parameter) const { - bool value; - - if (bits[GLONASS_GNAV_STRING_BITS - parameter[0].first] == 1) - { - value = true; - } - else - { - value = false; - } + bool value = bits[GLONASS_GNAV_STRING_BITS - parameter[0].first]; return value; } @@ -173,16 +164,11 @@ bool Glonass_Gnav_Navigation_Message::read_navigation_bool(const std::bitset& bits, const std::vector>& parameter) const { uint64_t value = 0ULL; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; j++) { - value <<= 1ULL; // shift left - if (bits[GLONASS_GNAV_STRING_BITS - parameter[i].first - j] == 1) - { - value += 1ULL; // insert the bit - } + value = (value << 1U) | static_cast(bits[GLONASS_GNAV_STRING_BITS - p.first - j]); } } return value; @@ -192,26 +178,14 @@ uint64_t Glonass_Gnav_Navigation_Message::read_navigation_unsigned(const std::bi int64_t Glonass_Gnav_Navigation_Message::read_navigation_signed(const std::bitset& bits, const std::vector>& parameter) const { int64_t value = 0LL; - int64_t sign = 0LL; - const int32_t num_of_slices = parameter.size(); - // read the MSB and perform the sign extension - if (bits[GLONASS_GNAV_STRING_BITS - parameter[0].first] == 1) + int64_t sign = (bits[GLONASS_GNAV_STRING_BITS - parameter[0].first] == 1) ? -1LL : 1LL; + + // const int32_t num_of_slices = parameter.size(); + for (const auto& p : parameter) { - sign = -1LL; - } - else - { - sign = 1LL; - } - for (int32_t i = 0; i < num_of_slices; i++) - { - for (int32_t j = 1; j < parameter[i].second; j++) + for (int32_t j = 1; j < p.second; j++) { - value <<= 1; // shift left - if (bits[GLONASS_GNAV_STRING_BITS - parameter[i].first - j] == 1) - { - value += 1LL; // insert the bit - } + value = (value << 1) + bits[GLONASS_GNAV_STRING_BITS - p.first - j]; } } return (sign * value); diff --git a/src/core/system_parameters/gps_cnav_navigation_message.cc b/src/core/system_parameters/gps_cnav_navigation_message.cc index a644f7f2a..9b9b2e907 100644 --- a/src/core/system_parameters/gps_cnav_navigation_message.cc +++ b/src/core/system_parameters/gps_cnav_navigation_message.cc @@ -36,16 +36,7 @@ Gps_CNAV_Navigation_Message::Gps_CNAV_Navigation_Message() bool Gps_CNAV_Navigation_Message::read_navigation_bool(const std::bitset& bits, const std::vector>& parameter) const { - bool value; - - if (static_cast(bits[GPS_CNAV_DATA_PAGE_BITS - parameter[0].first]) == 1) - { - value = true; - } - else - { - value = false; - } + bool value = bits[GPS_CNAV_DATA_PAGE_BITS - parameter[0].first]; return value; } @@ -53,16 +44,11 @@ bool Gps_CNAV_Navigation_Message::read_navigation_bool(const std::bitset& bits, const std::vector>& parameter) const { uint64_t value = 0ULL; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; j++) { - value <<= 1ULL; // shift left - if (static_cast(bits[GPS_CNAV_DATA_PAGE_BITS - parameter[i].first - j]) == 1) - { - value += 1ULL; // insert the bit - } + value = (value << 1) | static_cast(bits[GPS_CNAV_DATA_PAGE_BITS - p.first - j]); } } return value; @@ -71,29 +57,12 @@ uint64_t Gps_CNAV_Navigation_Message::read_navigation_unsigned(const std::bitset int64_t Gps_CNAV_Navigation_Message::read_navigation_signed(const std::bitset& bits, const std::vector>& parameter) const { - int64_t value = 0LL; - const int32_t num_of_slices = parameter.size(); - - // read the MSB and perform the sign extension - if (static_cast(bits[GPS_CNAV_DATA_PAGE_BITS - parameter[0].first]) == 1) + int64_t value = (bits[GPS_CNAV_DATA_PAGE_BITS - parameter[0].first] == 1) ? -1LL : 0LL; + for (const auto& p : parameter) { - value ^= 0xFFFFFFFFFFFFFFFFLL; // 64 bits variable - } - else - { - value &= 0LL; - } - - for (int32_t i = 0; i < num_of_slices; i++) - { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; j++) { - value *= 2; // shift left the signed integer - value &= 0xFFFFFFFFFFFFFFFELL; // reset the corresponding bit (for the 64 bits variable) - if (static_cast(bits[GPS_CNAV_DATA_PAGE_BITS - parameter[i].first - j]) == 1) - { - value += 1LL; // insert the bit - } + value = (value << 1) | static_cast(bits[GPS_CNAV_DATA_PAGE_BITS - p.first - j]); } } return value; diff --git a/src/core/system_parameters/gps_navigation_message.cc b/src/core/system_parameters/gps_navigation_message.cc index d65520720..b17458da7 100644 --- a/src/core/system_parameters/gps_navigation_message.cc +++ b/src/core/system_parameters/gps_navigation_message.cc @@ -32,9 +32,6 @@ Gps_Navigation_Message::Gps_Navigation_Message() for (uint32_t i = 1; i < 33; i++) { satelliteBlock[i] = gnss_sat.what_block(_system, i); - } - for (int32_t i = 1; i < 33; i++) - { almanacHealth[i] = 0; } } @@ -46,66 +43,35 @@ void Gps_Navigation_Message::print_gps_word_bytes(uint32_t GPS_word) const } -bool Gps_Navigation_Message::read_navigation_bool(const std::bitset& bits, const std::vector /*unused*/>& parameter) const +bool Gps_Navigation_Message::read_navigation_bool(const std::bitset& bits, const std::vector>& parameter) const { - bool value; - - if (static_cast(bits[GPS_SUBFRAME_BITS - parameter[0].first]) == 1) - { - value = true; - } - else - { - value = false; - } + bool value = bits[GPS_SUBFRAME_BITS - parameter[0].first]; return value; } -uint64_t Gps_Navigation_Message::read_navigation_unsigned(const std::bitset& bits, const std::vector /*unused*/>& parameter) const +uint64_t Gps_Navigation_Message::read_navigation_unsigned(const std::bitset& bits, const std::vector>& parameter) const { uint64_t value = 0ULL; - const int32_t num_of_slices = parameter.size(); - for (int32_t i = 0; i < num_of_slices; i++) + for (const auto& p : parameter) { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; ++j) { - value <<= 1; // shift left - if (static_cast(bits[GPS_SUBFRAME_BITS - parameter[i].first - j]) == 1) - { - value += 1ULL; // insert the bit - } + value = (value << 1) | (bits.test(GPS_SUBFRAME_BITS - p.first - j) ? 1 : 0); } } return value; } -int64_t Gps_Navigation_Message::read_navigation_signed(const std::bitset& bits, const std::vector /*unused*/>& parameter) const +int64_t Gps_Navigation_Message::read_navigation_signed(const std::bitset& bits, const std::vector>& parameter) const { - int64_t value = 0LL; - const int32_t num_of_slices = parameter.size(); - - // read the MSB and perform the sign extension - if (static_cast(bits[GPS_SUBFRAME_BITS - parameter[0].first]) == 1) + int64_t value = (bits[GPS_SUBFRAME_BITS - parameter[0].first] == 1) ? -1LL : 0LL; + for (const auto& p : parameter) { - value ^= 0xFFFFFFFFFFFFFFFFLL; // 64 bits variable - } - else - { - value &= 0LL; - } - - for (int32_t i = 0; i < num_of_slices; i++) - { - for (int32_t j = 0; j < parameter[i].second; j++) + for (int32_t j = 0; j < p.second; j++) { - value *= 2; // shift left the signed integer - value &= 0xFFFFFFFFFFFFFFFELL; // reset the corresponding bit (for the 64 bits variable) - if (static_cast(bits[GPS_SUBFRAME_BITS - parameter[i].first - j]) == 1) - { - value += 1LL; // insert the bit - } + value = (value << 1) | static_cast(bits[GPS_SUBFRAME_BITS - p.first - j]); } } return value; @@ -351,7 +317,7 @@ int32_t Gps_Navigation_Message::subframe_decoder(const char* subframe) default: break; - } // switch subframeID ... + } // switch subframeID return subframe_ID; } diff --git a/src/tests/benchmarks/CMakeLists.txt b/src/tests/benchmarks/CMakeLists.txt index 3ef8a4eb3..133174871 100644 --- a/src/tests/benchmarks/CMakeLists.txt +++ b/src/tests/benchmarks/CMakeLists.txt @@ -25,6 +25,11 @@ if(NOT benchmark_FOUND) "--build" "${GNSSSDR_BINARY_DIR}/benchmark-${GNSSSDR_BENCHMARK_LOCAL_VERSION}" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> ) + if(CMAKE_GENERATOR STREQUAL Xcode) + set(VOLK_GNSSSDR_BUILD_COMMAND "xcodebuild" + "-configuration" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + ) + endif() if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode)) set(BENCHMARK_PARALLEL_BUILD "--parallel 2")