Skip to content

Commit f204227

Browse files
authored
Merge pull request #161 from solidstate-network/optimize-enumerable-set
Optimize `EnumerableSet#toArray` functions
2 parents e9f741c + 8c2e7c4 commit f204227

File tree

1 file changed

+11
-28
lines changed

1 file changed

+11
-28
lines changed

contracts/data/EnumerableSet.sol

+11-28
Original file line numberDiff line numberDiff line change
@@ -155,50 +155,37 @@ library EnumerableSet {
155155
view
156156
returns (bytes32[] memory)
157157
{
158-
uint256 len = _length(set._inner);
159-
bytes32[] memory arr = new bytes32[](len);
160-
161-
unchecked {
162-
for (uint256 index; index < len; ++index) {
163-
arr[index] = at(set, index);
164-
}
165-
}
166-
167-
return arr;
158+
return set._inner._values;
168159
}
169160

170161
function toArray(AddressSet storage set)
171162
internal
172163
view
173164
returns (address[] memory)
174165
{
175-
uint256 len = _length(set._inner);
176-
address[] memory arr = new address[](len);
166+
bytes32[] storage values = set._inner._values;
167+
address[] storage array;
177168

178-
unchecked {
179-
for (uint256 index; index < len; ++index) {
180-
arr[index] = at(set, index);
181-
}
169+
assembly {
170+
array.slot := values.slot
182171
}
183172

184-
return arr;
173+
return array;
185174
}
186175

187176
function toArray(UintSet storage set)
188177
internal
189178
view
190179
returns (uint256[] memory)
191180
{
192-
uint256 len = _length(set._inner);
193-
uint256[] memory arr = new uint256[](len);
181+
bytes32[] storage values = set._inner._values;
182+
uint256[] storage array;
194183

195-
unchecked {
196-
for (uint256 index; index < len; ++index) {
197-
arr[index] = at(set, index);
198-
}
184+
assembly {
185+
array.slot := values.slot
199186
}
200187

201-
return arr;
188+
return array;
202189
}
203190

204191
function _at(Set storage set, uint256 index)
@@ -238,8 +225,6 @@ library EnumerableSet {
238225
set._values.push(value);
239226
set._indexes[value] = set._values.length;
240227
return true;
241-
} else {
242-
return false;
243228
}
244229
}
245230

@@ -261,8 +246,6 @@ library EnumerableSet {
261246
delete set._indexes[value];
262247

263248
return true;
264-
} else {
265-
return false;
266249
}
267250
}
268251
}

0 commit comments

Comments
 (0)