package  ndr 
 
import  ( 
	"bytes"  
	"encoding/binary"  
	"math"  
) 
 
 
const  ( 
	SizeBool    = 1  
	SizeChar    = 1  
	SizeUint8   = 1  
	SizeUint16  = 2  
	SizeUint32  = 4  
	SizeUint64  = 8  
	SizeEnum    = 2  
	SizeSingle  = 4  
	SizeDouble  = 8  
	SizePtr     = 4  
) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
func  (dec  *Decoder ) readBool () (bool , error ) { 
	i , err  := dec .readUint8 () 
	if  err  != nil  { 
		return  false , err  
	} 
	if  i  != 0  { 
		return  true , nil  
	} 
	return  false , nil  
} 
 
 
func  (dec  *Decoder ) readChar () (rune , error ) { 
	var  r  rune  
	a , err  := dec .readUint8 () 
	if  err  != nil  { 
		return  r , err  
	} 
	return  rune (a ), nil  
} 
 
 
func  (dec  *Decoder ) readUint8 () (uint8 , error ) { 
	b , err  := dec .r .ReadByte () 
	if  err  != nil  { 
		return  uint8 (0 ), err  
	} 
	return  uint8 (b ), nil  
} 
 
 
func  (dec  *Decoder ) readUint16 () (uint16 , error ) { 
	dec .ensureAlignment (SizeUint16 ) 
	b , err  := dec .readBytes (SizeUint16 ) 
	if  err  != nil  { 
		return  uint16 (0 ), err  
	} 
	return  dec .ch .Endianness .Uint16 (b ), nil  
} 
 
 
func  (dec  *Decoder ) readUint32 () (uint32 , error ) { 
	dec .ensureAlignment (SizeUint32 ) 
	b , err  := dec .readBytes (SizeUint32 ) 
	if  err  != nil  { 
		return  uint32 (0 ), err  
	} 
	return  dec .ch .Endianness .Uint32 (b ), nil  
} 
 
 
func  (dec  *Decoder ) readUint64 () (uint64 , error ) { 
	dec .ensureAlignment (SizeUint64 ) 
	b , err  := dec .readBytes (SizeUint64 ) 
	if  err  != nil  { 
		return  uint64 (0 ), err  
	} 
	return  dec .ch .Endianness .Uint64 (b ), nil  
} 
 
func  (dec  *Decoder ) readInt8 () (int8 , error ) { 
	dec .ensureAlignment (SizeUint8 ) 
	b , err  := dec .readBytes (SizeUint8 ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	var  i  int8  
	buf  := bytes .NewReader (b ) 
	err  = binary .Read (buf , dec .ch .Endianness , &i ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	return  i , nil  
} 
 
func  (dec  *Decoder ) readInt16 () (int16 , error ) { 
	dec .ensureAlignment (SizeUint16 ) 
	b , err  := dec .readBytes (SizeUint16 ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	var  i  int16  
	buf  := bytes .NewReader (b ) 
	err  = binary .Read (buf , dec .ch .Endianness , &i ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	return  i , nil  
} 
 
func  (dec  *Decoder ) readInt32 () (int32 , error ) { 
	dec .ensureAlignment (SizeUint32 ) 
	b , err  := dec .readBytes (SizeUint32 ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	var  i  int32  
	buf  := bytes .NewReader (b ) 
	err  = binary .Read (buf , dec .ch .Endianness , &i ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	return  i , nil  
} 
 
func  (dec  *Decoder ) readInt64 () (int64 , error ) { 
	dec .ensureAlignment (SizeUint64 ) 
	b , err  := dec .readBytes (SizeUint64 ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	var  i  int64  
	buf  := bytes .NewReader (b ) 
	err  = binary .Read (buf , dec .ch .Endianness , &i ) 
	if  err  != nil  { 
		return  0 , err  
	} 
	return  i , nil  
} 
 
 
func  (dec  *Decoder ) readFloat32 () (f  float32 , err  error ) { 
	dec .ensureAlignment (SizeSingle ) 
	b , err  := dec .readBytes (SizeSingle ) 
	if  err  != nil  { 
		return  
	} 
	bits  := dec .ch .Endianness .Uint32 (b ) 
	f  = math .Float32frombits (bits ) 
	return  
} 
 
func  (dec  *Decoder ) readFloat64 () (f  float64 , err  error ) { 
	dec .ensureAlignment (SizeDouble ) 
	b , err  := dec .readBytes (SizeDouble ) 
	if  err  != nil  { 
		return  
	} 
	bits  := dec .ch .Endianness .Uint64 (b ) 
	f  = math .Float64frombits (bits ) 
	return  
} 
 
 
 
 
 
 
func  (dec  *Decoder ) ensureAlignment (n  int ) { 
	p  := dec .size  - dec .r .Buffered () 
	if  s  := p  % n ; s  != 0  { 
		dec .r .Discard (n  - s ) 
	} 
} 
  
The pages are generated with Golds   v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds  is a Go 101  project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1  (reachable from the left QR code) to get the latest news of Golds .