Jpp  debug
the software that should make you happy
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 
12 namespace JLANG {}
13 namespace JPP { using namespace JLANG; }
14 
15 namespace 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  */
136  JReference(const JReference<JClass_t>& reference) :
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  */
211  JReference(const JPointer<JClass_t>& pointer) :
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.
Definition: JException.hh:712
Exception for null pointer operation.
Definition: JException.hh:234
Template implementation of class that holds pointer to object(s).
Definition: JPointer.hh:24
const JClass_t & operator*() const
Dereference operator.
Definition: JReference.hh:257
bool is_valid() const
Check validity of reference.
Definition: JReference.hh:232
JReference(JClass_t *const &pointer)
Constructor.
Definition: JReference.hh:201
const JClass_t * operator->() const
Smart pointer.
Definition: JReference.hh:243
JReference(const JPointer< JClass_t > &pointer)
Constructor.
Definition: JReference.hh:211
const JClass_t & getReference() const
Get reference to object.
Definition: JReference.hh:221
const JClass_t & operator*() const
Dereference operator.
Definition: JReference.hh:179
bool is_valid() const
Check validity of reference.
Definition: JReference.hh:157
const JClass_t * operator->() const
Smart pointer.
Definition: JReference.hh:168
JReference(const JReference< JClass_t > &reference)
Constructor.
Definition: JReference.hh:136
JReference(const JClass_t &object)
Constructor.
Definition: JReference.hh:126
const JClass_t & getReference() const
Get reference to object.
Definition: JReference.hh:146
The template JReference class can be used to reference an object.
Definition: JReference.hh:21
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.
Definition: JReference.hh:104
const JClass_t * operator->() const
Smart pointer.
Definition: JReference.hh:71
JClass_t & getReference()
Get reference to object.
Definition: JReference.hh:49
JClass_t & __object
Definition: JReference.hh:110
const JClass_t & getReference() const
Get reference to object.
Definition: JReference.hh:38
const JClass_t & operator*() const
Dereference operator.
Definition: JReference.hh:93
Auxiliary classes and methods for language specific functionality.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).