public static Range CompileRange(string value) { Range range = new Range(); range._value = value; if (string.IsNullOrEmpty(value)) { range.Type = RangeType.Bytes; range.Start = -1; range.End = -1; } else { var p = value.Split("=".ToCharArray()); var bytes = p[1].Split("-".ToCharArray()); range.Type = (RangeType)Enum.Parse(typeof(RangeType), p[0], true); range.Start = long.Parse(bytes[0]); if (string.IsNullOrEmpty(bytes[1])) range.End = -1; else range.End = long.Parse(bytes[1]); } return range; }
public static Range[] Parse(string range) { string[] buf = range.Split("=".ToCharArray(), 2, StringSplitOptions.None); List<Range> res = new List<Range>(); string unit = buf[0]; if (string.IsNullOrEmpty(buf[1])) { res.Add(new Range() { Unit = unit }); return res.ToArray(); } buf = buf[1].Split(",".ToCharArray()); foreach (var sr in buf) { Range r = new Range(); r.Unit = unit; var rbuf = sr.Split("-".ToCharArray(), 2, StringSplitOptions.None); if (string.IsNullOrEmpty(rbuf[0])) r.From = null; else r.From = long.Parse(rbuf[0]); if (string.IsNullOrEmpty(rbuf[1])) r.To = null; else r.To = long.Parse(rbuf[1]); res.Add(r); } return res.ToArray(); }