Lines Matching refs:pool
277 pub fn from_slice(slice: &[T], pool: &mut ListPool<T>) -> Self { in from_slice()
283 let block = pool.alloc(sclass_for_length(len)); in from_slice()
284 pool.data[block] = T::new(len); in from_slice()
285 pool.data[block + 1..=block + len].copy_from_slice(slice); in from_slice()
301 pub fn len(&self, pool: &ListPool<T>) -> usize { in len()
303 pool.len_of(self).unwrap_or(0) in len()
307 pub fn is_valid(&self, pool: &ListPool<T>) -> bool { in is_valid()
309 self.is_empty() || pool.len_of(self) != None in is_valid()
313 pub fn as_slice<'a>(&self, pool: &'a ListPool<T>) -> &'a [T] { in as_slice()
315 match pool.len_of(self) { in as_slice()
317 Some(len) => &pool.data[idx..idx + len], in as_slice()
322 pub fn get(&self, index: usize, pool: &ListPool<T>) -> Option<T> { in get()
323 self.as_slice(pool).get(index).cloned() in get()
327 pub fn first(&self, pool: &ListPool<T>) -> Option<T> { in first()
331 Some(pool.data[self.index as usize]) in first()
336 pub fn as_mut_slice<'a>(&'a mut self, pool: &'a mut ListPool<T>) -> &'a mut [T] { in as_mut_slice()
338 match pool.len_of(self) { in as_mut_slice()
340 Some(len) => &mut pool.data[idx..idx + len], in as_mut_slice()
345 pub fn get_mut<'a>(&'a mut self, index: usize, pool: &'a mut ListPool<T>) -> Option<&'a mut T> { in get_mut()
346 self.as_mut_slice(pool).get_mut(index) in get_mut()
350 pub fn deep_clone(&self, pool: &mut ListPool<T>) -> Self { in deep_clone()
351 match pool.len_of(self) { in deep_clone()
355 let block = pool.alloc(sclass_for_length(len)); in deep_clone()
356 pool.data[block] = T::new(len); in deep_clone()
357 pool.data.copy_within(src..src + len, block + 1); in deep_clone()
370 pub fn clear(&mut self, pool: &mut ListPool<T>) { in clear()
372 match pool.len_of(self) { in clear()
374 Some(len) => pool.free(idx - 1, sclass_for_length(len)), in clear()
389 pub fn push(&mut self, element: T, pool: &mut ListPool<T>) -> usize { in push()
391 match pool.len_of(self) { in push()
395 let block = pool.alloc(sclass_for_length(1)); in push()
396 pool.data[block] = T::new(1); in push()
397 pool.data[block + 1] = element; in push()
408 block = pool.realloc(idx - 1, sclass, sclass + 1, len + 1); in push()
413 pool.data[block + new_len] = element; in push()
414 pool.data[block] = T::new(new_len); in push()
423 fn grow<'a>(&'a mut self, count: usize, pool: &'a mut ListPool<T>) -> &'a mut [T] { in grow()
427 match pool.len_of(self) { in grow()
435 block = pool.alloc(sclass_for_length(new_len)); in grow()
444 block = pool.realloc(idx - 1, sclass, new_sclass, len + 1); in grow()
451 pool.data[block] = T::new(new_len); in grow()
452 &mut pool.data[block + 1..block + 1 + new_len] in grow()
456 pub fn from_iter<I>(elements: I, pool: &mut ListPool<T>) -> Self in from_iter()
461 list.extend(elements, pool); in from_iter()
466 pub fn extend<I>(&mut self, elements: I, pool: &mut ListPool<T>) in extend()
474 let data = self.grow(len, pool); in extend()
481 self.push(x, pool); in extend()
494 pool: &mut ListPool<T>, in copy_from()
497 index <= self.len(pool), in copy_from()
505 let (other_index, other_len) = (other.index, other.len(pool)); in copy_from()
523 self.grow_at(index, count, pool); in copy_from()
524 pool.data in copy_from()
530 pub fn insert(&mut self, index: usize, element: T, pool: &mut ListPool<T>) { in insert()
532 self.push(element, pool); in insert()
535 let seq = self.as_mut_slice(pool); in insert()
548 fn remove_last(&mut self, len: usize, pool: &mut ListPool<T>) { in remove_last()
551 self.clear(pool); in remove_last()
559 block = pool.realloc(block, sclass, sclass - 1, len); in remove_last()
564 pool.data[block] = T::new(len - 1); in remove_last()
568 pub fn remove(&mut self, index: usize, pool: &mut ListPool<T>) { in remove()
571 let seq = self.as_mut_slice(pool); in remove()
581 self.remove_last(len, pool); in remove()
586 pub fn swap_remove(&mut self, index: usize, pool: &mut ListPool<T>) { in swap_remove()
587 let seq = self.as_mut_slice(pool); in swap_remove()
594 self.remove_last(len, pool); in swap_remove()
600 pub fn truncate(&mut self, new_len: usize, pool: &mut ListPool<T>) { in truncate()
602 self.clear(pool); in truncate()
606 match pool.len_of(self) { in truncate()
618 block = pool.realloc(idx - 1, sclass, new_sclass, new_len + 1); in truncate()
623 pool.data[block] = T::new(new_len); in truncate()
633 pub fn grow_at(&mut self, index: usize, count: usize, pool: &mut ListPool<T>) { in grow_at()
634 let data = self.grow(count, pool); in grow_at()
670 let mut pool = ListPool::<Inst>::new(); in block_allocator() localVariable
671 let b1 = pool.alloc(0); in block_allocator()
672 let b2 = pool.alloc(1); in block_allocator()
673 let b3 = pool.alloc(0); in block_allocator()
677 pool.free(b2, 1); in block_allocator()
678 let b2a = pool.alloc(1); in block_allocator()
679 let b2b = pool.alloc(1); in block_allocator()
685 pool.free(b1, 0); in block_allocator()
686 pool.free(b3, 0); in block_allocator()
687 let b1a = pool.alloc(0); in block_allocator()
688 let b3a = pool.alloc(0); in block_allocator()
696 let pool = &mut ListPool::<Inst>::new(); in empty_list() localVariable
701 assert_eq!(ilist.len(pool), 0); in empty_list()
702 assert_eq!(ilist.as_slice(pool), &[]); in empty_list()
703 assert_eq!(ilist.get(0, pool), None); in empty_list()
704 assert_eq!(ilist.get(100, pool), None); in empty_list()
706 assert_eq!(list.as_mut_slice(pool), &[]); in empty_list()
707 assert_eq!(list.get_mut(0, pool), None); in empty_list()
708 assert_eq!(list.get_mut(100, pool), None); in empty_list()
710 list.clear(pool); in empty_list()
712 assert_eq!(list.len(pool), 0); in empty_list()
713 assert_eq!(list.as_slice(pool), &[]); in empty_list()
714 assert_eq!(list.first(pool), None); in empty_list()
719 let pool = &mut ListPool::<Inst>::new(); in from_slice() localVariable
721 let list = EntityList::<Inst>::from_slice(&[Inst(0), Inst(1)], pool); in from_slice()
723 assert_eq!(list.len(pool), 2); in from_slice()
724 assert_eq!(list.as_slice(pool), &[Inst(0), Inst(1)]); in from_slice()
725 assert_eq!(list.get(0, pool), Some(Inst(0))); in from_slice()
726 assert_eq!(list.get(100, pool), None); in from_slice()
728 let list = EntityList::<Inst>::from_slice(&[], pool); in from_slice()
730 assert_eq!(list.len(pool), 0); in from_slice()
731 assert_eq!(list.as_slice(pool), &[]); in from_slice()
732 assert_eq!(list.get(0, pool), None); in from_slice()
733 assert_eq!(list.get(100, pool), None); in from_slice()
738 let pool = &mut ListPool::<Inst>::new(); in push() localVariable
746 assert_eq!(list.push(i1, pool), 0); in push()
747 assert_eq!(list.len(pool), 1); in push()
749 assert_eq!(list.as_slice(pool), &[i1]); in push()
750 assert_eq!(list.first(pool), Some(i1)); in push()
751 assert_eq!(list.get(0, pool), Some(i1)); in push()
752 assert_eq!(list.get(1, pool), None); in push()
754 assert_eq!(list.push(i2, pool), 1); in push()
755 assert_eq!(list.len(pool), 2); in push()
757 assert_eq!(list.as_slice(pool), &[i1, i2]); in push()
758 assert_eq!(list.first(pool), Some(i1)); in push()
759 assert_eq!(list.get(0, pool), Some(i1)); in push()
760 assert_eq!(list.get(1, pool), Some(i2)); in push()
761 assert_eq!(list.get(2, pool), None); in push()
763 assert_eq!(list.push(i3, pool), 2); in push()
764 assert_eq!(list.len(pool), 3); in push()
766 assert_eq!(list.as_slice(pool), &[i1, i2, i3]); in push()
767 assert_eq!(list.first(pool), Some(i1)); in push()
768 assert_eq!(list.get(0, pool), Some(i1)); in push()
769 assert_eq!(list.get(1, pool), Some(i2)); in push()
770 assert_eq!(list.get(2, pool), Some(i3)); in push()
771 assert_eq!(list.get(3, pool), None); in push()
774 assert_eq!(list.push(i4, pool), 3); in push()
775 assert_eq!(list.len(pool), 4); in push()
777 assert_eq!(list.as_slice(pool), &[i1, i2, i3, i4]); in push()
778 assert_eq!(list.first(pool), Some(i1)); in push()
779 assert_eq!(list.get(0, pool), Some(i1)); in push()
780 assert_eq!(list.get(1, pool), Some(i2)); in push()
781 assert_eq!(list.get(2, pool), Some(i3)); in push()
782 assert_eq!(list.get(3, pool), Some(i4)); in push()
783 assert_eq!(list.get(4, pool), None); in push()
785 list.extend([i1, i1, i2, i2, i3, i3, i4, i4].iter().cloned(), pool); in push()
786 assert_eq!(list.len(pool), 12); in push()
788 list.as_slice(pool), in push()
792 let list2 = EntityList::from_iter([i1, i1, i2, i2, i3, i3, i4, i4].iter().cloned(), pool); in push()
793 assert_eq!(list2.len(pool), 8); in push()
794 assert_eq!(list2.as_slice(pool), &[i1, i1, i2, i2, i3, i3, i4, i4]); in push()
799 let pool = &mut ListPool::<Inst>::new(); in insert_remove() localVariable
807 list.insert(0, i4, pool); in insert_remove()
808 assert_eq!(list.as_slice(pool), &[i4]); in insert_remove()
810 list.insert(0, i3, pool); in insert_remove()
811 assert_eq!(list.as_slice(pool), &[i3, i4]); in insert_remove()
813 list.insert(2, i2, pool); in insert_remove()
814 assert_eq!(list.as_slice(pool), &[i3, i4, i2]); in insert_remove()
816 list.insert(2, i1, pool); in insert_remove()
817 assert_eq!(list.as_slice(pool), &[i3, i4, i1, i2]); in insert_remove()
819 list.remove(3, pool); in insert_remove()
820 assert_eq!(list.as_slice(pool), &[i3, i4, i1]); in insert_remove()
822 list.remove(2, pool); in insert_remove()
823 assert_eq!(list.as_slice(pool), &[i3, i4]); in insert_remove()
825 list.remove(0, pool); in insert_remove()
826 assert_eq!(list.as_slice(pool), &[i4]); in insert_remove()
828 list.remove(0, pool); in insert_remove()
829 assert_eq!(list.as_slice(pool), &[]); in insert_remove()
835 let pool = &mut ListPool::<Inst>::new(); in growing() localVariable
844 list.grow_at(0, 0, pool); in growing()
845 assert_eq!(list.len(pool), 0); in growing()
848 list.grow_at(0, 2, pool); in growing()
849 assert_eq!(list.len(pool), 2); in growing()
851 list.as_mut_slice(pool).copy_from_slice(&[i2, i3]); in growing()
853 list.grow_at(1, 0, pool); in growing()
854 assert_eq!(list.as_slice(pool), &[i2, i3]); in growing()
856 list.grow_at(1, 1, pool); in growing()
857 list.as_mut_slice(pool)[1] = i1; in growing()
858 assert_eq!(list.as_slice(pool), &[i2, i1, i3]); in growing()
861 list.grow_at(3, 0, pool); in growing()
862 assert_eq!(list.as_slice(pool), &[i2, i1, i3]); in growing()
865 list.grow_at(3, 1, pool); in growing()
866 list.as_mut_slice(pool)[3] = i4; in growing()
867 assert_eq!(list.as_slice(pool), &[i2, i1, i3, i4]); in growing()
872 let pool = &mut ListPool::<Inst>::new(); in deep_clone() localVariable
879 let mut list1 = EntityList::from_slice(&[i1, i2, i3], pool); in deep_clone()
880 let list2 = list1.deep_clone(pool); in deep_clone()
881 assert_eq!(list1.as_slice(pool), &[i1, i2, i3]); in deep_clone()
882 assert_eq!(list2.as_slice(pool), &[i1, i2, i3]); in deep_clone()
884 list1.as_mut_slice(pool)[0] = i4; in deep_clone()
885 assert_eq!(list1.as_slice(pool), &[i4, i2, i3]); in deep_clone()
886 assert_eq!(list2.as_slice(pool), &[i1, i2, i3]); in deep_clone()
891 let pool = &mut ListPool::<Inst>::new(); in truncate() localVariable
898 let mut list = EntityList::from_slice(&[i1, i2, i3, i4, i1, i2, i3, i4], pool); in truncate()
899 assert_eq!(list.as_slice(pool), &[i1, i2, i3, i4, i1, i2, i3, i4]); in truncate()
900 list.truncate(6, pool); in truncate()
901 assert_eq!(list.as_slice(pool), &[i1, i2, i3, i4, i1, i2]); in truncate()
902 list.truncate(9, pool); in truncate()
903 assert_eq!(list.as_slice(pool), &[i1, i2, i3, i4, i1, i2]); in truncate()
904 list.truncate(2, pool); in truncate()
905 assert_eq!(list.as_slice(pool), &[i1, i2]); in truncate()
906 list.truncate(0, pool); in truncate()
912 let pool = &mut ListPool::<Inst>::new(); in copy_from() localVariable
919 let mut list = EntityList::from_slice(&[i1, i2, i3, i4], pool); in copy_from()
920 assert_eq!(list.as_slice(pool), &[i1, i2, i3, i4]); in copy_from()
921 let list2 = EntityList::from_slice(&[i4, i3, i2, i1], pool); in copy_from()
922 assert_eq!(list2.as_slice(pool), &[i4, i3, i2, i1]); in copy_from()
923 list.copy_from(&list2, 0..0, 0, pool); in copy_from()
924 assert_eq!(list.as_slice(pool), &[i1, i2, i3, i4]); in copy_from()
925 list.copy_from(&list2, 0..4, 0, pool); in copy_from()
926 assert_eq!(list.as_slice(pool), &[i4, i3, i2, i1, i1, i2, i3, i4]); in copy_from()
932 let pool = &mut ListPool::<Inst>::new(); in copy_from_self() localVariable
939 let mut list = EntityList::from_slice(&[i4, i3, i2, i1, i1, i2, i3, i4], pool); in copy_from_self()
941 assert_eq!(list.as_slice(pool), &[i4, i3, i2, i1, i1, i2, i3, i4]); in copy_from_self()
943 list.copy_from(&list_again, 0..=1, 8, pool); in copy_from_self()
945 list.as_slice(pool), in copy_from_self()
948 list.copy_from(&list_again, .., 7, pool); in copy_from_self()
950 list.as_slice(pool), in copy_from_self()