17.3.10 TypeCodeクラスを使用して引数または属性の型を表す

このクラスは,IRとIDLコンパイラが引数または属性の型を表すために使用します。Requestオブジェクトの中では,引数の型を指定する場合に,AnyクラスとともにTypeCodeオブジェクトも使用します。

C++の場合,TypeCodeオブジェクトは,kindとパラメタリストプロパティを持っています。コードサンプル17-16にTypeCodeクラスの例(C++)を示します。

Javaの場合,TypeCodeオブジェクトは,kindとパラメタリストプロパティを持っており,TCKindクラスで定義した値のどれかで表されます。コードサンプル17-17にTypeCodeクラスの例(Java)を示します。

Javaの場合,このクラスにはコンストラクタはありません。ORB.get_primitive_tcメソッドか,またはORB.create_*_tcメソッドの一つを使用して,TypeCodeオブジェクトを作成してください。詳細については,マニュアル「Borland Enterprise Server VisiBroker プログラマーズリファレンス」の「ORB」の記述を参照してください。

表17-2に,TypeCodeオブジェクトの種類とパラメタを示します。

表17-2 TypeCodeの種類とパラメタ

種類パラメタリスト
tk_abstract_interfacerepository_id,interface_name
tk_aliasrepository_id,alias_name,TypeCode
tk_anyなし
tk_arraylength,TypeCode
tk_booleanなし
tk_charなし
tk_doubleなし
tk_enumrepository_id,enum-name,enum-id1,enum-id2,…enum-idn
tk_exceptrepository_id,exception_name,StructMembers
tk_fixeddigits,scale
tk_floatなし
tk_longなし
tk_longdoubleなし
tk_longlongなし
tk_nativeid,name
tk_nullなし
tk_objrefrepository_id,interface_id
tk_octetなし
tk_Principalなし
tk_sequenceTypeCode,maxlen
tk_shortなし
tk_stringmaxlen-integer
tk_structrepository_id,struct-name,{member1,TypeCode1},{membern,TypeCoden}
tk_TypeCodeなし
tk_ulongなし
tk_ulonglongなし
tk_unionrepository_id,union-name,switch TypeCode,{label-value1,member-name1,TypeCode1},{label-valuen,member-namen,TypeCoden}
tk_ushortなし
tk_valuerepository_id,value_name,boxType
tk_value_boxrepository_id,value_name,typeModifier,concreteBase,members
tk_voidなし
tk_wcharなし
tk_wstringなし
コードサンプル17-16 TypeCodeクラス(C++)

class _VISEXPORT CORBA_TypeCode {
  public:
     . . .
     // For all CORBA_TypeCode kinds
     CORBA::Boolean equal(CORBA_TypeCode_ptr tc) const;
     CORBA::Boolean equivalent(CORBA_TypeCode_ptr tc) const;
     CORBA_TypeCode_ptr get_compact_typecode() const;
     CORBA::TCKind kind() const // . . .
     // For tk_objref, tk_struct, tk_union,
           tk_enum, tk_alias and tk_except
     virtual const char* id() const; // raises(BadKind);
     virtual const char *name() const; // raises(BadKind);
     // For tk_struct, tk_union, tk_enum and tk_except
     virtual CORBA::ULong member_count() const;
           // raises((BadKind));
     virtual const char *member_name(
           CORBA::ULong index) const;
           // raises((BadKind, Bounds));
     // For tk_struct, tk_union and tk_except
     virtual CORBA_TypeCode_ptr member_type(
           CORBA::ULong index) const;
           // raises((BadKind, Bounds));
     // For tk_union
     virtual CORBA::Any_ptr member_label(
           CORBA::ULong index) const;
           // raises((BadKind, Bounds));
     virtual CORBA_TypeCode_ptr discriminator_type() const;
           // raises((BadKind));
     virtual CORBA::Long default_index() const;
           // raises((BadKind));
     // For tk_string, tk_sequence and tk_array
     virtual CORBA::ULong length() const; // raises(
           (BadKind));
     // For tk_sequence, tk_array and tk_alias
     virtual CORBA_TypeCode_ptr content_type() const;
           // raises((BadKind));
     // For tk_fixed
     virtual CORBA::UShort fixed_digits() const;
           // raises (BadKind)
     virtual CORBA::Short fixed_scale() const;
           // raises (BadKind)

      // for tk_value
     virtual CORBA::Visibility member_visibility(
           CORBA::ULong index)const;
           //raises(BadKind, Bounds);
     virtual CORBA::ValueModifier type_modifier() const;
           // raises(BadKind);
     virtual CORBA::TypeCode_ptr concrete_base_type() const;
           // raises(BadKind);
};

コードサンプル17-17 TypeCodeインタフェース(Java)

public abstract class TypeCode extends java.lang.Object
     implements org.omg.CORBA.portable.IDLEntity {
  public abstract boolean equal(org.omg.CORBA.TypeCode tc);
  public boolean equivalent(org.omg.CORBA.TypeCode tc);
  public abstract org.omg.CORBA.TCKind kind();
  public TypeCode get_compact_typecode();
  public abstract java.lang.String id()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public abstract java.lang.String name()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public abstract int member_count()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public abstract java.lang.String member_name(int index)
     throws org.omg.CORBA.TypeCodePackage.BadKind,
        org.omg.CORBA.TypeCodePackage.Bounds;
  public abstract org.omg.CORBA.TypeCode member_type(
                                                 int index)
     throws org.omg.CORBA.TypeCodePackage.BadKind,
        org.omg.CORBA.TypeCodePackage.Bounds;

  public abstract org.omg.CORBA.Any member_label(int index)
     throws org.omg.CORBA.TypeCodePackage.BadKind,
        org.omg.CORBA.TypeCodePackage.Bounds;
  public abstract org.omg.CORBA.TypeCode
                                    discriminator_type()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public abstract int default_index()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public abstract int length()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public abstract org.omg.CORBA.TypeCode content_type()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public short fixed_digits()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public short fixed_scale()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public short member_visibility(int index)
     throws org.omg.CORBA.TypeCodePackage.BadKind,
        org.omg.CORBA.Bounds;
  public short type_modifier()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
  public TypeCode concrete_base_type()
     throws org.omg.CORBA.TypeCodePackage.BadKind;
}