/*
 * A simple interface to test the RPC server.
 *
 * Copyright (C) Google 2007 (Dan Hipschman)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

typedef struct tag_vector
{
  int x;
  int y;
  int z;
} vector_t;

[
  uuid(00000000-4114-0704-2301-000000000000),
  implicit_handle(handle_t IServer_IfHandle)
]
interface IServer
{
  typedef struct
  {
    int *pi;
    int **ppi;
    int ***pppi;
  } pints_t;

  typedef struct
  {
    char *pc;
    short *ps;
    long *pl;
    float *pf;
    double *pd;
  } ptypes_t;

  int int_return(void);
  int square(int x);
  int sum(int x, int y);
  void square_out(int x, [out] int *y);
  void square_ref([in, out] int *x);
  int str_length([string] const char *s);
  int dot_self(vector_t *v);
  double square_half(double x, [out] double *y);
  float square_half_float(float x, [out] float *y);
  long square_half_long(long x, [out] long *y);
  int sum_fixed_array(int a[5]);
  int pints_sum(pints_t *pints);
  double ptypes_sum(ptypes_t *ptypes);
  void stop(void);
}
