using System.Collections.Generic; using System.Diagnostics.Contracts; using QuickGraph; namespace GraphSharp.Contracts { /// /// Contract class for the ICompoundGraph interface. /// /// /// Type of the vertex. /// /// /// Type of the edge. /// [ContractClassFor( typeof( ICompoundGraph<,> ) )] internal sealed class ICompoundGraphContract : BidirectionalGraph, ICompoundGraph where TEdge : IEdge { #region ICompoundGraph Members [Pure] bool ICompoundGraph.AddChildVertex( TVertex parent, TVertex child ) { ICompoundGraph ithis = this; Contract.Requires( !parent.Equals( default( TVertex ) ) ); Contract.Requires( ithis.ContainsVertex( parent ) ); return default( bool ); } [Pure] int ICompoundGraph.AddChildVertexRange( TVertex parent, IEnumerable children ) { ICompoundGraph ithis = this; Contract.Requires( !parent.Equals( default( TVertex ) ) ); Contract.Requires( ithis.ContainsVertex( parent ) ); Contract.Ensures( Contract.Result() >= 0 ); return default( int ); } [Pure] TVertex ICompoundGraph.GetParent( TVertex vertex ) { ICompoundGraph ithis = this; Contract.Requires( !vertex.Equals( default( TVertex ) ) ); Contract.Requires( ithis.ContainsVertex( vertex ) ); //TODO this is a bug in the MS Contract, i think -- solve it //Contract.Ensures( Contract.Result().Equals( default( TVertex ) ) || ithis.ContainsVertex( Contract.Result() ) ); return default( TVertex ); } [Pure] bool ICompoundGraph.IsChildVertex( TVertex vertex ) { ICompoundGraph ithis = this; Contract.Requires( !vertex.Equals( default( TVertex ) ) ); Contract.Requires( ithis.ContainsVertex( vertex ) ); return default( bool ); } [Pure] IEnumerable ICompoundGraph.GetChildrenVertices( TVertex vertex ) { ICompoundGraph ithis = this; Contract.Requires( !vertex.Equals( default( TVertex ) ) ); Contract.Requires( ithis.ContainsVertex( vertex ) ); return new List(); } [Pure] int ICompoundGraph.GetChildrenCount( TVertex vertex ) { ICompoundGraph ithis = this; Contract.Requires( ithis.ContainsVertex( vertex ) ); Contract.Ensures( Contract.Result() >= 0 ); return default( int ); } [Pure] bool ICompoundGraph.IsCompoundVertex( TVertex vertex ) { Contract.Requires( vertex != null ); Contract.Requires( ContainsVertex( vertex ) ); return default( bool ); } IEnumerable ICompoundGraph.CompoundVertices { get { return null; } } IEnumerable ICompoundGraph.SimpleVertices { get { return null; } } #endregion } }