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

     1  package parquet
     2  
     3  import (
     4  	"encoding/binary"
     5  
     6  	"github.com/vc42/parquet-go/deprecated"
     7  )
     8  
     9  func compareBool(v1, v2 bool) int {
    10  	switch {
    11  	case !v1 && v2:
    12  		return -1
    13  	case v1 && !v2:
    14  		return +1
    15  	default:
    16  		return 0
    17  	}
    18  }
    19  
    20  func compareInt32(v1, v2 int32) int {
    21  	switch {
    22  	case v1 < v2:
    23  		return -1
    24  	case v1 > v2:
    25  		return +1
    26  	default:
    27  		return 0
    28  	}
    29  }
    30  
    31  func compareInt64(v1, v2 int64) int {
    32  	switch {
    33  	case v1 < v2:
    34  		return -1
    35  	case v1 > v2:
    36  		return +1
    37  	default:
    38  		return 0
    39  	}
    40  }
    41  
    42  func compareInt96(v1, v2 deprecated.Int96) int {
    43  	switch {
    44  	case v1.Less(v2):
    45  		return -1
    46  	case v2.Less(v1):
    47  		return +1
    48  	default:
    49  		return 0
    50  	}
    51  }
    52  
    53  func compareFloat32(v1, v2 float32) int {
    54  	switch {
    55  	case v1 < v2:
    56  		return -1
    57  	case v1 > v2:
    58  		return +1
    59  	default:
    60  		return 0
    61  	}
    62  }
    63  
    64  func compareFloat64(v1, v2 float64) int {
    65  	switch {
    66  	case v1 < v2:
    67  		return -1
    68  	case v1 > v2:
    69  		return +1
    70  	default:
    71  		return 0
    72  	}
    73  }
    74  
    75  func compareUint32(v1, v2 uint32) int {
    76  	switch {
    77  	case v1 < v2:
    78  		return -1
    79  	case v1 > v2:
    80  		return +1
    81  	default:
    82  		return 0
    83  	}
    84  }
    85  
    86  func compareUint64(v1, v2 uint64) int {
    87  	switch {
    88  	case v1 < v2:
    89  		return -1
    90  	case v1 > v2:
    91  		return +1
    92  	default:
    93  		return 0
    94  	}
    95  }
    96  
    97  func compareBE128(v1, v2 *[16]byte) int {
    98  	x := binary.BigEndian.Uint64(v1[:8])
    99  	y := binary.BigEndian.Uint64(v2[:8])
   100  	switch {
   101  	case x < y:
   102  		return -1
   103  	case x > y:
   104  		return +1
   105  	}
   106  	x = binary.BigEndian.Uint64(v1[8:])
   107  	y = binary.BigEndian.Uint64(v2[8:])
   108  	switch {
   109  	case x < y:
   110  		return -1
   111  	case x > y:
   112  		return +1
   113  	default:
   114  		return 0
   115  	}
   116  }
   117  
   118  func lessBE128(v1, v2 *[16]byte) bool {
   119  	x := binary.BigEndian.Uint64(v1[:8])
   120  	y := binary.BigEndian.Uint64(v2[:8])
   121  	switch {
   122  	case x < y:
   123  		return true
   124  	case x > y:
   125  		return false
   126  	}
   127  	x = binary.BigEndian.Uint64(v1[8:])
   128  	y = binary.BigEndian.Uint64(v2[8:])
   129  	return x < y
   130  }