Use raw pointer to point on parent object.
authorRomain Forlot <romain.forlot@iot.bzh>
Fri, 12 May 2017 12:46:19 +0000 (14:46 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Fri, 19 May 2017 09:36:42 +0000 (11:36 +0200)
Shared pointer on value is a wrong way because once they is no more object
refering to a parent then the pointer on it is destoyed. Not a big deal here
but we better have to use raw pointer.

Change-Id: I58deeb9e82c446ea135be87c11f405da54cc5bff
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
CAN-binder/low-can-binding/can/can-message-definition.cpp
CAN-binder/low-can-binding/can/can-message-definition.hpp
CAN-binder/low-can-binding/can/can-message-set.cpp
CAN-binder/low-can-binding/can/can-signals.cpp
CAN-binder/low-can-binding/can/can-signals.hpp

index 407ed41..04f9424 100644 (file)
@@ -67,7 +67,7 @@ can_message_definition_t::can_message_definition_t(
 {
        for(auto& sig: can_signals_)
        {
-               sig->set_parent(std::make_shared<can_message_definition_t>(*this));
+               sig->set_parent(this);
        }
 }
 
@@ -97,7 +97,7 @@ std::vector<std::shared_ptr<can_signal_t> >& can_message_definition_t::get_can_s
        return can_signals_;
 }
 
-void can_message_definition_t::set_parent(std::shared_ptr<can_message_set_t> parent)
+void can_message_definition_t::set_parent(can_message_set_t* parent)
 {
        parent_= parent;
 }
index 0e7e5ee..0c7d7c1 100644 (file)
@@ -37,7 +37,7 @@ class can_message_set_t;
 class can_message_definition_t
 {
 private:
-       std::shared_ptr<can_message_set_t> parent_; /*!< parent_ - Pointer to the CAN message set holding this CAN message definition */
+       can_message_set_t* parent_; /*!< parent_ - Pointer to the CAN message set holding this CAN message definition */
        std::string bus_; /*!< bus_ - Address of CAN bus device. */
        uint32_t id_; /*!< id_ - The ID of the message.*/
        can_message_format_t format_; /*!< format_ - the format of the message's ID.*/
@@ -62,6 +62,6 @@ public:
        uint32_t get_id() const;
        std::vector<std::shared_ptr<can_signal_t> >& get_can_signals();
 
-       void set_parent(std::shared_ptr<can_message_set_t> parent);
+       void set_parent(can_message_set_t* parent);
        void set_last_value(const can_message_t& cm);
 };
index 46dc448..9216f3a 100644 (file)
@@ -28,7 +28,7 @@ can_message_set_t::can_message_set_t(
 {
        for(auto& cmd : can_messages_definition_)
        {
-               cmd->set_parent(std::make_shared<can_message_set_t>(*this));
+               cmd->set_parent(this);
        }
 }
 
index 04d328b..6a68214 100644 (file)
@@ -89,7 +89,7 @@ utils::socketcan_bcm_t can_signal_t::get_socket() const
        return socket_;
 }
 
-std::shared_ptr<can_message_definition_t> can_signal_t::get_message() const
+can_message_definition_t* can_signal_t::get_message() const
 {
        return parent_;
 }
@@ -195,7 +195,7 @@ float can_signal_t::get_last_value() const
        return last_value_;
 }
 
-void can_signal_t::set_parent(std::shared_ptr<can_message_definition_t> parent)
+void can_signal_t::set_parent(can_message_definition_t* parent)
 {
        parent_ = parent;
 }
index 62fbbe7..79f56db 100644 (file)
@@ -75,7 +75,7 @@ typedef uint64_t (*SignalEncoder)(can_signal_t* signal,
 class can_signal_t
 {
 private:
-       std::shared_ptr<can_message_definition_t> parent_; /*!< parent_ - pointer to the parent message definition holding this signal*/
+       can_message_definition_t* parent_; /*!< parent_ - pointer to the parent message definition holding this signal*/
        utils::socketcan_bcm_t  socket_; /*!< socket_ - Specific BCM socket that filter the signal read from CAN device */
        std::string generic_name_; /*!< generic_name_ - The name of the signal to be output.*/
        static std::string prefix_; /*!< prefix_ - generic_name_ will be prefixed with it. It has to reflect the used protocol.
@@ -129,7 +129,7 @@ public:
                bool received);
 
        utils::socketcan_bcm_t get_socket() const;
-       std::shared_ptr<can_message_definition_t> get_message() const;
+       can_message_definition_t* get_message() const;
        const std::string& get_generic_name() const;
        const std::string get_name() const;
        const std::string& get_prefix() const;
@@ -151,7 +151,7 @@ public:
        bool get_received() const;
        float get_last_value() const;
 
-       void set_parent(std::shared_ptr<can_message_definition_t> parent);
+       void set_parent(can_message_definition_t* parent);
        void set_prefix(std::string val);
        void set_received(bool r);
        void set_last_value(float val);