View Javadoc

1   package org.eclipse.jetty.io;
2   //========================================================================
3   //Copyright (c) 2006-2012 Mort Bay Consulting Pty. Ltd.
4   //------------------------------------------------------------------------
5   //All rights reserved. This program and the accompanying materials
6   //are made available under the terms of the Eclipse Public License v1.0
7   //and Apache License v2.0 which accompanies this distribution.
8   //The Eclipse Public License is available at
9   //http://www.eclipse.org/legal/epl-v10.html
10  //The Apache License v2.0 is available at
11  //http://www.opensource.org/licenses/apache2.0.php
12  //You may elect to redistribute this code under either of these licenses.
13  //========================================================================
14  
15  import org.eclipse.jetty.io.nio.DirectNIOBuffer;
16  import org.eclipse.jetty.io.nio.IndirectNIOBuffer;
17  
18  public abstract class AbstractBuffers implements Buffers
19  {
20      protected final Buffers.Type _headerType;
21      protected final int _headerSize;
22      protected final Buffers.Type _bufferType;
23      protected final int _bufferSize;
24      protected final Buffers.Type _otherType;
25  
26      /* ------------------------------------------------------------ */
27      public AbstractBuffers(Buffers.Type headerType, int headerSize, Buffers.Type bufferType, int bufferSize, Buffers.Type otherType)
28      {
29          _headerType=headerType;
30          _headerSize=headerSize;
31          _bufferType=bufferType;
32          _bufferSize=bufferSize;
33          _otherType=otherType;
34      }
35  
36      /* ------------------------------------------------------------ */
37      /**
38       * @return Returns the buffer size in bytes.
39       */
40      public int getBufferSize()
41      {
42          return _bufferSize;
43      }
44  
45      /* ------------------------------------------------------------ */
46      /**
47       * @return Returns the header size in bytes.
48       */
49      public int getHeaderSize()
50      {
51          return _headerSize;
52      }
53  
54  
55      /* ------------------------------------------------------------ */
56      /**
57       * Create a new header Buffer
58       * @return new Buffer
59       */
60      final protected Buffer newHeader()
61      {
62          switch(_headerType)
63          {
64              case BYTE_ARRAY:
65                  return new ByteArrayBuffer(_headerSize);
66              case DIRECT:
67                  return new DirectNIOBuffer(_headerSize);
68              case INDIRECT:
69                  return new IndirectNIOBuffer(_headerSize);
70          }
71          throw new IllegalStateException();
72      }
73  
74      /* ------------------------------------------------------------ */
75      /**
76       * Create a new content Buffer
77       * @return new Buffer
78       */
79      final protected Buffer newBuffer()
80      {
81         switch(_bufferType)
82         {
83             case BYTE_ARRAY:
84                 return new ByteArrayBuffer(_bufferSize);
85             case DIRECT:
86                 return new DirectNIOBuffer(_bufferSize);
87             case INDIRECT:
88                 return new IndirectNIOBuffer(_bufferSize);
89         }
90         throw new IllegalStateException();
91      }
92  
93      /* ------------------------------------------------------------ */
94      /**
95       * Create a new content Buffer
96       * @param size
97       * @return new Buffer
98       */
99      final protected Buffer newBuffer(int size)
100     {
101        switch(_otherType)
102        {
103            case BYTE_ARRAY:
104                return new ByteArrayBuffer(size);
105            case DIRECT:
106                return new DirectNIOBuffer(size);
107            case INDIRECT:
108                return new IndirectNIOBuffer(size);
109        }
110        throw new IllegalStateException();
111     }
112 
113     /* ------------------------------------------------------------ */
114     /**
115      * @param buffer
116      * @return True if the buffer is the correct type to be a Header buffer
117      */
118     public final boolean isHeader(Buffer buffer)
119     {
120         if (buffer.capacity()==_headerSize)
121         {
122             switch(_headerType)
123             {
124                 case BYTE_ARRAY:
125                     return buffer instanceof ByteArrayBuffer && !(buffer instanceof  IndirectNIOBuffer);
126                 case DIRECT:
127                     return buffer instanceof  DirectNIOBuffer;
128                 case INDIRECT:
129                     return buffer instanceof  IndirectNIOBuffer;
130             }
131         }
132         return false;
133     }
134 
135     /* ------------------------------------------------------------ */
136     /**
137      * @param buffer
138      * @return True if the buffer is the correct type to be a Header buffer
139      */
140     public final boolean isBuffer(Buffer buffer)
141     {
142         if (buffer.capacity()==_bufferSize)
143         {
144             switch(_bufferType)
145             {
146                 case BYTE_ARRAY:
147                     return buffer instanceof ByteArrayBuffer && !(buffer instanceof  IndirectNIOBuffer);
148                 case DIRECT:
149                     return buffer instanceof  DirectNIOBuffer;
150                 case INDIRECT:
151                     return buffer instanceof  IndirectNIOBuffer;
152             }
153         }
154         return false;
155     }
156 
157     /* ------------------------------------------------------------ */
158     public String toString()
159     {
160         return String.format("%s [%d,%d]", getClass().getSimpleName(), _headerSize, _bufferSize);
161     }
162 }