gotype/fold_arr.go (53 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package gotype import ( "reflect" structform "github.com/elastic/go-structform" ) var ( reFoldArrBool = liftFold([]bool(nil), foldArrBool) reFoldArrInt = liftFold([]int(nil), foldArrInt) reFoldArrInt8 = liftFold([]int8(nil), foldArrInt8) reFoldArrInt16 = liftFold([]int16(nil), foldArrInt16) reFoldArrInt32 = liftFold([]int32(nil), foldArrInt32) reFoldArrInt64 = liftFold([]int64(nil), foldArrInt64) reFoldArrUint = liftFold([]uint(nil), foldArrUint) reFoldArrUint8 = liftFold([]uint8(nil), foldArrUint8) reFoldArrUint16 = liftFold([]uint16(nil), foldArrUint16) reFoldArrUint32 = liftFold([]uint32(nil), foldArrUint32) reFoldArrUint64 = liftFold([]uint64(nil), foldArrUint64) reFoldArrFloat32 = liftFold([]float32(nil), foldArrFloat32) reFoldArrFloat64 = liftFold([]float64(nil), foldArrFloat64) reFoldArrString = liftFold([]string(nil), foldArrString) ) var tArrayAny = reflect.TypeOf([]interface{}(nil)) func foldArrInterface(C *foldContext, v interface{}) error { a := v.([]interface{}) if err := C.OnArrayStart(len(a), structform.AnyType); err != nil { return err } for _, v := range a { if err := foldInterfaceValue(C, v); err != nil { return err } } return C.OnArrayFinished() } func foldArrBool(C *foldContext, v interface{}) error { return C.visitor.OnBoolArray(v.([]bool)) } func foldArrString(C *foldContext, v interface{}) error { return C.visitor.OnStringArray(v.([]string)) } func foldArrInt8(C *foldContext, v interface{}) error { return C.visitor.OnInt8Array(v.([]int8)) } func foldArrInt16(C *foldContext, v interface{}) error { return C.visitor.OnInt16Array(v.([]int16)) } func foldArrInt32(C *foldContext, v interface{}) error { return C.visitor.OnInt32Array(v.([]int32)) } func foldArrInt64(C *foldContext, v interface{}) error { return C.visitor.OnInt64Array(v.([]int64)) } func foldArrInt(C *foldContext, v interface{}) error { return C.visitor.OnIntArray(v.([]int)) } func foldBytes(C *foldContext, v interface{}) error { return C.visitor.OnBytes(v.([]byte)) } func foldArrUint8(C *foldContext, v interface{}) error { return C.visitor.OnUint8Array(v.([]uint8)) } func foldArrUint16(C *foldContext, v interface{}) error { return C.visitor.OnUint16Array(v.([]uint16)) } func foldArrUint32(C *foldContext, v interface{}) error { return C.visitor.OnUint32Array(v.([]uint32)) } func foldArrUint64(C *foldContext, v interface{}) error { return C.visitor.OnUint64Array(v.([]uint64)) } func foldArrUint(C *foldContext, v interface{}) error { return C.visitor.OnUintArray(v.([]uint)) } func foldArrFloat32(C *foldContext, v interface{}) error { return C.visitor.OnFloat32Array(v.([]float32)) } func foldArrFloat64(C *foldContext, v interface{}) error { return C.visitor.OnFloat64Array(v.([]float64)) }