blob: ff5d976389306be8ed7d8d3caad5bb65e24f4bd6 (
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
|
// -*- C++ -*-
// ===================================================================
/**
* @file PICurrent.h
*
* $Id$
*
* @author Ossama Othman <ossama@dre.vanderbilt.edu>
*/
// ===================================================================
#ifndef TAO_PI_CURRENT_H
#define TAO_PI_CURRENT_H
#include /**/ "ace/pre.h"
#include "tao/PI/pi_export.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "tao/orbconf.h"
#if TAO_HAS_INTERCEPTORS == 1
#include "tao/PI/PI_includeC.h"
#include "tao/LocalObject.h"
#include "ace/Array_Base.h"
#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable:4250)
#endif /* _MSC_VER */
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
/// Forward declarations.
class TAO_ORB_Core;
namespace TAO
{
class PICurrent_Impl;
/**
* @class PICurrent
*
* @brief Implementation of the PortableInterceptor::Current
* interface.
*
* PortableInterceptor::Current is useful for passing data between
* request interceptors, in addition to passing data from an
* interceptor to the calling thread.
*/
class TAO_PI_Export PICurrent
: public virtual PortableInterceptor::Current,
public virtual ::CORBA::LocalObject
{
public:
/// Constructor.
PICurrent (TAO_ORB_Core &orb_core);
/**
* @name PortableInterceptor::Current Methods
*
* These are methods exposed by the PortableInterceptor::Current
* interface.
*/
//@{
/// Retrieve information stored in the slot table at the given
/// SlotId.
virtual CORBA::Any *get_slot (PortableInterceptor::SlotId id);
/// Set information in the slot table at the given SlotId.
virtual void set_slot (PortableInterceptor::SlotId identifier,
const CORBA::Any & data);
//@}
virtual CORBA::ORB_ptr _get_orb (void);
/// Number of slots allocated in the slot table.
PortableInterceptor::SlotId slot_count (void) const;
/// Retrieve the PICurrent implementation from TSS, i.e. the thread
/// scope current (TSC).
PICurrent_Impl * tsc (void);
/// Verify the validity of the given SlotId.
void check_validity (const PortableInterceptor::SlotId &identifier);
/// Initialize the PICurrent object.
void initialize (PortableInterceptor::SlotId sc);
protected:
/// Destructor
/**
* Protected destructor to enforce the fact this class is reference
* counted, and should not be destroyed using delete() by anything
* other than the reference counting mechanism.
*/
virtual ~PICurrent (void);
private:
/// Prevent copying through the copy constructor and the assignment
/// operator.
//@{
PICurrent (const PICurrent &);
void operator= (const PICurrent &);
//@}
private:
/// Reference to the orb core.
TAO_ORB_Core &orb_core_;
/// TSS slot assigned to PICurrent_Impl objects in the OrbCore.
/// Allocated by the orb_core_.add_tss_cleanup_func() when our
/// initialize() method is called.
size_t tss_slot_;
/// The number of allocated PICurrent slots end user wants. (0 is
/// uninitialized or PICurrent is not used as no data is to be stored).
PortableInterceptor::SlotId slot_count_;
};
}
TAO_END_VERSIONED_NAMESPACE_DECL
#if defined (__ACE_INLINE__)
# include "tao/PI/PICurrent.inl"
#endif /* __ACE_INLINE__ */
#if defined(_MSC_VER)
#pragma warning(pop)
#endif /* _MSC_VER */
#endif /* TAO_HAS_INTERCEPTORS == 1 */
#include /**/ "ace/post.h"
#endif /* TAO_PI_CURRENT_H */
|