Skip to content

Commit f63888c

Browse files
committed
Singleton in edges
Signed-off-by: Francisco Martin Rico <[email protected]>
1 parent 1ce4533 commit f63888c

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

bica_graph/include/bica_graph/Singleton.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,35 @@ class Singleton {
3939
template< class C >
4040
C* Singleton<C>::uniqueInstance = NULL;
4141

42+
template< class C, class D >
43+
class SingletonRef {
44+
45+
public:
46+
static C* getInstance(D& ref)
47+
{
48+
if( SingletonRef<C, D>::uniqueInstance == NULL )
49+
SingletonRef<C, D>::uniqueInstance = new C(ref);
50+
51+
return SingletonRef<C, D>::uniqueInstance;
52+
}
53+
54+
static void removeInstance()
55+
{
56+
if( SingletonRef<C, D>::uniqueInstance != NULL )
57+
{
58+
delete SingletonRef<C, D>::uniqueInstance;
59+
SingletonRef<C, D>::uniqueInstance = NULL;
60+
}
61+
}
62+
63+
private:
64+
static C *uniqueInstance;
65+
};
66+
67+
// Initialize the static member CurrentInstance
68+
template< class C, class D >
69+
C* SingletonRef<C, D>::uniqueInstance = NULL;
70+
71+
72+
4273
#endif /* SINGLETON_H_ */

bica_graph/include/bica_graph/edge.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ class DoubleEdge
102102
class BicaTransformBuffer: public Singleton<tf2_ros::Buffer> {};
103103
class BicaTransformBroadcaster: public Singleton<tf2_ros::TransformBroadcaster> {};
104104
class BicaStaticTransformBroadcaster: public Singleton<tf2_ros::StaticTransformBroadcaster> {};
105+
class BicaTransformListener: public SingletonRef<tf2_ros::TransformListener, tf2_ros::Buffer>{};
105106

106107
class TFEdge
107108
{
@@ -125,8 +126,9 @@ class TFEdge
125126

126127
ros::NodeHandle nh_;
127128

128-
std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
129+
// std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
129130

131+
tf2_ros::TransformListener *tf_listener_;
130132
tf2_ros::Buffer *tfBuffer;
131133
tf2_ros::TransformBroadcaster *tf_broadcaster_;
132134
tf2_ros::StaticTransformBroadcaster *static_tf_broadcaster_;

bica_graph/src/bica_graph/edge.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ TFEdge::TFEdge(const std::string& source, const tf2::Transform& data, const std:
8787
tf_broadcaster_ = BicaTransformBroadcaster::getInstance();
8888
static_tf_broadcaster_ = BicaStaticTransformBroadcaster::getInstance();
8989
tfBuffer = BicaTransformBuffer::getInstance();
90-
tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tfBuffer);
90+
tf_listener_ = BicaTransformListener::getInstance(*tfBuffer);
91+
//std::make_shared<tf2_ros::TransformListener>(*tfBuffer);
9192

9293
publish_transform(source_, target_, data);
9394
}
@@ -101,7 +102,7 @@ TFEdge::TFEdge(const std::string& source, const std::string& target, bool static
101102
tf_broadcaster_ = BicaTransformBroadcaster::getInstance();
102103
static_tf_broadcaster_ = BicaStaticTransformBroadcaster::getInstance();
103104
tfBuffer = BicaTransformBuffer::getInstance();
104-
tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tfBuffer);
105+
tf_listener_ = BicaTransformListener::getInstance(*tfBuffer);
105106
}
106107

107108
TFEdge::TFEdge(const TFEdge& other)
@@ -113,7 +114,7 @@ TFEdge::TFEdge(const TFEdge& other)
113114
tf_broadcaster_ = BicaTransformBroadcaster::getInstance();
114115
static_tf_broadcaster_ = BicaStaticTransformBroadcaster::getInstance();
115116
tfBuffer = BicaTransformBuffer::getInstance();
116-
tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tfBuffer);
117+
tf_listener_ = BicaTransformListener::getInstance(*tfBuffer);
117118
}
118119

119120
const tf2::Transform

0 commit comments

Comments
 (0)