From 2d00eb9567871f15f4443281aad858ee38d6eab2 Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Sun, 21 Jun 2015 22:47:06 +0200 Subject: [PATCH] Simplifications when decoding blocks from database to save some memory allocations. --- cmd/mtseeder/main.go | 5 ++--- common/block.go | 20 +++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/cmd/mtseeder/main.go b/cmd/mtseeder/main.go index 7b8b795..cc1ab5e 100644 --- a/cmd/mtseeder/main.go +++ b/cmd/mtseeder/main.go @@ -45,10 +45,9 @@ func main() { flag.Parse() - var err error if !skipBaseLevel { address := fmt.Sprintf("%s:%d", host, port) - if err = createBaseLevel( + if err := createBaseLevel( address, xMin, zMin, xMax, zMax, transparent, @@ -59,7 +58,7 @@ func main() { } } if !skipPyramid { - if err = createPyramid(outDir, numWorkers); err != nil { + if err := createPyramid(outDir, numWorkers); err != nil { log.Fatalf("Creating pyramid tiles failed: %s", err) } } diff --git a/common/block.go b/common/block.go index 5eff655..da3f891 100644 --- a/common/block.go +++ b/common/block.go @@ -77,29 +77,31 @@ func NewDecodedBlock(data []byte, colors *Colors) (db *DecodedBlock, err error) offset = 4 } - buf := NewposBuf(data[offset:]) + buf := posBuf{Data: data[offset:]} var zr io.ReadCloser - if zr, err = zlib.NewReader(buf); err != nil { + if zr, err = zlib.NewReader(&buf); err != nil { return } - var mapContent []byte - mapContent, err = ioutil.ReadAll(zr) + mapContent := make([]byte, uncompressedLen) + + var k int + k, err = io.ReadFull(zr, mapContent) zr.Close() if err != nil { return } - if uncompressedLen != len(mapContent) { + if k != uncompressedLen { err = ErrMapContentSizeMismatch return } - offset += buf.Pos + offset += buf.Pos + 4 buf.Pos = 0 buf.Data = data[offset:] - if zr, err = zlib.NewReader(buf); err != nil { + if zr, err = zlib.NewReader(&buf); err != nil { return } @@ -204,10 +206,6 @@ func (db *DecodedBlock) Content(x, y, z int) (content int32, found bool) { return } -func NewposBuf(data []byte) *posBuf { - return &posBuf{Data: data} -} - func (pb *posBuf) Read(p []byte) (int, error) { pl := len(p) ml := len(pb.Data)