private void DeleteLink(ILink link)
        {
            int pos = LinksInCollection.BinarySearch(link, CurrLinkComparer);

            if (pos >= 0)
            {
                LinksInCollection.RemoveAt(pos);

                if (SourceArtifactUris.Contains(link.SourceArtifact.Uri))
                {
                    m_sourceArtifactUris.Remove(link.SourceArtifact.Uri);
                }

                if (TargetArtifactUris.Contains(link.TargetArtifact.Uri))
                {
                    m_targetArtifactUris.Remove(link.TargetArtifact.Uri);
                }
            }
        }
        private void AddLink(ILink link)
        {
            if (!IsLinkInCollection(link))
            {
                LinksInCollection.Add(link);
                LinksInCollection.Sort(CurrLinkComparer);

                if (!SourceArtifactUris.Contains(link.SourceArtifact.Uri))
                {
                    m_sourceArtifactUris.Add(link.SourceArtifact.Uri);
                    m_sourceArtifactUris.Sort();
                }

                if (!TargetArtifactUris.Contains(link.TargetArtifact.Uri))
                {
                    m_targetArtifactUris.Add(link.TargetArtifact.Uri);
                    m_targetArtifactUris.Sort();
                }
            }
        }
 private bool LinkIntroducesCyclicReference(ILink link)
 {
     return(TargetArtifactUris.Contains(link.SourceArtifact.Uri) &&
            SourceArtifactUris.Contains(link.TargetArtifact.Uri));
 }