Teamcenter C++ API Reference  2312
BusinessObjectExtenderRef.hxx
Go to the documentation of this file.
1 // ==================================================
2 // Copyright 2014.
3 // Siemens Product Lifecycle Management Software Inc.
4 // All Rights Reserved.
5 // ==================================================
6 
13 /* */
14 
15 #ifndef TCBUSINESSOBJECTEXTENDERREF_HXX
16 #define TCBUSINESSOBJECTEXTENDERREF_HXX
17 
18 #include <unidefs.h>
21 
37 template <typename T> class BusinessObjectExtenderRef
38 {
39 public:
40 
45 
50  tag_t owning_obj_tag
51  )
52  : m_owning_obj_tag( owning_obj_tag ), m_pointee( 0 )
53  {}
54 
59  Teamcenter::RootObject owning_object
60  )
61  : m_owning_obj_tag( 0 ), m_pointee( 0 )
62  {
63  m_owning_obj_tag = owning_object.getTag();
65  }
66 
70  template<typename S> explicit BusinessObjectExtenderRef(const BusinessObjectExtenderRef<S> &other)
71  {
73  m_pointee = other.m_pointee ? dynamic_cast<T*>(other.m_pointee) : 0;
74  }
75 
80  const BusinessObjectExtenderRef& other
81  )
82  {
83 
84  if ( this != &other )
85  {
86  m_pointee = other.m_pointee;
88  }
89  return *this;
90  }
91 
96  tag_t owning_obj_tag
97  )
98  {
99  m_pointee = 0;
100  m_owning_obj_tag = owning_obj_tag;
101  return *this;
102  }
103 
107  T* operator->() const { return getPointee(); }
108 
112  const T& operator*() const { return *getPointee(); }
113 
119  template <typename U> bool isInstanceOf() const
120  {
121  return dynamic_cast<U*>(getPointee()) ? true : false;
122  }
123 
128  {
129  m_pointee = 0;
130  }
131 
132 private:
133 
134  T* getPointee() const
135  {
136  if ( m_owning_obj_tag && !m_pointee )
137  {
138  m_pointee = T::extenderRegistry().findExtenderObject( m_owning_obj_tag );
139  }
140  return m_pointee;
141  }
142 
143  template<typename S> friend class BusinessObjectExtenderRef;
144 
149 
150  mutable T* m_pointee;
151 };
152 
155 #endif