Teamcenter C++ API Reference
2312
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
base_utils
ScopedPtr.hxx
Go to the documentation of this file.
1
// Copyright 2022 Siemens Digital Industries Software
2
// ==================================================
3
// Copyright 2014.
4
// Siemens Product Lifecycle Management Software Inc.
5
// All Rights Reserved.
6
// ==================================================
7
// Copyright 2022 Siemens Digital Industries Software
8
18
#ifndef TEAMCENTER_BASE_UTILS_SCOPED_PTR_HXX
19
#define TEAMCENTER_BASE_UTILS_SCOPED_PTR_HXX
20
21
#include <base_utils/libbase_utils_exports.h>
22
23
namespace
Teamcenter
24
{
25
30
template
<
class
T >
struct
scoped_ptr_default_deallocator
31
{
32
void
operator()
(T* bucket)
const
{
delete
bucket; }
33
};
34
97
template
<
class
T,
class
F=scoped_ptr_default_deallocator< T > >
class
scoped_ptr
98
{
99
public
:
100
104
explicit
scoped_ptr
( T* b = 0 ) :
bucket
( b ) {}
105
109
virtual
~scoped_ptr
() { F f; f(
bucket
); }
/* */
110
114
scoped_ptr
&
operator=
( T * ptr ) { F f; f(
bucket
);
bucket
= ptr;
return
*
this
; }
115
116
T**
operator&
() {
bucket
= 0;
return
&
bucket
; }
117
T&
operator*
()
const
{
return
*
bucket
; }
118
T*
operator->
()
const
{
return
bucket
; }
119
120
operator
T*()
const
{
return
bucket
; }
121
/* */
122
126
T*&
getReference
() {
return
bucket
; }
127
131
T*
get
()
const
{
return
bucket
; }
132
141
const
T*
getString
()
const
{
static
const
T s_empty = T();
return
bucket
?
bucket
: &s_empty; }
142
146
T*
release
() { T* tmp =
bucket
;
bucket
= 0;
return
tmp; }
147
148
bool
operator ==
(
const
T* t)
const
{
return
bucket
== t; }
149
bool
operator !=
(
const
T* t)
const
{
return
bucket
!= t; }
150
151
bool
operator!
()
const
152
{
153
return
bucket
== 0;
154
}
155
156
protected
:
160
T*
bucket
;
161
162
private
:
163
scoped_ptr
(
const
scoped_ptr
& );
164
scoped_ptr
&
operator =
(
const
scoped_ptr
& );
165
};
166
168
extern
BASE_UTILS_API
void
free_unpacked_SM_string_array
(
char
** array );
169
204
struct
StringArrayFreer
205
{
206
void
operator()
(
char
** bucket ) {
free_unpacked_SM_string_array
( bucket ); };
207
void
operator()
(
const
char
** bucket ) {
free_unpacked_SM_string_array
( (
char
**) bucket ); };
208
};
209
210
}
// end namespace Teamcenter
211
212
#include <base_utils/libbase_utils_undef.h>
213
214
#endif // TEAMCENTER_BASE_UTILS_SCOPED_PTR_HXX