|
@@ -32,6 +32,7 @@ import "./EnumerableSet.sol";
|
|
|
* - `address -> uint256` (`AddressToUintMap`) since v4.6.0
|
|
|
* - `bytes32 -> bytes32` (`Bytes32ToBytes32`) since v4.6.0
|
|
|
* - `uint256 -> uint256` (`UintToUintMap`) since v4.7.0
|
|
|
+ * - `bytes32 -> uint256` (`Bytes32ToUintMap`) since v4.7.0
|
|
|
*
|
|
|
* [WARNING]
|
|
|
* ====
|
|
@@ -433,4 +434,96 @@ library EnumerableMap {
|
|
|
) internal view returns (uint256) {
|
|
|
return uint256(get(map._inner, bytes32(uint256(uint160(key))), errorMessage));
|
|
|
}
|
|
|
+
|
|
|
+ // Bytes32ToUintMap
|
|
|
+
|
|
|
+ struct Bytes32ToUintMap {
|
|
|
+ Bytes32ToBytes32Map _inner;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Adds a key-value pair to a map, or updates the value for an existing
|
|
|
+ * key. O(1).
|
|
|
+ *
|
|
|
+ * Returns true if the key was added to the map, that is if it was not
|
|
|
+ * already present.
|
|
|
+ */
|
|
|
+ function set(
|
|
|
+ Bytes32ToUintMap storage map,
|
|
|
+ bytes32 key,
|
|
|
+ uint256 value
|
|
|
+ ) internal returns (bool) {
|
|
|
+ return set(map._inner, key, bytes32(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Removes a value from a set. O(1).
|
|
|
+ *
|
|
|
+ * Returns true if the key was removed from the map, that is if it was present.
|
|
|
+ */
|
|
|
+ function remove(Bytes32ToUintMap storage map, bytes32 key) internal returns (bool) {
|
|
|
+ return remove(map._inner, key);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Returns true if the key is in the map. O(1).
|
|
|
+ */
|
|
|
+ function contains(Bytes32ToUintMap storage map, bytes32 key) internal view returns (bool) {
|
|
|
+ return contains(map._inner, key);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Returns the number of elements in the map. O(1).
|
|
|
+ */
|
|
|
+ function length(Bytes32ToUintMap storage map) internal view returns (uint256) {
|
|
|
+ return length(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Returns the element stored at position `index` in the set. 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.
|
|
|
+ *
|
|
|
+ * Requirements:
|
|
|
+ *
|
|
|
+ * - `index` must be strictly less than {length}.
|
|
|
+ */
|
|
|
+ function at(Bytes32ToUintMap storage map, uint256 index) internal view returns (bytes32, uint256) {
|
|
|
+ (bytes32 key, bytes32 value) = at(map._inner, index);
|
|
|
+ return (key, uint256(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Tries to returns the value associated with `key`. O(1).
|
|
|
+ * Does not revert if `key` is not in the map.
|
|
|
+ */
|
|
|
+ function tryGet(Bytes32ToUintMap storage map, bytes32 key) internal view returns (bool, uint256) {
|
|
|
+ (bool success, bytes32 value) = tryGet(map._inner, key);
|
|
|
+ return (success, uint256(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Returns the value associated with `key`. O(1).
|
|
|
+ *
|
|
|
+ * Requirements:
|
|
|
+ *
|
|
|
+ * - `key` must be in the map.
|
|
|
+ */
|
|
|
+ function get(Bytes32ToUintMap storage map, bytes32 key) internal view returns (uint256) {
|
|
|
+ return uint256(get(map._inner, key));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Same as {get}, with a custom error message when `key` is not in the map.
|
|
|
+ *
|
|
|
+ * CAUTION: This function is deprecated because it requires allocating memory for the error
|
|
|
+ * message unnecessarily. For custom revert reasons use {tryGet}.
|
|
|
+ */
|
|
|
+ function get(
|
|
|
+ Bytes32ToUintMap storage map,
|
|
|
+ bytes32 key,
|
|
|
+ string memory errorMessage
|
|
|
+ ) internal view returns (uint256) {
|
|
|
+ return uint256(get(map._inner, key, errorMessage));
|
|
|
+ }
|
|
|
}
|