github.com/segmentio/parquet-go@v0.0.0-20230712180008-5d42db8f0d47/order_purego.go (about) 1 //go:build purego || !amd64 2 3 package parquet 4 5 // ----------------------------------------------------------------------------- 6 // TODO: use generics versions of the these functions to reduce the amount of 7 // code to maintain when we drop compatilibty with Go version older than 1.18. 8 // ----------------------------------------------------------------------------- 9 10 func orderOfInt32(data []int32) int { 11 if len(data) > 1 { 12 if int32AreInAscendingOrder(data) { 13 return +1 14 } 15 if int32AreInDescendingOrder(data) { 16 return -1 17 } 18 } 19 return 0 20 } 21 22 func orderOfInt64(data []int64) int { 23 if len(data) > 1 { 24 if int64AreInAscendingOrder(data) { 25 return +1 26 } 27 if int64AreInDescendingOrder(data) { 28 return -1 29 } 30 } 31 return 0 32 } 33 34 func orderOfUint32(data []uint32) int { 35 if len(data) > 1 { 36 if uint32AreInAscendingOrder(data) { 37 return +1 38 } 39 if uint32AreInDescendingOrder(data) { 40 return -1 41 } 42 } 43 return 0 44 } 45 46 func orderOfUint64(data []uint64) int { 47 if len(data) > 1 { 48 if uint64AreInAscendingOrder(data) { 49 return +1 50 } 51 if uint64AreInDescendingOrder(data) { 52 return -1 53 } 54 } 55 return 0 56 } 57 58 func orderOfFloat32(data []float32) int { 59 if len(data) > 1 { 60 if float32AreInAscendingOrder(data) { 61 return +1 62 } 63 if float32AreInDescendingOrder(data) { 64 return -1 65 } 66 } 67 return 0 68 } 69 70 func orderOfFloat64(data []float64) int { 71 if len(data) > 1 { 72 if float64AreInAscendingOrder(data) { 73 return +1 74 } 75 if float64AreInDescendingOrder(data) { 76 return -1 77 } 78 } 79 return 0 80 } 81 82 func int32AreInAscendingOrder(data []int32) bool { 83 for i := len(data) - 1; i > 0; i-- { 84 if data[i-1] > data[i] { 85 return false 86 } 87 } 88 return true 89 } 90 91 func int32AreInDescendingOrder(data []int32) bool { 92 for i := len(data) - 1; i > 0; i-- { 93 if data[i-1] < data[i] { 94 return false 95 } 96 } 97 return true 98 } 99 100 func int64AreInAscendingOrder(data []int64) bool { 101 for i := len(data) - 1; i > 0; i-- { 102 if data[i-1] > data[i] { 103 return false 104 } 105 } 106 return true 107 } 108 109 func int64AreInDescendingOrder(data []int64) bool { 110 for i := len(data) - 1; i > 0; i-- { 111 if data[i-1] < data[i] { 112 return false 113 } 114 } 115 return true 116 } 117 118 func uint32AreInAscendingOrder(data []uint32) bool { 119 for i := len(data) - 1; i > 0; i-- { 120 if data[i-1] > data[i] { 121 return false 122 } 123 } 124 return true 125 } 126 127 func uint32AreInDescendingOrder(data []uint32) bool { 128 for i := len(data) - 1; i > 0; i-- { 129 if data[i-1] < data[i] { 130 return false 131 } 132 } 133 return true 134 } 135 136 func uint64AreInAscendingOrder(data []uint64) bool { 137 for i := len(data) - 1; i > 0; i-- { 138 if data[i-1] > data[i] { 139 return false 140 } 141 } 142 return true 143 } 144 145 func uint64AreInDescendingOrder(data []uint64) bool { 146 for i := len(data) - 1; i > 0; i-- { 147 if data[i-1] < data[i] { 148 return false 149 } 150 } 151 return true 152 } 153 154 func float32AreInAscendingOrder(data []float32) bool { 155 for i := len(data) - 1; i > 0; i-- { 156 if data[i-1] > data[i] { 157 return false 158 } 159 } 160 return true 161 } 162 163 func float32AreInDescendingOrder(data []float32) bool { 164 for i := len(data) - 1; i > 0; i-- { 165 if data[i-1] < data[i] { 166 return false 167 } 168 } 169 return true 170 } 171 172 func float64AreInAscendingOrder(data []float64) bool { 173 for i := len(data) - 1; i > 0; i-- { 174 if data[i-1] > data[i] { 175 return false 176 } 177 } 178 return true 179 } 180 181 func float64AreInDescendingOrder(data []float64) bool { 182 for i := len(data) - 1; i > 0; i-- { 183 if data[i-1] < data[i] { 184 return false 185 } 186 } 187 return true 188 }