//This file is automatically generated. DO NOT EDIT!
using System;
using RobotRaconteur;
using System.Collections.Generic;

#pragma warning disable 0108

namespace com.robotraconteur.testing.TestService3
{
public class teststruct3
{
    public testpod1 s1;
    public testpod1[] s2;
    public testpod1[] s3;
    public testpod1[] s4;
    public PodMultiDimArray s5;
    public PodMultiDimArray s6;
    public List<testpod1> s7;
    public List<testpod1[]> s8;
    public List<PodMultiDimArray> s9;
    public object s10;
    public object s11;
    public object s12;
    public object s13;
    public object s14;
    public object s15;
    public transform t1;
    public transform[] t2;
    public NamedMultiDimArray t3;
    public object t4;
    public object t5;
    public List<transform> t6;
    public List<transform[]> t7;
    public List<NamedMultiDimArray> t8;
    public object t9;
    public object t10;
    public object t11;
}

[NamedArrayElementTypeAndCount(typeof(double), 3)]
public struct vector3
{
    public double x;
    public double y;
    public double z;
    public double[] GetNumericArray()
    {
    var a=new ArraySegment<double>(new double[3]);
    GetNumericArray(ref a);
    return a.Array;
    }
    public void GetNumericArray(ref ArraySegment<double> rr_a)
    {
    if(rr_a.Count < 3) throw new ArgumentException("ArraySegment invalid length");
    rr_a.Array[rr_a.Offset + 0] = x;
    rr_a.Array[rr_a.Offset + 1] = y;
    rr_a.Array[rr_a.Offset + 2] = z;
    }
    public void AssignFromNumericArray(ref ArraySegment<double> rr_a)
    {
    if(rr_a.Count < 3) throw new ArgumentException("ArraySegment invalid length");
    x = rr_a.Array[rr_a.Offset + 0];
    y = rr_a.Array[rr_a.Offset + 1];
    z = rr_a.Array[rr_a.Offset + 2];
    }
}

[NamedArrayElementTypeAndCount(typeof(double), 4)]
public struct quaternion
{
    public double q0;
    public double q1;
    public double q2;
    public double q3;
    public double[] GetNumericArray()
    {
    var a=new ArraySegment<double>(new double[4]);
    GetNumericArray(ref a);
    return a.Array;
    }
    public void GetNumericArray(ref ArraySegment<double> rr_a)
    {
    if(rr_a.Count < 4) throw new ArgumentException("ArraySegment invalid length");
    rr_a.Array[rr_a.Offset + 0] = q0;
    rr_a.Array[rr_a.Offset + 1] = q1;
    rr_a.Array[rr_a.Offset + 2] = q2;
    rr_a.Array[rr_a.Offset + 3] = q3;
    }
    public void AssignFromNumericArray(ref ArraySegment<double> rr_a)
    {
    if(rr_a.Count < 4) throw new ArgumentException("ArraySegment invalid length");
    q0 = rr_a.Array[rr_a.Offset + 0];
    q1 = rr_a.Array[rr_a.Offset + 1];
    q2 = rr_a.Array[rr_a.Offset + 2];
    q3 = rr_a.Array[rr_a.Offset + 3];
    }
}

[NamedArrayElementTypeAndCount(typeof(double), 7)]
public struct transform
{
    public quaternion rotation;
    public vector3 translation;
    public double[] GetNumericArray()
    {
    var a=new ArraySegment<double>(new double[7]);
    GetNumericArray(ref a);
    return a.Array;
    }
    public void GetNumericArray(ref ArraySegment<double> rr_a)
    {
    if(rr_a.Count < 7) throw new ArgumentException("ArraySegment invalid length");
    var rr_a0 = new ArraySegment<double>(rr_a.Array, rr_a.Offset + 0, 4);
    rotation.GetNumericArray(ref rr_a0);
    var rr_a4 = new ArraySegment<double>(rr_a.Array, rr_a.Offset + 4, 3);
    translation.GetNumericArray(ref rr_a4);
    }
    public void AssignFromNumericArray(ref ArraySegment<double> rr_a)
    {
    if(rr_a.Count < 7) throw new ArgumentException("ArraySegment invalid length");
    var rr_a0 = new ArraySegment<double>(rr_a.Array, rr_a.Offset + 0, 4);
    rotation.AssignFromNumericArray(ref rr_a0);
    var rr_a4 = new ArraySegment<double>(rr_a.Array, rr_a.Offset + 4, 3);
    translation.AssignFromNumericArray(ref rr_a4);
    }
}

[NamedArrayElementTypeAndCount(typeof(byte), 3)]
public struct pixel
{
    public byte r;
    public byte b;
    public byte g;
    public byte[] GetNumericArray()
    {
    var a=new ArraySegment<byte>(new byte[3]);
    GetNumericArray(ref a);
    return a.Array;
    }
    public void GetNumericArray(ref ArraySegment<byte> rr_a)
    {
    if(rr_a.Count < 3) throw new ArgumentException("ArraySegment invalid length");
    rr_a.Array[rr_a.Offset + 0] = r;
    rr_a.Array[rr_a.Offset + 1] = b;
    rr_a.Array[rr_a.Offset + 2] = g;
    }
    public void AssignFromNumericArray(ref ArraySegment<byte> rr_a)
    {
    if(rr_a.Count < 3) throw new ArgumentException("ArraySegment invalid length");
    r = rr_a.Array[rr_a.Offset + 0];
    b = rr_a.Array[rr_a.Offset + 1];
    g = rr_a.Array[rr_a.Offset + 2];
    }
}

[NamedArrayElementTypeAndCount(typeof(byte), 31)]
public struct pixel2
{
    public byte c;
    public pixel d;
    public pixel e;
    public pixel[] f;
    public pixel g;
    public byte[] GetNumericArray()
    {
    var a=new ArraySegment<byte>(new byte[31]);
    GetNumericArray(ref a);
    return a.Array;
    }
    public void GetNumericArray(ref ArraySegment<byte> rr_a)
    {
    if(rr_a.Count < 31) throw new ArgumentException("ArraySegment invalid length");
    rr_a.Array[rr_a.Offset + 0] = c;
    var rr_a1 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 1, 3);
    d.GetNumericArray(ref rr_a1);
    var rr_a4 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 4, 3);
    e.GetNumericArray(ref rr_a4);
    var rr_a7 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 7, 21);
    f.GetNumericArray(ref rr_a7);
    var rr_a28 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 28, 3);
    g.GetNumericArray(ref rr_a28);
    }
    public void AssignFromNumericArray(ref ArraySegment<byte> rr_a)
    {
    if(rr_a.Count < 31) throw new ArgumentException("ArraySegment invalid length");
    c = rr_a.Array[rr_a.Offset + 0];
    var rr_a1 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 1, 3);
    d.AssignFromNumericArray(ref rr_a1);
    var rr_a4 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 4, 3);
    e.AssignFromNumericArray(ref rr_a4);
    var rr_a7 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 7, 21);
    f.AssignFromNumericArray(ref rr_a7);
    var rr_a28 = new ArraySegment<byte>(rr_a.Array, rr_a.Offset + 28, 3);
    g.AssignFromNumericArray(ref rr_a28);
    }
}

