summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Property_T.h
blob: 284bac2ae8b8644e208cf49493382421d7b64565 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// -*- C++ -*-

/**
 *  @file Property_T.h
 *
 *  @author Pradeep Gore <pradeep@oomworks.com>
 */

#ifndef TAO_Notify_PROPERTY_T_H
#define TAO_Notify_PROPERTY_T_H

#include /**/ "ace/pre.h"

#include "orbsvcs/Notify/notify_serv_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "ace/SString.h"

#include "orbsvcs/CosNotificationC.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

class TAO_Notify_PropertySeq;

/**
 * @class TAO_Notify_PropertyBase_T
 *
 * @brief
 */
template <class TYPE>
class TAO_Notify_PropertyBase_T
{
public:
  /// Constructor
  TAO_Notify_PropertyBase_T (const char* name, const TYPE& initial);

  /// Constructor
  TAO_Notify_PropertyBase_T (const char* name);

  /// Copy Constructor
  TAO_Notify_PropertyBase_T (const TAO_Notify_PropertyBase_T &rhs);

  /// Destructor
  ~TAO_Notify_PropertyBase_T ();

  /// Equality comparison operator.
  bool operator== (const TYPE &rhs) const;

  /// Inequality comparison operator.
  bool operator!= (const TYPE &rhs) const;

  /// Populate the Property Sequence with this valid value.
  void get (CosNotification::PropertySeq& prop_seq);

  // assign a new value
  void assign (const TYPE& value);

  /// Return the value.
  const TYPE& value () const;

  /// Return the name
  const char * name () const;

  /// Is the current value valid
  CORBA::Boolean is_valid () const;

  /// Invalidate this property's value.
  void invalidate ();

protected:
  /// The Property name.
  const char* name_;

  /// The value
  TYPE value_;

  /// Is the value valid
  CORBA::Boolean valid_;
};


/*******************************************************************************/
/**
 * @class TAO_Notify_Property_T
 *
 * @brief
 */
template <class TYPE>
class TAO_Notify_Property_T : public TAO_Notify_PropertyBase_T<TYPE>
{
public:
  /// Constructor
  TAO_Notify_Property_T (const char* name, const TYPE& initial);

  /// Constructor
  TAO_Notify_Property_T (const char* name);

  /// Init this Property from the sequence.
  /// Returns 0 on success, -1 on error
  int set (const TAO_Notify_PropertySeq& property_seq);

  /// Init this Property from the CosNotification::PropertyValue
  /// Returns 0 on success, -1 on error
  int set (const CosNotification::PropertyValue &value);
};

/*******************************************************************************/
/**
 * @class TAO_Notify_StructProperty_T
 *
 * @brief
 */
template <class TYPE>
class TAO_Notify_StructProperty_T
{
public:
  /// Constructor
  TAO_Notify_StructProperty_T (const char* name, const TYPE& initial);

  /// Constructor
  TAO_Notify_StructProperty_T (const char* name);

  /// Init this Property from the sequence.
  /// Returns 0 on success, -1 on error
  int set (const TAO_Notify_PropertySeq& property_seq);

  /// Return the name
  const char * name () const;

  /// Return the value.
  const TYPE& value () const;

  /// Is the current value valid
  CORBA::Boolean is_valid () const;

protected:
  /// The Property name.
  const char* name_;

  /// The value
  TYPE value_;

  /// Is the value valid
  CORBA::Boolean valid_;
};

TAO_END_VERSIONED_NAMESPACE_DECL

#if defined (__ACE_INLINE__)
#include "orbsvcs/Notify/Property_T.inl"
#endif /* __ACE_INLINE__ */

#include "orbsvcs/Notify/Property_T.cpp"

#include /**/ "ace/post.h"
#endif /* TAO_Notify_PROPERTY_T_H */