Lines Matching refs:buffer
60 // for sizes greater than the block size, we always allocate a new buffer
66 // if an owner is given and the buffer is still cached, return it
68 PoolBuffer* buffer = *owner;
69 fCachedBuffers.Remove(buffer);
73 return buffer;
76 // we need a new buffer -- try unused ones first
77 PoolBuffer* buffer = fUnusedBuffers.RemoveHead();
78 if (buffer != NULL) {
79 buffer->SetOwner(owner);
82 *owner = buffer;
85 return buffer;
90 buffer = fCachedBuffers.RemoveHead();
91 if (buffer != NULL) {
92 buffer->SetCached(false);
93 *buffer->Owner() = NULL;
94 buffer->SetOwner(owner);
97 *owner = buffer;
100 return buffer;
104 // allocate a new buffer
113 PoolBuffer* buffer = *owner;
116 if (buffer->Size() != fBlockSize) {
118 delete buffer;
124 // queue the cached buffer
125 buffer->SetOwner(owner);
126 fCachedBuffers.Add(buffer);
127 buffer->SetCached(true);
130 // We have exceeded the limit -- we need to free a buffer.
148 PoolBuffer* buffer = *owner;
150 if (buffer == NULL)
153 if (buffer->IsCached()) {
154 fCachedBuffers.Remove(buffer);
155 buffer->SetCached(false);
158 buffer->SetOwner(NULL);
161 if (buffer->Size() == fBlockSize && fAllocatedBlocks < fMaxCachedBlocks)
162 fUnusedBuffers.Add(buffer);
164 delete buffer;
172 PoolBuffer* buffer = new(std::nothrow) PoolBuffer(
174 if (buffer == NULL || buffer->Buffer() == NULL) {
175 delete buffer;
179 buffer->SetOwner(owner);
188 *owner = buffer;
190 return buffer;