github.com/segmentio/parquet-go@v0.0.0-20230712180008-5d42db8f0d47/page_min_purego.go (about)

     1  //go:build purego || !amd64
     2  
     3  package parquet
     4  
     5  import "encoding/binary"
     6  
     7  // -----------------------------------------------------------------------------
     8  // TODO: use generics versions of the these functions to reduce the amount of
     9  // code to maintain when we drop compatilibty with Go version older than 1.18.
    10  // -----------------------------------------------------------------------------
    11  
    12  func minInt32(data []int32) (min int32) {
    13  	if len(data) > 0 {
    14  		min = data[0]
    15  
    16  		for _, value := range data {
    17  			if value < min {
    18  				min = value
    19  			}
    20  		}
    21  	}
    22  	return min
    23  }
    24  
    25  func minInt64(data []int64) (min int64) {
    26  	if len(data) > 0 {
    27  		min = data[0]
    28  
    29  		for _, value := range data {
    30  			if value < min {
    31  				min = value
    32  			}
    33  		}
    34  	}
    35  	return min
    36  }
    37  
    38  func minUint32(data []uint32) (min uint32) {
    39  	if len(data) > 0 {
    40  		min = data[0]
    41  
    42  		for _, value := range data {
    43  			if value < min {
    44  				min = value
    45  			}
    46  		}
    47  	}
    48  	return min
    49  }
    50  
    51  func minUint64(data []uint64) (min uint64) {
    52  	if len(data) > 0 {
    53  		min = data[0]
    54  
    55  		for _, value := range data {
    56  			if value < min {
    57  				min = value
    58  			}
    59  		}
    60  	}
    61  	return min
    62  }
    63  
    64  func minFloat32(data []float32) (min float32) {
    65  	if len(data) > 0 {
    66  		min = data[0]
    67  
    68  		for _, value := range data {
    69  			if value < min {
    70  				min = value
    71  			}
    72  		}
    73  	}
    74  	return min
    75  }
    76  
    77  func minFloat64(data []float64) (min float64) {
    78  	if len(data) > 0 {
    79  		min = data[0]
    80  
    81  		for _, value := range data {
    82  			if value < min {
    83  				min = value
    84  			}
    85  		}
    86  	}
    87  	return min
    88  }
    89  
    90  func minBE128(data [][16]byte) (min []byte) {
    91  	if len(data) > 0 {
    92  		m := binary.BigEndian.Uint64(data[0][:8])
    93  		j := 0
    94  		for i := 1; i < len(data); i++ {
    95  			x := binary.BigEndian.Uint64(data[i][:8])
    96  			switch {
    97  			case x < m:
    98  				m, j = x, i
    99  			case x == m:
   100  				y := binary.BigEndian.Uint64(data[i][8:])
   101  				n := binary.BigEndian.Uint64(data[j][8:])
   102  				if y < n {
   103  					m, j = x, i
   104  				}
   105  			}
   106  		}
   107  		min = data[j][:]
   108  	}
   109  	return min
   110  }