diff --git a/src/core/receiver/control_message_factory.cc b/src/core/receiver/control_message_factory.cc index 87797fdd3..56d77c55f 100644 --- a/src/core/receiver/control_message_factory.cc +++ b/src/core/receiver/control_message_factory.cc @@ -55,9 +55,9 @@ boost::shared_ptr ControlMessageFactory::GetQueueMessage(unsigned i } -std::vector* ControlMessageFactory::GetControlMessages(boost::shared_ptr queue_message) +std::shared_ptr>> ControlMessageFactory::GetControlMessages(boost::shared_ptr queue_message) { - std::vector* control_messages = new std::vector(); + std::shared_ptr>> control_messages = std::make_shared>>(); unsigned int control_messages_count = queue_message->length() / sizeof(ControlMessage); if(queue_message->length() % sizeof(ControlMessage) != 0) { @@ -66,10 +66,10 @@ std::vector* ControlMessageFactory::GetControlMessages(boost::s LOG(WARNING) << "Ignoring this queue message to prevent unexpected results."; return control_messages; } - for(unsigned int i=0; ipush_back(new ControlMessage); - memcpy(control_messages->at(i), queue_message->msg() + (i*sizeof(ControlMessage)), sizeof(ControlMessage)); + control_messages->push_back(std::make_shared()); + memcpy(control_messages->at(i).get(), queue_message->msg() + (i*sizeof(ControlMessage)), sizeof(ControlMessage)); } return control_messages; } diff --git a/src/core/receiver/control_message_factory.h b/src/core/receiver/control_message_factory.h index f17e02f0b..eb993853c 100644 --- a/src/core/receiver/control_message_factory.h +++ b/src/core/receiver/control_message_factory.h @@ -31,6 +31,7 @@ #ifndef GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_ #define GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_ +#include #include #include @@ -58,7 +59,7 @@ public: virtual ~ControlMessageFactory(); boost::shared_ptr GetQueueMessage(unsigned int who, unsigned int what); - std::vector* GetControlMessages(gr::message::sptr queue_message); + std::shared_ptr>> GetControlMessages(gr::message::sptr queue_message); }; #endif /*GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_*/ diff --git a/src/core/receiver/control_thread.cc b/src/core/receiver/control_thread.cc index e346aca66..aa4669e18 100644 --- a/src/core/receiver/control_thread.cc +++ b/src/core/receiver/control_thread.cc @@ -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"; } diff --git a/src/core/receiver/control_thread.h b/src/core/receiver/control_thread.h index f5318302e..a46ad5335 100644 --- a/src/core/receiver/control_thread.h +++ b/src/core/receiver/control_thread.h @@ -35,6 +35,7 @@ #ifndef GNSS_SDR_CONTROL_THREAD_H_ #define GNSS_SDR_CONTROL_THREAD_H_ +#include #include #include #include @@ -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 flowgraph() { - return flowgraph_.get(); + return flowgraph_; } @@ -177,7 +178,7 @@ private: std::shared_ptr configuration_; boost::shared_ptr control_queue_; std::shared_ptr control_message_factory_; - std::vector *control_messages_; + std::shared_ptr>> control_messages_; bool stop_; bool delete_configuration_; unsigned int processed_control_messages_; diff --git a/src/core/receiver/gnss_block_factory.h b/src/core/receiver/gnss_block_factory.h index 482b83f6a..11c21b96f 100644 --- a/src/core/receiver/gnss_block_factory.h +++ b/src/core/receiver/gnss_block_factory.h @@ -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 -#include #include +#include +#include #include class ConfigurationInterface; diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index 4f6d2625f..7f63547d2 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -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 #include -#include #include #include #include diff --git a/src/core/receiver/gnss_flowgraph.h b/src/core/receiver/gnss_flowgraph.h index cf6b91bd7..493a4868c 100644 --- a/src/core/receiver/gnss_flowgraph.h +++ b/src/core/receiver/gnss_flowgraph.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 +#include +#include #include #include -#include -#include #include #include #include "GPS_L1_CA.h" diff --git a/src/tests/control_thread/control_message_factory_test.cc b/src/tests/control_thread/control_message_factory_test.cc index c54cfcbb4..879a2ce29 100644 --- a/src/tests/control_thread/control_message_factory_test.cc +++ b/src/tests/control_thread/control_message_factory_test.cc @@ -39,17 +39,13 @@ TEST(Control_Message_Factory_Test, GetQueueMessage) { - ControlMessageFactory *factory = new ControlMessageFactory(); - + std::shared_ptr factory = std::make_shared(); gr::message::sptr queue_message = factory->GetQueueMessage(0, 0); - ControlMessage *control_message = (ControlMessage*)queue_message->msg(); - + std::shared_ptr control_message = std::make_shared(); 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 factory = std::make_shared(); + gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage)); + std::shared_ptr control_message = std::make_shared(); 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 *control_messages = factory->GetControlMessages(queue_message); + memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); + std::shared_ptr>> 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 factory = std::make_shared(); + std::shared_ptr control_message = std::make_shared(); 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 *control_messages = factory->GetControlMessages(queue_message); + std::shared_ptr>> control_messages = factory->GetControlMessages(queue_message); unsigned int expected0 = 0; EXPECT_EQ(expected0, control_messages->size()); - - delete control_message; - delete control_messages; - delete factory; -} +} */