IDL Complex Type
union

The CORBA union indicates (TBD) .....  . 

It maps to J#'s union type.

// CORBA IDL
union Nums switch (char)
{
   case 'f': float f;
   case 'l': long l;
   default: short s;
};
e.g.
Nums
NumsHelper
NumsHolder
// J# 
package demo.unions;

/**
 * Union definition : Nums
 * 
 * @author TomORB J# Native Compiler
 */
public final class Nums implements org.omg.CORBA.portable.IDLEntity
{
   /**
    * Union member _d
    */
   protected char __d;

   /**
    * Union member f
    */
   protected float _f;

   /**
    * Union member l
    */
   protected int _l;

   /**
    * Union member s
    */
   protected short _s;

   /**
    * Default constructor
    */
   public Nums()
   {
      __d = 1;
   }

   /**
    * Get discriminator value
   */
   public char discriminator()
   {
      return __d;
   }

   /**
    * Set f value
    */
   public void f(float value)
   {
      __d = (char)('f');
      _f = value;
   }

   /**
    * Get f value
    */
   public float f()
   {
      return _f;
   }

   /**
     * Set l value
     */
   public void l(int value)
   {
      __d = (char)('l');
      _l = value;
   }

   /**
    * Get l value
    */
   public int l()
   {
      return _l;
   }

	/**
	 * Set s value
	 */
	public void s(short value)
	{
		__d = 1;
		_s = value;
	}

   /**
    * Set s value
    */
   public void s(char dvalue, short value)
   {
      __d = dvalue;
      _s = value;
   }

   /**
    * Get s value
    */
   public short s()
   {
      return _s;
   }

}

package demo.unions;

/** 
 * Helper class for : Nums
 *  
 * @author TomORB J# Native Compiler
 */ 
public class NumsHelper
{
   /**
    * Insert Nums into an any
    * @param a an any
    * @param t Nums value
    */
   public static void insert(org.omg.CORBA.Any a, demo.unions.Nums t)
   {
      a.insert_Streamable(new demo.unions.NumsHolder(t));
   }

   /**
    * Extract Nums from an any
    * @param a an any
    * @return the extracted Nums value
    */
   public static demo.unions.Nums extract(org.omg.CORBA.Any a)
   {
      if (!a.type().equal(type()))
         throw new org.omg.CORBA.MARSHAL();
      return read(a.create_input_stream());
   }

   //
   // Internal TypeCode value
   //
   private static org.omg.CORBA.TypeCode _tc = null;
   private static boolean _working = false;

   /**
    * Return the Nums TypeCode
    * @return a TypeCode
    */
   public static org.omg.CORBA.TypeCode type()
   {
      if (_tc == null) {
         synchronized(org.omg.CORBA.TypeCode.class) {
            if (_tc != null)
               return _tc;
            if (_working)
               return org.omg.CORBA.ORB.init().create_recursive_tc(id());
            _working = true;
            org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
            org.omg.CORBA.UnionMember []_members = new org.omg.CORBA.UnionMember[3];
            org.omg.CORBA.Any any;

            any = orb.create_any();
            any.insert_char((char)('f'));
            _members[0] = new org.omg.CORBA.UnionMember();
            _members[0].name = "f";
            _members[0].label = any;
            _members[0].type = orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_float);
            any = orb.create_any();
            any.insert_char((char)('l'));
            _members[1] = new org.omg.CORBA.UnionMember();
            _members[1].name = "l";
            _members[1].label = any;
            _members[1].type = orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_long);
            any = orb.create_any();
            any.insert_octet((byte)0);
            _members[2] = new org.omg.CORBA.UnionMember();
            _members[2].name = "s";
            _members[2].label = any;
            _members[2].type = orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_short);
            _tc = orb.create_union_tc(id(),"Nums",orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_char),_members);
            _working = false;
         }      
      }
      return _tc;
   }

   /**
    * Return the Nums IDL ID
    * @return an ID
    */
   public static java.lang.String id()
   {
      return _id;
   }

   private final static java.lang.String _id = "IDL:demo/unions/Nums:1.0";

   /**
    * Read Nums from a marshalled stream
    * @param istream the input stream
    * @return the readed Nums value
    */
   public static demo.unions.Nums read(org.omg.CORBA.portable.InputStream istream)
   {
      demo.unions.Nums new_one = new demo.unions.Nums();

      new_one.__d = istream.read_char();
      if (new_one.__d == (char)'f')
      {
         new_one._f = istream.read_float();
      }
      else
      if (new_one.__d == (char)'l')
      {
         new_one._l = istream.read_long();
      }
      else
      {
         new_one._s = istream.read_short();
      }
      return new_one;
   }

   /**
    * Write Nums into a marshalled stream
    * @param ostream the output stream
    * @param value Nums value
    */
   public static void write(org.omg.CORBA.portable.OutputStream ostream, 
                            demo.unions.Nums value)
   {
      ostream.write_char(value.__d);
      if (value.__d ==(char) 'f')
      {
         ostream.write_float(value._f);
      }
      else
      if (value.__d ==(char) 'l')
      {
         ostream.write_long(value._l);
      }
      else
      {
         ostream.write_short(value._s);
      }
   }
}

package demo.unions;

/**
 * Holder class for : Nums
 * 
 * @author TomORB J# Native Compiler
 */
final public class NumsHolder
      implements org.omg.CORBA.portable.Streamable
{
   /**
    * Internal Nums value
    */
   public demo.unions.Nums value;

   /**
    * Default constructor
    */
   public NumsHolder()
   { }

   /**
    * Constructor with value initialisation
    * @param initial the initial value
    */
   public NumsHolder(demo.unions.Nums initial)
   {
      value = initial;
   }

   /**
    * Read Nums from a marshalled stream
    * @param istream the input stream
    */
   public void _read(org.omg.CORBA.portable.InputStream istream)
   {
      value = NumsHelper.read(istream);
   }

   /**
    * Write Nums into a marshalled stream
    * @param ostream the output stream
    */
   public void _write(org.omg.CORBA.portable.OutputStream ostream)
   {
      NumsHelper.write(ostream,value);
   }

   /**
    * Return the Nums TypeCode
    * @return a TypeCode
    */
   public org.omg.CORBA.TypeCode _type()
   {
      return NumsHelper.type();
   }

}