summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/IFR_Service/PrimitiveDef_i.cpp
blob: 31da5f88d11c7319d794f77a51bff4150e96f0e8 (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
/* -*- C++ -*- */
// $Id$

#include "Repository_i.h"
#include "PrimitiveDef_i.h"

ACE_RCSID(IFR_Service, PrimitiveDef_i, "$Id$")

TAO_PrimitiveDef_i::TAO_PrimitiveDef_i (
    TAO_Repository_i *repo,
    ACE_Configuration_Section_Key section_key
  )
  : TAO_IRObject_i (repo, section_key),
    TAO_IDLType_i (repo, section_key)
{
}

TAO_PrimitiveDef_i::~TAO_PrimitiveDef_i (void)
{
}

IR_DefinitionKind
TAO_PrimitiveDef_i::def_kind (CORBA::Environment &)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  return dk_Primitive;
}

void 
TAO_PrimitiveDef_i::destroy (CORBA::Environment &ACE_TRY_ENV)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  this->destroy_i (ACE_TRY_ENV);
}

void 
TAO_PrimitiveDef_i::destroy_i (CORBA::Environment &ACE_TRY_ENV)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  ACE_THROW (CORBA::BAD_INV_ORDER (2, CORBA::COMPLETED_NO));
}

CORBA::TypeCode_ptr 
TAO_PrimitiveDef_i::type (CORBA::Environment &ACE_TRY_ENV)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  TAO_IFR_READ_GUARD_RETURN (CORBA::TypeCode::_nil ());

  return this->type_i (ACE_TRY_ENV);
}

CORBA::TypeCode_ptr 
TAO_PrimitiveDef_i::type_i (CORBA::Environment &)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  u_int pkind = 0;
  this->repo_->config ()->get_integer_value (this->section_key_,
                                             "pkind",
                                             pkind);

  switch (ACE_static_cast (IR_PrimitiveKind, pkind))
  {
    case pk_null:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_null);
    case pk_void:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_void);
    case pk_short:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_short);
    case pk_long:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_long);
    case pk_ushort:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_ushort);
    case pk_ulong:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_ulong);
    case pk_float:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_float);
    case pk_double:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_double);
    case pk_boolean:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_boolean);
    case pk_char:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_char);
    case pk_octet:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_octet);
    case pk_any:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_any);
    case pk_TypeCode:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_TypeCode);
    case pk_Principal:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_Principal);
    case pk_string:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_string);
    case pk_objref:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_Object);
    case pk_longlong:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_longlong);
    case pk_ulonglong:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_ulonglong);
    case pk_longdouble:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_longdouble);
    case pk_wchar:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_wchar);
    case pk_wstring:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_wstring);
    case pk_value_base:
      // TODO - we haven't added this typecode constant yet.
    default:
      return CORBA::TypeCode::_duplicate (CORBA::_tc_null);
  }
}

IR_PrimitiveKind 
TAO_PrimitiveDef_i::kind (CORBA::Environment &ACE_TRY_ENV)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  TAO_IFR_READ_GUARD_RETURN (pk_null);

  return this->kind_i (ACE_TRY_ENV);
}

IR_PrimitiveKind 
TAO_PrimitiveDef_i::kind_i (CORBA::Environment &)
    ACE_THROW_SPEC ((CORBA::SystemException))
{
  u_int pkind = 0;
  this->repo_->config ()->get_integer_value (this->section_key_,
                                             "pkind",
                                             pkind);

  return ACE_static_cast (IR_PrimitiveKind, pkind);
}