using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BaseTypes;
using DataPerformer.Interfaces;
using BaseTypes.Interfaces;
using DiagramUI;
namespace DataPerformer
{
/// <summary>
/// Measurement
/// </summary>
public class Measure : IMeasure
{
/// <summary>
/// Measurement parameter
/// </summary>
private Func<object> parameter;
/// <summary>
/// Measurement name
/// </summary>
private string name;
/// <summary>
/// Type of parameter
/// </summary>
private object type;
private static readonly Double a = 0;
/// <summary>
/// Constructor
/// </summary>
/// <param name="type">Type of parameter</param>
/// <param name="parameter">Measurement parameter</param>
/// <param name="name">Measurement name</param>
public Measure(object type, Func<object> parameter, string name)
{
this.parameter = parameter;
this.name = name;
this.type = type;
}
/// <summary>
/// Constructor of real measure
/// </summary>
/// <param name="parameter">Parameter</param>
/// <param name="name">Name of measure</param>
public Measure(Func<object> parameter, string name)
:
this(a, parameter, name)
{
}
/// <summary>
/// Parameter of measurement
/// </summary>
public Func<object> Parameter
{
get
{
return parameter;
}
}
/// <summary>
/// Type of parameter
/// </summary>
public object Type
{
get
{
return type;
}
}
/// <summary>
/// The measurement name
/// </summary>
public string Name
{
get
{
return name;
}
}
/// <summary>
/// Gets double value of measure
/// </summary>
/// <param name="measure">The measure</param>
/// <returns>The double value</returns>
public static double GetDouble(IMeasure measure)
{
return (double)measure.Parameter();
}
/// <summary>
/// Gets name of type
/// </summary>
/// <param name="type">The type</param>
/// <returns>Type name</returns>
public static string GetTypeName(object type)
{
string str = "";
object t = ArrayReturnType.GetBaseType(type);
if (t is Double)
{
str = "Double";
}
if (t is Boolean)
{
str = "Boolean";
}
if (t is Byte)
{
str = "Byte";
}
if (t is UInt16)
{
str = "UInt16";
}
if (t is UInt32)
{
str = "UInt32";
}
if (t is UInt64)
{
str = "UInt64";
}
if (t is SByte)
{
str = "SByte";
}
if (t is Int16)
{
str = "Int16";
}
if (t is Int32)
{
str = "Int32";
}
if (t is Int64)
{
str = "Int64";
}
if (t is string)
{
str = "String";
}
if (type is ArrayReturnType)
{
str = PureDesktop.GetResourceString(str);
ArrayReturnType art = type as ArrayReturnType;
int[] n = art.Dimension;
for (int i = n.Length - 1; i >= 0; i--)
{
str = str + "[" + n[i] + "]";
}
/* for (int i = 0; i < n.Length; i++)
{
str = str + "[" + n[i] + "]";
}*/
return str;
}
if (type is IOneVariableFunction)
{
IOneVariableFunction f = type as IOneVariableFunction;
string s = GetTypeName(f.ReturnType) + " f(" + GetTypeName(f.VariableType) + ")";
return s;
}
return PureDesktop.GetResourceString(str);
}
}
}