View Javadoc

1   // ========================================================================
2   // Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.io;
15  
16  /* ------------------------------------------------------------ */
17  /** SimpleBuffers.
18   * Simple implementation of Buffers holder.
19   * 
20   *
21   */
22  public class SimpleBuffers implements Buffers
23  {   
24      final Buffer _header;
25      final Buffer _buffer;
26      boolean _headerOut;
27      boolean _bufferOut;
28      
29      /* ------------------------------------------------------------ */
30      /**
31       * 
32       */
33      public SimpleBuffers(Buffer header, Buffer buffer)
34      {
35          _header=header;
36          _buffer=buffer;
37      }
38  
39      /* ------------------------------------------------------------ */
40      public Buffer getBuffer()
41      {
42          synchronized(this)
43          {
44              if (_buffer!=null && !_bufferOut)
45              {
46                  _bufferOut=true;
47                  return _buffer;
48              }
49              
50              if (_buffer!=null && _header!=null && _header.capacity()==_buffer.capacity() && !_headerOut)
51              {
52                  _headerOut=true;
53                  return _header;
54              }
55              
56              if (_buffer!=null)
57                  return new ByteArrayBuffer(_buffer.capacity());
58              return new ByteArrayBuffer(4096);
59          }
60      }
61  
62      /* ------------------------------------------------------------ */
63      public Buffer getHeader()
64      {
65          synchronized(this)
66          {
67              if (_header!=null && !_headerOut)
68              {
69                  _headerOut=true;
70                  return _header;
71              }
72              
73              if (_buffer!=null && _header!=null && _header.capacity()==_buffer.capacity() && !_bufferOut)
74              {
75                  _bufferOut=true;
76                  return _buffer;
77              }
78              
79              if (_header!=null)
80                  return new ByteArrayBuffer(_header.capacity());
81              return new ByteArrayBuffer(4096);
82          }
83      }
84  
85      /* ------------------------------------------------------------ */
86      public Buffer getBuffer(int size)
87      {
88          synchronized(this)
89          {
90              if (_header!=null && _header.capacity()==size)
91                  return getHeader();
92              if (_buffer!=null && _buffer.capacity()==size)
93                  return getBuffer();
94              return null;            
95          }
96      }
97  
98      /* ------------------------------------------------------------ */
99      public void returnBuffer(Buffer buffer)
100     {
101         synchronized(this)
102         {
103             buffer.clear();
104             if (buffer==_header)
105                 _headerOut=false;
106             if (buffer==_buffer)
107                 _bufferOut=false;
108         }
109     }
110 
111 
112 }