Пример #1
0
        /// <summary>
        /// Adds the fact that a path is produced by a given producer.
        /// </summary>
        public void Add(AbsolutePath path, PipStableId producer)
        {
            m_producedPaths.AddOrUpdate(
                producer,
                path,
                (pip, pathToAdd) =>
            {
                var set = new HashSet <AbsolutePath> {
                    pathToAdd
                };
                m_pipProducers.TryAdd(pathToAdd, pip);
                return(set);
            },
                (pip, pathToAdd, existingSet) =>
            {
                if (existingSet.Add(pathToAdd))
                {
                    m_pipProducers.TryAdd(pathToAdd, pip);
                }

                return(existingSet);
            });
        }
Пример #2
0
        /// <summary>
        /// Tries to remove producer.
        /// </summary>
        public bool TryRemoveProducer(PipStableId producer)
        {
            if (m_producedPaths.ContainsKey(producer))
            {
                m_producedPaths.AddOrUpdate(
                    producer,
                    (HashSet <AbsolutePath>)null,
                    (p, nullValue) => new HashSet <AbsolutePath>(),
                    (p, nullValue, existingSet) =>
                {
                    foreach (var path in existingSet)
                    {
                        m_pipProducers.TryRemove(path, out var dummyId);
                    }

                    return(new HashSet <AbsolutePath>());
                });

                return(true);
            }

            return(false);
        }
Пример #3
0
 /// <summary>
 /// Tries to remove producer by path.
 /// </summary>
 public bool TryRemoveProducer(AbsolutePath path, out PipStableId producer) => m_pipProducers.TryGetValue(path, out producer) && TryRemoveProducer(producer);
Пример #4
0
 /// <summary>
 /// Tries to get producer.
 /// </summary>
 public bool TryGetProducer(AbsolutePath path, out PipStableId producer)
 {
     return(m_pipProducers.TryGetValue(path, out producer));
 }
 /// <summary>
 /// Gets text format of pip stable id.
 /// </summary>
 public static string GetPipIdText(PipOrigins pipOrigins, PipStableId pipStableId)
 {
     Contract.Requires(pipOrigins != null);
     return(pipOrigins.TryGetFingerprint(pipStableId, out ContentFingerprint fingerprint) ? I($"FP:{fingerprint.ToString()}") : I($"PIP_ID:{pipStableId}"));
 }
        /// <summary>
        /// Writes pip fingerprint, given its stable id.
        /// </summary>
        public static void WritePipFingerprint(TextWriter writer, PipOrigins pipOrigins, PipStableId pipStableId)
        {
            Contract.Requires(writer != null);
            Contract.Requires(pipOrigins != null);

            writer.Write(GetPipIdText(pipOrigins, pipStableId));
        }
Пример #7
0
 /// <summary>
 /// Writes <see cref="PipStableId"/>.
 /// </summary>
 internal static void Write(this BinaryWriter writer, PipStableId pipStableId) => writer.Write((int)pipStableId);