Added new Remove/RetainAll function to Collection
This commit is contained in:
		
							parent
							
								
									d18a35d9b7
								
							
						
					
					
						commit
						b90a9ec7d8
					
				@ -1,5 +1,8 @@
 | 
				
			|||||||
# Changelog of versions
 | 
					# Changelog of versions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Version 0.4.5
 | 
				
			||||||
 | 
					- Added: removeAll/retainAll(Collection c, Consumer r) which receives all the elements that got deleted from the collection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Version 0.4.4
 | 
					### Version 0.4.4
 | 
				
			||||||
- Fixed: ObjectArrayList.of was causing crashes because of a Poor implementation.
 | 
					- Fixed: ObjectArrayList.of was causing crashes because of a Poor implementation.
 | 
				
			||||||
- Added: Unsorted HashMaps/Sets now throw Concurrent exceptions if they were modified during a rehash.
 | 
					- Added: Unsorted HashMaps/Sets now throw Concurrent exceptions if they were modified during a rehash.
 | 
				
			||||||
 | 
				
			|||||||
@ -3,9 +3,13 @@ package speiger.src.collections.PACKAGE.collections;
 | 
				
			|||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.Objects;
 | 
					import java.util.Objects;
 | 
				
			||||||
import java.util.AbstractCollection;
 | 
					import java.util.AbstractCollection;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
					import java.util.function.Consumer;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import speiger.src.collections.PACKAGE.collections.COLLECTION;
 | 
					import speiger.src.collections.PACKAGE.collections.COLLECTION;
 | 
				
			||||||
#if !TYPE_OBJECT
 | 
					#if !TYPE_OBJECT
 | 
				
			||||||
 | 
					import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
					import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -79,6 +83,7 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean containsAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
						public boolean containsAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
				
			||||||
		Objects.requireNonNull(c);
 | 
							Objects.requireNonNull(c);
 | 
				
			||||||
 | 
							if(c.isEmpty()) return true;
 | 
				
			||||||
		for(ITERATOR KEY_GENERIC_TYPE iter = c.iterator();iter.hasNext();)
 | 
							for(ITERATOR KEY_GENERIC_TYPE iter = c.iterator();iter.hasNext();)
 | 
				
			||||||
			if(!contains(iter.NEXT()))
 | 
								if(!contains(iter.NEXT()))
 | 
				
			||||||
				return false;
 | 
									return false;
 | 
				
			||||||
