Squid Web Cache
master
Loading...
Searching...
No Matches
syntheticoperators.cc
Go to the documentation of this file.
1
/*
2
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3
*
4
* Squid software is distributed under GPLv2+ license and includes
5
* contributions from numerous individuals and organizations.
6
* Please see the COPYING and CONTRIBUTORS files for details.
7
*/
8
9
#include "
squid.h
"
10
#include "
mem_node.h
"
11
#include "
stmem.h
"
12
13
#include <iostream>
14
15
class
HasExplicit
16
{
17
public
:
18
HasExplicit
();
19
~HasExplicit
();
20
HasExplicit
(
HasExplicit
const
&);
21
HasExplicit
&
operator=
(
HasExplicit
const
&);
22
static
int
const
&
Instances
();
23
static
int
const
&
Assignments
();
24
static
void
Assignments
(
int
const
&);
25
private
:
26
static
void
AddInstance
();
27
static
void
RemoveInstance
();
28
static
void
Assignment
();
29
static
int
Instances_
;
30
static
int
Assignments_
;
31
};
32
33
int
HasExplicit::Instances_
(0);
34
int
HasExplicit::Assignments_
(0);
35
36
HasExplicit::HasExplicit
()
37
{
38
AddInstance
();
39
}
40
41
HasExplicit::~HasExplicit
()
42
{
43
RemoveInstance
();
44
}
45
46
HasExplicit::HasExplicit
(
HasExplicit
const
&)
47
{
48
AddInstance
();
49
}
50
51
HasExplicit
&
52
HasExplicit::operator=
(
HasExplicit
const
&)
53
{
54
Assignment
();
55
return
*
this
;
56
}
57
58
void
59
HasExplicit::AddInstance
()
60
{
61
++
Instances_
;
62
}
63
64
void
65
HasExplicit::RemoveInstance
()
66
{
67
--
Instances_
;
68
}
69
70
void
71
HasExplicit::Assignment
()
72
{
73
++
Assignments_
;
74
}
75
76
int
const
&
77
HasExplicit::Instances
()
78
{
79
return
Instances_
;
80
}
81
82
int
const
&
83
HasExplicit::Assignments
()
84
{
85
return
Assignments_
;
86
}
87
88
void
89
HasExplicit::Assignments
(
int
const
&newValue)
90
{
91
Assignments_
= newValue;
92
}
93
94
static
void
95
CheckHasExplicitWorks
()
96
{
97
assert
(
HasExplicit::Instances
() == 0);
98
HasExplicit
*
one
=
new
HasExplicit
;
99
assert
(
HasExplicit::Instances
() == 1);
100
HasExplicit
*
two
=
new
HasExplicit
;
101
assert
(
HasExplicit::Instances
() == 2);
102
*
two
= *
one
;
103
assert
(
HasExplicit::Instances
() == 2);
104
assert
(
HasExplicit::Assignments
() == 1);
105
*
two
= *
one
;
106
assert
(
HasExplicit::Instances
() == 2);
107
assert
(
HasExplicit::Assignments
() == 2);
108
HasExplicit
*
three
=
new
HasExplicit
(*
two
);
109
assert
(
HasExplicit::Instances
() == 3);
110
delete
three
;
111
assert
(
HasExplicit::Instances
() == 2);
112
delete
one
;
113
assert
(
HasExplicit::Instances
() == 1);
114
delete
two
;
115
assert
(
HasExplicit::Instances
() == 0);
116
HasExplicit::Assignments
(0);
117
assert
(
HasExplicit::Assignments
() == 0);
118
}
119
120
class
SyntheticOwnsExplicit
121
{
122
public
:
123
HasExplicit
aMember
;
124
};
125
126
static
void
127
CheckSyntheticWorks
()
128
{
129
assert
(
HasExplicit::Instances
() == 0);
130
assert
(
HasExplicit::Assignments
() == 0);
131
SyntheticOwnsExplicit
*
one
=
new
SyntheticOwnsExplicit
;
132
assert
(
HasExplicit::Instances
() == 1);
133
SyntheticOwnsExplicit
*
two
=
new
SyntheticOwnsExplicit
;
134
assert
(
HasExplicit::Instances
() == 2);
135
*
two
= *
one
;
136
assert
(
HasExplicit::Instances
() == 2);
137
assert
(
HasExplicit::Assignments
() == 1);
138
*
two
= *
one
;
139
assert
(
HasExplicit::Instances
() == 2);
140
assert
(
HasExplicit::Assignments
() == 2);
141
SyntheticOwnsExplicit
*
three
=
new
SyntheticOwnsExplicit
(*
two
);
142
assert
(
HasExplicit::Instances
() == 3);
143
delete
three
;
144
assert
(
HasExplicit::Instances
() == 2);
145
delete
one
;
146
assert
(
HasExplicit::Instances
() == 1);
147
delete
two
;
148
assert
(
HasExplicit::Instances
() == 0);
149
HasExplicit::Assignments
(0);
150
assert
(
HasExplicit::Assignments
() == 0);
151
}
152
153
int
154
main
(
int
,
char
*[])
155
{
156
CheckHasExplicitWorks
();
157
CheckSyntheticWorks
();
158
return
EXIT_SUCCESS;
159
}
160
assert
#define assert(EX)
Definition
assert.h:17
HasExplicit
Definition
syntheticoperators.cc:16
HasExplicit::Instances
static int const & Instances()
Definition
syntheticoperators.cc:77
HasExplicit::Assignment
static void Assignment()
Definition
syntheticoperators.cc:71
HasExplicit::HasExplicit
HasExplicit()
Definition
syntheticoperators.cc:36
HasExplicit::operator=
HasExplicit & operator=(HasExplicit const &)
Definition
syntheticoperators.cc:52
HasExplicit::AddInstance
static void AddInstance()
Definition
syntheticoperators.cc:59
HasExplicit::Assignments_
static int Assignments_
Definition
syntheticoperators.cc:30
HasExplicit::Instances_
static int Instances_
Definition
syntheticoperators.cc:29
HasExplicit::Assignments
static int const & Assignments()
Definition
syntheticoperators.cc:83
HasExplicit::~HasExplicit
~HasExplicit()
Definition
syntheticoperators.cc:41
HasExplicit::RemoveInstance
static void RemoveInstance()
Definition
syntheticoperators.cc:65
SyntheticOwnsExplicit
Definition
syntheticoperators.cc:121
SyntheticOwnsExplicit::aMember
HasExplicit aMember
Definition
syntheticoperators.cc:123
main
int main()
Definition
kerberos_ldap_group.cc:492
mem_node.h
squid.h
stmem.h
CheckSyntheticWorks
static void CheckSyntheticWorks()
Definition
syntheticoperators.cc:127
CheckHasExplicitWorks
static void CheckHasExplicitWorks()
Definition
syntheticoperators.cc:95
TestEnum::three
@ three
TestEnum::two
@ two
TestEnum::one
@ one
squid
test-suite
syntheticoperators.cc
Generated by
1.9.8