//-----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
//-----------------------------------------------------------------------------
using System.Diagnostics.Contracts;
namespace Microsoft.AbstractInterpretationFramework.Collections {
using System.Collections;
/// Represents a functional collection of key/value pairs.
/// 2
[ContractClass(typeof(IFunctionalMapContracts))]
public interface IFunctionalMap : System.Collections.ICollection, System.Collections.IEnumerable {
/// Adds an element with the provided key and value to the .
/// The to use as the value of the element to add.
/// The to use as the key of the element to add.
/// 2
IFunctionalMap/*!*/ Add(object/*!*/ key, object value);
///
/// Set the value of the key (that is already in the map)
///
IFunctionalMap/*!*/ Set(object/*!*/ key, object value);
/// Determines whether the contains an element with the specified key.
/// true if the contains an element with the key; otherwise, false.
/// The key to locate in the .
/// 2
[Pure]
bool Contains(object/*!*/ key);
/// Returns an for the .
/// An for the .
/// 2
[Pure]
[GlobalAccess(false)]
[Escapes(true, false)]
new System.Collections.IDictionaryEnumerator GetEnumerator();
/// Gets an containing the keys of the .
/// An containing the keys of the .
/// 2
System.Collections.ICollection Keys {
get;
}
/// Removes the element with the specified key from the .
/// The key of the element to remove.
/// 2
IFunctionalMap/*!*/ Remove(object/*!*/ key);
/// Gets an containing the values in the .
/// An containing the values in the .
/// 2
System.Collections.ICollection Values {
get;
}
object this[object/*!*/ key] {
get; /*set;*/
}
}
[ContractClassFor(typeof(IFunctionalMap))]
public abstract class IFunctionalMapContracts : IFunctionalMap {
#region IFunctionalMap Members
IFunctionalMap IFunctionalMap.Add(object key, object value) {
Contract.Requires(key != null);
Contract.Ensures(Contract.Result() != null);
throw new System.NotImplementedException();
}
IFunctionalMap IFunctionalMap.Set(object key, object value) {
Contract.Requires(key != null);
Contract.Ensures(Contract.Result() != null);
throw new System.NotImplementedException();
}
bool IFunctionalMap.Contains(object key) {
Contract.Requires(key != null);
throw new System.NotImplementedException();
}
IDictionaryEnumerator IFunctionalMap.GetEnumerator() {
throw new System.NotImplementedException();
}
ICollection IFunctionalMap.Keys {
get {
throw new System.NotImplementedException();
}
}
IFunctionalMap IFunctionalMap.Remove(object key) {
Contract.Requires(key != null);
Contract.Ensures(Contract.Result() != null);
throw new System.NotImplementedException();
}
ICollection IFunctionalMap.Values {
get {
throw new System.NotImplementedException();
}
}
object IFunctionalMap.this[object key] {
get {
Contract.Ensures(Contract.Result