14
14
//
15
15
16
16
extension Array {
17
- @inlinable
18
- init ( reserveCapacity: Int ) {
19
- self = Array < Element > ( )
20
- self . reserveCapacity ( reserveCapacity)
21
- }
22
-
23
- @inlinable
24
- var slice : ArraySlice < Element > {
25
- self [ self . startIndex ..< self . endIndex]
26
- }
27
-
28
- @inlinable
29
- subscript ( safe index: Index ) -> Element ? {
30
- return indices. contains ( index) ? self [ index] : nil
31
- }
17
+ @inlinable
18
+ init ( reserveCapacity: Int ) {
19
+ self = [ Element] ( )
20
+ self . reserveCapacity ( reserveCapacity)
21
+ }
22
+
23
+ @inlinable
24
+ var slice : ArraySlice < Element > {
25
+ self [ self . startIndex..< self . endIndex]
26
+ }
27
+
28
+ @inlinable
29
+ subscript ( safe index: Index ) -> Element ? {
30
+ indices. contains ( index) ? self [ index] : nil
31
+ }
32
32
}
33
33
34
34
extension Array where Element == UInt8 {
35
- public init ( hex: String ) {
36
- self . init ( reserveCapacity: hex. unicodeScalars. lazy. underestimatedCount)
37
- var buffer : UInt8 ?
38
- var skip = hex. hasPrefix ( " 0x " ) ? 2 : 0
39
- for char in hex. unicodeScalars. lazy {
40
- guard skip == 0 else {
41
- skip -= 1
42
- continue
43
- }
44
- guard char. value >= 48 && char. value <= 102 else {
45
- removeAll ( )
46
- return
47
- }
48
- let v : UInt8
49
- let c : UInt8 = UInt8 ( char. value)
50
- switch c {
51
- case let c where c <= 57 :
52
- v = c - 48
53
- case let c where c >= 65 && c <= 70 :
54
- v = c - 55
55
- case let c where c >= 97 :
56
- v = c - 87
57
- default :
58
- removeAll ( )
59
- return
60
- }
61
- if let b = buffer {
62
- append ( b << 4 | v)
63
- buffer = nil
64
- } else {
65
- buffer = v
66
- }
67
- }
68
- if let b = buffer {
69
- append ( b)
35
+ public init ( hex: String ) {
36
+ self . init ( reserveCapacity: hex. unicodeScalars. lazy. underestimatedCount)
37
+ var buffer : UInt8 ?
38
+ var skip = hex. hasPrefix ( " 0x " ) ? 2 : 0
39
+ for char in hex. unicodeScalars. lazy {
40
+ guard skip == 0 else {
41
+ skip -= 1
42
+ continue
43
+ }
44
+ guard char. value >= 48 && char. value <= 102 else {
45
+ removeAll ( )
46
+ return
47
+ }
48
+ let v : UInt8
49
+ let c : UInt8 = UInt8 ( char. value)
50
+ switch c {
51
+ case let c where c <= 57 :
52
+ v = c - 48
53
+ case let c where c >= 65 && c <= 70 :
54
+ v = c - 55
55
+ case let c where c >= 97 :
56
+ v = c - 87
57
+ default :
58
+ removeAll ( )
59
+ return
60
+ }
61
+ if let b = buffer {
62
+ append ( b << 4 | v)
63
+ buffer = nil
64
+ } else {
65
+ buffer = v
66
+ }
67
+ }
68
+ if let b = buffer {
69
+ append ( b)
70
+ }
70
71
}
71
- }
72
-
73
- public func toHexString ( ) -> String {
74
- `lazy` . reduce ( into : " " ) {
75
- var s = String ( $1 , radix : 16 )
76
- if s . count == 1 {
77
- s = " 0 " + s
78
- }
79
- $0 += s
72
+
73
+ public func toHexString ( ) -> String {
74
+ `lazy` . reduce ( into : " " ) {
75
+ var s = String ( $1 , radix : 16 )
76
+ if s . count == 1 {
77
+ s = " 0 " + s
78
+ }
79
+ $0 += s
80
+ }
80
81
}
81
- }
82
82
}
83
83
84
84
extension Array where Element == UInt8 {
85
- /// split in chunks with given chunk size
86
- @available ( * , deprecated)
87
- public func chunks( size chunksize: Int ) -> Array < Array < Element > > {
88
- var words = Array < Array < Element > > ( )
89
- words. reserveCapacity ( count / chunksize)
90
- for idx in stride ( from: chunksize, through: count, by: chunksize) {
91
- words. append ( Array ( self [ idx - chunksize ..< idx] ) ) // slow for large table
92
- }
93
- let remainder = suffix ( count % chunksize)
94
- if !remainder. isEmpty {
95
- words. append ( Array ( remainder) )
85
+ /// split in chunks with given chunk size
86
+ @available ( * , deprecated)
87
+ public func chunks( size chunksize: Int ) -> [ [ Element ] ] {
88
+ var words = [ [ Element] ] ( )
89
+ words. reserveCapacity ( count / chunksize)
90
+ for idx in stride ( from: chunksize, through: count, by: chunksize) {
91
+ words. append ( Array ( self [ idx - chunksize..< idx] ) ) // slow for large table
92
+ }
93
+ let remainder = suffix ( count % chunksize)
94
+ if !remainder. isEmpty {
95
+ words. append ( Array ( remainder) )
96
+ }
97
+ return words
96
98
}
97
- return words
98
- }
99
99
100
- // public func md5() -> [Element] {
101
- // Digest.md5(self)
102
- // }
100
+ // public func md5() -> [Element] {
101
+ // Digest.md5(self)
102
+ // }
103
103
104
- // public func sha1() -> [Element] {
105
- // Digest.sha1(self)
106
- // }
104
+ // public func sha1() -> [Element] {
105
+ // Digest.sha1(self)
106
+ // }
107
107
108
- // public func sha224() -> [Element] {
109
- // Digest.sha224(self)
110
- // }
108
+ // public func sha224() -> [Element] {
109
+ // Digest.sha224(self)
110
+ // }
111
111
112
- public func sha256( ) -> [ Element ] {
113
- Digest . sha256 ( self )
114
- }
112
+ public func sha256( ) -> [ Element ] {
113
+ Digest . sha256 ( self )
114
+ }
115
115
116
- public func sha384( ) -> [ Element ] {
117
- Digest . sha384 ( self )
118
- }
116
+ public func sha384( ) -> [ Element ] {
117
+ Digest . sha384 ( self )
118
+ }
119
119
120
- public func sha512( ) -> [ Element ] {
121
- Digest . sha512 ( self )
122
- }
120
+ public func sha512( ) -> [ Element ] {
121
+ Digest . sha512 ( self )
122
+ }
123
123
124
- public func sha2( _ variant: SHA2 . Variant ) -> [ Element ] {
125
- Digest . sha2 ( self , variant: variant)
126
- }
124
+ public func sha2( _ variant: SHA2 . Variant ) -> [ Element ] {
125
+ Digest . sha2 ( self , variant: variant)
126
+ }
127
127
128
- public func sha3( _ variant: SHA3 . Variant ) -> [ Element ] {
129
- Digest . sha3 ( self , variant: variant)
130
- }
128
+ public func sha3( _ variant: SHA3 . Variant ) -> [ Element ] {
129
+ Digest . sha3 ( self , variant: variant)
130
+ }
131
131
132
- // public func crc32(seed: UInt32? = nil, reflect: Bool = true) -> UInt32 {
133
- // Checksum.crc32(self, seed: seed, reflect: reflect)
134
- // }
132
+ // public func crc32(seed: UInt32? = nil, reflect: Bool = true) -> UInt32 {
133
+ // Checksum.crc32(self, seed: seed, reflect: reflect)
134
+ // }
135
135
136
- // public func crc32c(seed: UInt32? = nil, reflect: Bool = true) -> UInt32 {
137
- // Checksum.crc32c(self, seed: seed, reflect: reflect)
138
- // }
136
+ // public func crc32c(seed: UInt32? = nil, reflect: Bool = true) -> UInt32 {
137
+ // Checksum.crc32c(self, seed: seed, reflect: reflect)
138
+ // }
139
139
140
- // public func crc16(seed: UInt16? = nil) -> UInt16 {
141
- // Checksum.crc16(self, seed: seed)
142
- // }
140
+ // public func crc16(seed: UInt16? = nil) -> UInt16 {
141
+ // Checksum.crc16(self, seed: seed)
142
+ // }
143
143
144
- // public func encrypt(cipher: Cipher) throws -> [Element] {
145
- // try cipher.encrypt(self.slice)
146
- // }
144
+ // public func encrypt(cipher: Cipher) throws -> [Element] {
145
+ // try cipher.encrypt(self.slice)
146
+ // }
147
147
148
- // public func decrypt(cipher: Cipher) throws -> [Element] {
149
- // try cipher.decrypt(self.slice)
150
- // }
148
+ // public func decrypt(cipher: Cipher) throws -> [Element] {
149
+ // try cipher.decrypt(self.slice)
150
+ // }
151
151
152
- public func authenticate< A: Authenticator > ( with authenticator: A ) throws -> [ Element ] {
153
- try authenticator. authenticate ( self )
154
- }
155
- }
152
+ public func authenticate< A: Authenticator > ( with authenticator: A ) throws -> [ Element ] {
153
+ try authenticator. authenticate ( self )
154
+ }
155
+ }
0 commit comments