#region Copyright
// --------------------------------------------------------------------------------------------------------------------
//
// Copyright (C) 2015 Ian Horswill
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in the
// Software without restriction, including without limitation the rights to use, copy,
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// --------------------------------------------------------------------------------------------------------------------
#endregion
using System;
using UnityEngine;
namespace Prolog
{
public static class GenericArithmetic
{
public static object Add(params object[] args)
{
int iResult=0;
int i = 0;
for (;i 0) ? iResult : Convert.ToSingle(args[i++]);
for (; i < args.Length; i++)
{
float f = Convert.ToSingle(args[i]);
if (f < fResult)
fResult = f;
}
return fResult;
}
public static object Max(params object[] args)
{
if (args.Length == 0)
throw new ArgumentException("max requires at least one argument");
int iResult = 0;
int i = 0;
if (!(args[0] is int))
goto floatCase;
iResult = (int)args[i++];
for (; i < args.Length; i++)
{
object a = args[i];
if (a is int)
{
var ai = (int)a;
if (ai > iResult)
iResult = ai;
}
else
goto floatCase;
}
return iResult;
floatCase:
float fResult = (i > 0) ? iResult : Convert.ToSingle(args[i++]);
for (; i < args.Length; i++)
{
float f = Convert.ToSingle(args[i]);
if (f > fResult)
fResult = f;
}
return fResult;
}
}
}