DataExpression.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include "../../Include/RmlUi/Core/DataTypes.h"
  3. #include "../../Include/RmlUi/Core/Header.h"
  4. #include "../../Include/RmlUi/Core/Types.h"
  5. namespace Rml {
  6. class Element;
  7. class DataModel;
  8. struct InstructionData;
  9. using Program = Vector<InstructionData>;
  10. using AddressList = Vector<DataAddress>;
  11. class DataExpressionInterface {
  12. public:
  13. DataExpressionInterface() = default;
  14. DataExpressionInterface(DataModel* data_model, Element* element, Event* event = nullptr);
  15. DataAddress ParseAddress(const String& address_str) const;
  16. Variant GetValue(const DataAddress& address) const;
  17. bool SetValue(const DataAddress& address, const Variant& value) const;
  18. bool CallTransform(const String& name, const VariantList& arguments, Variant& out_result);
  19. bool EventCallback(const String& name, const VariantList& arguments);
  20. private:
  21. DataModel* data_model = nullptr;
  22. Element* element = nullptr;
  23. Event* event = nullptr;
  24. };
  25. class DataExpression {
  26. public:
  27. DataExpression(String expression);
  28. ~DataExpression();
  29. bool Parse(const DataExpressionInterface& expression_interface, bool is_assignment_expression);
  30. bool Run(const DataExpressionInterface& expression_interface, Variant& out_value);
  31. // Available after Parse()
  32. StringList GetVariableNameList() const;
  33. private:
  34. String expression;
  35. Program program;
  36. AddressList addresses;
  37. };
  38. } // namespace Rml