github.com/lino-network/lino@v0.6.11/x/reputation/repv2/utils.go (about)

     1  package repv2
     2  
     3  // PrefixEndBytes returns the []byte that would end a
     4  // range query for all []byte with a certain prefix
     5  // Deals with last byte of prefix being FF without overflowing
     6  func PrefixEndBytes(prefix []byte) []byte {
     7  	if len(prefix) == 0 {
     8  		return nil
     9  	}
    10  
    11  	end := make([]byte, len(prefix))
    12  	copy(end, prefix)
    13  
    14  	for {
    15  		if end[len(end)-1] != byte(255) {
    16  			end[len(end)-1]++
    17  			break
    18  		} else {
    19  			end = end[:len(end)-1]
    20  			if len(end) == 0 {
    21  				end = nil
    22  				break
    23  			}
    24  		}
    25  	}
    26  	return end
    27  }