Repository URL to install this package:
|
Version:
2023.12.1 ▾
|
/* 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.
*/
using System.Collections.Concurrent;
namespace Antlr4.Runtime.Tree
{
/// <summary>Associate a property with a parse tree node.</summary>
/// <remarks>
/// 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:
/// <pre>
/// ParseTreeProperty<Integer> values = new ParseTreeProperty<Integer>();
/// values.put(tree, 36);
/// int x = values.get(tree);
/// values.removeFrom(tree);
/// </pre>
/// You would make one decl (values here) in the listener and use lots of times
/// in your event methods.
/// </remarks>
public class ParseTreeProperty<V>
{
protected internal ConcurrentDictionary<IParseTree, V> annotations = new ConcurrentDictionary<IParseTree, V>();
public virtual V Get(IParseTree node)
{
V value;
if (!annotations.TryGetValue(node, out value))
return default(V);
return value;
}
public virtual void Put(IParseTree node, V value)
{
annotations[node] = value;
}
public virtual V RemoveFrom(IParseTree node)
{
V value;
if (!annotations.TryRemove(node, out value))
return default(V);
return value;
}
}
}