init
This commit is contained in:
		
							parent
							
								
									0cf71ee320
								
							
						
					
					
						commit
						7ef000f6ed
					
				|  | @ -75,10 +75,10 @@ func (codec *VarCodec) DecodeNVarUInt64(buffer []byte, value *uint64) error { | ||||||
| 
 | 
 | ||||||
| // SizeOfNVarInt return the buffer size after encoding value as NVarInt
 | // SizeOfNVarInt return the buffer size after encoding value as NVarInt
 | ||||||
| func sizeOfNVarInt(value int64, width int) int { | func sizeOfNVarInt(value int64, width int) int { | ||||||
| 	const unit = 8 // bit width of encoding unit
 | 	const unit = 8 // a bit width of encoding unit
 | ||||||
| 
 | 
 | ||||||
| 	var lead = value >> (width - 1) | 	var lead = value >> (width - 1) | ||||||
| 	for size := width / unit - 1; size > 0; size-- { | 	for size := width/unit - 1; size > 0; size-- { | ||||||
| 		var lookAhead = value >> (size*unit - 1) | 		var lookAhead = value >> (size*unit - 1) | ||||||
| 		if lookAhead != lead { | 		if lookAhead != lead { | ||||||
| 			return size + 1 | 			return size + 1 | ||||||
|  | @ -92,7 +92,7 @@ func (codec *VarCodec) encodeNVarInt(buffer []byte, value int64) error { | ||||||
| 		return errors.New("nothing to encode") | 		return errors.New("nothing to encode") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const unit = 8 // bit width of encoding unit
 | 	const unit = 8 // a bit width of encoding unit
 | ||||||
| 	for codec.Size > 0 { | 	for codec.Size > 0 { | ||||||
| 		if codec.Ptr >= len(buffer) { | 		if codec.Ptr >= len(buffer) { | ||||||
| 			return ErrBufferInsufficient | 			return ErrBufferInsufficient | ||||||
|  | @ -110,7 +110,7 @@ func (codec *VarCodec) decodeNVarInt(buffer []byte, value *int64) error { | ||||||
| 		return errors.New("nothing to decode") | 		return errors.New("nothing to decode") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const unit = 8      // bit width of encoding unit
 | 	const unit = 8      // a bit width of encoding unit
 | ||||||
| 	if codec.Size > 0 { // initialize sign bit
 | 	if codec.Size > 0 { // initialize sign bit
 | ||||||
| 		if codec.Ptr >= len(buffer) { | 		if codec.Ptr >= len(buffer) { | ||||||
| 			return ErrBufferInsufficient | 			return ErrBufferInsufficient | ||||||
|  |  | ||||||
|  | @ -74,7 +74,7 @@ func (codec *VarCodec) DecodePVarUInt64(buffer []byte, value *uint64) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func sizeOfPVarInt(value int64, width int) int { | func sizeOfPVarInt(value int64, width int) int { | ||||||
| 	const unit = 7 // bit width of encoding unit
 | 	const unit = 7 // a bit width of encoding unit
 | ||||||
| 
 | 
 | ||||||
| 	var lead = value >> (width - 1) | 	var lead = value >> (width - 1) | ||||||
| 	for size := width / unit; size > 0; size-- { | 	for size := width / unit; size > 0; size-- { | ||||||
|  | @ -94,7 +94,7 @@ func (codec *VarCodec) encodePVarInt(buffer []byte, value int64) error { | ||||||
| 		return ErrBufferInsufficient | 		return ErrBufferInsufficient | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const unit = 7       // bit width of encoding unit
 | 	const unit = 7       // a bit width of encoding unit
 | ||||||
| 	const more = -1 << 7 // continuation bits
 | 	const more = -1 << 7 // continuation bits
 | ||||||
| 	for codec.Size > 1 { | 	for codec.Size > 1 { | ||||||
| 		codec.Size-- | 		codec.Size-- | ||||||
|  | @ -123,9 +123,9 @@ func (codec *VarCodec) decodePVarInt(buffer []byte, value *int64) error { | ||||||
| 		return ErrBufferInsufficient | 		return ErrBufferInsufficient | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const unit = 7 // bit width of encoding unit
 | 	const unit = 7       // a bit width of encoding unit
 | ||||||
| 	if codec.Size == 0 { // initialize sign bit
 | 	if codec.Size == 0 { // initialize sign bit
 | ||||||
| 		const flag = 8 - unit // bit width for non-encoding bits
 | 		const flag = 8 - unit // a bit of width for non-encoding bits
 | ||||||
| 		*value = int64(int8(buffer[codec.Ptr]) << flag >> unit) | 		*value = int64(int8(buffer[codec.Ptr]) << flag >> unit) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -135,7 +135,7 @@ func (codec *VarCodec) decodePVarInt(buffer []byte, value *int64) error { | ||||||
| 		codec.Ptr++ | 		codec.Ptr++ | ||||||
| 
 | 
 | ||||||
| 		codec.Size++ | 		codec.Size++ | ||||||
| 		*value = (*value << unit) | int64(mask & part) | 		*value = (*value << unit) | int64(mask&part) | ||||||
| 
 | 
 | ||||||
| 		if part >= 0 { // it's the last byte
 | 		if part >= 0 { // it's the last byte
 | ||||||
| 			return nil | 			return nil | ||||||
|  |  | ||||||
|  | @ -43,11 +43,11 @@ func (codec *VarCodec) DecodeVarFloat64(buffer []byte, value *float64) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func sizeOfVarFloat(bits uint64, width int) int { | func sizeOfVarFloat(bits uint64, width int) int { | ||||||
| 	const unit = 8            // bit width of encoding unit
 | 	const unit = 8            // a bit width of encoding unit
 | ||||||
| 	const mask = uint64(0xFF) // mask of encoding unit
 | 	const mask = uint64(0xFF) // mask of encoding unit
 | ||||||
| 
 | 
 | ||||||
| 	for s := 0; width > 1; s += unit { | 	for s := 0; width > 1; s += unit { | ||||||
| 		if bits & (mask << s) != 0 { | 		if bits&(mask<<s) != 0 { | ||||||
| 			return width | 			return width | ||||||
| 		} | 		} | ||||||
| 		width-- | 		width-- | ||||||
|  | @ -68,7 +68,7 @@ func (codec *VarCodec) encodeVarFloat(buffer []byte, bits uint64, width int) err | ||||||
| 			return ErrBufferInsufficient | 			return ErrBufferInsufficient | ||||||
| 		} | 		} | ||||||
| 		codec.Size-- | 		codec.Size-- | ||||||
| 		buffer[codec.Ptr] = byte(bits >> ((codec.Size & mask + gap) * unit)) | 		buffer[codec.Ptr] = byte(bits >> ((codec.Size&mask + gap) * unit)) | ||||||
| 		codec.Ptr++ | 		codec.Ptr++ | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -99,8 +99,8 @@ func (codec *VarCodec) decodeVarFloat(buffer []byte, bits *uint64, width int) er | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (codec *VarCodec) sizeOfGap(width int) (int, int) { | func (codec *VarCodec) sizeOfGap(width int) (int, int) { | ||||||
| 	var ms = mbit.OnesCount(^uint(0)) // machine bit width for an int
 | 	var ms = mbit.OnesCount(^uint(0)) // machine a bit of width for an int
 | ||||||
| 	var size = ms - 8                 // bit width of effective size
 | 	var size = ms - 8                 // a bit width of effective size
 | ||||||
| 	var mask = -1 ^ (-1 << size)      // mask of effective size
 | 	var mask = -1 ^ (-1 << size)      // mask of effective size
 | ||||||
| 
 | 
 | ||||||
| 	var gap = 0 // gap between encoded size and decoded size
 | 	var gap = 0 // gap between encoded size and decoded size
 | ||||||
|  | @ -108,7 +108,7 @@ func (codec *VarCodec) sizeOfGap(width int) (int, int) { | ||||||
| 		if width > codec.Size { | 		if width > codec.Size { | ||||||
| 			gap = width - codec.Size | 			gap = width - codec.Size | ||||||
| 		} | 		} | ||||||
| 		var sign = -1 << (ms - 1) // single sign bit for an int
 | 		var sign = -1 << (ms - 1) // single sign a bit for an int
 | ||||||
| 		codec.Size = sign | (gap << size) | (codec.Size & mask) | 		codec.Size = sign | (gap << size) | (codec.Size & mask) | ||||||
| 	} else { | 	} else { | ||||||
| 		gap = (codec.Size >> size) & 0x7F | 		gap = (codec.Size >> size) & 0x7F | ||||||
|  |  | ||||||
							
								
								
									
										44
									
								
								packet.go
								
								
								
								
							
							
						
						
									
										44
									
								
								packet.go
								
								
								
								
							|  | @ -12,7 +12,7 @@ import ( | ||||||
| type StreamPacket struct { | type StreamPacket struct { | ||||||
| 	t         spec.T | 	t         spec.T | ||||||
| 	l         spec.L | 	l         spec.L | ||||||
| 	vbuf      []byte | 	vBuf      []byte | ||||||
| 	vr        io.Reader | 	vr        io.Reader | ||||||
| 	chunkMode bool | 	chunkMode bool | ||||||
| 	chunkSize int | 	chunkSize int | ||||||
|  | @ -38,8 +38,8 @@ func (p *StreamPacket) Bytes() []byte { | ||||||
| 	buf := new(bytes.Buffer) | 	buf := new(bytes.Buffer) | ||||||
| 	// the raw bytes of T and L
 | 	// the raw bytes of T and L
 | ||||||
| 	p.writeTL(buf) | 	p.writeTL(buf) | ||||||
| 	// p.valbuf stores the raw bytes of V
 | 	// p.valBuf stores the raw bytes of V
 | ||||||
| 	buf.Write(p.vbuf) | 	buf.Write(p.vBuf) | ||||||
| 
 | 
 | ||||||
| 	return buf.Bytes() | 	return buf.Bytes() | ||||||
| } | } | ||||||
|  | @ -47,7 +47,7 @@ func (p *StreamPacket) Bytes() []byte { | ||||||
| // VReader return an io.Reader which can be read as the content of V.
 | // VReader return an io.Reader which can be read as the content of V.
 | ||||||
| func (p *StreamPacket) VReader() io.Reader { | func (p *StreamPacket) VReader() io.Reader { | ||||||
| 	if !p.chunkMode { | 	if !p.chunkMode { | ||||||
| 		return bytes.NewReader(p.vbuf) | 		return bytes.NewReader(p.vBuf) | ||||||
| 	} | 	} | ||||||
| 	return p.vr | 	return p.vr | ||||||
| } | } | ||||||
|  | @ -60,7 +60,7 @@ func (p *StreamPacket) Reader() io.Reader { | ||||||
| 		buf := new(bytes.Buffer) | 		buf := new(bytes.Buffer) | ||||||
| 		buf.Write(p.t.Bytes()) | 		buf.Write(p.t.Bytes()) | ||||||
| 		buf.Write(p.l.Bytes()) | 		buf.Write(p.l.Bytes()) | ||||||
| 		buf.Write(p.vbuf) | 		buf.Write(p.vBuf) | ||||||
| 		return buf | 		return buf | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -68,7 +68,7 @@ func (p *StreamPacket) Reader() io.Reader { | ||||||
| 	// T and L of this packet
 | 	// T and L of this packet
 | ||||||
| 	p.writeTL(buf) | 	p.writeTL(buf) | ||||||
| 	// V of this packet
 | 	// V of this packet
 | ||||||
| 	buf.Write(p.vbuf) | 	buf.Write(p.vBuf) | ||||||
| 
 | 
 | ||||||
| 	return &chunkVReader{ | 	return &chunkVReader{ | ||||||
| 		buf:        buf, | 		buf:        buf, | ||||||
|  | @ -98,59 +98,59 @@ func (p *StreamPacket) writeTL(buf *bytes.Buffer) { | ||||||
| 
 | 
 | ||||||
| // BytesV return V as bytes
 | // BytesV return V as bytes
 | ||||||
| func (p *StreamPacket) BytesV() []byte { | func (p *StreamPacket) BytesV() []byte { | ||||||
| 	return p.vbuf | 	return p.vBuf | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UTF8StringV return V as utf-8 string
 | // UTF8StringV return V as utf-8 string
 | ||||||
| func (p *StreamPacket) UTF8StringV() string { | func (p *StreamPacket) UTF8StringV() string { | ||||||
| 	return string(p.vbuf) | 	return string(p.vBuf) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Int32V return V as int32
 | // Int32V return V as int32
 | ||||||
| func (p *StreamPacket) Int32V() (val int32, err error) { | func (p *StreamPacket) Int32V() (val int32, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodeNVarInt32(p.vbuf, &val) | 	err = codec.DecodeNVarInt32(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UInt32V return V as uint32
 | // UInt32V return V as uint32
 | ||||||
| func (p *StreamPacket) UInt32V() (val uint32, err error) { | func (p *StreamPacket) UInt32V() (val uint32, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodeNVarUInt32(p.vbuf, &val) | 	err = codec.DecodeNVarUInt32(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Int64V return V as int64
 | // Int64V return V as int64
 | ||||||
| func (p *StreamPacket) Int64V() (val int64, err error) { | func (p *StreamPacket) Int64V() (val int64, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodeNVarInt64(p.vbuf, &val) | 	err = codec.DecodeNVarInt64(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UInt64V return V as uint64
 | // UInt64V return V as uint64
 | ||||||
| func (p *StreamPacket) UInt64V() (val uint64, err error) { | func (p *StreamPacket) UInt64V() (val uint64, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodeNVarUInt64(p.vbuf, &val) | 	err = codec.DecodeNVarUInt64(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Float32V return V as float32
 | // Float32V return V as float32
 | ||||||
| func (p *StreamPacket) Float32V() (val float32, err error) { | func (p *StreamPacket) Float32V() (val float32, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodeVarFloat32(p.vbuf, &val) | 	err = codec.DecodeVarFloat32(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Float64V return V as float64
 | // Float64V return V as float64
 | ||||||
| func (p *StreamPacket) Float64V() (val float64, err error) { | func (p *StreamPacket) Float64V() (val float64, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodeVarFloat64(p.vbuf, &val) | 	err = codec.DecodeVarFloat64(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // BoolV return V as bool
 | // BoolV return V as bool
 | ||||||
| func (p *StreamPacket) BoolV() (val bool, err error) { | func (p *StreamPacket) BoolV() (val bool, err error) { | ||||||
| 	codec := encoding.VarCodec{Size: len(p.vbuf)} | 	codec := encoding.VarCodec{Size: len(p.vBuf)} | ||||||
| 	err = codec.DecodePVarBool(p.vbuf, &val) | 	err = codec.DecodePVarBool(p.vBuf, &val) | ||||||
| 	return val, err | 	return val, err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ const ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	errInvalidSeqID = errors.New("y3.Builder: SeqID should >= 0 and =< 0x3F") | 	errInvalidSeqId = errors.New("coder.Builder: SeqId should >= 0 and =< 0x3F") | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func readByte(reader io.Reader) (byte, error) { | func readByte(reader io.Reader) (byte, error) { | ||||||
|  |  | ||||||
|  | @ -12,13 +12,13 @@ type T byte | ||||||
| // will set MSB to T.
 | // will set MSB to T.
 | ||||||
| func NewT(seqID int) (T, error) { | func NewT(seqID int) (T, error) { | ||||||
| 	if seqID < 0 || seqID > maxSeqID { | 	if seqID < 0 || seqID > maxSeqID { | ||||||
| 		return 0, errInvalidSeqID | 		return 0, errInvalidSeqId | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return T(seqID), nil | 	return T(seqID), nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Sid returns the sequenceID of this packet.
 | // Sid returns the sequenceId of this packet.
 | ||||||
| func (t T) Sid() int { | func (t T) Sid() int { | ||||||
| 	return int(t & wipeFlagBits) | 	return int(t & wipeFlagBits) | ||||||
| } | } | ||||||
|  | @ -29,7 +29,7 @@ func (t T) Bytes() []byte { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IsNodeMode will return true if this packet contains other packets.
 | // IsNodeMode will return true if this packet contains other packets.
 | ||||||
| // Otherwise return flase.
 | // Otherwise, return false.
 | ||||||
| func (t T) IsNodeMode() bool { | func (t T) IsNodeMode() bool { | ||||||
| 	return t&flagBitNode == flagBitNode | 	return t&flagBitNode == flagBitNode | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -4,9 +4,10 @@ import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"io" | 	"io" | ||||||
| 
 |  | ||||||
| 	//"git.hpds.cc/Component/mq_coder/encoding"
 |  | ||||||
| 	"mq_coder/encoding" | 	"mq_coder/encoding" | ||||||
|  | 
 | ||||||
|  | 	"git.hpds.cc/Component/mq_coder/encoding" | ||||||
|  | 	//"mq_coder/encoding"
 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // L is the Length in a TLV structure
 | // L is the Length in a TLV structure
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue