View difference between Paste ID: yHcqpskE and grTTzswe
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
    }