Browse Source

Merge pull request #80 from greatroar/readuint32-method

lz4stream: Make readUint32 a method for a tiny throughput improvement
Pierre Curto 5 years ago
parent
commit
78457d0421
1 changed files with 14 additions and 12 deletions
  1. 14 12
      internal/lz4stream/frame.go

+ 14 - 12
internal/lz4stream/frame.go

@@ -68,8 +68,10 @@ func (f *Frame) InitR(src io.Reader) error {
 		// Header already read.
 		return nil
 	}
+
 newFrame:
-	if err := readUint32(src, f.buf[:], &f.Magic); err != nil {
+	var err error
+	if f.Magic, err = f.readUint32(src); err != nil {
 		return err
 	}
 	switch m := f.Magic; {
@@ -95,11 +97,11 @@ newFrame:
 	return nil
 }
 
-func (f *Frame) CloseR(src io.Reader) error {
+func (f *Frame) CloseR(src io.Reader) (err error) {
 	if !f.Descriptor.Flags.ContentChecksum() {
 		return nil
 	}
-	if err := readUint32(src, f.buf[:], &f.Checksum); err != nil {
+	if f.Checksum, err = f.readUint32(src); err != nil {
 		return err
 	}
 	if c := f.checksum.Sum32(); c != f.Checksum {
@@ -319,9 +321,8 @@ func (b *FrameDataBlock) Write(f *Frame, dst io.Writer) error {
 }
 
 func (b *FrameDataBlock) Uncompress(f *Frame, src io.Reader, dst []byte) (int, error) {
-	buf := f.buf[:]
-	var x uint32
-	if err := readUint32(src, buf, &x); err != nil {
+	x, err := f.readUint32(src)
+	if err != nil {
 		return 0, err
 	}
 	b.Size = DataBlockSize(x)
@@ -353,7 +354,8 @@ func (b *FrameDataBlock) Uncompress(f *Frame, src io.Reader, dst []byte) (int, e
 	}
 
 	if f.Descriptor.Flags.BlockChecksum() {
-		if err := readUint32(src, buf, &b.Checksum); err != nil {
+		var err error
+		if b.Checksum, err = f.readUint32(src); err != nil {
 			return 0, err
 		}
 		if c := xxh32.ChecksumZero(data); c != b.Checksum {
@@ -366,10 +368,10 @@ func (b *FrameDataBlock) Uncompress(f *Frame, src io.Reader, dst []byte) (int, e
 	return len(data), nil
 }
 
-func readUint32(r io.Reader, buf []byte, x *uint32) error {
-	if _, err := io.ReadFull(r, buf[:4]); err != nil {
-		return err
+func (f *Frame) readUint32(r io.Reader) (x uint32, err error) {
+	if _, err = io.ReadFull(r, f.buf[:4]); err != nil {
+		return
 	}
-	*x = binary.LittleEndian.Uint32(buf)
-	return nil
+	x = binary.LittleEndian.Uint32(f.buf[:4])
+	return
 }