651 {
652 byte b = (byte)((!PathInternal.IsDirectorySeparator(first[
first.Length - 1]) && !PathInternal.IsDirectorySeparator(second[0])) ? 1 : 0);
653 byte b2 = (byte)((!PathInternal.IsDirectorySeparator(second[
second.Length - 1]) && !PathInternal.IsDirectorySeparator(third[0])) ? 1 : 0);
655 {
657 {
659 {
660 Join3Payload join3Payload =
new Join3Payload(first2,
first.Length, second2,
second.Length, third2,
third.Length, (
byte)(b | (b2 << 1)));
661 return string.Create(
first.Length +
second.Length +
third.Length + b + b2, (IntPtr)(&join3Payload), delegate(Span<char>
destination, IntPtr statePtr)
662 {
663 ref Join3Payload reference = ref *(Join3Payload*)(void*)statePtr;
664 new Span<char>(reference.First, reference.FirstLength).CopyTo(
destination);
665 if (((uint)reference.Separators & (true ? 1u : 0u)) != 0)
666 {
668 }
669 new Span<char>(reference.Second, reference.SecondLength).CopyTo(
destination.Slice(reference.FirstLength + (reference.Separators & 1)));
670 if ((reference.Separators & 2u) != 0)
671 {
672 destination[destination.Length - reference.ThirdLength - 1] =
'\\';
673 }
674 new Span<char>(reference.Third, reference.ThirdLength).CopyTo(
destination.Slice(
destination.Length - reference.ThirdLength));
675 });
676 }
677 }
678 }
679 }