public struct testpod1
{
    public double d1;
    public double[] d2;
    public double[] d3;
    public double[] d4;
    public testpod2 s1;
    public testpod2[] s2;
    public testpod2[] s3;
    public testpod2[] s4;
    public transform t1;
    public transform[] t2;
    public transform[] t3;
    public transform[] t4;
}

public struct testpod2
{
    public sbyte i1;
    public sbyte[] i2;
    public sbyte[] i3;
}

[RobotRaconteurServiceObjectInterface()]
public interface testroot3
{
    int readme { get; 	}
    int writeme { set; 	}
    int unknown_modifier { get;  set; 	}
    testenum1 testenum1_prop { get;  set; 	}
    testpod1 testpod1_prop { get;  set; 	}
    teststruct3 teststruct3_prop { get;  set; 	}
    List<double[]> d1 { get;  set; 	}
    List<double[]> d2 { get;  set; 	}
    Dictionary<int,double[]> d3 { get;  set; 	}
    Dictionary<int,double[]> d4 { get;  set; 	}
    List<MultiDimArray> d5 { get;  set; 	}
    Dictionary<int,MultiDimArray> d6 { get;  set; 	}
    vector3 testnamedarray1 { get;  set; 	}
    transform testnamedarray2 { get;  set; 	}
    transform[] testnamedarray3 { get;  set; 	}
    NamedMultiDimArray testnamedarray4 { get;  set; 	}
    NamedMultiDimArray testnamedarray5 { get;  set; 	}
    CDouble c1 { get;  set; 	}
    CDouble[] c2 { get;  set; 	}
    MultiDimArray c3 { get;  set; 	}
    List<CDouble> c4 { get;  set; 	}
    List<CDouble[]> c5 { get;  set; 	}
    List<MultiDimArray> c6 { get;  set; 	}
    CSingle c7 { get;  set; 	}
    CSingle[] c8 { get;  set; 	}
    MultiDimArray c9 { get;  set; 	}
    List<CSingle> c10 { get;  set; 	}
    List<CSingle[]> c11 { get;  set; 	}
    List<MultiDimArray> c12 { get;  set; 	}
    bool b1 { get;  set; 	}
    bool[] b2 { get;  set; 	}
    MultiDimArray b3 { get;  set; 	}
    List<bool> b4 { get;  set; 	}
    List<bool[]> b5 { get;  set; 	}
    List<MultiDimArray> b6 { get;  set; 	}
    void testpod1_func1(testpod1 s);
    testpod1 testpod1_func2();
    Generator2<double> gen_func1();
    Generator2<byte[]> gen_func2(string name);
    Generator3<byte[]> gen_func3(string name);
    Generator1<byte[],byte[]> gen_func4();
    Generator1<com.robotraconteur.testing.TestService1.teststruct2,com.robotraconteur.testing.TestService1.teststruct2> gen_func5();
    void test_exception_params1();
    void test_exception_params2();
    Generator2<testenum1> enum_generator1();
    Generator1<testenum1,testenum1> enum_generator2(int a, int b);
    obj4 get_o4();
    obj5 get_nolock_test();
    Pipe<int> unreliable1{ get; set; }
    Pipe<int[]> p1{ get; set; }
    Pipe<int[]> p2{ get; set; }
    Pipe<MultiDimArray> p3{ get; set; }
    Wire<int> peekwire{ get; set; }
    Wire<int> pokewire{ get; set; }
    Wire<int[]> w1{ get; set; }
    Wire<int[]> w2{ get; set; }
    Wire<MultiDimArray> w3{ get; set; }
    ArrayMemory<double> readmem { get; }
    PodArrayMemory<testpod2> pod_m1 { get; }
    PodMultiDimArrayMemory<testpod2> pod_m2 { get; }
    NamedArrayMemory<transform> namedarray_m1 { get; }
    NamedMultiDimArrayMemory<transform> namedarray_m2 { get; }
    ArrayMemory<CDouble> c_m1 { get; }
    MultiDimArrayMemory<CDouble> c_m2 { get; }
    ArrayMemory<CDouble> c_m3 { get; }
    MultiDimArrayMemory<CDouble> c_m4 { get; }
    ArrayMemory<bool> c_m5 { get; }
    MultiDimArrayMemory<bool> c_m6 { get; }
}

