Main Page
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
o
p
q
r
s
t
u
v
w
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Properties
_
a
d
e
f
l
m
o
p
s
t
u
v
Related Functions
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Package Documentation
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Modules
Pages
DataFormats
TrackingRecHit
interface
mayown_ptr.h
Go to the documentation of this file.
1
#ifndef CMSSW_mayown_ptr_H
2
#define CMSSW_mayown_ptr_H
3
4
#include <cassert>
5
#include <cstring>
6
7
// a smart pointer which may own
8
// can be implemented trivially with shared_ptr
9
// this is infinetely ligher
10
// assume alignment > 2....
11
12
template
<
typename
T,
int
N = sizeof(T*)>
13
class
mayown_ptr
{
14
private
:
15
T
const
*
p
=
nullptr
;
16
17
void
markOwn
() {
18
if
(
nullptr
==
p
)
19
return
;
20
unsigned
char
buff[
N
];
21
memcpy(buff, &
p
,
N
);
22
assert
((buff[
N
- 1] & 1) == 0);
23
++buff[
N
- 1];
24
memcpy(&
p
, buff,
N
);
25
}
26
27
public
:
28
bool
isOwn
()
const
{
29
unsigned
char
buff[
N
];
30
memcpy(buff, &
p
,
N
);
31
return
1 == (buff[
N
- 1] & 1);
32
}
33
34
private
:
35
T
const
*
pointer
()
const
{
36
unsigned
char
buff[
N
];
37
memcpy(buff, &
p
,
N
);
38
buff[
N
- 1] &= 0xFE;
39
assert
((buff[
N
- 1] & 1) == 0);
40
T
const
*
np
;
41
memcpy(&
np
, buff,
N
);
42
return
np
;
43
}
44
45
void
destroy
() {
46
if
(
isOwn
())
47
delete
const_cast<T*>(
pointer
());
48
}
49
50
public
:
51
explicit
mayown_ptr
(
T
* ip =
nullptr
) :
p
(ip) {
markOwn
(); }
52
explicit
mayown_ptr
(
T
const
& ip) :
p
(&ip) {}
53
~mayown_ptr
() {
destroy
(); }
54
mayown_ptr
(
mayown_ptr
&) =
delete
;
55
mayown_ptr
(
mayown_ptr
&& rh) :
p
(rh.
p
) { rh.p =
nullptr
; }
56
mayown_ptr
&
operator=
(
mayown_ptr
&) =
delete
;
57
mayown_ptr
&
operator=
(
mayown_ptr
&& rh) {
58
destroy
();
59
p
= rh.p;
60
rh.p =
nullptr
;
61
return
*
this
;
62
}
63
64
T
const
&
operator*
()
const
{
return
*
pointer
(); }
65
T
const
*
operator->
()
const
{
return
pointer
(); }
66
T
const
*
get
()
const
{
return
pointer
(); }
67
T
const
*
release
() {
68
auto
np
=
pointer
();
69
p
=
nullptr
;
70
return
np
;
71
}
72
void
reset
() {
73
destroy
();
74
p
=
nullptr
;
75
}
76
void
reset
(
T
* ip) {
77
destroy
();
78
p
= ip;
79
markOwn
();
80
}
81
void
reset
(
T
const
& ip) {
82
destroy
();
83
p
= &ip;
84
}
85
bool
empty
()
const
{
return
nullptr
==
p
; }
86
87
T
const
*
raw
()
const
{
return
p
; }
88
};
89
90
template
<
typename
T>
91
bool
operator==
(
mayown_ptr<T>
const
& rh,
mayown_ptr<T>
const
&
lh
) {
92
return
rh.
raw
() ==
lh
.raw();
93
}
94
template
<
typename
T>
95
bool
operator<
(
mayown_ptr<T>
const
& rh,
mayown_ptr<T>
const
&
lh
) {
96
return
rh.
raw
() <
lh
.raw();
97
}
98
99
#endif
mayown_ptr::raw
T const * raw() const
Definition:
mayown_ptr.h:87
mayown_ptr::pointer
T const * pointer() const
Definition:
mayown_ptr.h:35
mayown_ptr::p
T const * p
Definition:
mayown_ptr.h:15
operator<
bool operator<(mayown_ptr< T > const &rh, mayown_ptr< T > const &lh)
Definition:
mayown_ptr.h:95
np
int np
Definition:
AMPTWrapper.h:43
mayown_ptr::mayown_ptr
mayown_ptr(T *ip=nullptr)
Definition:
mayown_ptr.h:51
cms::cuda::assert
assert(be >=bs)
mayown_ptr
Definition:
mayown_ptr.h:13
mayown_ptr::reset
void reset(T *ip)
Definition:
mayown_ptr.h:76
mathSSE::lh
bool int lh
Definition:
SIMDVec.h:20
mayown_ptr::operator=
mayown_ptr & operator=(mayown_ptr &&rh)
Definition:
mayown_ptr.h:57
mayown_ptr::~mayown_ptr
~mayown_ptr()
Definition:
mayown_ptr.h:53
mayown_ptr::mayown_ptr
mayown_ptr(mayown_ptr &&rh)
Definition:
mayown_ptr.h:55
mayown_ptr::release
T const * release()
Definition:
mayown_ptr.h:67
N
#define N
Definition:
blowfish.cc:9
mayown_ptr::get
T const * get() const
Definition:
mayown_ptr.h:66
mayown_ptr::reset
void reset(T const &ip)
Definition:
mayown_ptr.h:81
mayown_ptr::isOwn
bool isOwn() const
Definition:
mayown_ptr.h:28
mayown_ptr::empty
bool empty() const
Definition:
mayown_ptr.h:85
operator==
bool operator==(mayown_ptr< T > const &rh, mayown_ptr< T > const &lh)
Definition:
mayown_ptr.h:91
mayown_ptr::markOwn
void markOwn()
Definition:
mayown_ptr.h:17
mayown_ptr::reset
void reset()
Definition:
mayown_ptr.h:72
mayown_ptr::destroy
void destroy()
Definition:
mayown_ptr.h:45
T
long double T
Definition:
Basic3DVectorLD.h:48
mayown_ptr::operator*
T const & operator*() const
Definition:
mayown_ptr.h:64
mayown_ptr::operator=
mayown_ptr & operator=(mayown_ptr &)=delete
mayown_ptr::operator->
T const * operator->() const
Definition:
mayown_ptr.h:65
mayown_ptr::mayown_ptr
mayown_ptr(T const &ip)
Definition:
mayown_ptr.h:52
Generated for CMSSW Reference Manual by
1.8.16