001    /*
002     * Copyright (C) 2011 The Guava Authors
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005     * in compliance with the License. You may obtain a copy of the License at
006     *
007     * http://www.apache.org/licenses/LICENSE-2.0
008     *
009     * Unless required by applicable law or agreed to in writing, software distributed under the License
010     * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011     * or implied. See the License for the specific language governing permissions and limitations under
012     * the License.
013     */
014    
015    package com.google.common.hash;
016    
017    import com.google.common.annotations.Beta;
018    
019    /**
020     * Funnels for common types. All implementations are serializable.
021     * 
022     * @author Dimitris Andreou
023     * @since 11.0
024     */
025    @Beta
026    public final class Funnels {
027      private Funnels() {}
028    
029      /**
030       * Returns a funnel that extracts the bytes from a {@code byte} array.
031       */
032      public static Funnel<byte[]> byteArrayFunnel() {
033        return ByteArrayFunnel.INSTANCE;
034      }
035    
036      private enum ByteArrayFunnel implements Funnel<byte[]> {
037        INSTANCE;
038    
039        public void funnel(byte[] from, PrimitiveSink into) {
040          into.putBytes(from);
041        }
042    
043        @Override public String toString() {
044          return "Funnels.byteArrayFunnel()";
045        }
046      }
047    
048      /**
049       * Returns a funnel that extracts the characters from a {@code CharSequence}.
050       */
051      public static Funnel<CharSequence> stringFunnel() {
052        return StringFunnel.INSTANCE;
053      }
054    
055      private enum StringFunnel implements Funnel<CharSequence> {
056        INSTANCE;
057    
058        public void funnel(CharSequence from, PrimitiveSink into) {
059          into.putString(from);
060        }
061    
062        @Override public String toString() {
063          return "Funnels.stringFunnel()";
064        }
065      }
066    }