public static void Split(this Utf8Span this_, byte ch, StringSplitOptions options, ref Utf8SpanArray arr)
        {
            arr.data1 = this_;
            var removeEmpty = (options & StringSplitOptions.RemoveEmptyEntries) != 0;

            var index = 0;
            var pos   = 0;

            arr.count = 0;
            while (true)
            {
                var idx = this_.SubstringRaw(pos).IndexOfRaw(ch);
                if (idx == -1)
                {
                    break;
                }
                else
                {
                    idx += pos;
                }
                var length = idx != -1 ? idx - pos : this_.Length() - pos;
                if (!removeEmpty || length != 0)
                {
                    arr.Add(pos, length);
                    index++;
                }
                pos = idx + 1;
            }
            var last = this_.SubstringRaw(pos);

            if (!removeEmpty || last.Length() != 0)
            {
                arr.Add(pos, last.Length());
            }
        }
        public static Utf8Span ReadTo(ref Utf8Span str, byte end)
        {
            var idx = str.IndexOfRaw(end);

            if (idx == -1)
            {
                throw new FormatException();
            }

            var v = str.SubstringRaw(0, idx);

            str = str.SubstringRaw(idx + 1);
            return(v);
        }
        public static int IsLetter(Utf8Span str, int offset)
        {
            str = str.SubstringRaw(offset);
            var ch = str.CharAt(0);

            if (ch >= 'a' && ch <= 'z')
            {
                return(1);
            }
            if (ch >= 'A' && ch <= 'Z')
            {
                return(1);
            }
            if (ch < 128)
            {
                return(0);
            }
            var enu = str.GetEnumerator();

            if (!enu.MoveNext())
            {
                return(0);
            }
            var l = enu.Current;

            if (l > char.MaxValue)
            {
                return(0);
            }
            if (!char.IsLetter((char)l))
            {
                return(0);
            }
            return(new Utf8String(l.ToString()).Length());
        }
 public static Utf8Span TrimEndSimple(this Utf8Span str)
 {
     while (str.Length() != 0 && Utf8Utils.IsWhiteSpace(str.CharAt(str.Length() - 1)))
     {
         str = str.SubstringRaw(0, str.Length() - 1);
     }
     return(str);
 }
 public static bool EndsWithRaw(this Utf8Span str, Utf8Span value, StringComparison comparisonType = StringComparison.Ordinal)
 {
     if (str.Length() < value.Length())
     {
         return(false);
     }
     return(str.SubstringRaw(str.Length() - value.Length()).EqualsRaw(value, comparisonType));
 }
        public static Utf8Span TryCaptureBetween(this Utf8Span str, byte before, byte after)
        {
            var start = str.IndexOfRaw(before);

            if (start == -1)
            {
                return(Utf8Span.Empty);
            }
            str = str.SubstringRaw(start + 1);
            var end = str.IndexOfRaw(after);

            if (end == -1)
            {
                return(Utf8Span.Empty);
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span CaptureBetween(this Utf8Span str, byte before, byte after)
        {
            var start = str.IndexOfRaw(before);

            if (start == -1)
            {
                throw new InvalidDataException();
            }
            str = str.SubstringRaw(start + 1);
            var end = str.IndexOfRaw(after);

            if (end == -1)
            {
                throw new InvalidDataException();
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span TryCaptureBetween(this Utf8Span str, Utf8Span before, Utf8Span after, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var start = str.IndexOfRaw(before, comparisonType);

            if (start == -1)
            {
                return(Utf8Span.Empty);
            }
            str = str.SubstringRaw(start + before.Length());
            var end = str.IndexOfRaw(after, comparisonType);

            if (end == -1)
            {
                return(Utf8Span.Empty);
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span CaptureBetween(this Utf8Span str, Utf8Span before, Utf8Span after, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var start = str.IndexOfRaw(before, comparisonType);

            if (start == -1)
            {
                throw new InvalidDataException();
            }
            str = str.SubstringRaw(start + before.Length());
            var end = str.IndexOfRaw(after, comparisonType);

            if (end == -1)
            {
                throw new InvalidDataException();
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span TryCaptureBefore(this Utf8Span str, byte suffix)
        {
            var end = str.IndexOfRaw(suffix);

            if (end == -1)
            {
                return(Utf8Span.Empty);
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span TryCaptureAfter(this Utf8Span str, byte prefix)
        {
            var start = str.IndexOfRaw(prefix);

            if (start == -1)
            {
                return(Utf8Span.Empty);
            }
            return(str.SubstringRaw(start + 1));
        }
        public static Utf8Span TryCaptureAfter(this Utf8Span str, Utf8Span prefix, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var start = str.IndexOfRaw(prefix, comparisonType);

            if (start == -1)
            {
                return(Utf8Span.Empty);
            }
            return(str.SubstringRaw(start + prefix.Length()));
        }
        public static Utf8Span CaptureBefore(this Utf8Span str, byte suffix)
        {
            var end = str.IndexOfRaw(suffix);

            if (end == -1)
            {
                throw new InvalidDataException();
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span CaptureBefore(this Utf8Span str, Utf8Span suffix, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var end = str.IndexOfRaw(suffix, comparisonType);

            if (end == -1)
            {
                throw new InvalidDataException();
            }
            return(str.SubstringRaw(0, end));
        }
        public static Utf8Span CaptureAfter(this Utf8Span str, Utf8Span prefix, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var start = str.IndexOfRaw(prefix, comparisonType);

            if (start == -1)
            {
                throw new InvalidDataException();
            }
            return(str.SubstringRaw(start + prefix.Length()));
        }
        public static Utf8Span CaptureAfter(this Utf8Span str, byte prefix)
        {
            var start = str.IndexOfRaw(prefix);

            if (start == -1)
            {
                throw new InvalidDataException();
            }
            return(str.SubstringRaw(start + 1));
        }
        public static Utf8Span TryCaptureBefore(this Utf8Span str, Utf8Span suffix, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var end = str.IndexOfRaw(suffix, comparisonType);

            if (end == -1)
            {
                return(Utf8Span.Empty);
            }
            return(str.SubstringRaw(0, end));
        }
Exemplo n.º 18
0
 public            Utf8Span this[int index]
 {
     get
     {
         var b = boundaries[index];
         if (b.Length < 0)
         {
             return(data2.SubstringRaw(b.Start, -b.Length));
         }
         return(data1.SubstringRaw(b.Start, b.Length));
     }
 }
        private static int IndexOfRawCaseInsensitive(Utf8Span str, Utf8Span value)
        {
            var maxToCheck = str.Length() - value.Length();

            for (int i = 0; i <= maxToCheck; i++)
            {
                if (EqualsIgnoreCaseRaw(str.SubstringRaw(i, value.Length()), value))
                {
                    return(i);
                }
            }

            return(-1);
        }
 public static DateTime ParseDateConcatenated(Utf8Span date)
 {
     if (date.Length() != 14)
     {
         throw new FormatException();
     }
     return(new DateTime(
                ParseInt32(date.SubstringRaw(0, 4)),
                ParseInt32(date.SubstringRaw(4, 2)),
                ParseInt32(date.SubstringRaw(6, 2)),
                ParseInt32(date.SubstringRaw(8, 2)),
                ParseInt32(date.SubstringRaw(10, 2)),
                ParseInt32(date.SubstringRaw(12, 2)),
                DateTimeKind.Utc
                ));
 }
 public static DateTime ParseDateSeparated(Utf8Span date)
 {
     if (date.Length() != 19)
     {
         throw new FormatException();
     }
     return(new DateTime(
                ParseInt32(date.SubstringRaw(0, 4)),
                ParseInt32(date.SubstringRaw(5, 2)),
                ParseInt32(date.SubstringRaw(8, 2)),
                ParseInt32(date.SubstringRaw(11, 2)),
                ParseInt32(date.SubstringRaw(14, 2)),
                ParseInt32(date.SubstringRaw(17, 2)),
                DateTimeKind.Utc
                ));
 }
Exemplo n.º 22
0
 public Utf8SpanWithIndex SubstringRaw(int start, int length)
 {
     return(new Utf8SpanWithIndex(Span.SubstringRaw(start, length), this.Index + start));
 }
        public static int IndexOfRaw(this Utf8Span str, byte value, int start)
        {
            var k = str.SubstringRaw(start).IndexOfRaw(value);

            return(k != -1 ? start + k : -1);
        }
        public static int IndexOfRaw(this Utf8Span str, Utf8Span value, int start, StringComparison comparisonType = StringComparison.Ordinal)
        {
            var k = str.SubstringRaw(start).IndexOfRaw(value, comparisonType);

            return(k != -1 ? start + k : -1);
        }