Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JReference.hh
Go to the documentation of this file.
1#ifndef __JLANG__JREFERENCE__
2#define __JLANG__JREFERENCE__
3
4#include "JLang/JPointer.hh"
5#include "JLang/JException.hh"
6
7
8/**
9 * \author mdejong
10 */
11
12namespace JLANG {}
13namespace JPP { using namespace JLANG; }
14
15namespace JLANG {
16
17 /**
18 * The template JReference class can be used to reference an object.
19 */
20 template<class JClass_t>
21 class JReference {
22 public:
23 /**
24 * Constructor
25 *
26 * \param object object
27 */
28 JReference(JClass_t& object) :
29 __object(object)
30 {}
31
32
33 /**
34 * Get reference to object.
35 *
36 * \return reference to object
37 */
38 const JClass_t& getReference() const
39 {
40 return __object;
41 }
42
43
44 /**
45 * Get reference to object.
46 *
47 * \return reference to object
48 */
49 JClass_t& getReference()
50 {
51 return __object;
52 }
53
54
55 /**
56 * Check validity of reference.
57 *
58 * \return true
59 */
60 bool is_valid() const
61 {
62 return true;
63 }
64
65
66 /**
67 * Smart pointer.
68 *
69 * \return pointer to object
70 */
71 const JClass_t* operator->() const
72 {
73 return &__object;
74 }
75
76
77 /**
78 * Smart pointer.
79 *
80 * \return pointer to object
81 */
82 JClass_t* operator->()
83 {
84 return &__object;
85 }
86
87
88 /**
89 * Dereference operator.
90 *
91 * \return reference to object
92 */
93 const JClass_t& operator*() const
94 {
95 return __object;
96 }
97
98
99 /**
100 * Dereference operator.
101 *
102 * \return reference to object
103 */
104 JClass_t& operator*()
105 {
106 return __object;
107 }
108
109 protected:
110 JClass_t& __object;
111 };
112
113
114 /**
115 * Template specialisation of JReference class for const data type.
116 */
117 template<class JClass_t>
118 class JReference<const JClass_t>
119 {
120 public:
121 /**
122 * Constructor
123 *
124 * \param object object
125 */
126 JReference(const JClass_t& object) :
127 __object(object)
128 {}
129
130
131 /**
132 * Constructor
133 *
134 * \param reference reference
135 */
137 __object(*reference)
138 {}
139
140
141 /**
142 * Get reference to object.
143 *
144 * \return reference to object
145 */
146 const JClass_t& getReference() const
147 {
148 return __object;
149 }
150
151
152 /**
153 * Check validity of reference.
154 *
155 * \return true
156 */
157 bool is_valid() const
158 {
159 return true;
160 }
161
162
163 /**
164 * Smart pointer.
165 *
166 * \return pointer to object
167 */
168 const JClass_t* operator->() const
169 {
170 return &__object;
171 }
172
173
174 /**
175 * Dereference operator.
176 *
177 * \return reference to object
178 */
179 const JClass_t& operator*() const
180 {
181 return __object;
182 }
183
184 protected:
185 const JClass_t& __object;
186 };
187
188
189 /**
190 * Template specialisation of JReference class for pointer type.
191 */
192 template<class JClass_t>
193 class JReference<JClass_t* const>
194 {
195 public:
196 /**
197 * Constructor
198 *
199 * \param pointer pointer
200 */
201 JReference(JClass_t* const& pointer) :
202 __pointer(pointer)
203 {}
204
205
206 /**
207 * Constructor
208 *
209 * \param pointer pointer object
210 */
212 __pointer(pointer.getReference())
213 {}
214
215
216 /**
217 * Get reference to object.
218 *
219 * \return reference to object
220 */
221 const JClass_t& getReference() const
222 {
223 return *__pointer;
224 }
225
226
227 /**
228 * Check validity of reference.
229 *
230 * \return true if pointer not null; else false
231 */
232 bool is_valid() const
233 {
234 return (__pointer != NULL);
235 }
236
237
238 /**
239 * Smart pointer.
240 *
241 * \return pointer to object
242 */
243 const JClass_t* operator->() const
244 {
245 if (__pointer == NULL)
246 THROW(JNullPointerException, "JReference::operator->()");
247 else
248 return __pointer;
249 }
250
251
252 /**
253 * Dereference operator.
254 *
255 * \return reference to object
256 */
257 const JClass_t& operator*() const
258 {
259 if (__pointer == NULL)
260 THROW(JNullPointerException, "JReference::operator*()");
261 else
262 return *__pointer;
263 }
264
265 protected:
266 JClass_t* const& __pointer;
267 };
268}
269
270#endif
Exceptions.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Exception for null pointer operation.
Template implementation of class that holds pointer to object(s).
Definition JPointer.hh:24
const JClass_t & getReference() const
Get reference to object.
const JClass_t * operator->() const
Smart pointer.
const JClass_t & operator*() const
Dereference operator.
bool is_valid() const
Check validity of reference.
JReference(JClass_t *const &pointer)
Constructor.
JReference(const JPointer< JClass_t > &pointer)
Constructor.
const JClass_t & operator*() const
Dereference operator.
bool is_valid() const
Check validity of reference.
JReference(const JReference< JClass_t > &reference)
Constructor.
const JClass_t * operator->() const
Smart pointer.
JReference(const JClass_t &object)
Constructor.
const JClass_t & getReference() const
Get reference to object.
The template JReference class can be used to reference an object.
Definition JReference.hh:21
const JClass_t * operator->() const
Smart pointer.
Definition JReference.hh:71
JReference(JClass_t &object)
Constructor.
Definition JReference.hh:28
bool is_valid() const
Check validity of reference.
Definition JReference.hh:60
JClass_t * operator->()
Smart pointer.
Definition JReference.hh:82
JClass_t & operator*()
Dereference operator.
JClass_t & getReference()
Get reference to object.
Definition JReference.hh:49
const JClass_t & operator*() const
Dereference operator.
Definition JReference.hh:93
const JClass_t & getReference() const
Get reference to object.
Definition JReference.hh:38
JClass_t & __object
Auxiliary classes and methods for language specific functionality.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).