public HashSet <string> NamesForType(ITypeReference type, HashSet <IExpression> exprs) { Contract.Requires(type != null); Contract.Requires(exprs != null); Contract.Requires(InstanceExpressions.ContainsKey(type)); Contract.Ensures(Contract.ForAll(Contract.Result <HashSet <string> >(), n => NameTable.ContainsValue(n))); return(new HashSet <string>(Names(InstanceExpressions[type].Intersect(exprs)))); }
public HashSet <string> InstanceNames(INamedTypeDefinition type) { Contract.Requires(type != null); Contract.Ensures(Contract.Result <HashSet <string> >() != null); Contract.Ensures((!InstanceExpressions.ContainsKey(type)).Implies(Contract.Result <HashSet <string> >().Count == 0)); Contract.Ensures(Contract.ForAll(Contract.Result <HashSet <string> >(), n => NameTable.ContainsValue(n))); return(InstanceExpressions.ContainsKey(type) ? new HashSet <string>(InstanceExpressions[type].Select(x => NameTable[x])) : new HashSet <string>()); }
private void AddInstanceExpr(ITypeReference type, IExpression expr) { Contract.Requires(type != null); Contract.Requires(expr != null); Contract.Ensures(InstanceExpressions.ContainsKey(type)); Contract.Ensures(InstanceExpressions[type].Contains(expr)); Contract.Ensures(InstanceExpressionsReferredTypes.ContainsKey(expr)); Contract.Ensures(InstanceExpressionsReferredTypes[expr] == type); if (!InstanceExpressions.ContainsKey(type)) { InstanceExpressions.Add(type, new HashSet <IExpression>()); } InstanceExpressions[type].Add(expr); if (!InstanceExpressionsReferredTypes.ContainsKey(expr)) { InstanceExpressionsReferredTypes.Add(expr, type); } else { Debug.Assert(InstanceExpressionsReferredTypes[expr] == type); } }