+ pub fn insert(self, value: V) -> &'a mut V {
+ unsafe { self.entry.insert(Box::new(value) as Box<Any + 'static>).downcast_mut_unchecked() }
+ }
+}
+
+/// `AnyMap` iterator.
+#[derive(Clone)]
+pub struct Iter<'a> {
+ inner: hash_map::Iter<'a, TypeId, Box<Any + 'static>>,
+}
+
+/// `AnyMap` mutable references iterator.
+pub struct IterMut<'a> {
+ inner: hash_map::IterMut<'a, TypeId, Box<Any + 'static>>,
+}
+
+/// `AnyMap` draining iterator.
+pub struct Drain<'a> {
+ inner: hash_map::Drain<'a, TypeId, Box<Any + 'static>>,
+}
+
+/// `AnyMap` move iterator.
+pub struct IntoIter {
+ inner: hash_map::IntoIter<TypeId, Box<Any + 'static>>,
+}
+
+impl<'a> Iterator for Iter<'a> {
+ type Item = &'a Any;
+
+ #[inline]
+ fn next(&mut self) -> Option<&'a Any> {
+ self.inner.next().map(|item| &**item.1)
+ }
+
+ #[inline]
+ fn size_hint(&self) -> (usize, Option<usize>) { self.inner.size_hint() }
+}
+
+impl<'a> Iterator for IterMut<'a> {
+ type Item = &'a mut Any;
+
+ #[inline]
+ fn next(&mut self) -> Option<&'a mut Any> {
+ self.inner.next().map(|item| &mut **item.1)
+ }
+
+ #[inline]
+ fn size_hint(&self) -> (usize, Option<usize>) { self.inner.size_hint() }
+}
+
+impl<'a> Iterator for Drain<'a> {
+ type Item = Box<Any + 'static>;
+
+ #[inline]
+ fn next(&mut self) -> Option<Box<Any + 'static>> {
+ self.inner.next().map(|item| item.1)
+ }
+
+ #[inline]
+ fn size_hint(&self) -> (usize, Option<usize>) { self.inner.size_hint() }
+}
+
+impl Iterator for IntoIter {
+ type Item = Box<Any + 'static>;
+
+ #[inline]
+ fn next(&mut self) -> Option<Box<Any + 'static>> {
+ self.inner.next().map(|item| item.1)