@@ -29,8 +29,7 @@ class ChunkedStream {
29
29
this . pos = 0 ;
30
30
this . end = length ;
31
31
this . chunkSize = chunkSize ;
32
- this . loadedChunks = [ ] ;
33
- this . numChunksLoaded = 0 ;
32
+ this . _loadedChunks = new Set ( ) ;
34
33
this . numChunks = Math . ceil ( length / chunkSize ) ;
35
34
this . manager = manager ;
36
35
this . progressiveDataLength = 0 ;
@@ -42,7 +41,7 @@ class ChunkedStream {
42
41
getMissingChunks ( ) {
43
42
const chunks = [ ] ;
44
43
for ( let chunk = 0 , n = this . numChunks ; chunk < n ; ++ chunk ) {
45
- if ( ! this . loadedChunks [ chunk ] ) {
44
+ if ( ! this . _loadedChunks . has ( chunk ) ) {
46
45
chunks . push ( chunk ) ;
47
46
}
48
47
}
@@ -53,6 +52,10 @@ class ChunkedStream {
53
52
return [ this ] ;
54
53
}
55
54
55
+ get numChunksLoaded ( ) {
56
+ return this . _loadedChunks . size ;
57
+ }
58
+
56
59
allChunksLoaded ( ) {
57
60
return this . numChunksLoaded === this . numChunks ;
58
61
}
@@ -75,10 +78,9 @@ class ChunkedStream {
75
78
const endChunk = Math . floor ( ( end - 1 ) / chunkSize ) + 1 ;
76
79
77
80
for ( let curChunk = beginChunk ; curChunk < endChunk ; ++ curChunk ) {
78
- if ( ! this . loadedChunks [ curChunk ] ) {
79
- this . loadedChunks [ curChunk ] = true ;
80
- ++ this . numChunksLoaded ;
81
- }
81
+ // Since a value can only occur *once* in a `Set`, there's no need to
82
+ // manually check `Set.prototype.has()` before adding the value here.
83
+ this . _loadedChunks . add ( curChunk ) ;
82
84
}
83
85
}
84
86
@@ -95,10 +97,9 @@ class ChunkedStream {
95
97
: Math . floor ( position / this . chunkSize ) ;
96
98
97
99
for ( let curChunk = beginChunk ; curChunk < endChunk ; ++ curChunk ) {
98
- if ( ! this . loadedChunks [ curChunk ] ) {
99
- this . loadedChunks [ curChunk ] = true ;
100
- ++ this . numChunksLoaded ;
101
- }
100
+ // Since a value can only occur *once* in a `Set`, there's no need to
101
+ // manually check `Set.prototype.has()` before adding the value here.
102
+ this . _loadedChunks . add ( curChunk ) ;
102
103
}
103
104
}
104
105
@@ -112,7 +113,7 @@ class ChunkedStream {
112
113
return ;
113
114
}
114
115
115
- if ( ! this . loadedChunks [ chunk ] ) {
116
+ if ( ! this . _loadedChunks . has ( chunk ) ) {
116
117
throw new MissingDataException ( pos , pos + 1 ) ;
117
118
}
118
119
this . lastSuccessfulEnsureByteChunk = chunk ;
@@ -130,7 +131,7 @@ class ChunkedStream {
130
131
const beginChunk = Math . floor ( begin / chunkSize ) ;
131
132
const endChunk = Math . floor ( ( end - 1 ) / chunkSize ) + 1 ;
132
133
for ( let chunk = beginChunk ; chunk < endChunk ; ++ chunk ) {
133
- if ( ! this . loadedChunks [ chunk ] ) {
134
+ if ( ! this . _loadedChunks . has ( chunk ) ) {
134
135
throw new MissingDataException ( begin , end ) ;
135
136
}
136
137
}
@@ -140,15 +141,15 @@ class ChunkedStream {
140
141
const numChunks = this . numChunks ;
141
142
for ( let i = 0 ; i < numChunks ; ++ i ) {
142
143
const chunk = ( beginChunk + i ) % numChunks ; // Wrap around to beginning.
143
- if ( ! this . loadedChunks [ chunk ] ) {
144
+ if ( ! this . _loadedChunks . has ( chunk ) ) {
144
145
return chunk ;
145
146
}
146
147
}
147
148
return null ;
148
149
}
149
150
150
151
hasChunk ( chunk ) {
151
- return ! ! this . loadedChunks [ chunk ] ;
152
+ return this . _loadedChunks . has ( chunk ) ;
152
153
}
153
154
154
155
get length ( ) {
@@ -286,7 +287,7 @@ class ChunkedStream {
286
287
const endChunk = Math . floor ( ( this . end - 1 ) / chunkSize ) + 1 ;
287
288
const missingChunks = [ ] ;
288
289
for ( let chunk = beginChunk ; chunk < endChunk ; ++ chunk ) {
289
- if ( ! this . loadedChunks [ chunk ] ) {
290
+ if ( ! this . _loadedChunks . has ( chunk ) ) {
290
291
missingChunks . push ( chunk ) ;
291
292
}
292
293
}
0 commit comments