...

Text file src/github.com/ugorji/go/codec/sort-slice.go.tmpl

Documentation: github.com/ugorji/go/codec

     1// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved.
     2// Use of this source code is governed by a MIT license found in the LICENSE file.
     3
     4// Code generated from sort-slice.go.tmpl - DO NOT EDIT.
     5
     6{{/*
     7xxxSlice
     8xxxIntf
     9xxxIntfSlice
    10xxxRv
    11xxxRvSlice
    12
    13I'm now going to create them for
    14- sortables
    15- sortablesplus
    16
    17With the parameters passed in sortables or sortablesplus,
    18'time, 'bytes' are special, and correspond to time.Time and []byte respectively.
    19*/}}
    20
    21package codec
    22
    23import (
    24	"time"
    25	"reflect"
    26	"bytes"
    27)
    28
    29{{/* func init() { _ = time.Unix } */}}
    30
    31{{define "T"}}
    32func (p {{ .Type }}) Len() int           { return len(p) }
    33func (p {{ .Type }}) Swap(i, j int)      { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] }
    34func (p {{ .Type }}) Less(i, j int) bool {
    35	{{ if eq .Kind "bool"         }} return !p[uint(i)]{{.V}} && p[uint(j)]{{.V}}
    36    {{ else if eq .Kind "float32" }} return p[uint(i)]{{.V}} < p[uint(j)]{{.V}} || isNaN32(p[uint(i)]{{.V}}) && !isNaN32(p[uint(j)]{{.V}})
    37    {{ else if eq .Kind "float64" }} return p[uint(i)]{{.V}} < p[uint(j)]{{.V}} || isNaN64(p[uint(i)]{{.V}}) && !isNaN64(p[uint(j)]{{.V}})
    38    {{ else if eq .Kind "time"    }} return p[uint(i)]{{.V}}.Before(p[uint(j)]{{.V}})
    39    {{ else if eq .Kind "bytes"   }} return bytes.Compare(p[uint(i)]{{.V}}, p[uint(j)]{{.V}}) == -1
    40    {{ else                    }} return p[uint(i)]{{.V}} < p[uint(j)]{{.V}}
    41    {{ end -}}
    42}
    43{{end}}
    44
    45{{range $i, $v := sortables }}{{ $t := tshort $v }}
    46type {{ $v }}Slice []{{ $t }}
    47{{template "T" args "Kind" $v "Type" (print $v "Slice") "V" ""}}
    48{{end}}
    49
    50{{range $i, $v := sortablesplus }}{{ $t := tshort $v }}
    51
    52type {{ $v }}Rv struct {
    53	v {{ $t }}
    54	r reflect.Value
    55}
    56type {{ $v }}RvSlice []{{ $v }}Rv
    57{{template "T" args "Kind" $v "Type" (print $v "RvSlice") "V" ".v"}}
    58
    59{{if eq $v "bytes" "string" -}}
    60type {{ $v }}Intf struct {
    61	v {{ $t }}
    62	i interface{}
    63}
    64type {{ $v }}IntfSlice []{{ $v }}Intf
    65{{template "T" args "Kind" $v "Type" (print $v "IntfSlice") "V" ".v"}}
    66{{end}}
    67
    68{{end}}

View as plain text