package ndr
import (
"fmt"
"reflect"
)
const (
subStringArrayTag = `ndr:"varying,X-subStringArray"`
subStringArrayValue = "X-subStringArray"
)
func uint16SliceToString(a []uint16 ) string {
s := make ([]rune , len (a ), len (a ))
for i := range s {
s [i ] = rune (a [i ])
}
if len (s ) > 0 {
if s [len (s )-1 ] == rune (0 ) {
s = s [:len (s )-1 ]
}
}
return string (s )
}
func (dec *Decoder ) readVaryingString (def *[]deferedPtr ) (string , error ) {
a := new ([]uint16 )
v := reflect .ValueOf (a )
var t reflect .StructTag
err := dec .fillUniDimensionalVaryingArray (v .Elem (), t , def )
if err != nil {
return "" , err
}
s := uint16SliceToString (*a )
return s , nil
}
func (dec *Decoder ) readConformantVaryingString (def *[]deferedPtr ) (string , error ) {
a := new ([]uint16 )
v := reflect .ValueOf (a )
var t reflect .StructTag
err := dec .fillUniDimensionalConformantVaryingArray (v .Elem (), t , def )
if err != nil {
return "" , err
}
s := uint16SliceToString (*a )
return s , nil
}
func (dec *Decoder ) readStringsArray (v reflect .Value , tag reflect .StructTag , def *[]deferedPtr ) error {
d , _ := sliceDimensions (v .Type ())
ndrTag := parseTags (tag )
var m []int
if ndrTag .HasValue (TagConformant ) {
for i := 0 ; i < d ; i ++ {
m = append (m , int (dec .precedingMax ()))
}
_ = dec .precedingMax ()
}
tag = reflect .StructTag (subStringArrayTag )
err := dec .fillVaryingArray (v , tag , def )
if err != nil {
return fmt .Errorf ("could not read string array: %v" , err )
}
return nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .