1
1
// Copyright (c) 2023, Sudipto Chandra
2
2
// All rights reserved. Check LICENSE file for details.
3
3
4
+ import 'dart:typed_data' ;
5
+
4
6
import 'package:hashlib_codecs/src/core/byte.dart' ;
5
7
import 'package:hashlib_codecs/src/core/codec.dart' ;
6
8
@@ -14,25 +16,31 @@ class _Base2Encoder extends ByteEncoder {
14
16
const _Base2Encoder () : super (bits: 2 );
15
17
16
18
@override
17
- Iterable <int > convert (Iterable <int > input) sync * {
18
- for (int x in input) {
19
- yield _zero + ((x >>> 7 ) & 1 );
20
- yield _zero + ((x >>> 6 ) & 1 );
21
- yield _zero + ((x >>> 5 ) & 1 );
22
- yield _zero + ((x >>> 4 ) & 1 );
23
- yield _zero + ((x >>> 3 ) & 1 );
24
- yield _zero + ((x >>> 2 ) & 1 );
25
- yield _zero + ((x >>> 1 ) & 1 );
26
- yield _zero + ((x) & 1 );
19
+ Iterable <int > convert (Iterable <int > input) {
20
+ int i, p, x;
21
+ List <int > list = input is List <int > ? input : input.toList ();
22
+ var result = Uint8List (list.length << 3 );
23
+ for (i = p = 0 ; p < list.length; p++ , i += 8 ) {
24
+ x = list[p];
25
+ result[i] = _zero + ((x >>> 7 ) & 1 );
26
+ result[i + 1 ] = _zero + ((x >>> 6 ) & 1 );
27
+ result[i + 2 ] = _zero + ((x >>> 5 ) & 1 );
28
+ result[i + 3 ] = _zero + ((x >>> 4 ) & 1 );
29
+ result[i + 4 ] = _zero + ((x >>> 3 ) & 1 );
30
+ result[i + 5 ] = _zero + ((x >>> 2 ) & 1 );
31
+ result[i + 6 ] = _zero + ((x >>> 1 ) & 1 );
32
+ result[i + 7 ] = _zero + ((x) & 1 );
27
33
}
34
+ return result;
28
35
}
29
36
}
30
37
31
38
class _Base2Decoder extends ByteDecoder {
32
39
const _Base2Decoder () : super (bits: 2 );
33
40
34
41
@override
35
- Iterable <int > convert (Iterable <int > input) sync * {
42
+ Iterable <int > convert (Iterable <int > input) {
43
+ List <int > out = < int > [];
36
44
int p, n, x, y;
37
45
p = n = 0 ;
38
46
for (y in input) {
@@ -44,14 +52,15 @@ class _Base2Decoder extends ByteDecoder {
44
52
p = (p << 1 ) | x;
45
53
n++ ;
46
54
} else {
47
- yield p ;
55
+ out. add (p) ;
48
56
n = 1 ;
49
57
p = x;
50
58
}
51
59
}
52
60
if (n > 0 ) {
53
- yield p ;
61
+ out. add (p) ;
54
62
}
63
+ return out;
55
64
}
56
65
}
57
66
0 commit comments