1. /*
  2. * $Header: /home/cvs/jakarta-commons/primitives/src/java/org/apache/commons/collections/primitives/AbstractIntCollection.java,v 1.3 2003/10/16 20:49:36 scolebourne Exp $
  3. * ====================================================================
  4. * The Apache Software License, Version 1.1
  5. *
  6. * Copyright (c) 2003 The Apache Software Foundation. All rights
  7. * reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions
  11. * are met:
  12. *
  13. * 1. Redistributions of source code must retain the above copyright
  14. * notice, this list of conditions and the following disclaimer.
  15. *
  16. * 2. Redistributions in binary form must reproduce the above copyright
  17. * notice, this list of conditions and the following disclaimer in
  18. * the documentation and/or other materials provided with the
  19. * distribution.
  20. *
  21. * 3. The end-user documentation included with the redistribution, if
  22. * any, must include the following acknowledgement:
  23. * "This product includes software developed by the
  24. * Apache Software Foundation (http://www.apache.org/)."
  25. * Alternately, this acknowledgement may appear in the software itself,
  26. * if and wherever such third-party acknowledgements normally appear.
  27. *
  28. * 4. The names "The Jakarta Project", "Commons", and "Apache Software
  29. * Foundation" must not be used to endorse or promote products derived
  30. * from this software without prior written permission. For written
  31. * permission, please contact apache@apache.org.
  32. *
  33. * 5. Products derived from this software may not be called "Apache"
  34. * nor may "Apache" appear in their names without prior written
  35. * permission of the Apache Software Foundation.
  36. *
  37. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  38. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  39. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  40. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  41. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  42. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  43. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  44. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  45. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  46. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  47. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  48. * SUCH DAMAGE.
  49. * ====================================================================
  50. *
  51. * This software consists of voluntary contributions made by many
  52. * individuals on behalf of the Apache Software Foundation. For more
  53. * information on the Apache Software Foundation, please see
  54. * <http://www.apache.org/>.
  55. *
  56. */
  57. package org.apache.commons.collections.primitives;
  58. /**
  59. * Abstract base class for {@link IntCollection}s.
  60. * <p />
  61. * Read-only subclasses must override {@link #iterator}
  62. * and {@link #size}. Mutable subclasses
  63. * should also override {@link #add} and
  64. * {@link IntIterator#remove IntIterator.remove}.
  65. * All other methods have at least some base implementation
  66. * derived from these. Subclasses may choose to override
  67. * these methods to provide a more efficient implementation.
  68. *
  69. * @since Commons Primitives 1.0
  70. * @version $Revision: 1.3 $ $Date: 2003/10/16 20:49:36 $
  71. *
  72. * @author Rodney Waldhoff
  73. */
  74. public abstract class AbstractIntCollection implements IntCollection {
  75. public abstract IntIterator iterator();
  76. public abstract int size();
  77. protected AbstractIntCollection() { }
  78. /** Unsupported in this base implementation. */
  79. public boolean add(int element) {
  80. throw new UnsupportedOperationException("add(int) is not supported.");
  81. }
  82. public boolean addAll(IntCollection c) {
  83. boolean modified = false;
  84. for(IntIterator iter = c.iterator(); iter.hasNext(); ) {
  85. modified |= add(iter.next());
  86. }
  87. return modified;
  88. }
  89. public void clear() {
  90. for(IntIterator iter = iterator(); iter.hasNext();) {
  91. iter.next();
  92. iter.remove();
  93. }
  94. }
  95. public boolean contains(int element) {
  96. for(IntIterator iter = iterator(); iter.hasNext();) {
  97. if(iter.next() == element) {
  98. return true;
  99. }
  100. }
  101. return false;
  102. }
  103. public boolean containsAll(IntCollection c) {
  104. for(IntIterator iter = c.iterator(); iter.hasNext();) {
  105. if(!contains(iter.next())) {
  106. return false;
  107. }
  108. }
  109. return true;
  110. }
  111. public boolean isEmpty() {
  112. return (0 == size());
  113. }
  114. public boolean removeElement(int element) {
  115. for(IntIterator iter = iterator(); iter.hasNext();) {
  116. if(iter.next() == element) {
  117. iter.remove();
  118. return true;
  119. }
  120. }
  121. return false;
  122. }
  123. public boolean removeAll(IntCollection c) {
  124. boolean modified = false;
  125. for(IntIterator iter = c.iterator(); iter.hasNext(); ) {
  126. modified |= removeElement(iter.next());
  127. }
  128. return modified;
  129. }
  130. public boolean retainAll(IntCollection c) {
  131. boolean modified = false;
  132. for(IntIterator iter = iterator(); iter.hasNext();) {
  133. if(!c.contains(iter.next())) {
  134. iter.remove();
  135. modified = true;
  136. }
  137. }
  138. return modified;
  139. }
  140. public int[] toArray() {
  141. int[] array = new int[size()];
  142. int i = 0;
  143. for(IntIterator iter = iterator(); iter.hasNext();) {
  144. array[i] = iter.next();
  145. i++;
  146. }
  147. return array;
  148. }
  149. public int[] toArray(int[] a) {
  150. if(a.length < size()) {
  151. return toArray();
  152. } else {
  153. int i = 0;
  154. for(IntIterator iter = iterator(); iter.hasNext();) {
  155. a[i] = iter.next();
  156. i++;
  157. }
  158. return a;
  159. }
  160. }
  161. }