@ -96,6 +101,7 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
	@Primitive
 | 
						@Primitive
 | 
				
			||||||
	public boolean containsAny(Collection<?> c) {
 | 
						public boolean containsAny(Collection<?> c) {
 | 
				
			||||||
		Objects.requireNonNull(c);
 | 
							Objects.requireNonNull(c);
 | 
				
			||||||
 | 
							if(c.isEmpty()) return false;
 | 
				
			||||||
		for(Object e : c) 
 | 
							for(Object e : c) 
 | 
				
			||||||
			if(contains(e))
 | 
								if(contains(e))
 | 
				
			||||||
				return true;
 | 
									return true;
 | 
				
			||||||
@ -111,6 +117,7 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean containsAny(COLLECTION KEY_GENERIC_TYPE c) {
 | 
						public boolean containsAny(COLLECTION KEY_GENERIC_TYPE c) {
 | 
				
			||||||
		Objects.requireNonNull(c);
 | 
							Objects.requireNonNull(c);
 | 
				
			||||||
 | 
							if(c.isEmpty()) return false;
 | 
				
			||||||
		for(ITERATOR KEY_GENERIC_TYPE iter = c.iterator();iter.hasNext();) 
 | 
							for(ITERATOR KEY_GENERIC_TYPE iter = c.iterator();iter.hasNext();) 
 | 
				
			||||||
			if(contains(iter.NEXT()))
 | 
								if(contains(iter.NEXT()))
 | 
				
			||||||
				return true;
 | 
									return true;
 | 
				
			||||||
@ -153,6 +160,7 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
				
			||||||
		Objects.requireNonNull(c);
 | 
							Objects.requireNonNull(c);
 | 
				
			||||||
 | 
							if(c.isEmpty()) return false;
 | 
				
			||||||
		boolean modified = false;
 | 
							boolean modified = false;
 | 
				
			||||||
		for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
 | 
							for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
 | 
				
			||||||
			if(c.contains(iter.NEXT())) {
 | 
								if(c.contains(iter.NEXT())) {
 | 
				
			||||||
@ -163,6 +171,23 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
		return modified;
 | 
							return modified;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							Objects.requireNonNull(c);
 | 
				
			||||||
 | 
							if(c.isEmpty()) return false;
 | 
				
			||||||
 | 
							Objects.requireNonNull(r);
 | 
				
			||||||
 | 
							boolean modified = false;
 | 
				
			||||||
 | 
							for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
 | 
				
			||||||
 | 
								KEY_TYPE e = iter.NEXT();
 | 
				
			||||||
 | 
								if(c.contains(e)) {
 | 
				
			||||||
 | 
									r.accept(e);
 | 
				
			||||||
 | 
									iter.remove();
 | 
				
			||||||
 | 
									modified = true;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return modified;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * A Type-Specific implementation of retainAll. This Implementation iterates over all elements and removes them as they were not found in the other collection.
 | 
						 * A Type-Specific implementation of retainAll. This Implementation iterates over all elements and removes them as they were not found in the other collection.
 | 
				
			||||||
	 * @param c the elements that should be kept
 | 
						 * @param c the elements that should be kept
 | 
				
			||||||
@ -187,6 +212,27 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
		return modified;
 | 
							return modified;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							Objects.requireNonNull(c);
 | 
				
			||||||
 | 
							Objects.requireNonNull(r);
 | 
				
			||||||
 | 
							if(c.isEmpty()) {
 | 
				
			||||||
 | 
								boolean modified = !isEmpty();
 | 
				
			||||||
 | 
								forEach(r);
 | 
				
			||||||
 | 
								clear();
 | 
				
			||||||
 | 
								return modified;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							boolean modified = false;
 | 
				
			||||||
 | 
							for(ITERATOR KEY_GENERIC_TYPE iter = iterator();iter.hasNext();) {
 | 
				
			||||||
 | 
								KEY_TYPE e = iter.NEXT();
 | 
				
			||||||
 | 
								if(!c.contains(e)) {
 | 
				
			||||||
 | 
									iter.remove();
 | 
				
			||||||
 | 
									modified = true;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return modified;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
#if !TYPE_OBJECT
 | 
					#if !TYPE_OBJECT
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * A Type-Specific implementation of toArray that links to {@link #TO_ARRAY(KEY_TYPE[])} with a newly created array.
 | 
						 * A Type-Specific implementation of toArray that links to {@link #TO_ARRAY(KEY_TYPE[])} with a newly created array.
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,11 @@ import java.util.function.Predicate;
 | 
				
			|||||||
import java.util.stream.JAVA_STREAM;
 | 
					import java.util.stream.JAVA_STREAM;
 | 
				
			||||||
import java.util.stream.StreamSupport;
 | 
					import java.util.stream.StreamSupport;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
					import java.util.function.Consumer;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
 | 
					import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
 | 
				
			||||||
import speiger.src.collections.utils.SanityChecks;
 | 
					import speiger.src.collections.utils.SanityChecks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -115,6 +120,16 @@ public interface COLLECTION KEY_GENERIC_TYPE extends Collection<CLASS_TYPE>, ITE
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c);
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * A Type-Specific removeAll function that reduces (un)boxing.
 | 
				
			||||||
 | 
						 * It also notifies the remover of which exact element is going to be removed.
 | 
				
			||||||
 | 
						 * @param c the collection of elements that should be removed
 | 
				
			||||||
 | 
						 * @param r elements that got removed
 | 
				
			||||||
 | 
						 * @return true if any element was removed
 | 
				
			||||||
 | 
						 * @see Collection#removeAll(Collection)
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
 	 * A Type-Specific retainAll function that reduces (un)boxing.
 | 
					 	 * A Type-Specific retainAll function that reduces (un)boxing.
 | 
				
			||||||
	 * @param c the collection of elements that should be kept
 | 
						 * @param c the collection of elements that should be kept
 | 
				
			||||||
@ -123,6 +138,16 @@ public interface COLLECTION KEY_GENERIC_TYPE extends Collection<CLASS_TYPE>, ITE
 | 
				
			|||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
	public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c);
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
					 	 * A Type-Specific retainAll function that reduces (un)boxing.
 | 
				
			||||||
 | 
						 * It also notifies the remover of which exact element is going to be removed.
 | 
				
			||||||
 | 
						 * @param c the collection of elements that should be kept
 | 
				
			||||||
 | 
						 * @param r elements that got removed
 | 
				
			||||||
 | 
					 	 * @return true if any element was removed
 | 
				
			||||||
 | 
					 	 * @see Collection#retainAll(Collection)
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * A Function that does a shallow clone of the Collection itself.
 | 
						 * A Function that does a shallow clone of the Collection itself.
 | 
				
			||||||
	 * This function is more optimized then a copy constructor since the Collection does not have to be unsorted/resorted.
 | 
						 * This function is more optimized then a copy constructor since the Collection does not have to be unsorted/resorted.
 | 
				
			||||||
 | 
				
			|||||||
@ -864,6 +864,22 @@ public class ARRAY_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
 | 
				
			|||||||
		return modified;
 | 
							return modified;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							if(c.isEmpty()) return false;
 | 
				
			||||||
 | 
							int j = 0;
 | 
				
			||||||
 | 
							for(int i = 0;i<size;i++) {
 | 
				
			||||||
 | 
								if(!c.contains(data[i])) data[j++] = data[i];
 | 
				
			||||||
 | 
								else r.accept(data[i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							boolean modified = j != size;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
							Arrays.fill(data, j, size, null);
 | 
				
			||||||
 | 
					#endif		
 | 
				
			||||||
 | 
							size = j;
 | 
				
			||||||
 | 
							return modified;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * A function to retain all elements that were provided in the other collection
 | 
						 * A function to retain all elements that were provided in the other collection
 | 
				
			||||||
	 * This function might delegate to a more appropriate function if necessary
 | 
						 * This function might delegate to a more appropriate function if necessary
 | 
				
			||||||
@ -891,6 +907,27 @@ public class ARRAY_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
 | 
				
			|||||||
		return modified;
 | 
							return modified;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							if(c.isEmpty()) {
 | 
				
			||||||
 | 
								boolean modifed = size > 0;
 | 
				
			||||||
 | 
								forEach(r);
 | 
				
			||||||
 | 
								clear();
 | 
				
			||||||
 | 
								return modifed;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							int j = 0;
 | 
				
			||||||
 | 
							for(int i = 0;i<size;i++) {
 | 
				
			||||||
 | 
								if(c.contains(data[i])) data[j++] = data[i];
 | 
				
			||||||
 | 
								else r.accept(data[i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							boolean modified = j != size;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
							Arrays.fill(data, j, size, null);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							size = j;
 | 
				
			||||||
 | 
							return modified;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
#if PRIMITIVES
 | 
					#if PRIMITIVES
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * A optimized List#removeIf(Predicate) that more quickly removes elements from the list then the ArrayList implementation
 | 
						 * A optimized List#removeIf(Predicate) that more quickly removes elements from the list then the ArrayList implementation
 | 
				
			||||||
 | 
				
			|||||||
@ -370,6 +370,10 @@ public class IMMUTABLE_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_T
 | 
				
			|||||||
	public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#if PRIMITIVES
 | 
					#if PRIMITIVES
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
 | 
				
			|||||||
@ -714,6 +714,27 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
 | 
				
			|||||||
		return modified;
 | 
							return modified;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							if(c.isEmpty()) return false;
 | 
				
			||||||
 | 
							boolean modified = false;
 | 
				
			||||||
 | 
							int j = 0;
 | 
				
			||||||
 | 
							for(Entry KEY_GENERIC_TYPE entry = first;entry != null;) {
 | 
				
			||||||
 | 
								if(c.contains(entry.value)) {
 | 
				
			||||||
 | 
									r.accept(entry.value);
 | 
				
			||||||
 | 
									Entry KEY_GENERIC_TYPE next = entry.next;
 | 
				
			||||||
 | 
									unlink(entry);
 | 
				
			||||||
 | 
									entry = next;
 | 
				
			||||||
 | 
									modified = true;
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else j++;
 | 
				
			||||||
 | 
								entry = entry.next;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							size = j;
 | 
				
			||||||
 | 
							return modified;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
				
			||||||
		if(c.isEmpty()) {
 | 
							if(c.isEmpty()) {
 | 
				
			||||||
@ -738,6 +759,32 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
 | 
				
			|||||||
		return modified;
 | 
							return modified;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							if(c.isEmpty()) {
 | 
				
			||||||
 | 
								boolean changed = size > 0;
 | 
				
			||||||
 | 
								forEach(r);
 | 
				
			||||||
 | 
								clear();
 | 
				
			||||||
 | 
								return changed;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							boolean modified = false;
 | 
				
			||||||
 | 
							int j = 0;
 | 
				
			||||||
 | 
							for(Entry KEY_GENERIC_TYPE entry = first;entry != null;) {
 | 
				
			||||||
 | 
								if(!c.contains(entry.value)) {
 | 
				
			||||||
 | 
									r.accept(entry.value);
 | 
				
			||||||
 | 
									Entry KEY_GENERIC_TYPE next = entry.next;
 | 
				
			||||||
 | 
									unlink(entry);
 | 
				
			||||||
 | 
									entry = next;
 | 
				
			||||||
 | 
									modified = true;
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else j++;
 | 
				
			||||||
 | 
								entry = entry.next;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							size = j;
 | 
				
			||||||
 | 
							return modified;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	@Primitive
 | 
						@Primitive
 | 
				
			||||||
	public boolean removeIf(Predicate<? super CLASS_TYPE> filter) {
 | 
						public boolean removeIf(Predicate<? super CLASS_TYPE> filter) {
 | 
				
			||||||
 | 
				
			|||||||
@ -227,6 +227,21 @@ public class ARRAY_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE im
 | 
				
			|||||||
		return result;
 | 
							return result;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							int j = 0;
 | 
				
			||||||
 | 
							for(int i = 0;i<size;i++) {
 | 
				
			||||||
 | 
								if(!c.contains(data[i])) data[j++] = data[i];
 | 
				
			||||||
 | 
								else r.accept(data[i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							boolean result = j != size;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
							Arrays.fill(data, j, size, null);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							size = j;
 | 
				
			||||||
 | 
							return result;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) {
 | 
				
			||||||
		int j = 0;
 | 
							int j = 0;
 | 
				
			||||||
@ -242,6 +257,21 @@ public class ARRAY_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE im
 | 
				
			|||||||
		return result;
 | 
							return result;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) {
 | 
				
			||||||
 | 
							int j = 0;
 | 
				
			||||||
 | 
							for(int i = 0;i<size;i++) {
 | 
				
			||||||
 | 
								if(c.contains(data[i])) data[j++] = data[i];
 | 
				
			||||||
 | 
								else r.accept(data[i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							boolean result = j != size;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
							Arrays.fill(data, j, size, null);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							size = j;
 | 
				
			||||||
 | 
							return result;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	@Primitive
 | 
						@Primitive
 | 
				
			||||||
	public boolean removeAll(Collection<?> c) {
 | 
						public boolean removeAll(Collection<?> c) {
 | 
				
			||||||
 | 
				
			|||||||
@ -148,7 +148,11 @@ public class COLLECTIONS
 | 
				
			|||||||
		@Override
 | 
							@Override
 | 
				
			||||||
		public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) { synchronized(mutex) { return this.c.removeAll(c); } }
 | 
							public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) { synchronized(mutex) { return this.c.removeAll(c); } }
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
 | 
							public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) { synchronized(mutex) { return this.c.removeAll(c, r); } }
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
		public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) { synchronized(mutex) { return this.c.retainAll(c); } }
 | 
							public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) { synchronized(mutex) { return this.c.retainAll(c); } }
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) { synchronized(mutex) { return this.c.retainAll(c, r); } }
 | 
				
			||||||
#if PRIMITIVES
 | 
					#if PRIMITIVES
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
		public boolean remIf(JAVA_PREDICATE filter){ synchronized(mutex) { return c.remIf(filter); } }
 | 
							public boolean remIf(JAVA_PREDICATE filter){ synchronized(mutex) { return c.remIf(filter); } }
 | 
				
			||||||
@ -258,7 +262,11 @@ public class COLLECTIONS
 | 
				
			|||||||
		@Override
 | 
							@Override
 | 
				
			||||||
		public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
							public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
 | 
							public boolean removeAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
		public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
							public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							public boolean retainAll(COLLECTION KEY_GENERIC_TYPE c, CONSUMER KEY_GENERIC_TYPE r) { throw new UnsupportedOperationException(); }
 | 
				
			||||||
#if PRIMITIVES
 | 
					#if PRIMITIVES
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
		public boolean remIf(JAVA_PREDICATE filter){ throw new UnsupportedOperationException(); }
 | 
							public boolean remIf(JAVA_PREDICATE filter){ throw new UnsupportedOperationException(); }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user