/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. * Use of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ #pragma once #include "antlr4-common.h" namespace antlr4 { namespace tree { /// /// Associate a property with a parse tree node. Useful with parse tree listeners /// that need to associate values with particular tree nodes, kind of like /// specifying a return value for the listener event method that visited a /// particular node. Example: /// ///
  /// ParseTreeProperty<Integer> values = new ParseTreeProperty<Integer>();
  /// values.put(tree, 36);
  /// int x = values.get(tree);
  /// values.removeFrom(tree);
  /// 
/// /// You would make one decl (values here) in the listener and use lots of times /// in your event methods. ///
template class ANTLR4CPP_PUBLIC ParseTreeProperty { public: virtual ~ParseTreeProperty() {} virtual V get(ParseTree *node) { return _annotations[node]; } virtual void put(ParseTree *node, V value) { _annotations[node] = value; } virtual V removeFrom(ParseTree *node) { auto value = _annotations[node]; _annotations.erase(node); return value; } protected: std::map _annotations; }; } // namespace tree } // namespace antlr4