| 'use strict' | 
|   | 
| var zlibpool = exports | 
| var zlib = require('zlib') | 
|   | 
| var transport = require('../../../spdy-transport') | 
|   | 
| // TODO(indutny): think about it, why has it always been Z_SYNC_FLUSH here. | 
| // It should be possible to manually flush stuff after the write instead | 
| function createDeflate (version, compression) { | 
|   var deflate = zlib.createDeflate({ | 
|     dictionary: transport.protocol.spdy.dictionary[version], | 
|     flush: zlib.Z_SYNC_FLUSH, | 
|     windowBits: 11, | 
|     level: compression ? zlib.Z_DEFAULT_COMPRESSION : zlib.Z_NO_COMPRESSION | 
|   }) | 
|   | 
|   // For node.js v0.8 | 
|   deflate._flush = zlib.Z_SYNC_FLUSH | 
|   | 
|   return deflate | 
| } | 
|   | 
| function createInflate (version) { | 
|   var inflate = zlib.createInflate({ | 
|     dictionary: transport.protocol.spdy.dictionary[version], | 
|     flush: zlib.Z_SYNC_FLUSH | 
|   }) | 
|   | 
|   // For node.js v0.8 | 
|   inflate._flush = zlib.Z_SYNC_FLUSH | 
|   | 
|   return inflate | 
| } | 
|   | 
| function Pool (compression) { | 
|   this.compression = compression | 
|   this.pool = { | 
|     2: [], | 
|     3: [], | 
|     3.1: [] | 
|   } | 
| } | 
|   | 
| zlibpool.create = function create (compression) { | 
|   return new Pool(compression) | 
| } | 
|   | 
| Pool.prototype.get = function get (version) { | 
|   if (this.pool[version].length > 0) { | 
|     return this.pool[version].pop() | 
|   } else { | 
|     var id = version | 
|   | 
|     return { | 
|       version: version, | 
|       compress: createDeflate(id, this.compression), | 
|       decompress: createInflate(id) | 
|     } | 
|   } | 
| } | 
|   | 
| Pool.prototype.put = function put (pair) { | 
|   this.pool[pair.version].push(pair) | 
| } |