-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStringPointer.cs
62 lines (54 loc) · 1.53 KB
/
StringPointer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
namespace ExRegex
{
/// <summary>
/// 文字列と現在位置を表す。(イミュータブルってしってる?)
/// </summary>
public class StringPointer
{
/// <summary>
/// 生文字列
/// </summary>
public readonly string RawStr;
/// <summary>
/// 現在位置
/// </summary>
public int Pointer { get; }
public StringPointer(string str)
{
RawStr = str;
}
private StringPointer(string str, int pointer) : this(str)
{
Pointer = pointer;
}
/// <summary>
/// 文字列化する
/// </summary>
/// <returns></returns>
public string Value()
{
return RawStr.Substring(Pointer);
}
public int Length { get { return RawStr.Length - Pointer; } }
/// <summary>
/// ポインタを進める
/// </summary>
/// <param name="startIndex"></param>
public StringPointer SubString(int startIndex)
{
return new StringPointer(RawStr,Pointer+startIndex);
}
/// <summary>
/// C#はキャストをオーバーロードできる!!!素晴らしい!!!
/// </summary>
/// <param name="str"></param>
public static explicit operator StringPointer (string str)
{
return new StringPointer(str);
}
public override string ToString()
{
return Value();
}
}
}