SHOW:
|
|
- or go back to the newest paste.
1 | public struct ASCIIChar | |
2 | { | |
3 | public static implicit operator Char(ASCIIChar value) | |
4 | { | |
5 | return (char)value.asciiCode; | |
6 | } | |
7 | ||
8 | public static bool ValidateByte(byte value) | |
9 | { | |
10 | return value >= 0 && value <= 127; | |
11 | } | |
12 | public static bool IsControl(byte value) | |
13 | { | |
14 | return (value >= 0 && value <= 31) || | |
15 | value == 127; | |
16 | } | |
17 | public static bool IsDigit(byte value) | |
18 | { | |
19 | return value >= 48 && value <= 57; | |
20 | } | |
21 | public static bool IsLetter(byte value) | |
22 | { | |
23 | return (value >= 65 && value <= 90) || | |
24 | (value >= 97 && value <= 122); | |
25 | } | |
26 | public static bool IsLetterOrDigit(byte value) | |
27 | { | |
28 | return (value >= 48 && value <= 57) || | |
29 | (value >= 65 && value <= 90) || | |
30 | (value >= 97 && value <= 122); | |
31 | } | |
32 | public static bool IsLower(byte value) | |
33 | { | |
34 | return value >= 97 && value <= 122; | |
35 | } | |
36 | public static bool IsPunctuation(byte value) | |
37 | { | |
38 | return (value >= 33 && value <= 35) || | |
39 | (value >= 37 && value <= 42) || | |
40 | (value >= 44 && value <= 47) || | |
41 | (value >= 58 && value <= 59) || | |
42 | (value >= 63 && value <= 64) || | |
43 | (value >= 91 && value <= 93) || | |
44 | value == 95 || | |
45 | value == 123 || | |
46 | value == 125; | |
47 | } | |
48 | public static bool IsSymbol(byte value) | |
49 | { | |
50 | return value == 36 || | |
51 | value == 43 || | |
52 | (value >= 60 && value <= 62) || | |
53 | value == 94 || | |
54 | value == 96 || | |
55 | value == 124 || | |
56 | value == 126; | |
57 | } | |
58 | public static bool IsUpper(byte value) | |
59 | { | |
60 | return value >= 65 && value <= 90; | |
61 | } | |
62 | public static bool IsWhitespace(byte value) | |
63 | { | |
64 | return value == 0 || (value >= 9 && value <= 13) || value == 32; | |
65 | ||
66 | } | |
67 | public static byte ToLower(byte value) | |
68 | { | |
69 | if (ASCIIChar.IsUpper(value)) return (byte)(value - 32); | |
70 | return value; | |
71 | } | |
72 | public static byte ToUpper(byte value) | |
73 | { | |
74 | if (ASCIIChar.IsLower(value)) return (byte)(value + 32); | |
75 | return value; | |
76 | } | |
77 | ||
78 | private readonly byte asciiCode; | |
79 | ||
80 | public int CompareTo(ASCIIChar value) | |
81 | { | |
82 | return this.asciiCode.CompareTo(value.asciiCode); | |
83 | } | |
84 | public bool Equals(ASCIIChar value) | |
85 | { | |
86 | return this.asciiCode.Equals(value.asciiCode); | |
87 | } | |
88 | public bool IsControl() | |
89 | { | |
90 | return ASCIIChar.IsControl(this.asciiCode); | |
91 | } | |
92 | public bool IsDigit() | |
93 | { | |
94 | return ASCIIChar.IsDigit(this.asciiCode); | |
95 | } | |
96 | public bool IsLetter() | |
97 | { | |
98 | return ASCIIChar.IsLetter(this.asciiCode); | |
99 | } | |
100 | public bool IsLetterOrDigit() | |
101 | { | |
102 | return ASCIIChar.IsLetterOrDigit(this.asciiCode); | |
103 | } | |
104 | public bool IsLower() | |
105 | { | |
106 | return ASCIIChar.IsLower(this.asciiCode); | |
107 | } | |
108 | public bool IsPunctuation() | |
109 | { | |
110 | return ASCIIChar.IsPunctuation(this.asciiCode); | |
111 | } | |
112 | public bool IsSymbol() | |
113 | { | |
114 | return ASCIIChar.IsSymbol(this.asciiCode); | |
115 | } | |
116 | public bool IsUpper() | |
117 | { | |
118 | return ASCIIChar.IsUpper(this.asciiCode); | |
119 | } | |
120 | public bool IsWhitespace() | |
121 | { | |
122 | return ASCIIChar.IsWhitespace(this.asciiCode); | |
123 | ||
124 | } | |
125 | public ASCIIChar ToLower() | |
126 | { | |
127 | if (this.IsUpper()) | |
128 | { | |
129 | return new ASCIIChar((byte)(this.asciiCode + 32)); | |
130 | } | |
131 | ||
132 | return this; | |
133 | } | |
134 | public byte ToByte() | |
135 | { | |
136 | return this.asciiCode; | |
137 | } | |
138 | public char ToChar() | |
139 | { | |
140 | return (char)this.asciiCode; | |
141 | } | |
142 | public override string ToString() | |
143 | { | |
144 | return this.ToChar().ToString(); | |
145 | } | |
146 | public ASCIIString ToASCIIString() | |
147 | { | |
148 | return new ASCIIString(new byte[] { this.asciiCode }, 0, 1); | |
149 | } | |
150 | public ASCIIChar ToUpper() | |
151 | { | |
152 | if (this.IsLower()) | |
153 | { | |
154 | return new ASCIIChar((byte)(this.asciiCode - 32)); | |
155 | } | |
156 | ||
157 | return this; | |
158 | } | |
159 | ||
160 | public ASCIIChar(byte asciiCode) | |
161 | { | |
162 | if (!ASCIIChar.ValidateByte(asciiCode)) | |
163 | { | |
164 | throw new ArgumentOutOfRangeException("asciiCode"); | |
165 | } | |
166 | ||
167 | this.asciiCode = asciiCode; | |
168 | } | |
169 | ||
170 | public static ASCIIChar Parse(char value) | |
171 | { | |
172 | if (value < 0 || value > 127) | |
173 | { | |
174 | throw new ArgumentOutOfRangeException("value"); | |
175 | } | |
176 | ||
177 | return new ASCIIChar((byte)value); | |
178 | } | |
179 | public static ASCIIChar Parse(string value) | |
180 | { | |
181 | if (value == null) | |
182 | { | |
183 | throw new ArgumentNullException("value"); | |
184 | } | |
185 | ||
186 | if (value.Length != 1) | |
187 | { | |
188 | throw new FormatException(); | |
189 | } | |
190 | ||
191 | if (value[0] > 127) | |
192 | { | |
193 | throw new ArgumentOutOfRangeException("value"); | |
194 | } | |
195 | ||
196 | return new ASCIIChar((byte)value[0]); | |
197 | } | |
198 | } |