Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/aspnetwebstack.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/System.Web.Mvc/ExpressionUtil/ExpressionFingerprint.cs')
-rw-r--r--src/System.Web.Mvc/ExpressionUtil/ExpressionFingerprint.cs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/System.Web.Mvc/ExpressionUtil/ExpressionFingerprint.cs b/src/System.Web.Mvc/ExpressionUtil/ExpressionFingerprint.cs
new file mode 100644
index 00000000..1d9cf5e2
--- /dev/null
+++ b/src/System.Web.Mvc/ExpressionUtil/ExpressionFingerprint.cs
@@ -0,0 +1,47 @@
+using System.Linq.Expressions;
+
+namespace System.Web.Mvc.ExpressionUtil
+{
+ // Serves as the base class for all expression fingerprints. Provides a default implementation
+ // of GetHashCode().
+
+ internal abstract class ExpressionFingerprint
+ {
+ protected ExpressionFingerprint(ExpressionType nodeType, Type type)
+ {
+ NodeType = nodeType;
+ Type = type;
+ }
+
+ // the type of expression node, e.g. OP_ADD, MEMBER_ACCESS, etc.
+ public ExpressionType NodeType { get; private set; }
+
+ // the CLR type resulting from this expression, e.g. int, string, etc.
+ public Type Type { get; private set; }
+
+ internal virtual void AddToHashCodeCombiner(HashCodeCombiner combiner)
+ {
+ combiner.AddInt32((int)NodeType);
+ combiner.AddObject(Type);
+ }
+
+ protected bool Equals(ExpressionFingerprint other)
+ {
+ return (other != null)
+ && (this.NodeType == other.NodeType)
+ && Equals(this.Type, other.Type);
+ }
+
+ public override bool Equals(object obj)
+ {
+ return Equals(obj as ExpressionFingerprint);
+ }
+
+ public override int GetHashCode()
+ {
+ HashCodeCombiner combiner = new HashCodeCombiner();
+ AddToHashCodeCombiner(combiner);
+ return combiner.CombinedHash;
+ }
+ }
+}