package com.nativelibs4java.mono.library;
/**
 * This file was autogenerated by <a href="http://jnaerator.googlecode.com/">JNAerator</a>,<br>
 * a tool written by <a href="http://ochafik.com/">Olivier Chafik</a> that <a href="http://code.google.com/p/jnaerator/wiki/CreditsAndLicense">uses a few opensource projects.</a>.<br>
 * For help, please visit <a href="http://nativelibs4java.googlecode.com/">NativeLibs4Java</a>, <a href="http://rococoa.dev.java.net/">Rococoa</a>, or <a href="http://jna.dev.java.net/">JNA</a>.
 */
public class MonoMarshalSpec extends com.ochafik.lang.jnaerator.runtime.Structure<MonoMarshalSpec, MonoMarshalSpec.ByValue, MonoMarshalSpec.ByReference> {
	/**
	 * @see MonoMarshalNative<br>
	 * C type : MonoMarshalNative
	 */
	public int native_;
	/// C type : data_union
	public data_union data;
	public static class data_union extends com.ochafik.lang.jnaerator.runtime.Union<data_union, data_union.ByValue, data_union.ByReference> {
		/// C type : array_data_struct
		public array_data_struct array_data;
		/// C type : custom_data_struct
		public custom_data_struct custom_data;
		/// C type : safearray_data_struct
		public safearray_data_struct safearray_data;
		public static class array_data_struct extends com.ochafik.lang.jnaerator.runtime.Structure<array_data_struct, array_data_struct.ByValue, array_data_struct.ByReference> {
			/**
			 * @see MonoMarshalNative<br>
			 * C type : MonoMarshalNative
			 */
			public int elem_type;
			/// -1 if not set
			public int num_elem;
			/// -1 if not set
			public short param_num;
			/// -1 if not set
			public short elem_mult;
			public array_data_struct() {
				super();
			}
			/**
			 * @param elem_type @see MonoMarshalNative<br>
			 * C type : MonoMarshalNative<br>
			 * @param num_elem -1 if not set<br>
			 * @param param_num -1 if not set<br>
			 * @param elem_mult -1 if not set
			 */
			public array_data_struct(int elem_type, int num_elem, short param_num, short elem_mult) {
				super();
				this.elem_type = elem_type;
				this.num_elem = num_elem;
				this.param_num = param_num;
				this.elem_mult = elem_mult;
			}
			protected ByReference newByReference() { return new ByReference(); }
			protected ByValue newByValue() { return new ByValue(); }
			protected array_data_struct newInstance() { return new array_data_struct(); }
			public static array_data_struct[] newArray(int arrayLength) {
				return com.ochafik.lang.jnaerator.runtime.Structure.newArray(array_data_struct.class, arrayLength);
			}
			public static class ByReference extends array_data_struct implements com.sun.jna.Structure.ByReference {}
			public static class ByValue extends array_data_struct implements com.sun.jna.Structure.ByValue {}
		}
		public static class custom_data_struct extends com.ochafik.lang.jnaerator.runtime.Structure<custom_data_struct, custom_data_struct.ByValue, custom_data_struct.ByReference> {
			/// C type : char*
			public com.sun.jna.Pointer custom_name;
			/// C type : char*
			public com.sun.jna.Pointer cookie;
			public custom_data_struct() {
				super();
			}
			/**
			 * @param custom_name C type : char*<br>
			 * @param cookie C type : char*
			 */
			public custom_data_struct(com.sun.jna.Pointer custom_name, com.sun.jna.Pointer cookie) {
				super();
				this.custom_name = custom_name;
				this.cookie = cookie;
			}
			protected ByReference newByReference() { return new ByReference(); }
			protected ByValue newByValue() { return new ByValue(); }
			protected custom_data_struct newInstance() { return new custom_data_struct(); }
			public static custom_data_struct[] newArray(int arrayLength) {
				return com.ochafik.lang.jnaerator.runtime.Structure.newArray(custom_data_struct.class, arrayLength);
			}
			public static class ByReference extends custom_data_struct implements com.sun.jna.Structure.ByReference {}
			public static class ByValue extends custom_data_struct implements com.sun.jna.Structure.ByValue {}
		}
		public static class safearray_data_struct extends com.ochafik.lang.jnaerator.runtime.Structure<safearray_data_struct, safearray_data_struct.ByValue, safearray_data_struct.ByReference> {
			/**
			 * @see MonoMarshalVariant<br>
			 * C type : MonoMarshalVariant
			 */
			public int elem_type;
			public int num_elem;
			public safearray_data_struct() {
				super();
			}
			/**
			 * @param elem_type @see MonoMarshalVariant<br>
			 * C type : MonoMarshalVariant
			 */
			public safearray_data_struct(int elem_type, int num_elem) {
				super();
				this.elem_type = elem_type;
				this.num_elem = num_elem;
			}
			protected ByReference newByReference() { return new ByReference(); }
			protected ByValue newByValue() { return new ByValue(); }
			protected safearray_data_struct newInstance() { return new safearray_data_struct(); }
			public static safearray_data_struct[] newArray(int arrayLength) {
				return com.ochafik.lang.jnaerator.runtime.Structure.newArray(safearray_data_struct.class, arrayLength);
			}
			public static class ByReference extends safearray_data_struct implements com.sun.jna.Structure.ByReference {}
			public static class ByValue extends safearray_data_struct implements com.sun.jna.Structure.ByValue {}
		}
		public data_union() {
			super();
		}
		/// @param array_data C type : array_data_struct
		public data_union(array_data_struct array_data) {
			super();
			this.array_data = array_data;
			setType(array_data_struct.class);
		}
		/// @param custom_data C type : custom_data_struct
		public data_union(custom_data_struct custom_data) {
			super();
			this.custom_data = custom_data;
			setType(custom_data_struct.class);
		}
		/// @param safearray_data C type : safearray_data_struct
		public data_union(safearray_data_struct safearray_data) {
			super();
			this.safearray_data = safearray_data;
			setType(safearray_data_struct.class);
		}
		protected ByReference newByReference() { return new ByReference(); }
		protected ByValue newByValue() { return new ByValue(); }
		protected data_union newInstance() { return new data_union(); }
		public static data_union[] newArray(int arrayLength) {
			return com.ochafik.lang.jnaerator.runtime.Union.newArray(data_union.class, arrayLength);
		}
		public static class ByReference extends data_union implements com.sun.jna.Structure.ByReference {}
		public static class ByValue extends data_union implements com.sun.jna.Structure.ByValue {}
	}
	public MonoMarshalSpec() {
		super();
	}
	/**
	 * @param native_ @see MonoMarshalNative<br>
	 * C type : MonoMarshalNative<br>
	 * @param data C type : data_union
	 */
	public MonoMarshalSpec(int native_, data_union data) {
		super();
		this.native_ = native_;
		this.data = data;
	}
	protected ByReference newByReference() { return new ByReference(); }
	protected ByValue newByValue() { return new ByValue(); }
	protected MonoMarshalSpec newInstance() { return new MonoMarshalSpec(); }
	public static MonoMarshalSpec[] newArray(int arrayLength) {
		return com.ochafik.lang.jnaerator.runtime.Structure.newArray(MonoMarshalSpec.class, arrayLength);
	}
	public static class ByReference extends MonoMarshalSpec implements com.sun.jna.Structure.ByReference {}
	public static class ByValue extends MonoMarshalSpec implements com.sun.jna.Structure.ByValue {}
}
