mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-11-04 09:13:05 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next
This commit is contained in:
		@@ -38,6 +38,7 @@
 | 
				
			|||||||
#include <boost/crc.hpp>
 | 
					#include <boost/crc.hpp>
 | 
				
			||||||
#include <boost/date_time/gregorian/gregorian.hpp>
 | 
					#include <boost/date_time/gregorian/gregorian.hpp>
 | 
				
			||||||
#include <boost/dynamic_bitset.hpp>
 | 
					#include <boost/dynamic_bitset.hpp>
 | 
				
			||||||
 | 
					#include <boost/exception/diagnostic_information.hpp>
 | 
				
			||||||
#include <algorithm>  // for std::reverse
 | 
					#include <algorithm>  // for std::reverse
 | 
				
			||||||
#include <chrono>     // std::chrono::seconds
 | 
					#include <chrono>     // std::chrono::seconds
 | 
				
			||||||
#include <cmath>      // for std::fmod
 | 
					#include <cmath>      // for std::fmod
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,12 +34,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "concurrent_queue.h"
 | 
					#include "concurrent_queue.h"
 | 
				
			||||||
 | 
					#include "galileo_ephemeris.h"
 | 
				
			||||||
 | 
					#include "glonass_gnav_ephemeris.h"
 | 
				
			||||||
 | 
					#include "glonass_gnav_utc_model.h"
 | 
				
			||||||
#include "gnss_synchro.h"
 | 
					#include "gnss_synchro.h"
 | 
				
			||||||
#include <galileo_ephemeris.h>
 | 
					#include "gps_cnav_ephemeris.h"
 | 
				
			||||||
#include <gps_ephemeris.h>
 | 
					#include "gps_ephemeris.h"
 | 
				
			||||||
#include <gps_cnav_ephemeris.h>
 | 
					 | 
				
			||||||
#include <glonass_gnav_ephemeris.h>
 | 
					 | 
				
			||||||
#include <glonass_gnav_utc_model.h>
 | 
					 | 
				
			||||||
#include <boost/asio.hpp>
 | 
					#include <boost/asio.hpp>
 | 
				
			||||||
#include <boost/date_time/posix_time/posix_time.hpp>
 | 
					#include <boost/date_time/posix_time/posix_time.hpp>
 | 
				
			||||||
#include <glog/logging.h>
 | 
					#include <glog/logging.h>
 | 
				
			||||||
@@ -48,6 +48,7 @@
 | 
				
			|||||||
#include <cstdint>
 | 
					#include <cstdint>
 | 
				
			||||||
#include <cstring>  // for memcpy
 | 
					#include <cstring>  // for memcpy
 | 
				
			||||||
#include <deque>
 | 
					#include <deque>
 | 
				
			||||||
 | 
					#include <list>
 | 
				
			||||||
#include <map>
 | 
					#include <map>
 | 
				
			||||||
#include <memory>
 | 
					#include <memory>
 | 
				
			||||||
#include <set>
 | 
					#include <set>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,7 @@
 | 
				
			|||||||
#include "gps_cnav_ephemeris.h"
 | 
					#include "gps_cnav_ephemeris.h"
 | 
				
			||||||
#include "gps_ephemeris.h"
 | 
					#include "gps_ephemeris.h"
 | 
				
			||||||
#include "rtcm.h"
 | 
					#include "rtcm.h"
 | 
				
			||||||
 | 
					#include <boost/exception/diagnostic_information.hpp>
 | 
				
			||||||
#include <glog/logging.h>
 | 
					#include <glog/logging.h>
 | 
				
			||||||
#include <ctime>      // for tm
 | 
					#include <ctime>      // for tm
 | 
				
			||||||
#include <exception>  // for exception
 | 
					#include <exception>  // for exception
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,11 @@
 | 
				
			|||||||
#ifndef GNSS_SDR_CONCURRENT_QUEUE_H
 | 
					#ifndef GNSS_SDR_CONCURRENT_QUEUE_H
 | 
				
			||||||
#define GNSS_SDR_CONCURRENT_QUEUE_H
 | 
					#define GNSS_SDR_CONCURRENT_QUEUE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <boost/thread.hpp>
 | 
					#include <chrono>
 | 
				
			||||||
 | 
					#include <condition_variable>
 | 
				
			||||||
 | 
					#include <mutex>
 | 
				
			||||||
#include <queue>
 | 
					#include <queue>
 | 
				
			||||||
 | 
					#include <thread>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename Data>
 | 
					template <typename Data>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,7 +51,7 @@ class Concurrent_Queue
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
    void push(Data const& data)
 | 
					    void push(Data const& data)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        boost::mutex::scoped_lock lock(the_mutex);
 | 
					        std::unique_lock<std::mutex> lock(the_mutex);
 | 
				
			||||||
        the_queue.push(data);
 | 
					        the_queue.push(data);
 | 
				
			||||||
        lock.unlock();
 | 
					        lock.unlock();
 | 
				
			||||||
        the_condition_variable.notify_one();
 | 
					        the_condition_variable.notify_one();
 | 
				
			||||||
@@ -56,13 +59,13 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    bool empty() const
 | 
					    bool empty() const
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        boost::mutex::scoped_lock lock(the_mutex);
 | 
					        std::unique_lock<std::mutex> lock(the_mutex);
 | 
				
			||||||
        return the_queue.empty();
 | 
					        return the_queue.empty();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool try_pop(Data& popped_value)
 | 
					    bool try_pop(Data& popped_value)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        boost::mutex::scoped_lock lock(the_mutex);
 | 
					        std::unique_lock<std::mutex> lock(the_mutex);
 | 
				
			||||||
        if (the_queue.empty())
 | 
					        if (the_queue.empty())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
@@ -74,7 +77,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void wait_and_pop(Data& popped_value)
 | 
					    void wait_and_pop(Data& popped_value)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        boost::mutex::scoped_lock lock(the_mutex);
 | 
					        std::unique_lock<std::mutex> lock(the_mutex);
 | 
				
			||||||
        while (the_queue.empty())
 | 
					        while (the_queue.empty())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                the_condition_variable.wait(lock);
 | 
					                the_condition_variable.wait(lock);
 | 
				
			||||||
@@ -82,10 +85,26 @@ public:
 | 
				
			|||||||
        popped_value = the_queue.front();
 | 
					        popped_value = the_queue.front();
 | 
				
			||||||
        the_queue.pop();
 | 
					        the_queue.pop();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
 | 
					    bool timed_wait_and_pop(Data& popped_value, int wait_ms)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::unique_lock<std::mutex> lock(the_mutex);
 | 
				
			||||||
 | 
					        if (the_queue.empty())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                the_condition_variable.wait_for(lock, std::chrono::milliseconds(wait_ms));
 | 
				
			||||||
 | 
					                if (the_queue.empty())
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        return false;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        popped_value = the_queue.front();
 | 
				
			||||||
 | 
					        the_queue.pop();
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    std::queue<Data> the_queue;
 | 
					    std::queue<Data> the_queue;
 | 
				
			||||||
    mutable boost::mutex the_mutex;
 | 
					    mutable std::mutex the_mutex;
 | 
				
			||||||
    boost::condition_variable the_condition_variable;
 | 
					    std::condition_variable the_condition_variable;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user