BuiltInFunctions.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Collections.Generic;
  3. namespace NTERA.Interpreter.Functions
  4. {
  5. class BuiltInFunctions
  6. {
  7. public static void InstallAll(Interpreter interpreter)
  8. {
  9. interpreter.AddFunction("str", Str);
  10. interpreter.AddFunction("num", Num);
  11. interpreter.AddFunction("abs", Abs);
  12. interpreter.AddFunction("min", Min);
  13. interpreter.AddFunction("max", Max);
  14. interpreter.AddFunction("not", Not);
  15. }
  16. public static Value Str(Interpreter interpreter, List<Value> args)
  17. {
  18. if (args.Count < 1)
  19. throw new ArgumentException();
  20. return args[0].Convert(ValueType.String);
  21. }
  22. public static Value Num(Interpreter interpreter, List<Value> args)
  23. {
  24. if (args.Count < 1)
  25. throw new ArgumentException();
  26. return args[0].Convert(ValueType.Real);
  27. }
  28. public static Value Abs(Interpreter interpreter, List<Value> args)
  29. {
  30. if (args.Count < 1)
  31. throw new ArgumentException();
  32. return new Value(Math.Abs(args[0].Real));
  33. }
  34. public static Value Min(Interpreter interpreter, List<Value> args)
  35. {
  36. if (args.Count < 2)
  37. throw new ArgumentException();
  38. return new Value(Math.Min(args[0].Real, args[1].Real));
  39. }
  40. public static Value Max(Interpreter interpreter, List<Value> args)
  41. {
  42. if (args.Count < 1)
  43. throw new ArgumentException();
  44. return new Value(Math.Max(args[0].Real, args[1].Real));
  45. }
  46. public static Value Not(Interpreter interpreter, List<Value> args)
  47. {
  48. if (args.Count < 1)
  49. throw new ArgumentException();
  50. return new Value(args[0].Real == 0 ? 1 : 0);
  51. }
  52. }
  53. }