MCPcopy Create free account
hub / github.com/HDT3213/rdb / encodeListPackInt

Method encodeListPackInt

core/stream.go:762–813  ·  view source on GitHub ↗

encodeListPackInt encodes an integer for listpack

(val int64)

Source from the content-addressed store, hash-verified

760
761// encodeListPackInt encodes an integer for listpack
762func (enc *Encoder) encodeListPackInt(val int64) []byte {
763 if val >= -127 && val <= 127 {
764 // 0xxxxxxx, uint7
765 return []byte{byte(val)}
766 } else if val >= -8191 && val <= 8191 {
767 // 110xxxxx yyyyyyyy, int13
768 uval := uint16(val)
769 if val < 0 {
770 uval = uint16(8191 + val + 1)
771 }
772 return []byte{
773 byte(0xC0 | (uval >> 8)),
774 byte(uval & 0xFF),
775 }
776 } else if val >= -32767 && val <= 32767 {
777 // 11110001 aaaaaaaa bbbbbbbb, int16
778 uval := uint16(val)
779 return []byte{
780 0xF1,
781 byte(uval & 0xFF),
782 byte(uval >> 8),
783 }
784 } else if val >= -8388607 && val <= 8388607 {
785 // 11110010 aaaaaaaa bbbbbbbb cccccccc, int24
786 uval := uint32(val)
787 return []byte{
788 0xF2,
789 byte(uval & 0xFF),
790 byte((uval >> 8) & 0xFF),
791 byte((uval >> 16) & 0xFF),
792 }
793 } else if val >= -2147483647 && val <= 2147483647 {
794 // 11110011 aaaaaaaa bbbbbbbb cccccccc dddddddd, int32
795 uval := uint32(val)
796 return []byte{
797 0xF3,
798 byte(uval & 0xFF),
799 byte((uval >> 8) & 0xFF),
800 byte((uval >> 16) & 0xFF),
801 byte((uval >> 24) & 0xFF),
802 }
803 } else {
804 // 11110100 8Byte -> int64
805 uval := uint64(val)
806 result := []byte{0xF4}
807 for i := 0; i < 8; i++ {
808 result = append(result, byte(uval&0xFF))
809 uval >>= 8
810 }
811 return result
812 }
813}
814
815// encodeListPackString encodes a string for listpack
816func (enc *Encoder) encodeListPackString(s string) []byte {

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected