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 byte asciiCode; |
| 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 | } |