Commit ee2322e8 authored by JessonChan's avatar JessonChan

add any level compress

parent 59fa2482
...@@ -40,9 +40,9 @@ func (n nopResetWriter) Reset(w io.Writer) { ...@@ -40,9 +40,9 @@ func (n nopResetWriter) Reset(w io.Writer) {
//do nothing //do nothing
} }
type encodeFunc func(io.Writer, int) (resetWriter, error)
type acceptEncoder struct { type acceptEncoder struct {
name string name string
levelEncode func(int) resetWriter
bestSpeedPool *sync.Pool bestSpeedPool *sync.Pool
bestCompressionPool *sync.Pool bestCompressionPool *sync.Pool
} }
...@@ -52,10 +52,13 @@ func (ac acceptEncoder) encode(wr io.Writer, level int) (resetWriter, error) { ...@@ -52,10 +52,13 @@ func (ac acceptEncoder) encode(wr io.Writer, level int) (resetWriter, error) {
return nopResetWriter{wr}, nil return nopResetWriter{wr}, nil
} }
var rwr resetWriter var rwr resetWriter
if level == flate.BestSpeed { switch level {
case flate.BestSpeed:
rwr = ac.bestSpeedPool.Get().(resetWriter) rwr = ac.bestSpeedPool.Get().(resetWriter)
} else { case flate.BestCompression:
rwr = ac.bestCompressionPool.Get().(resetWriter) rwr = ac.bestCompressionPool.Get().(resetWriter)
default:
rwr = ac.levelEncode(level)
} }
rwr.Reset(wr) rwr.Reset(wr)
return rwr, nil return rwr, nil
...@@ -75,8 +78,9 @@ func (ac acceptEncoder) put(wr resetWriter, level int) { ...@@ -75,8 +78,9 @@ func (ac acceptEncoder) put(wr resetWriter, level int) {
} }
var ( var (
noneCompressEncoder = acceptEncoder{"", nil, nil} noneCompressEncoder = acceptEncoder{"", nil, nil, nil}
gzipCompressEncoder = acceptEncoder{"gzip", gzipCompressEncoder = acceptEncoder{"gzip",
func(level int) resetWriter { wr, _ := gzip.NewWriterLevel(nil, level); return wr },
&sync.Pool{ &sync.Pool{
New: func() interface{} { wr, _ := gzip.NewWriterLevel(nil, flate.BestSpeed); return wr }, New: func() interface{} { wr, _ := gzip.NewWriterLevel(nil, flate.BestSpeed); return wr },
}, },
...@@ -90,6 +94,7 @@ var ( ...@@ -90,6 +94,7 @@ var (
//The "zlib" format defined in RFC 1950 [31] in combination with //The "zlib" format defined in RFC 1950 [31] in combination with
//the "deflate" compression mechanism described in RFC 1951 [29]. //the "deflate" compression mechanism described in RFC 1951 [29].
deflateCompressEncoder = acceptEncoder{"deflate", deflateCompressEncoder = acceptEncoder{"deflate",
func(level int) resetWriter { wr, _ := zlib.NewWriterLevel(nil, level); return wr },
&sync.Pool{ &sync.Pool{
New: func() interface{} { wr, _ := zlib.NewWriterLevel(nil, flate.BestSpeed); return wr }, New: func() interface{} { wr, _ := zlib.NewWriterLevel(nil, flate.BestSpeed); return wr },
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment