comparison src/org/eclipse/jetty/io/ThreadLocalBuffers.java @ 802:3428c60d7cfc

replace jetty jars with source
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 07 Sep 2016 21:15:48 -0600
parents
children
comparison
equal deleted inserted replaced
801:6a21393191c1 802:3428c60d7cfc
1 //
2 // ========================================================================
3 // Copyright (c) 1995-2014 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 //
9 // The Eclipse Public License is available at
10 // http://www.eclipse.org/legal/epl-v10.html
11 //
12 // The Apache License v2.0 is available at
13 // http://www.opensource.org/licenses/apache2.0.php
14 //
15 // You may elect to redistribute this code under either of these licenses.
16 // ========================================================================
17 //
18
19 package org.eclipse.jetty.io;
20
21
22
23 /* ------------------------------------------------------------ */
24 /** Abstract Buffer pool.
25 * simple unbounded pool of buffers for header, request and response sizes.
26 *
27 */
28 public class ThreadLocalBuffers extends AbstractBuffers
29 {
30 /* ------------------------------------------------------------ */
31 private final ThreadLocal<ThreadBuffers> _buffers=new ThreadLocal<ThreadBuffers>()
32 {
33 @Override
34 protected ThreadBuffers initialValue()
35 {
36 return new ThreadBuffers();
37 }
38 };
39
40 /* ------------------------------------------------------------ */
41 public ThreadLocalBuffers(Buffers.Type headerType, int headerSize, Buffers.Type bufferType, int bufferSize, Buffers.Type otherType)
42 {
43 super(headerType,headerSize,bufferType,bufferSize,otherType);
44 }
45
46 /* ------------------------------------------------------------ */
47 public Buffer getBuffer()
48 {
49 ThreadBuffers buffers = _buffers.get();
50 if (buffers._buffer!=null)
51 {
52 Buffer b=buffers._buffer;
53 buffers._buffer=null;
54 return b;
55 }
56
57 if (buffers._other!=null && isBuffer(buffers._other))
58 {
59 Buffer b=buffers._other;
60 buffers._other=null;
61 return b;
62 }
63
64 return newBuffer();
65 }
66
67 /* ------------------------------------------------------------ */
68 public Buffer getHeader()
69 {
70 ThreadBuffers buffers = _buffers.get();
71 if (buffers._header!=null)
72 {
73 Buffer b=buffers._header;
74 buffers._header=null;
75 return b;
76 }
77
78 if (buffers._other!=null && isHeader(buffers._other))
79 {
80 Buffer b=buffers._other;
81 buffers._other=null;
82 return b;
83 }
84
85 return newHeader();
86 }
87
88 /* ------------------------------------------------------------ */
89 public Buffer getBuffer(int size)
90 {
91 ThreadBuffers buffers = _buffers.get();
92 if (buffers._other!=null && buffers._other.capacity()==size)
93 {
94 Buffer b=buffers._other;
95 buffers._other=null;
96 return b;
97 }
98
99 return newBuffer(size);
100 }
101
102 /* ------------------------------------------------------------ */
103 public void returnBuffer(Buffer buffer)
104 {
105 buffer.clear();
106 if (buffer.isVolatile() || buffer.isImmutable())
107 return;
108
109 ThreadBuffers buffers = _buffers.get();
110
111 if (buffers._header==null && isHeader(buffer))
112 buffers._header=buffer;
113 else if (buffers._buffer==null && isBuffer(buffer))
114 buffers._buffer=buffer;
115 else
116 buffers._other=buffer;
117 }
118
119
120 /* ------------------------------------------------------------ */
121 @Override
122 public String toString()
123 {
124 return "{{"+getHeaderSize()+","+getBufferSize()+"}}";
125 }
126
127 /* ------------------------------------------------------------ */
128 /* ------------------------------------------------------------ */
129 protected static class ThreadBuffers
130 {
131 Buffer _buffer;
132 Buffer _header;
133 Buffer _other;
134 }
135 }