/// <summary> /// Includes the specified span path in the specified span instance and returns the updated span instance. /// If <paramref name="spanToIncludeIn" /> is null, a new span instance is constructed and returned that contains /// the specified include path. /// </summary> /// <param name="spanToIncludeIn"> The span instance to which the include path should be added. May be null </param> /// <param name="pathToInclude"> The include path to add </param> /// <returns> A non-null span instance that contains the specified include path in addition to any paths ut already contained </returns> internal static Span IncludeIn(Span spanToIncludeIn, string pathToInclude) { if (null == spanToIncludeIn) { spanToIncludeIn = new Span(); } spanToIncludeIn.Include(pathToInclude); return spanToIncludeIn; }
/// <summary> /// Returns a span instance that is the union of the two specified span instances. /// If <paramref name="span1" /> and <paramref name="span2" /> are both <c>null</c>, /// then <c>null</c> is returned. /// If <paramref name="span1" /> or <paramref name="span2" /> is null, but the remaining argument is non-null, /// then the non-null argument is returned. /// If neither <paramref name="span1" /> nor <paramref name="span2" /> are null, a new span instance is returned /// that contains the merged span paths from both. /// </summary> /// <param name="span1"> /// The first span instance from which to include span paths; may be <c>null</c> /// </param> /// <param name="span2"> /// The second span instance from which to include span paths; may be <c>null</c> /// </param> /// <returns> /// A span instance representing the union of the two arguments; may be <c>null</c> if both arguments are null /// </returns> internal static Span CopyUnion(Span span1, Span span2) { if (null == span1) { return span2; } if (null == span2) { return span1; } var retSpan = span1.Clone(); foreach (var path in span2.SpanList) { retSpan.AddSpanPath(path); } return retSpan; }
/// <summary> /// Creates a new Span with the same SpanPaths as this Span /// </summary> /// <returns> </returns> internal Span Clone() { var newSpan = new Span(); newSpan.SpanList.AddRange(_spanList); newSpan._cacheKey = _cacheKey; return newSpan; }