/* ILEngineer - Crummy .NET Decompiler
 * Copyright (C) 2001-2002  Jay Freeman (saurik)
*/

/*
 *        Redistribution and use in source and binary
 * forms, with or without modification, are permitted
 * provided that the following conditions are met:
 * 
 * 1. Redistributions of source code must retain the
 *    above copyright notice, this list of conditions
 *    and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the
 *    above copyright notice, this list of conditions
 *    and the following disclaimer in the documentation
 *    and/or other materials provided with the
 *    distribution.
 * 3. The name of the author may not be used to endorse
 *    or promote products derived from this software
 *    without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef _OPERATORS_H
#define _OPERATORS_H

#pragma once

namespace ILEngineer {
namespace Data {

	struct Operator {
		int args;
		wchar_t *op;
		wchar_t *name;
	};

	Operator Operators[] = {
		{1, L"--",	L"Decrement"},
		{1, L"++",	L"Increment"},
		{1, L"-",	L"UnaryNegation"},
		{1, L"+",	L"UnaryPlus"},
		{1, L"!",	L"LogicalNot"},
		{1, L"tr",	L"True"},
		{1, L"fs",	L"False"},
		{1, L"&",	L"AddressOf"},
		{1, L"~",	L"OnesComplement"},
		{1, L"*",	L"PointerDereference"},
		{2, L"+",	L"Addition"},
		{2, L"-",	L"Subtraction"},
		{2, L"*",	L"Multiply"},
		{2, L"/",	L"Division"},
		{2, L"%",	L"Modulus"},
		{2, L"^",	L"ExclusiveOr"},
		{2, L"&",	L"BitwiseAnd"},
		{2, L"|",	L"BitwiseOr"},
		{2, L"&&",	L"LogicalAnd"},
		{2, L"||",	L"LogicalOr"},
		{2, L"=",	L"Assign"},
		{2, L"<<",	L"LeftShift"},
		{2, L">>",	L"RightShift"},
		{2, L"",	L"SignedRightShift"},
		{2, L"",	L"UnsignedRightShift"},
		{2, L"==",	L"Equality"},
		{2, L">",	L"GreaterThan"},
		{2, L"<",	L"LessThan"},
		{2, L"!=",	L"Inequality"},
		{2, L">=",	L"GreaterThanOrEqual"},
		{2, L"<=",	L"LessThanOrEqual"},
		{2, L"",	L"UnsignedRightShiftAssignment"},
		{2, L"->",	L"MemberSelection"},
		{2, L">>=",	L"RightShiftAssignment"},
		{2, L"*=",	L"MultiplicationAssignment"},
		{2, L"->*",	L"PointerToMemberSelection"},
		{2, L"-=",	L"SubtractionAssignment"},
		{2, L"^=",	L"ExclusiveOrAssignment"},
		{2, L"<<=",	L"LeftShiftAssignment"},
		{2, L"%=",	L"ModulusAssignment"},
		{2, L"+=",	L"AdditionAssignment"},
		{2, L"&=",	L"BitwiseAndAssignment"},
		{2, L"|=",	L"BitwiseOrAssignment"},
		{2, L",",	L"Comma"},
		{2, L"/=",	L"DivisionAssignment"},
		{0, NULL,	NULL}
	};

} }

#endif//_OPERATORS_H