001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *     http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.commons.collections.primitives;
018
019import org.apache.commons.collections.primitives.decorators.UnmodifiableByteIterator;
020import org.apache.commons.collections.primitives.decorators.UnmodifiableByteList;
021import org.apache.commons.collections.primitives.decorators.UnmodifiableByteListIterator;
022
023/**
024 * This class consists exclusively of static methods that operate on or
025 * return ByteCollections.
026 * <p>
027 * The methods of this class all throw a NullPoByteerException if the 
028 * provided collection is null.
029 * 
030 * @version $Revision: 480460 $ $Date: 2006-11-29 03:14:21 -0500 (Wed, 29 Nov 2006) $
031 * 
032 * @author Rodney Waldhoff 
033 */
034public final class ByteCollections {
035
036    /**
037     * Returns an unmodifiable ByteList containing only the specified element.
038     * @param value the single value
039     * @return an unmodifiable ByteList containing only the specified element.
040     */    
041    public static ByteList singletonByteList(byte value) {
042        // TODO: a specialized implementation of ByteList may be more performant
043        ByteList list = new ArrayByteList(1);
044        list.add(value);
045        return UnmodifiableByteList.wrap(list);
046    }
047
048    /**
049     * Returns an unmodifiable ByteIterator containing only the specified element.
050     * @param value the single value
051     * @return an unmodifiable ByteIterator containing only the specified element.
052     */    
053    public static ByteIterator singletonByteIterator(byte value) {
054        return singletonByteList(value).iterator();
055    }
056
057    /**
058     * Returns an unmodifiable ByteListIterator containing only the specified element.
059     * @param value the single value
060     * @return an unmodifiable ByteListIterator containing only the specified element.
061     */    
062    public static ByteListIterator singletonByteListIterator(byte value) {
063        return singletonByteList(value).listIterator();
064    }
065
066    /**
067     * Returns an unmodifiable version of the given non-null ByteList.
068     * @param list the non-null ByteList to wrap in an unmodifiable decorator
069     * @return an unmodifiable version of the given non-null ByteList
070     * @throws NullPointerException if the given ByteList is null
071     * @see org.apache.commons.collections.primitives.decorators.UnmodifiableByteList#wrap
072     */    
073    public static ByteList unmodifiableByteList(ByteList list) throws NullPointerException {
074        if(null == list) {
075            throw new NullPointerException();
076        }
077        return UnmodifiableByteList.wrap(list);
078    }
079    
080    /**
081     * Returns an unmodifiable version of the given non-null ByteIterator.
082     * @param iter the non-null ByteIterator to wrap in an unmodifiable decorator
083     * @return an unmodifiable version of the given non-null ByteIterator
084     * @throws NullPointerException if the given ByteIterator is null
085     * @see org.apache.commons.collections.primitives.decorators.UnmodifiableByteIterator#wrap
086     */    
087    public static ByteIterator unmodifiableByteIterator(ByteIterator iter) {
088        if(null == iter) {
089            throw new NullPointerException();
090        }
091        return UnmodifiableByteIterator.wrap(iter);
092    }
093        
094    /**
095     * Returns an unmodifiable version of the given non-null ByteListIterator.
096     * @param iter the non-null ByteListIterator to wrap in an unmodifiable decorator
097     * @return an unmodifiable version of the given non-null ByteListIterator
098     * @throws NullPointerException if the given ByteListIterator is null
099     * @see org.apache.commons.collections.primitives.decorators.UnmodifiableByteListIterator#wrap
100     */    
101    public static ByteListIterator unmodifiableByteListIterator(ByteListIterator iter) {
102        if(null == iter) {
103            throw new NullPointerException();
104        }
105        return UnmodifiableByteListIterator.wrap(iter);
106    }
107    
108    /**
109     * Returns an unmodifiable, empty ByteList.
110     * @return an unmodifiable, empty ByteList.
111     * @see #EMPTY_BYTE_LIST
112     */    
113    public static ByteList getEmptyByteList() {
114        return EMPTY_BYTE_LIST;
115    }
116    
117    /**
118     * Returns an unmodifiable, empty ByteIterator
119     * @return an unmodifiable, empty ByteIterator.
120     * @see #EMPTY_BYTE_ITERATOR
121     */    
122    public static ByteIterator getEmptyByteIterator() {
123        return EMPTY_BYTE_ITERATOR;
124    }
125    
126    /**
127     * Returns an unmodifiable, empty ByteListIterator
128     * @return an unmodifiable, empty ByteListIterator.
129     * @see #EMPTY_BYTE_LIST_ITERATOR
130     */    
131    public static ByteListIterator getEmptyByteListIterator() {
132        return EMPTY_BYTE_LIST_ITERATOR;
133    }    
134
135    /**
136     * An unmodifiable, empty ByteList
137     * @see #getEmptyByteList
138     */    
139    public static final ByteList EMPTY_BYTE_LIST = unmodifiableByteList(new ArrayByteList(0));
140
141    /**
142     * An unmodifiable, empty ByteIterator
143     * @see #getEmptyByteIterator
144     */    
145    public static final ByteIterator EMPTY_BYTE_ITERATOR = unmodifiableByteIterator(EMPTY_BYTE_LIST.iterator());
146
147    /**
148     * An unmodifiable, empty ByteListIterator
149     * @see #getEmptyByteListIterator
150     */    
151    public static final ByteListIterator EMPTY_BYTE_LIST_ITERATOR = unmodifiableByteListIterator(EMPTY_BYTE_LIST.listIterator());
152}