/// <summary> /// Creates a new fail safe repository wrapper. /// </summary> /// <param name="repository">The repository to wrap.</param> /// <param name="deactivationTimeSpan">The time to deactivate the repository for in the event of a failure. Use <see cref="System.TimeSpan.Zero"/> to deactivate forever.</param> public CodeDocRepositoryFailureProtectionWrapper(ICodeDocMemberRepository repository, TimeSpan deactivationTimeSpan) : base(repository) { Contract.Requires(repository != null); DeactivationTimeSpan = deactivationTimeSpan; _active = true; _deactivatedTime = default(DateTime); }
/// <summary> /// Creates a new repository wrapper for another <paramref name="repository"/>. /// </summary> /// <param name="repository">The repository to wrap.</param> protected CodeDocRepositoryWrapperBase(ICodeDocMemberRepository repository) { if (repository == null) throw new ArgumentNullException("repository"); Contract.EndContractBlock(); Repository = repository; }
/// <summary> /// Constructs a new search context with the given repositories and detail level. /// </summary> /// <param name="repository">The repository that is to be searched.</param> /// <param name="detailLevel">The desired detail level.</param> public CodeDocRepositorySearchContext(ICodeDocMemberRepository repository, CodeDocMemberDetailLevel detailLevel = CodeDocMemberDetailLevel.Full) : this(new ReadOnlyCollection<ICodeDocMemberRepository>(new[] { repository }), detailLevel) { if(repository == null) throw new ArgumentNullException("repository"); Contract.EndContractBlock(); }
/// <summary> /// Marks a repository as visited. /// </summary> /// <param name="repository"></param> /// <returns><c>true</c> when the repository is marked as visited.</returns> public bool Visit(ICodeDocMemberRepository repository) { if(repository == null) throw new ArgumentNullException("repository"); Contract.EndContractBlock(); if (!IsReferenced(repository)) return false; return _visitedRepositories.Add(repository); }
public bool IsReferenced(ICodeDocMemberRepository repository) { return AllRepositories.Contains(repository); }
/// <summary> /// Clones this search context with only the given repository marked as visited and an overridden detail level. /// </summary> /// <param name="repository">The repository that is to be marked as visited.</param> /// <param name="detailLevel">The desired detail level.</param> /// <returns>A search context.</returns> public CodeDocRepositorySearchContext CloneWithSingleVisit(ICodeDocMemberRepository repository, CodeDocMemberDetailLevel detailLevel) { if(repository == null) throw new ArgumentNullException("repository"); Contract.Ensures(Contract.Result<CodeDocRepositorySearchContext>() != null); var result = CloneWithoutVisits(detailLevel); result.Visit(repository); return result; }
/// <summary> /// Clones this search context with only the given repository marked as visited. /// </summary> /// <param name="repository">The repository that is to be marked as visited.</param> /// <returns>A search context.</returns> public CodeDocRepositorySearchContext CloneWithSingleVisit(ICodeDocMemberRepository repository) { if(repository == null) throw new ArgumentNullException(); Contract.Ensures(Contract.Result<CodeDocRepositorySearchContext>() != null); return CloneWithSingleVisit(repository, DetailLevel); }
/// <summary> /// Clones this search context with only the given repository marked as unvisited and an overridden detail level. /// </summary> /// <param name="targetRepository">The repository that is to be unvisited.</param> /// <param name="detailLevel">The desired detail level.</param> /// <returns>A search context.</returns> public CodeDocRepositorySearchContext CloneWithOneUnvisited(ICodeDocMemberRepository targetRepository, CodeDocMemberDetailLevel detailLevel) { Contract.Ensures(Contract.Result<CodeDocRepositorySearchContext>() != null); var result = CloneWithoutVisits(detailLevel); foreach (var repository in result.AllRepositories) if (repository != targetRepository) result.Visit(repository); return result; }
/// <summary> /// Clones this search context with only the given repository marked as unvisited. /// </summary> /// <param name="targetRepository">The repository that is to be unvisited.</param> /// <returns>A search context.</returns> public CodeDocRepositorySearchContext CloneWithOneUnvisited(ICodeDocMemberRepository targetRepository) { Contract.Ensures(Contract.Result<CodeDocRepositorySearchContext>() != null); return CloneWithOneUnvisited(targetRepository, DetailLevel); }
/// <summary> /// Creates a new locking wrapper for another repository. /// </summary> /// <param name="repository">The repository to wrap.</param> public ThreadSafeCodeDocRepositoryWrapper(ICodeDocMemberRepository repository) : base(repository) { Contract.Requires(repository != null); _mutex = new object(); }