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 }