github.com/apache/arrow/go/v14@v14.0.1/internal/utils/transpose_ints_def.go (about) 1 // Licensed to the Apache Software Foundation (ASF) under one 2 // or more contributor license agreements. See the NOTICE file 3 // distributed with this work for additional information 4 // regarding copyright ownership. The ASF licenses this file 5 // to you under the Apache License, Version 2.0 (the 6 // "License"); you may not use this file except in compliance 7 // with the License. You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 17 package utils 18 19 import ( 20 "errors" 21 22 "github.com/apache/arrow/go/v14/arrow" 23 ) 24 25 //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata -d arch=avx2 transpose_ints_simd.go.tmpl=transpose_ints_avx2_amd64.go 26 //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata -d arch=sse4 transpose_ints_simd.go.tmpl=transpose_ints_sse4_amd64.go 27 //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata transpose_ints_s390x.go.tmpl=transpose_ints_s390x.go 28 //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata transpose_ints_s390x.go.tmpl=transpose_ints_arm64.go 29 //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata transpose_ints_noasm.go.tmpl=transpose_ints_noasm.go 30 //go:generate go run ../../arrow/_tools/tmpl -i -data=transpose_ints.tmpldata transpose_ints.go.tmpl=transpose_ints.go 31 32 func bufToTyped(typ arrow.DataType, buf []byte, offset, length int) (interface{}, error) { 33 switch typ.ID() { 34 case arrow.INT8: 35 return arrow.Int8Traits.CastFromBytes(buf)[offset : offset+length], nil 36 case arrow.INT16: 37 return arrow.Int16Traits.CastFromBytes(buf)[offset : offset+length], nil 38 case arrow.INT32: 39 return arrow.Int32Traits.CastFromBytes(buf)[offset : offset+length], nil 40 case arrow.INT64: 41 return arrow.Int64Traits.CastFromBytes(buf)[offset : offset+length], nil 42 case arrow.UINT8: 43 return arrow.Uint8Traits.CastFromBytes(buf)[offset : offset+length], nil 44 case arrow.UINT16: 45 return arrow.Uint16Traits.CastFromBytes(buf)[offset : offset+length], nil 46 case arrow.UINT32: 47 return arrow.Uint32Traits.CastFromBytes(buf)[offset : offset+length], nil 48 case arrow.UINT64: 49 return arrow.Uint64Traits.CastFromBytes(buf)[offset : offset+length], nil 50 } 51 return nil, errors.New("only accepts integral types") 52 } 53 54 // TransposeIntsBuffers takes the data-types, byte buffers, and offsets of a source and destination 55 // buffer to perform TransposeInts on with the provided mapping data. 56 func TransposeIntsBuffers(inType, outType arrow.DataType, indata, outdata []byte, inOffset, outOffset int, length int, transposeMap []int32) error { 57 src, err := bufToTyped(inType, indata, inOffset, length) 58 if err != nil { 59 return err 60 } 61 dest, err := bufToTyped(outType, outdata, outOffset, length) 62 if err != nil { 63 return err 64 } 65 66 return TransposeInts(src, dest, transposeMap) 67 } 68 69 // TransposeInts expects two integral slices and the values they map to. Returning 70 // an error if either src or dest are not an integral type. 71 func TransposeInts(src, dest interface{}, mapping []int32) error { 72 switch s := src.(type) { 73 case []int8: 74 switch d := dest.(type) { 75 case []int8: 76 TransposeInt8Int8(s, d, mapping) 77 case []int16: 78 TransposeInt8Int16(s, d, mapping) 79 case []int32: 80 TransposeInt8Int32(s, d, mapping) 81 case []int64: 82 TransposeInt8Int64(s, d, mapping) 83 case []uint8: 84 TransposeInt8Uint8(s, d, mapping) 85 case []uint16: 86 TransposeInt8Uint16(s, d, mapping) 87 case []uint32: 88 TransposeInt8Uint32(s, d, mapping) 89 case []uint64: 90 TransposeInt8Uint64(s, d, mapping) 91 } 92 case []int16: 93 switch d := dest.(type) { 94 case []int8: 95 TransposeInt16Int8(s, d, mapping) 96 case []int16: 97 TransposeInt16Int16(s, d, mapping) 98 case []int32: 99 TransposeInt16Int32(s, d, mapping) 100 case []int64: 101 TransposeInt16Int64(s, d, mapping) 102 case []uint8: 103 TransposeInt16Uint8(s, d, mapping) 104 case []uint16: 105 TransposeInt16Uint16(s, d, mapping) 106 case []uint32: 107 TransposeInt16Uint32(s, d, mapping) 108 case []uint64: 109 TransposeInt16Uint64(s, d, mapping) 110 } 111 case []int32: 112 switch d := dest.(type) { 113 case []int8: 114 TransposeInt32Int8(s, d, mapping) 115 case []int16: 116 TransposeInt32Int16(s, d, mapping) 117 case []int32: 118 TransposeInt32Int32(s, d, mapping) 119 case []int64: 120 TransposeInt32Int64(s, d, mapping) 121 case []uint8: 122 TransposeInt32Uint8(s, d, mapping) 123 case []uint16: 124 TransposeInt32Uint16(s, d, mapping) 125 case []uint32: 126 TransposeInt32Uint32(s, d, mapping) 127 case []uint64: 128 TransposeInt32Uint64(s, d, mapping) 129 } 130 case []int64: 131 switch d := dest.(type) { 132 case []int8: 133 TransposeInt64Int8(s, d, mapping) 134 case []int16: 135 TransposeInt64Int16(s, d, mapping) 136 case []int32: 137 TransposeInt64Int32(s, d, mapping) 138 case []int64: 139 TransposeInt64Int64(s, d, mapping) 140 case []uint8: 141 TransposeInt64Uint8(s, d, mapping) 142 case []uint16: 143 TransposeInt64Uint16(s, d, mapping) 144 case []uint32: 145 TransposeInt64Uint32(s, d, mapping) 146 case []uint64: 147 TransposeInt64Uint64(s, d, mapping) 148 } 149 case []uint8: 150 switch d := dest.(type) { 151 case []int8: 152 TransposeUint8Int8(s, d, mapping) 153 case []int16: 154 TransposeUint8Int16(s, d, mapping) 155 case []int32: 156 TransposeUint8Int32(s, d, mapping) 157 case []int64: 158 TransposeUint8Int64(s, d, mapping) 159 case []uint8: 160 TransposeUint8Uint8(s, d, mapping) 161 case []uint16: 162 TransposeUint8Uint16(s, d, mapping) 163 case []uint32: 164 TransposeUint8Uint32(s, d, mapping) 165 case []uint64: 166 TransposeUint8Uint64(s, d, mapping) 167 } 168 case []uint16: 169 switch d := dest.(type) { 170 case []int8: 171 TransposeUint16Int8(s, d, mapping) 172 case []int16: 173 TransposeUint16Int16(s, d, mapping) 174 case []int32: 175 TransposeUint16Int32(s, d, mapping) 176 case []int64: 177 TransposeUint16Int64(s, d, mapping) 178 case []uint8: 179 TransposeUint16Uint8(s, d, mapping) 180 case []uint16: 181 TransposeUint16Uint16(s, d, mapping) 182 case []uint32: 183 TransposeUint16Uint32(s, d, mapping) 184 case []uint64: 185 TransposeUint16Uint64(s, d, mapping) 186 } 187 case []uint32: 188 switch d := dest.(type) { 189 case []int8: 190 TransposeUint32Int8(s, d, mapping) 191 case []int16: 192 TransposeUint32Int16(s, d, mapping) 193 case []int32: 194 TransposeUint32Int32(s, d, mapping) 195 case []int64: 196 TransposeUint32Int64(s, d, mapping) 197 case []uint8: 198 TransposeUint32Uint8(s, d, mapping) 199 case []uint16: 200 TransposeUint32Uint16(s, d, mapping) 201 case []uint32: 202 TransposeUint32Uint32(s, d, mapping) 203 case []uint64: 204 TransposeUint32Uint64(s, d, mapping) 205 } 206 case []uint64: 207 switch d := dest.(type) { 208 case []int8: 209 TransposeUint64Int8(s, d, mapping) 210 case []int16: 211 TransposeUint64Int16(s, d, mapping) 212 case []int32: 213 TransposeUint64Int32(s, d, mapping) 214 case []int64: 215 TransposeUint64Int64(s, d, mapping) 216 case []uint8: 217 TransposeUint64Uint8(s, d, mapping) 218 case []uint16: 219 TransposeUint64Uint16(s, d, mapping) 220 case []uint32: 221 TransposeUint64Uint32(s, d, mapping) 222 case []uint64: 223 TransposeUint64Uint64(s, d, mapping) 224 } 225 } 226 return nil 227 }