#if !XLUA_GENERAL
using UnityEngine;
#endif
using System.Collections;
using System.Collections.Generic;
using XLua;
using System;
using System.IO;

[LuaCallCSharp]
public class NoContClass{
	public int key1;
	public int key2;
	public bool key3;
	public int add (int a, int b)
	{
		return a + b;
	}
	public static int d;
	public static int dec(int a, int b)
	{
		return a - b;
	}
}

namespace testLuaCallCS
{
	[LuaCallCSharp]
	public class OneParamContClass{
		public int key1;
		public int key2;
		public bool key3;
		public int add (int a, int b)
		{
			return a + b;
		}
		public OneParamContClass(int a)
		{
			key1 = a;
			key2 = 1;
		}
	}

	[LuaCallCSharp]
	public class MultiContClass{
		public int key1;
		public int key2;
		public bool key3;
		public int add (int a, int b)
		{
			return a + b;
		}
		public MultiContClass()
		{
			key1 = 1;
			key2 = 1;
		}
		
		public MultiContClass(int a)
		{
			key1 = a;
			key2 = 1;
		}
		public static int d;
		public static int dec(int a, int b)
		{
			return a - b;
		}
	}

	[LuaCallCSharp]
	public class TwoParamsContClass{
		public int key1;
		public int key2;
		public bool key3;
		public int add (int a, int b)
		{
			return a + b;
		}
		public TwoParamsContClass(int a, int b)
		{
			key1 = a;
			key2 = b;
		}
	}

	[LuaCallCSharp]
	public class OverClassA : MultiContClass
	{
		public int key3;
		public int sub(int a, int b)
		{
			return a - b;
		}
	}

	[LuaCallCSharp]
	public class OverClassB : MultiContClass
	{
		public int key4;
		public int sub(int a, int b)
		{
			return a - b;
		}
		public static bool bValue;
		public static void Set(bool flag)
		{
			bValue = flag;
		}

		protected internal int sum(int a, int b, int c)
		{
			return a + b + c;
		}
	}

	[LuaCallCSharp]
	public class OverClassC : OverClassB
	{
		public int key5;
		public int div(int a, int b)
		{
			if (b != 0) {
				return a / b;
			} else {
				return 0;
			}
		}

		public int sub(int a, int b)
		{
			return a - b + 1;
		}
	}

	public class NoGenOverClassA : MultiContClass
	{
		public int key4;
		public int sub(int a, int b)
		{
			return a - b;
		}
		public static bool bValue;
		public static void Set(bool flag)
		{
			bValue = flag;
		}
	}

	[LuaCallCSharp]
	public class OverClassCDeriveNGA : NoGenOverClassA
	{
		public int key5;
		public int div(int a, int b)
		{
			if (b != 0) {
				return a / b;
			} else {
				return 0;
			}
		}
	}

	[LuaCallCSharp]
	public abstract class abstractFatherClass
	{
		public abstract int add(int a, int b);
		public int a;
	}

	[LuaCallCSharp]
	public class ChildCalss:abstractFatherClass
	{
		public override int add(int a, int b)
		{
			return a + b;
		}
		public void setA( int value)
		{
			a = value;
		}
		public int getA()
		{
			return a;
		}
	}
	
	[LuaCallCSharp]
	public static class StaticTestClass
	{
		public static int n = 0;
		
		public static void Add()
		{
			n++;
		}
	}

}
