github.com/vc42/parquet-go@v0.0.0-20240320194221-1a9adb5f23f5/level.go (about)

     1  package parquet
     2  
     3  import "github.com/vc42/parquet-go/internal/bytealg"
     4  
     5  func countLevelsEqual(levels []byte, value byte) int {
     6  	return bytealg.Count(levels, value)
     7  }
     8  
     9  func countLevelsNotEqual(levels []byte, value byte) int {
    10  	return len(levels) - countLevelsEqual(levels, value)
    11  }
    12  
    13  func appendLevel(levels []byte, value byte, count int) []byte {
    14  	i := len(levels)
    15  	n := len(levels) + count
    16  
    17  	if cap(levels) < n {
    18  		newLevels := make([]byte, n, 2*n)
    19  		copy(newLevels, levels)
    20  		levels = newLevels
    21  	} else {
    22  		levels = levels[:n]
    23  	}
    24  
    25  	bytealg.Broadcast(levels[i:], value)
    26  	return levels
    27  }