// $Id: test.idl,v 1.1 2003/08/27 22:43:35 vz Exp

module Test
{
  const short BOUND = 10;
  const string FailStr = "A string longer then Test::BOUND";

  typedef string<BOUND> bounded_string;

  typedef sequence<bounded_string> seq_bd_str;
  typedef sequence<string<BOUND> > seq_bds_str;

  typedef bounded_string arr_bd_str[1];
  typedef string<BOUND> arr_bds_str[1];

  struct sct {
    string a;
    bounded_string b;
    bounded_string c;
  };

  enum string_field {
    PLAIN,
    BOUNDED,
    TYPEDEFED
  };

  union unn switch (string_field) {
  case BOUNDED:
    bounded_string b;
  case TYPEDEFED:
    bounded_string c;
  default:
    string a;
  };

  exception exc {
    string a;
    bounded_string b;
    bounded_string c;
  };

  valuetype val_bd_str bounded_string;
  valuetype val_bds_str bounded_string;
  valuetype val_arr_bd_str arr_bds_str;

  valuetype vtp {
    public string a;
    public bounded_string b;
    public bounded_string c;
  };

  interface A
  {
    enum FailOn {
      ARG1,
      ARG2,
      ARG3,
      RETN
    };

    bounded_string method (in FailOn where,
                           in bounded_string arg1,
                           out bounded_string arg2,
                           inout bounded_string arg3);
    bounded_string method_s (in FailOn where,
                            in bounded_string arg1,
                            out bounded_string arg2,
                            inout bounded_string arg3);
    // Operations on strings.

    seq_bd_str seq_method (in FailOn where,
                           in seq_bd_str arg1,
                           out seq_bd_str arg2,
                           inout seq_bd_str arg3);
    seq_bds_str seq_method_s (in FailOn where,
                              in seq_bds_str arg1,
                              out seq_bds_str arg2,
                              inout seq_bds_str arg3);
    // Operations on sequences.

    arr_bd_str arr_method (in FailOn where,
                           in arr_bd_str arg1,
                           out arr_bd_str arg2,
                           inout arr_bd_str arg3);
    arr_bds_str arr_method_s (in FailOn where,
                              in arr_bds_str arg1,
                              out arr_bds_str arg2,
                              inout arr_bds_str arg3);
    // Operations on arrays.

    sct sct_method (in FailOn where,
                    in sct arg1,
                    out sct arg2,
                    inout sct arg3);
    // Operation on structs.

    unn unn_method (in FailOn where,
                    in unn arg1,
                    out unn arg2,
                    inout unn arg3);
    // Operation on unions.

    val_bd_str vbx_method (in FailOn where,
                           in val_bd_str arg1,
                           out val_bd_str arg2,
                           inout val_bd_str arg3);
    val_bds_str vbx_method_s (in FailOn where,
                              in val_bds_str arg1,
                              out val_bds_str arg2,
                              inout val_bds_str arg3);
    // Operations on value boxes.

    vtp vtp_method (in FailOn where,
                    in vtp arg1,
                    out vtp arg2,
                    inout vtp arg3);
    // Operation on value types.

    void exc_method (in string_field f)
      raises (exc);
    // Operation that throws.

    oneway void shutdown ();
    // shutdown the ORB
  };
};
