|
@@ -156,6 +156,18 @@ library EnumerableMap {
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Return the an array containing all the keys
|
|
|
+ *
|
|
|
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
|
|
|
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
|
|
|
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
|
|
|
+ * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function keys(Bytes32ToBytes32Map storage map) internal view returns (bytes32[] memory) {
|
|
|
+ return map._keys.values();
|
|
|
+ }
|
|
|
+
|
|
|
// UintToUintMap
|
|
|
|
|
|
struct UintToUintMap {
|
|
@@ -174,7 +186,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Removes a value from a set. O(1).
|
|
|
+ * @dev Removes a value from a map. O(1).
|
|
|
*
|
|
|
* Returns true if the key was removed from the map, that is if it was present.
|
|
|
*/
|
|
@@ -197,7 +209,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Returns the element stored at position `index` in the set. O(1).
|
|
|
+ * @dev Returns the element stored at position `index` in the map. O(1).
|
|
|
* Note that there are no guarantees on the ordering of values inside the
|
|
|
* array, and it may change when more values are added or removed.
|
|
|
*
|
|
@@ -240,6 +252,26 @@ library EnumerableMap {
|
|
|
return uint256(get(map._inner, bytes32(key), errorMessage));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Return the an array containing all the keys
|
|
|
+ *
|
|
|
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
|
|
|
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
|
|
|
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
|
|
|
+ * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function keys(UintToUintMap storage map) internal view returns (uint256[] memory) {
|
|
|
+ bytes32[] memory store = keys(map._inner);
|
|
|
+ uint256[] memory result;
|
|
|
+
|
|
|
+ /// @solidity memory-safe-assembly
|
|
|
+ assembly {
|
|
|
+ result := store
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
// UintToAddressMap
|
|
|
|
|
|
struct UintToAddressMap {
|
|
@@ -258,7 +290,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Removes a value from a set. O(1).
|
|
|
+ * @dev Removes a value from a map. O(1).
|
|
|
*
|
|
|
* Returns true if the key was removed from the map, that is if it was present.
|
|
|
*/
|
|
@@ -281,7 +313,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Returns the element stored at position `index` in the set. O(1).
|
|
|
+ * @dev Returns the element stored at position `index` in the map. O(1).
|
|
|
* Note that there are no guarantees on the ordering of values inside the
|
|
|
* array, and it may change when more values are added or removed.
|
|
|
*
|
|
@@ -328,6 +360,26 @@ library EnumerableMap {
|
|
|
return address(uint160(uint256(get(map._inner, bytes32(key), errorMessage))));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Return the an array containing all the keys
|
|
|
+ *
|
|
|
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
|
|
|
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
|
|
|
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
|
|
|
+ * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function keys(UintToAddressMap storage map) internal view returns (uint256[] memory) {
|
|
|
+ bytes32[] memory store = keys(map._inner);
|
|
|
+ uint256[] memory result;
|
|
|
+
|
|
|
+ /// @solidity memory-safe-assembly
|
|
|
+ assembly {
|
|
|
+ result := store
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
// AddressToUintMap
|
|
|
|
|
|
struct AddressToUintMap {
|
|
@@ -346,7 +398,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Removes a value from a set. O(1).
|
|
|
+ * @dev Removes a value from a map. O(1).
|
|
|
*
|
|
|
* Returns true if the key was removed from the map, that is if it was present.
|
|
|
*/
|
|
@@ -369,7 +421,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Returns the element stored at position `index` in the set. O(1).
|
|
|
+ * @dev Returns the element stored at position `index` in the map. O(1).
|
|
|
* Note that there are no guarantees on the ordering of values inside the
|
|
|
* array, and it may change when more values are added or removed.
|
|
|
*
|
|
@@ -416,6 +468,26 @@ library EnumerableMap {
|
|
|
return uint256(get(map._inner, bytes32(uint256(uint160(key))), errorMessage));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Return the an array containing all the keys
|
|
|
+ *
|
|
|
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
|
|
|
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
|
|
|
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
|
|
|
+ * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function keys(AddressToUintMap storage map) internal view returns (address[] memory) {
|
|
|
+ bytes32[] memory store = keys(map._inner);
|
|
|
+ address[] memory result;
|
|
|
+
|
|
|
+ /// @solidity memory-safe-assembly
|
|
|
+ assembly {
|
|
|
+ result := store
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
// Bytes32ToUintMap
|
|
|
|
|
|
struct Bytes32ToUintMap {
|
|
@@ -434,7 +506,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Removes a value from a set. O(1).
|
|
|
+ * @dev Removes a value from a map. O(1).
|
|
|
*
|
|
|
* Returns true if the key was removed from the map, that is if it was present.
|
|
|
*/
|
|
@@ -457,7 +529,7 @@ library EnumerableMap {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @dev Returns the element stored at position `index` in the set. O(1).
|
|
|
+ * @dev Returns the element stored at position `index` in the map. O(1).
|
|
|
* Note that there are no guarantees on the ordering of values inside the
|
|
|
* array, and it may change when more values are added or removed.
|
|
|
*
|
|
@@ -503,4 +575,24 @@ library EnumerableMap {
|
|
|
) internal view returns (uint256) {
|
|
|
return uint256(get(map._inner, key, errorMessage));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Return the an array containing all the keys
|
|
|
+ *
|
|
|
+ * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
|
|
|
+ * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
|
|
|
+ * this function has an unbounded cost, and using it as part of a state-changing function may render the function
|
|
|
+ * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function keys(Bytes32ToUintMap storage map) internal view returns (bytes32[] memory) {
|
|
|
+ bytes32[] memory store = keys(map._inner);
|
|
|
+ bytes32[] memory result;
|
|
|
+
|
|
|
+ /// @solidity memory-safe-assembly
|
|
|
+ assembly {
|
|
|
+ result := store
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|