1
0

IterationIR.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #ifndef MANDEL_ITERATIONIR_H
  2. #define MANDEL_ITERATIONIR_H
  3. #include <string>
  4. #include <vector>
  5. #include <variant>
  6. #include "IterationFormula.h"
  7. #include "Arena.h"
  8. namespace mnd
  9. {
  10. namespace ir
  11. {
  12. struct Constant;
  13. struct Variable;
  14. struct UnaryOperation;
  15. struct Negation;
  16. struct BinaryOperation;
  17. struct Addition;
  18. struct Subtraction;
  19. struct Multiplication;
  20. struct Atan2;
  21. struct Pow;
  22. struct Cos;
  23. struct Sin;
  24. using Node = std::variant<
  25. Constant,
  26. Variable,
  27. Negation,
  28. Addition,
  29. Subtraction,
  30. Multiplication,
  31. Atan2,
  32. Pow,
  33. Cos,
  34. Sin
  35. >;
  36. struct Formula
  37. {
  38. util::Arena<Node> nodeArena;
  39. Node* newA;
  40. Node* newB;
  41. std::string toString(void) const;
  42. };
  43. }
  44. ir::Formula expand(const mnd::IterationFormula& fmla);
  45. }
  46. struct mnd::ir::Constant
  47. {
  48. double value;
  49. };
  50. struct mnd::ir::Variable
  51. {
  52. std::string name;
  53. };
  54. struct mnd::ir::UnaryOperation
  55. {
  56. Node* value;
  57. };
  58. struct mnd::ir::Negation : mnd::ir::UnaryOperation
  59. {
  60. };
  61. struct mnd::ir::BinaryOperation
  62. {
  63. Node* left;
  64. Node* right;
  65. };
  66. struct mnd::ir::Addition : mnd::ir::BinaryOperation
  67. {
  68. };
  69. struct mnd::ir::Subtraction : mnd::ir::BinaryOperation
  70. {
  71. };
  72. struct mnd::ir::Multiplication : mnd::ir::BinaryOperation
  73. {
  74. };
  75. struct mnd::ir::Atan2 : mnd::ir::BinaryOperation
  76. {
  77. };
  78. struct mnd::ir::Pow : mnd::ir::BinaryOperation
  79. {
  80. };
  81. struct mnd::ir::Cos : mnd::ir::UnaryOperation
  82. {
  83. };
  84. struct mnd::ir::Sin : mnd::ir::UnaryOperation
  85. {
  86. };
  87. #endif // MANDEL_ITERATIONIR_H