mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-14 04:00:34 +00:00
replacing raw pointers by smart pointers in the control message factory
This commit is contained in:
parent
a5af6ea889
commit
55da7e9716
@ -55,9 +55,9 @@ boost::shared_ptr<gr::message> ControlMessageFactory::GetQueueMessage(unsigned i
|
||||
}
|
||||
|
||||
|
||||
std::vector<ControlMessage*>* ControlMessageFactory::GetControlMessages(boost::shared_ptr<gr::message> queue_message)
|
||||
std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> ControlMessageFactory::GetControlMessages(boost::shared_ptr<gr::message> queue_message)
|
||||
{
|
||||
std::vector<ControlMessage*>* control_messages = new std::vector<ControlMessage*>();
|
||||
std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages = std::make_shared<std::vector<std::shared_ptr<ControlMessage>>>();
|
||||
unsigned int control_messages_count = queue_message->length() / sizeof(ControlMessage);
|
||||
if(queue_message->length() % sizeof(ControlMessage) != 0)
|
||||
{
|
||||
@ -66,10 +66,10 @@ std::vector<ControlMessage*>* ControlMessageFactory::GetControlMessages(boost::s
|
||||
LOG(WARNING) << "Ignoring this queue message to prevent unexpected results.";
|
||||
return control_messages;
|
||||
}
|
||||
for(unsigned int i=0; i<control_messages_count; i++)
|
||||
for(unsigned int i = 0; i < control_messages_count; i++)
|
||||
{
|
||||
control_messages->push_back(new ControlMessage);
|
||||
memcpy(control_messages->at(i), queue_message->msg() + (i*sizeof(ControlMessage)), sizeof(ControlMessage));
|
||||
control_messages->push_back(std::make_shared<ControlMessage>());
|
||||
memcpy(control_messages->at(i).get(), queue_message->msg() + (i*sizeof(ControlMessage)), sizeof(ControlMessage));
|
||||
}
|
||||
return control_messages;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
#ifndef GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_
|
||||
#define GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <gnuradio/message.h>
|
||||
|
||||
@ -58,7 +59,7 @@ public:
|
||||
virtual ~ControlMessageFactory();
|
||||
|
||||
boost::shared_ptr<gr::message> GetQueueMessage(unsigned int who, unsigned int what);
|
||||
std::vector<ControlMessage*>* GetControlMessages(gr::message::sptr queue_message);
|
||||
std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> GetControlMessages(gr::message::sptr queue_message);
|
||||
};
|
||||
|
||||
#endif /*GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_*/
|
||||
|
@ -402,11 +402,9 @@ void ControlThread::process_control_messages()
|
||||
{
|
||||
flowgraph_->apply_action(control_messages_->at(i)->who, control_messages_->at(i)->what);
|
||||
}
|
||||
delete control_messages_->at(i);
|
||||
processed_control_messages_++;
|
||||
}
|
||||
control_messages_->clear();
|
||||
delete control_messages_;
|
||||
DLOG(INFO) << "Processed all control messages";
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#ifndef GNSS_SDR_CONTROL_THREAD_H_
|
||||
#define GNSS_SDR_CONTROL_THREAD_H_
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <boost/thread/thread.hpp>
|
||||
#include <gnuradio/msg_queue.h>
|
||||
@ -101,11 +102,11 @@ public:
|
||||
/*!
|
||||
* \brief Instantiates a flowgraph
|
||||
*
|
||||
* \return Returns a flowgraph object
|
||||
* \return Returns a pointer to a flowgraph object
|
||||
*/
|
||||
GNSSFlowgraph* flowgraph()
|
||||
std::shared_ptr<GNSSFlowgraph> flowgraph()
|
||||
{
|
||||
return flowgraph_.get();
|
||||
return flowgraph_;
|
||||
}
|
||||
|
||||
|
||||
@ -177,7 +178,7 @@ private:
|
||||
std::shared_ptr<ConfigurationInterface> configuration_;
|
||||
boost::shared_ptr<gr::msg_queue> control_queue_;
|
||||
std::shared_ptr<ControlMessageFactory> control_message_factory_;
|
||||
std::vector<ControlMessage*> *control_messages_;
|
||||
std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages_;
|
||||
bool stop_;
|
||||
bool delete_configuration_;
|
||||
unsigned int processed_control_messages_;
|
||||
|
@ -1,16 +1,17 @@
|
||||
/*!
|
||||
* \file gnss_block_factory.h
|
||||
* \brief Interface of a factory that returns instances of GNSS blocks.
|
||||
* \brief Interface of a factory that returns smart pointers to GNSS blocks.
|
||||
* \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com
|
||||
* Luis Esteve, 2011. luis(at)epsilon-formacion.com
|
||||
* Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
* Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es
|
||||
*
|
||||
* This class encapsulates the complexity behind the instantiation
|
||||
* of GNSS blocks.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors)
|
||||
* Copyright (C) 2010-2014 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
@ -36,9 +37,9 @@
|
||||
#ifndef GNSS_SDR_BLOCK_FACTORY_H_
|
||||
#define GNSS_SDR_BLOCK_FACTORY_H_
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <gnuradio/msg_queue.h>
|
||||
|
||||
class ConfigurationInterface;
|
||||
|
@ -3,6 +3,7 @@
|
||||
* \brief Implementation of a GNSS receiver flowgraph
|
||||
* \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com
|
||||
* Luis Esteve, 2012. luis(at)epsilon-formacion.com
|
||||
* Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es
|
||||
*
|
||||
* Detailed description of the file here if needed.
|
||||
*
|
||||
@ -35,7 +36,6 @@
|
||||
#include "unistd.h"
|
||||
#include <exception>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <glog/logging.h>
|
||||
|
@ -3,6 +3,7 @@
|
||||
* \brief Interface of a GNSS receiver flowgraph.
|
||||
* \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com
|
||||
* Luis Esteve, 2011. luis(at)epsilon-formacion.com
|
||||
* Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es
|
||||
*
|
||||
* It contains a signal source,
|
||||
* a signal conditioner, a set of channels, a pvt and an output filter.
|
||||
@ -35,10 +36,11 @@
|
||||
#ifndef GNSS_SDR_GNSS_FLOWGRAPH_H_
|
||||
#define GNSS_SDR_GNSS_FLOWGRAPH_H_
|
||||
|
||||
#include <list>
|
||||
#include <memory>
|
||||
#include <queue>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
#include <list>
|
||||
#include <gnuradio/top_block.h>
|
||||
#include <gnuradio/msg_queue.h>
|
||||
#include "GPS_L1_CA.h"
|
||||
|
@ -39,17 +39,13 @@
|
||||
|
||||
TEST(Control_Message_Factory_Test, GetQueueMessage)
|
||||
{
|
||||
ControlMessageFactory *factory = new ControlMessageFactory();
|
||||
|
||||
std::shared_ptr<ControlMessageFactory> factory = std::make_shared<ControlMessageFactory>();
|
||||
gr::message::sptr queue_message = factory->GetQueueMessage(0, 0);
|
||||
ControlMessage *control_message = (ControlMessage*)queue_message->msg();
|
||||
|
||||
std::shared_ptr<ControlMessage> control_message = std::make_shared<ControlMessage>();
|
||||
unsigned int expected0 = 0;
|
||||
EXPECT_EQ(expected0, control_message->who);
|
||||
EXPECT_EQ(expected0, control_message->what);
|
||||
EXPECT_EQ(sizeof(ControlMessage), queue_message->length());
|
||||
|
||||
delete factory;
|
||||
}
|
||||
|
||||
|
||||
@ -57,48 +53,40 @@ TEST(Control_Message_Factory_Test, GetQueueMessage)
|
||||
|
||||
TEST(Control_Message_Factory_Test, GetControlMessages)
|
||||
{
|
||||
ControlMessageFactory *factory = new ControlMessageFactory();
|
||||
ControlMessage *control_message = new ControlMessage;
|
||||
std::shared_ptr<ControlMessageFactory> factory = std::make_shared<ControlMessageFactory>();
|
||||
gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage));
|
||||
std::shared_ptr<ControlMessage> control_message = std::make_shared<ControlMessage>();
|
||||
|
||||
control_message->who = 1;
|
||||
control_message->what = 4;
|
||||
|
||||
gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage));
|
||||
memcpy(queue_message->msg(), control_message, sizeof(ControlMessage));
|
||||
std::vector<ControlMessage*> *control_messages = factory->GetControlMessages(queue_message);
|
||||
memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage));
|
||||
std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages = factory->GetControlMessages(queue_message);
|
||||
|
||||
unsigned int expected1 = 1;
|
||||
unsigned int expected4 = 4;
|
||||
EXPECT_EQ(expected1, control_messages->size());
|
||||
EXPECT_EQ(expected1, control_messages->at(0)->who);
|
||||
EXPECT_EQ(expected4, control_messages->at(0)->what);
|
||||
|
||||
delete control_message;
|
||||
delete control_messages;
|
||||
delete factory;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
TEST(Control_Message_Factory_Test, GetControlMessagesWrongSize)
|
||||
{
|
||||
|
||||
ControlMessageFactory *factory = new ControlMessageFactory();
|
||||
ControlMessage *control_message = new ControlMessage;
|
||||
std::shared_ptr<ControlMessageFactory> factory = std::make_shared<ControlMessageFactory>();
|
||||
std::shared_ptr<ControlMessage> control_message = std::make_shared<ControlMessage>();
|
||||
|
||||
control_message->who = 1;
|
||||
control_message->what = 4;
|
||||
int another_int = 10;
|
||||
|
||||
gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage) + sizeof(int));
|
||||
memcpy(queue_message->msg(), control_message, sizeof(ControlMessage));
|
||||
memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage));
|
||||
memcpy(queue_message->msg() + sizeof(ControlMessage), &another_int, sizeof(int));
|
||||
std::vector<ControlMessage*> *control_messages = factory->GetControlMessages(queue_message);
|
||||
std::shared_ptr<std::vector<std::shared_ptr<ControlMessage>>> control_messages = factory->GetControlMessages(queue_message);
|
||||
|
||||
unsigned int expected0 = 0;
|
||||
EXPECT_EQ(expected0, control_messages->size());
|
||||
|
||||
delete control_message;
|
||||
delete control_messages;
|
||||
delete factory;
|
||||
}
|
||||
} */
|
||||
|
Loading…
Reference in New Issue
Block a user