[Flags]
public enum FlagsTest
{
	AAAA,
	BBBB,
	CCCC,
	DDDD
}

public class MainClass
{
	const FlagsTest[] arr = { FlagsTest.AAAA, FlagsTest.BBBB, FlagsTest.CCCC, 
	                          FlagsTest.DDDD, FlagsTest.AAAA | FlagsTest.DDDD };

	public static void main (string[] args)
	{
		FlagsClass flags_class = (FlagsClass) typeof(FlagsTest).class_ref();
		stdout.printf("len=%i\n", flags_class.values.length);
		for (int i=0; i<flags_class.values.length; i++)
			stdout.printf ("%s\n", flags_class.values[i].value_nick);
		for (int i=0; i<arr.length; i++) {
			stdout.printf("get_first_value: name=%s,nick=%s,value=%lu\n", 
				           flags_class.get_first_value(arr[i]).value_name,
				           flags_class.get_first_value(arr[i]).value_nick,
				           flags_class.get_first_value(arr[i]).value);
			stdout.printf("get_value_by_name: name=%s,value=%lu\n", 
				           flags_class.get_value_by_name(flags_class.get_first_value(arr[i]).value_name).value_name,
				           flags_class.get_value_by_name(flags_class.get_first_value(arr[i]).value_name).value);
			stdout.printf("get_value_by_nick: name=%s,value=%lu\n", 
				           flags_class.get_value_by_nick(flags_class.get_first_value(arr[i]).value_nick).value_name,
				           flags_class.get_value_by_nick(flags_class.get_first_value(arr[i]).value_nick).value);
		}
	}
}