[RobotRaconteurServiceObjectInterface()]
public interface obj1
{
    double[] d1 { get;  set; 	}
}

[RobotRaconteurServiceObjectInterface()]
public interface obj2 : obj1
{
    double[] d1 { get;  set; 	}
}

[RobotRaconteurServiceObjectInterface()]
public interface obj3 : obj1, obj2
{
    double[] d1 { get;  set; 	}
}

[RobotRaconteurServiceObjectInterface()]
public interface obj4 : com.robotraconteur.testing.TestService1.sub2
{
    string s_ind { get;  set; 	}
    int i_ind { get;  set; 	}
    string data { get;  set; 	}
    com.robotraconteur.testing.TestService1.sub3 get_o3_1(string ind);
}

[RobotRaconteurServiceObjectInterface()]
public interface obj5
{
    double p1 { get;  set; 	}
    double p2 { get;  set; 	}
    double p3 { get;  set; 	}
    int f1();
    int f2();
    Pipe<int> q1{ get; set; }
    Pipe<int> q2{ get; set; }
    Wire<int> w1{ get; set; }
    Wire<int> w2{ get; set; }
    ArrayMemory<int> m1 { get; }
    ArrayMemory<int> m2 { get; }
    ArrayMemory<int> m3 { get; }
}

public static class com__robotraconteur__testing__TestService3Constants 
{
    public const string strconst="This is a\n \"string constant\" \\/\b\f \r\u00ff tabme\ttabme\n smile! \ud83d\ude01";
    public const int int32const=3856384;
    public static readonly int[] int32const_array={182476, 56483, -2947};
    public const int int32hexconst=0x082bc7;
    public const int int32hexconst2=-0x7264c17;
    public static readonly int[] int32hexconst_array={ 0x8274ec, -0x0001, +0xABCDEF, 0xabcdef, 0x012345, 0x6789 };
    public static readonly double[] doubleconst_array={1.5847, 3.14, -548e3, 3452.67e2, 485e-21};
    public static class structconst { public const string strconst="This is a\n \"string constant\" \\/\b\f \r\u00ff tabme\ttabme\n smile! \ud83d\ude01"; public static readonly int[] int32const_array={182476, 56483, -2947}; }
    public static class structconst2 { public static class structconst { public const string strconst="This is a\n \"string constant\" \\/\b\f \r\u00ff tabme\ttabme\n smile! \ud83d\ude01"; public static readonly int[] int32const_array={182476, 56483, -2947}; } public const int int32const=3856384; }
    public static class testroot3
    {
    public const string unknown_modifier_hello="hello world!";
    }
}
    public enum testenum1
    {
    value1 = 0,
    value2 = 1,
    value3 = 2,
    anothervalue = -1,
    anothervalue2 = -2,
    anothervalue3 = -3,
    hexval1 = 0x10,
    hexval2 = 0x11,
    neghexval1 = -0x7ffffffb,
    neghexval2 = -0x7ffffffa,
    more_values = -0x7ffffff9
    };
public class test_exception4 : RobotRaconteurRemoteException
{
    public test_exception4(string message,string errorsubname=null,object param=null) : base("com.robotraconteur.testing.TestService3.test_exception4",message,errorsubname,param) {}
};
}
