Teamcenter C++ API Reference
2312
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
metaframework
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>
19
#include <
metaframework/BusinessObjectExtenderRegistry.hxx
>
20
#include <
metaframework/RootObject.hxx
>
21
37
template
<
typename
T>
class
BusinessObjectExtenderRef
38
{
39
public
:
40
44
BusinessObjectExtenderRef
():
m_owning_obj_tag
(0),
m_pointee
( 0 ) {}
45
49
explicit
BusinessObjectExtenderRef
(
50
tag_t owning_obj_tag
51
)
52
:
m_owning_obj_tag
( owning_obj_tag ),
m_pointee
( 0 )
53
{}
54
58
explicit
BusinessObjectExtenderRef
(
59
Teamcenter::RootObject
owning_object
60
)
61
:
m_owning_obj_tag
( 0 ),
m_pointee
( 0 )
62
{
63
m_owning_obj_tag
= owning_object.
getTag
();
64
m_pointee
=
getPointee
();
65
}
66
70
template
<
typename
S>
explicit
BusinessObjectExtenderRef
(
const
BusinessObjectExtenderRef<S>
&other)
71
{
72
m_owning_obj_tag
= other.
m_owning_obj_tag
;
73
m_pointee
= other.
m_pointee
?
dynamic_cast<
T*
>
(other.
m_pointee
) : 0;
74
}
75
79
BusinessObjectExtenderRef
&
operator =
(
80
const
BusinessObjectExtenderRef
& other
81
)
82
{
83
84
if
(
this
!= &other )
85
{
86
m_pointee
= other.
m_pointee
;
87
m_owning_obj_tag
= other.
m_owning_obj_tag
;
88
}
89
return
*
this
;
90
}
91
95
BusinessObjectExtenderRef
&
operator =
(
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
127
virtual
~BusinessObjectExtenderRef
()
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
148
tag_t
m_owning_obj_tag
;
149
150
mutable
T*
m_pointee
;
151
};
152
155
#endif