#pragma once #include #include #include #include #include class Node; class StyledNode : public TreeNode { public: ~StyledNode(); const Node* node() const { return m_node; } template inline void for_each_child(Callback callback) const { for (auto* node = first_child(); node; node = node->next_sibling()) callback(*node); } template inline void for_each_child(Callback callback) { for (auto* node = first_child(); node; node = node->next_sibling()) callback(*node); } protected: explicit StyledNode(const Node*); private: const Node* m_node { nullptr }; HashMap> m_property_values; };