summaryrefslogtreecommitdiff
path: root/TAO/tao/typecode.i
blob: 2a7481eaca918ac7945de4d178cbb4b76f3bc807 (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
ACE_INLINE CORBA::TCKind
CORBA_TypeCode::kind (CORBA::Environment &env) const
{
  env.clear ();
  return kind_;
}

// Returns true if the two typecodes are identical
ACE_INLINE CORBA::Boolean 
CORBA_TypeCode::equal (const CORBA::TypeCode_ptr tc,
                       CORBA::Environment &env) const
{
  if (this->kind_ != tc->kind (env))
    // simple case
    return CORBA::B_FALSE;
  else
    return this->private_equal (tc, env);
}

// just fetch the 'kind' field out of the typecode
ACE_INLINE void *
CORBA_TypeCode::operator new (size_t s)
{ 
  return ::operator new (s); 
}

ACE_INLINE CORBA::TypeCode_ptr
CORBA_TypeCode::_duplicate (CORBA::TypeCode_ptr tc)
{
  if (tc)
    tc->AddRef ();
  return tc;
}

// returns the Repository ID
ACE_INLINE TAO_CONST CORBA::String
CORBA_TypeCode::id (CORBA::Environment &env) const
{
  env.clear ();

  // if already precomputed
  if (private_state_->tc_id_known_)
    return private_state_->tc_id_;
  else
    return private_id (env);
}

// returns the string name
ACE_INLINE TAO_CONST CORBA::String
CORBA_TypeCode::name (CORBA::Environment &env) const
{
  env.clear ();

  // if already precomputed
  if (private_state_->tc_name_known_)
    return private_state_->tc_name_;
  else
    return private_name (env);
}

// Return the number of members defined by this typecode
//
// Applicable to struct, union, enum, alias, and except
// For the rest of the cases, raises the BadKind exception.

ACE_INLINE CORBA::ULong
CORBA_TypeCode::member_count (CORBA::Environment &env) const
{
  env.clear ();

  // if already precomputed
  if (private_state_->tc_member_count_known_)
    return private_state_->tc_member_count_;
  else
    return private_member_count (env);
}

// calculate size of the typecode
ACE_INLINE size_t
CORBA_TypeCode::size (CORBA::Environment &env)
{
  if (private_state_->tc_size_known_)
    return private_state_->tc_size_;
  else
    return private_size (env);
}

// calculate alignment requirements of the typecode
ACE_INLINE size_t
CORBA_TypeCode::alignment (CORBA::Environment &env)
{
  if (private_state_->tc_alignment_known_)
    return private_state_->tc_alignment_;
  else
    return private_alignment (env);
}

ACE_INLINE void *
CORBA_TypeCode::operator new (size_t, void *p)
{ 
  return p; 
}