1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.io;
15
16
17
18
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 }