github.com/segmentio/encoding@v0.4.0/proto/uint.go (about)

     1  package proto
     2  
     3  import "unsafe"
     4  
     5  var uintCodec = codec{
     6  	wire:   varint,
     7  	size:   sizeOfUint,
     8  	encode: encodeUint,
     9  	decode: decodeUint,
    10  }
    11  
    12  func sizeOfUint(p unsafe.Pointer, flags flags) int {
    13  	if p != nil {
    14  		if v := *(*uint)(p); v != 0 || flags.has(wantzero) {
    15  			return sizeOfVarint(uint64(v))
    16  		}
    17  	}
    18  	return 0
    19  }
    20  
    21  func encodeUint(b []byte, p unsafe.Pointer, flags flags) (int, error) {
    22  	if p != nil {
    23  		if v := *(*uint)(p); v != 0 || flags.has(wantzero) {
    24  			return encodeVarint(b, uint64(v))
    25  		}
    26  	}
    27  	return 0, nil
    28  }
    29  
    30  func decodeUint(b []byte, p unsafe.Pointer, _ flags) (int, error) {
    31  	v, n, err := decodeVarint(b)
    32  	*(*uint)(p) = uint(v)
    33  	return n, err
    34  }