|
@@ -16,6 +16,7 @@ import {EnumerableSet} from "./EnumerableSet.sol";
|
|
|
* - Entries are added, removed, and checked for existence in constant time
|
|
|
* (O(1)).
|
|
|
* - Entries are enumerated in O(n). No guarantees are made on the ordering.
|
|
|
+ * - Map can be cleared (all entries removed) in O(n).
|
|
|
*
|
|
|
* ```solidity
|
|
|
* contract Example {
|
|
@@ -90,6 +91,20 @@ library EnumerableMap {
|
|
|
return map._keys.remove(key);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(Bytes32ToBytes32Map storage map) internal {
|
|
|
+ uint256 len = length(map);
|
|
|
+ for (uint256 i = 0; i < len; ++i) {
|
|
|
+ delete map._values[map._keys.at(i)];
|
|
|
+ }
|
|
|
+ map._keys.clear();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -185,6 +200,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, bytes32(key));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(UintToUintMap storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -278,6 +303,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, bytes32(key));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(UintToAddressMap storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -371,6 +406,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, bytes32(key));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(UintToBytes32Map storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -464,6 +509,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, bytes32(uint256(uint160(key))));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(AddressToUintMap storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -557,6 +612,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, bytes32(uint256(uint160(key))));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(AddressToAddressMap storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -650,6 +715,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, bytes32(uint256(uint160(key))));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(AddressToBytes32Map storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -743,6 +818,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, key);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(Bytes32ToUintMap storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|
|
@@ -836,6 +921,16 @@ library EnumerableMap {
|
|
|
return remove(map._inner, key);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @dev Removes all the entries from a map. O(n).
|
|
|
+ *
|
|
|
+ * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
|
|
|
+ * function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
|
|
|
+ */
|
|
|
+ function clear(Bytes32ToAddressMap storage map) internal {
|
|
|
+ clear(map._inner);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @dev Returns true if the key is in the map. O(1).
|
|
|
*/
|