interface I {
  struct SFixed {
    long member1;
    octet member2;
  };

  SFixed doSFixed(in SFixed inparam, out SFixed outparam, inout SFixed inoutparam);

  struct SVar {
    string member1;
    long member2;
  };
  SVar doSVar(in SVar inparam, out SVar outparam, inout SVar inoutparam);

  union UFixed switch(long) {
  case 'a': long x;
  case 'b': short y;
  default: float z;
  };
  UFixed doUFixed(in UFixed inparam, out UFixed outparam, inout UFixed inoutparam);

  union UVar switch(long) {
  case 'a': long x;
  case 'b': string y;
  default: float z;
  };
  UVar doUVar(in UVar inparam, out UVar outparam, inout UVar inoutparam);

  typedef sequence<string> Seq;
  Seq doSeq(in Seq inparam, out Seq outparam, inout Seq inoutparam);

  typedef long AFixed[2][3];
  AFixed doAFixed(in AFixed inparam,
		  out AFixed outparam,
		  inout AFixed inoutparam);

  typedef string AVar[2][3];
  AVar doAVar(in AVar inparam,
	      out AVar outparam,
	      inout AVar inoutparam);

};
