anylist

Crates.ioanylist
lib.rsanylist
version0.6.4
sourcesrc
created_at2024-01-06 23:19:45.519182
updated_at2024-02-17 14:42:04.337576
descriptiona list type for any type
homepage
repositoryhttps://github.com/jjmartinodev/anylist
max_upload_size
id1091300
size13,379
sugmaboy (jjmartinodev)

documentation

README

AnyList

AnyList works as a Vec but without generics in it's type.

without having a generic it's type, you can make a list of lists that have different types.

the only issue this creates is having to use the correct type in every function because all of them need a generic, exept for the implementations that don't need it on their arguments(ej: remove, pop).

if a wrong type it's used, then the API will panic.

the only purpose of this is to out perform an Vec<Box>, which generates fragmentation and indirection, with an extra pointer. and to be able to use implementations like pop and remove, without needing generics in their functions.

implementation made by SkiFire13 in reddit.

Example:

fn main() {
   let mut list = AnyList::new::<u32>();

   list.push::<u32>(1);
   list.insert::<u32>(1, 2);
   list.push::<u32>(3);

   assert_eq!(list.as_slice::<u32>(), &[1,2,3]);

   list.untyped_remove(0);

   assert_eq!(list.as_slice::<u32>(), &[2,3]);

   list.untyped_pop();

   assert_eq!(list.as_slice::<u32>(), &[2]);
   
   list.insert::<u32>(0, 1);
   
   for i in 0..list.len() {
     println!("{:?}", list.get::<u32>(i).unwrap())
   }

   assert_eq!(list.as_slice::<u32>(), &[1,2]);
}
Commit count: 0

cargo fmt