gen-dec-array.go.tmpl 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. {{var "v"}} := {{ if not isArray}}*{{ end }}{{ .Varname }}
  2. {{var "h"}}, {{var "l"}} := z.DecSliceHelperStart()
  3. var {{var "c"}} bool
  4. _ = {{var "c"}}
  5. {{ if not isArray }}if {{var "v"}} == nil {
  6. if {{var "l"}} <= 0 {
  7. {{var "v"}} = make({{ .CTyp }}, 0)
  8. } else {
  9. {{var "v"}} = make({{ .CTyp }}, {{var "l"}})
  10. }
  11. {{var "c"}} = true
  12. }
  13. {{ end }}
  14. if {{var "l"}} == 0 { {{ if isSlice }}
  15. if len({{var "v"}}) != 0 {
  16. {{var "v"}} = {{var "v"}}[:0]
  17. {{var "c"}} = true
  18. } {{ end }}
  19. } else if {{var "l"}} > 0 {
  20. {{ if isChan }}
  21. for {{var "r"}} := 0; {{var "r"}} < {{var "l"}}; {{var "r"}}++ {
  22. var {{var "t"}} {{ .Typ }}
  23. {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }}
  24. {{var "v"}} <- {{var "t"}}
  25. {{ else }}
  26. {{var "n"}} := {{var "l"}}
  27. if {{var "l"}} > cap({{var "v"}}) {
  28. {{ if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "l"}})
  29. {{var "n"}} = len({{var "v"}})
  30. {{ else }}{{ if .Immutable }}
  31. {{var "v2"}} := {{var "v"}}
  32. {{var "v"}} = make([]{{ .Typ }}, {{var "l"}}, {{var "l"}})
  33. if len({{var "v"}}) > 0 {
  34. copy({{var "v"}}, {{var "v2"}}[:cap({{var "v2"}})])
  35. }
  36. {{ else }}{{var "v"}} = make([]{{ .Typ }}, {{var "l"}}, {{var "l"}})
  37. {{ end }}{{var "c"}} = true
  38. {{ end }}
  39. } else if {{var "l"}} != len({{var "v"}}) {
  40. {{ if isSlice }}{{var "v"}} = {{var "v"}}[:{{var "l"}}]
  41. {{var "c"}} = true {{ end }}
  42. }
  43. {{var "j"}} := 0
  44. for ; {{var "j"}} < {{var "n"}} ; {{var "j"}}++ {
  45. {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
  46. } {{ if isArray }}
  47. for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ {
  48. z.DecSwallow()
  49. }{{ end }}
  50. {{ end }}{{/* closing if not chan */}}
  51. } else {
  52. for {{var "j"}} := 0; !r.CheckBreak(); {{var "j"}}++ {
  53. if {{var "j"}} >= len({{var "v"}}) {
  54. {{ if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "j"}}+1)
  55. {{ else if isSlice}}{{var "v"}} = append({{var "v"}}, {{zero}})// var {{var "z"}} {{ .Typ }}
  56. {{var "c"}} = true {{ end }}
  57. }
  58. if {{var "j"}} > 0 {
  59. {{var "h"}}.Sep({{var "j"}})
  60. }
  61. {{ if isChan}}
  62. var {{var "t"}} {{ .Typ }}
  63. {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }}
  64. {{var "v"}} <- {{var "t"}}
  65. {{ else }}
  66. if {{var "j"}} < len({{var "v"}}) {
  67. {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }}
  68. } else {
  69. z.DecSwallow()
  70. }
  71. {{ end }}
  72. }
  73. {{var "h"}}.End()
  74. }
  75. {{ if not isArray }}if {{var "c"}} {
  76. *{{ .Varname }} = {{var "v"}}
  77. }{{ end }}