Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  main_enc.go   Sprache: unbekannt

 
Spracherkennung für: .go vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

// Code generated by go run gob_gen.go; DO NOT EDIT.

package main

import (
 "bytes"
 "fmt"
 "github.com/google/blueprint/gobtools"
 "github.com/google/blueprint/gobtools/test"
 "github.com/google/blueprint/proptools"
 "github.com/google/blueprint/uniquelist"
 "reflect"
 "unique"
 "unsafe"
)

// begin of gob_test_data.go
func init() {
 TestStructGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(TestStruct) })
 TestEchoGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(TestEcho) })
 testEchosGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(testEchos) })
 testStringMapGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(testStringMap) })
 testEchoMapGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(testEchoMap) })
 TestEmbedPtrGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(TestEmbedPtr) })
 TestPtrsGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(TestPtrs) })
 HashStructGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(HashStruct) })
 PointersGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Pointers) })
 SlicesGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Slices) })
 MapsGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Maps) })
 InnerGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Inner) })
 EmbeddedGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Embedded) })
 NestedGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Nested) })
 InterfaceImpl1GobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(InterfaceImpl1) })
 InterfaceImpl2GobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(InterfaceImpl2) })
 InterfaceHolderGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(InterfaceHolder) })
 UnexportedGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Unexported) })
 ComplexGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Complex) })
 PointerDuplicationGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(PointerDuplication) })
 Type1GobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Type1) })
 Type2GobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(Type2) })
 InterfaceWrapperGobRegId = gobtools.RegisterType(func() gobtools.CustomDec { return new(InterfaceWrapper) })
}

func (r TestStruct) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = r.TestEcho.Encode(ctx, buf); err != nil {
  return err
 }

 if err = gobtools.EncodeString(buf, r.f1); err != nil {
  return err
 }

 if err = gobtools.EncodeInt16(buf, r.f2); err != nil {
  return err
 }

 if err = gobtools.EncodeInt32(buf, r.f3); err != nil {
  return err
 }

 if err = gobtools.EncodeBool(buf, r.f4); err != nil {
  return err
 }

 if err = gobtools.EncodeInt64(buf, r.f5); err != nil {
  return err
 }

 if err = gobtools.EncodeString(buf, r.f6); err != nil {
  return err
 }

 if err = r.f7.Encode(ctx, buf); err != nil {
  return err
 }

 if err = gobtools.EncodeUint16(buf, r.f8); err != nil {
  return err
 }

 if err = gobtools.EncodeUint32(buf, r.f9); err != nil {
  return err
 }

 if err = gobtools.EncodeUint64(buf, r.f10); err != nil {
  return err
 }

 if r.f11 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f11)); err != nil {
   return err
  }
  for val1 := 0; val1 < len(r.f11); val1++ {
   if err = gobtools.EncodeString(buf, r.f11[val1]); err != nil {
    return err
   }
  }
 }

 if r.f12 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f12)); err != nil {
   return err
  }
  for val2, val3 := range r.f12 {
   if err = gobtools.EncodeString(buf, val2); err != nil {
    return err
   }
   if err = gobtools.EncodeInt(buf, val3); err != nil {
    return err
   }
  }
 }

 val4 := r.f13 == nil
 if err = gobtools.EncodeBool(buf, val4); err != nil {
  return err
 }
 if !val4 {
  if err = gobtools.EncodeString(buf, (*r.f13)); err != nil {
   return err
  }
 }

 if err = gobtools.EncodeInt(buf, r.f14); err != nil {
  return err
 }

 if r.f15 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f15)); err != nil {
   return err
  }
  for val5 := 0; val5 < len(r.f15); val5++ {
   if err = gobtools.EncodeInt(buf, r.f15[val5]); err != nil {
    return err
   }
  }
 }

 if r.f16 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f16)); err != nil {
   return err
  }
  for val6 := 0; val6 < len(r.f16); val6++ {
   if err = r.f16[val6].Encode(ctx, buf); err != nil {
    return err
   }
  }
 }

 val7 := r.f17 == nil
 if err = gobtools.EncodeBool(buf, val7); err != nil {
  return err
 }
 if !val7 {
  if err = (*r.f17).Encode(ctx, buf); err != nil {
   return err
  }
 }

 if err = gobtools.EncodeInterface(ctx, buf, r.f18); err != nil {
  return err
 }

 if r.f19 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f19)); err != nil {
   return err
  }
  for val8 := 0; val8 < len(r.f19); val8++ {
   if err = gobtools.EncodeString(buf, r.f19[val8]); err != nil {
    return err
   }
  }
 }

 val9 := r.f20.Len() == 0
 if err = gobtools.EncodeBool(buf, val9); err != nil {
  return err
 }
 if !val9 {
  if err = gobtools.EncodeReference(ctx, r.f20, buf, func(v uniquelist.UniqueList[TestEcho], buf *bytes.Buffer) error {
   val10 := v.ToSlice()
   if val10 == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(val10)); err != nil {
     return err
    }
    for val11 := 0; val11 < len(val10); val11++ {
     if err = val10[val11].Encode(ctx, buf); err != nil {
      return err
     }
    }
   }
   return nil
  }); err != nil {
   return err
  }
 }

 val12 := r.f21.Len() == 0
 if err = gobtools.EncodeBool(buf, val12); err != nil {
  return err
 }
 if !val12 {
  if err = gobtools.EncodeReference(ctx, r.f21, buf, func(v uniquelist.UniqueList[TestEchoInterface], buf *bytes.Buffer) error {
   val13 := v.ToSlice()
   if val13 == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(val13)); err != nil {
     return err
    }
    for val14 := 0; val14 < len(val13); val14++ {
     if err = gobtools.EncodeInterface(ctx, buf, val13[val14]); err != nil {
      return err
     }
    }
   }
   return nil
  }); err != nil {
   return err
  }
 }

 if err = r.f22.Encode(ctx, buf); err != nil {
  return err
 }

 if r.f23 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f23)); err != nil {
   return err
  }
  for val15 := 0; val15 < len(r.f23); val15++ {
   if r.f23[val15] == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(r.f23[val15])); err != nil {
     return err
    }
    for val16 := 0; val16 < len(r.f23[val15]); val16++ {
     if err = r.f23[val15][val16].Encode(ctx, buf); err != nil {
      return err
     }
    }
   }
  }
 }

 if err = gobtools.EncodeInterface(ctx, buf, r.f24); err != nil {
  return err
 }

 if err = test.TypeStruct(r.f25).Encode(ctx, buf); err != nil {
  return err
 }

 if err = r.f26.Encode(ctx, buf); err != nil {
  return err
 }

 if err = r.f27.EncodeInterface(ctx, buf); err != nil {
  return err
 }

 if r.f28 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f28)); err != nil {
   return err
  }
  for val17, val18 := range r.f28 {
   if err = gobtools.EncodeInt(buf, val17); err != nil {
    return err
   }
   if val18 == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(val18)); err != nil {
     return err
    }
    for val19 := 0; val19 < len(val18); val19++ {
     if err = gobtools.EncodeString(buf, val18[val19]); err != nil {
      return err
     }
    }
   }
  }
 }

 if r.f29 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f29)); err != nil {
   return err
  }
  for val20 := 0; val20 < len(r.f29); val20++ {
   if r.f29[val20] == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(r.f29[val20])); err != nil {
     return err
    }
    for val21 := 0; val21 < len(r.f29[val20]); val21++ {
     if err = gobtools.EncodeString(buf, r.f29[val20][val21]); err != nil {
      return err
     }
    }
   }
  }
 }

 if err = r.f30.EncodeString(ctx, buf); err != nil {
  return err
 }

 if err = gobtools.EncodeInterface(ctx, buf, r.f31); err != nil {
  return err
 }

 if r.f32 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f32)); err != nil {
   return err
  }
  for val22 := 0; val22 < len(r.f32); val22++ {
   val23 := r.f32[val22] == nil
   if err = gobtools.EncodeBool(buf, val23); err != nil {
    return err
   }
   if !val23 {
    if err = (*r.f32[val22]).Encode(ctx, buf); err != nil {
     return err
    }
   }
  }
 }

 if err = gobtools.EncodeString(buf, r.f33); err != nil {
  return err
 }
 if err = gobtools.EncodeString(buf, r.f34); err != nil {
  return err
 }

 if err = gobtools.EncodeString(buf, r.f35.s); err != nil {
  return err
 }

 if err = r.f36.Encode(ctx, buf); err != nil {
  return err
 }

 val24 := r.TestEmbedPtr == nil
 if err = gobtools.EncodeBool(buf, val24); err != nil {
  return err
 }
 if !val24 {
  if err = (*r.TestEmbedPtr).Encode(ctx, buf); err != nil {
   return err
  }
 }

 if err = gobtools.EncodeInt(buf, int(r.f38)); err != nil {
  return err
 }

 for val25 := 0; val25 < len(r.f39); val25++ {
  if err = gobtools.EncodeUint64(buf, r.f39[val25]); err != nil {
   return err
  }
 }

 if r.f40 == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.f40)); err != nil {
   return err
  }
  for val26, val27 := range r.f40 {
   if err = gobtools.EncodeString(buf, val26); err != nil {
    return err
   }
   if val27 == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(val27)); err != nil {
     return err
    }
    for val28, val29 := range val27 {
     if err = gobtools.EncodeInt(buf, val28); err != nil {
      return err
     }
     if val29 == nil {
      if err = gobtools.EncodeInt(buf, -1); err != nil {
       return err
      }
     } else {
      if err = gobtools.EncodeInt(buf, len(val29)); err != nil {
       return err
      }
      for val30 := 0; val30 < len(val29); val30++ {
       val31 := val29[val30] == nil
       if err = gobtools.EncodeBool(buf, val31); err != nil {
        return err
       }
       if !val31 {
        if err = gobtools.EncodeBool(buf, (*val29[val30])); err != nil {
         return err
        }
       }
      }
     }
    }
   }
  }
 }

 val32 := r.f41 == unique.Handle[TestEcho]{}
 if err = gobtools.EncodeBool(buf, val32); err != nil {
  return err
 }
 if !val32 {
  if err = gobtools.EncodeReference(ctx, r.f41, buf, func(v unique.Handle[TestEcho], buf *bytes.Buffer) error {
   return v.Value().Encode(ctx, buf)
  }); err != nil {
   return err
  }
 }

 val33 := r.f42 == unique.Handle[TestEcho]{}
 if err = gobtools.EncodeBool(buf, val33); err != nil {
  return err
 }
 if !val33 {
  if err = gobtools.EncodeReference(ctx, r.f42, buf, func(v unique.Handle[TestEcho], buf *bytes.Buffer) error {
   return v.Value().Encode(ctx, buf)
  }); err != nil {
   return err
  }
 }
 return err
}

func (r TestStruct) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.TestStruct")
 hasher.WriteInt(43)
 if err := r.TestEcho.CustomHash(hasher); err != nil {
  return err
 }
 hasher.WriteString(":.string")
 hasher.WriteString(r.f1)
 hasher.WriteString(":.int16")
 hasher.WriteUint64(uint64(r.f2))
 hasher.WriteString(":.int32")
 hasher.WriteUint64(uint64(r.f3))
 hasher.WriteString(":.bool")
 if r.f4 {
  hasher.WriteByte(1)
 } else {
  hasher.WriteByte(0)
 }
 hasher.WriteString(":.int64")
 hasher.WriteUint64(uint64(r.f5))
 hasher.WriteString(":.string")
 hasher.WriteString(r.f6)
 if err := r.f7.CustomHash(hasher); err != nil {
  return err
 }
 hasher.WriteString(":.uint16")
 hasher.WriteUint64(uint64(r.f8))
 hasher.WriteString(":.uint32")
 hasher.WriteUint64(uint64(r.f9))
 hasher.WriteString(":.uint64")
 hasher.WriteUint64(uint64(r.f10))
 hasher.WriteString(":.[]string")
 hasher.WriteInt(len(r.f11))
 for val1 := 0; val1 < len(r.f11); val1++ {
  hasher.WriteString(":.string")
  hasher.WriteString(r.f11[val1])
 }
 hasher.WriteString(":.map[string]int")
 hasher.WriteInt(len(r.f12))
 val2 := make([]string, 0, len(r.f12))
 for val4 := range r.f12 {
  val2 = append(val2, val4)
 }
 proptools.SortOrdered(val2)
 for _, val3 := range val2 {
  hasher.WriteString(":.string")
  hasher.WriteString(val3)
  hasher.WriteString(":.int")
  hasher.WriteUint64(uint64(r.f12[val3]))
 }
 hasher.WriteString(":.*string")
 val5 := r.f13 == nil
 if val5 {
  hasher.WriteByte(0)
 } else {
  val6 := func(hasher *proptools.Hasher) error {
   hasher.WriteString(":.string")
   hasher.WriteString((*r.f13))
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.f13)), val6); err != nil {
   return err
  }
 }
 hasher.WriteString(":.int")
 hasher.WriteUint64(uint64(r.f14))
 hasher.WriteString(":.[]int")
 hasher.WriteInt(len(r.f15))
 for val7 := 0; val7 < len(r.f15); val7++ {
  hasher.WriteString(":.int")
  hasher.WriteUint64(uint64(r.f15[val7]))
 }
 hasher.WriteString(":.[]TestEcho")
 hasher.WriteInt(len(r.f16))
 for val8 := 0; val8 < len(r.f16); val8++ {
  if err := r.f16[val8].CustomHash(hasher); err != nil {
   return err
  }
 }
 hasher.WriteString(":.*TestEcho")
 val9 := r.f17 == nil
 if val9 {
  hasher.WriteByte(0)
 } else {
  val10 := func(hasher *proptools.Hasher) error {
   if err := (*r.f17).CustomHash(hasher); err != nil {
    return err
   }
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.f17)), val10); err != nil {
   return err
  }
 }
 hasher.WriteString(":main.TestEchoInterface")
 val11 := r.f18 == nil
 if val11 {
  hasher.WriteByte(0)
 } else {
  if v := reflect.ValueOf(r.f18); v.Kind() == reflect.Ptr {
   if v.IsNil() {
    panic(fmt.Errorf("nil pointer is not supported in interface"))
   } else {
    val12 := r.f18 == nil
    if val12 {
     hasher.WriteByte(0)
    } else {
     val13 := func(hasher *proptools.Hasher) error { return r.f18.(proptools.CustomHash).CustomHash(hasher) }
     if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val13); err != nil {
      return err
     }
    }
   }
  } else {
   r.f18.(proptools.CustomHash).CustomHash(hasher)
  }
 }
 hasher.WriteString(":main.testStrings")
 hasher.WriteString(":.[]string")
 hasher.WriteInt(len(r.f19))
 for val14 := 0; val14 < len(r.f19); val14++ {
  hasher.WriteString(":.string")
  hasher.WriteString(r.f19[val14])
 }
 hasher.WriteString(":.uniquelist.UniqueList[TestEcho]")
 val16 := func(hasher *proptools.Hasher, val15 TestEcho) error {
  if err := val15.CustomHash(hasher); err != nil {
   return err
  }
  return nil
 }
 if err := r.f20.Hash(hasher, "TestEcho", val16); err != nil {
  return err
 }
 hasher.WriteString(":.uniquelist.UniqueList[TestEchoInterface]")
 val21 := func(hasher *proptools.Hasher, val17 TestEchoInterface) error {
  hasher.WriteString(":main.TestEchoInterface")
  val18 := val17 == nil
  if val18 {
   hasher.WriteByte(0)
  } else {
   if v := reflect.ValueOf(val17); v.Kind() == reflect.Ptr {
    if v.IsNil() {
     panic(fmt.Errorf("nil pointer is not supported in interface"))
    } else {
     val19 := val17 == nil
     if val19 {
      hasher.WriteByte(0)
     } else {
      val20 := func(hasher *proptools.Hasher) error { return val17.(proptools.CustomHash).CustomHash(hasher) }
      if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val20); err != nil {
       return err
      }
     }
    }
   } else {
    val17.(proptools.CustomHash).CustomHash(hasher)
   }
  }
  return nil
 }
 if err := r.f21.Hash(hasher, "TestEchoInterface", val21); err != nil {
  return err
 }
 if err := r.f22.CustomHash(hasher); err != nil {
  return err
 }
 hasher.WriteString(":.[]test.TypeAlias")
 hasher.WriteInt(len(r.f23))
 for val22 := 0; val22 < len(r.f23); val22++ {
  hasher.WriteString(":main.test.TypeAlias")
  hasher.WriteString(":.[]TypeStruct")
  hasher.WriteInt(len(r.f23[val22]))
  for val23 := 0; val23 < len(r.f23[val22]); val23++ {
   if err := r.f23[val22][val23].CustomHash(hasher); err != nil {
    return err
   }
  }
 }
 hasher.WriteString(":main.test.TypeInterface")
 val24 := r.f24 == nil
 if val24 {
  hasher.WriteByte(0)
 } else {
  if v := reflect.ValueOf(r.f24); v.Kind() == reflect.Ptr {
   if v.IsNil() {
    panic(fmt.Errorf("nil pointer is not supported in interface"))
   } else {
    val25 := r.f24 == nil
    if val25 {
     hasher.WriteByte(0)
    } else {
     val26 := func(hasher *proptools.Hasher) error { return r.f24.(proptools.CustomHash).CustomHash(hasher) }
     if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val26); err != nil {
      return err
     }
    }
   }
  } else {
   r.f24.(proptools.CustomHash).CustomHash(hasher)
  }
 }
 hasher.WriteString(":main.test.TypeIdent")
 hasher.WriteString("github.com/google/blueprint/gobtools/test:test.TypeStruct")
 if err := test.TypeStruct(r.f25).CustomHash(hasher); err != nil {
  return err
 }
 val28 := func(hasher *proptools.Hasher, val27 TestEcho) error {
  if err := val27.CustomHash(hasher); err != nil {
   return err
  }
  return nil
 }
 if err := r.f26.Hash(hasher, "TestEcho", val28); err != nil {
  return err
 }
 val33 := func(hasher *proptools.Hasher, val29 TestEchoInterface) error {
  hasher.WriteString(":main.TestEchoInterface")
  val30 := val29 == nil
  if val30 {
   hasher.WriteByte(0)
  } else {
   if v := reflect.ValueOf(val29); v.Kind() == reflect.Ptr {
    if v.IsNil() {
     panic(fmt.Errorf("nil pointer is not supported in interface"))
    } else {
     val31 := val29 == nil
     if val31 {
      hasher.WriteByte(0)
     } else {
      val32 := func(hasher *proptools.Hasher) error { return val29.(proptools.CustomHash).CustomHash(hasher) }
      if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val32); err != nil {
       return err
      }
     }
    }
   } else {
    val29.(proptools.CustomHash).CustomHash(hasher)
   }
  }
  return nil
 }
 if err := r.f27.Hash(hasher, "TestEchoInterface", val33); err != nil {
  return err
 }
 hasher.WriteString(":.map[int][]string")
 hasher.WriteInt(len(r.f28))
 val34 := make([]int, 0, len(r.f28))
 for val36 := range r.f28 {
  val34 = append(val34, val36)
 }
 proptools.SortOrdered(val34)
 for _, val35 := range val34 {
  hasher.WriteString(":.int")
  hasher.WriteUint64(uint64(val35))
  hasher.WriteString(":.[]string")
  hasher.WriteInt(len(r.f28[val35]))
  for val37 := 0; val37 < len(r.f28[val35]); val37++ {
   hasher.WriteString(":.string")
   hasher.WriteString(r.f28[val35][val37])
  }
 }
 hasher.WriteString(":.[][]string")
 hasher.WriteInt(len(r.f29))
 for val38 := 0; val38 < len(r.f29); val38++ {
  hasher.WriteString(":.[]string")
  hasher.WriteInt(len(r.f29[val38]))
  for val39 := 0; val39 < len(r.f29[val38]); val39++ {
   hasher.WriteString(":.string")
   hasher.WriteString(r.f29[val38][val39])
  }
 }
 val41 := func(hasher *proptools.Hasher, val40 string) error {
  hasher.WriteString(":.string")
  hasher.WriteString(val40)
  return nil
 }
 if err := r.f30.Hash(hasher, "string", val41); err != nil {
  return err
 }
 hasher.WriteString(":.any")
 val42 := r.f31 == nil
 if val42 {
  hasher.WriteByte(0)
 } else {
  if v := reflect.ValueOf(r.f31); v.Kind() == reflect.Ptr {
   if v.IsNil() {
    panic(fmt.Errorf("nil pointer is not supported in interface"))
   } else {
    val43 := r.f31 == nil
    if val43 {
     hasher.WriteByte(0)
    } else {
     val44 := func(hasher *proptools.Hasher) error { return r.f31.(proptools.CustomHash).CustomHash(hasher) }
     if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val44); err != nil {
      return err
     }
    }
   }
  } else {
   r.f31.(proptools.CustomHash).CustomHash(hasher)
  }
 }
 hasher.WriteString(":.[]*test.TypeStruct")
 hasher.WriteInt(len(r.f32))
 for val45 := 0; val45 < len(r.f32); val45++ {
  hasher.WriteString(":.*test.TypeStruct")
  val46 := r.f32[val45] == nil
  if val46 {
   hasher.WriteByte(0)
  } else {
   val47 := func(hasher *proptools.Hasher) error {
    if err := (*r.f32[val45]).CustomHash(hasher); err != nil {
     return err
    }
    return nil
   }
   if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.f32[val45])), val47); err != nil {
    return err
   }
  }
 }
 hasher.WriteString(":.string")
 hasher.WriteString(r.f33)
 hasher.WriteString(":.string")
 hasher.WriteString(r.f34)
 hasher.WriteString(":main.r.f35")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.f35.s)
 if err := hasher.CalculateHashReflection(reflect.ValueOf(r.f36)); err != nil {
  return err
 }
 hasher.WriteString(":.*TestEmbedPtr")
 val48 := r.TestEmbedPtr == nil
 if val48 {
  hasher.WriteByte(0)
 } else {
  val49 := func(hasher *proptools.Hasher) error {
   if err := (*r.TestEmbedPtr).CustomHash(hasher); err != nil {
    return err
   }
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.TestEmbedPtr)), val49); err != nil {
   return err
  }
 }
 hasher.WriteString(":main.test.TypeBasic")
 hasher.WriteString(":.int")
 hasher.WriteUint64(uint64(int(r.f38)))
 hasher.WriteString(":.[2]uint64")
 hasher.WriteInt(len(r.f39))
 for val50 := 0; val50 < len(r.f39); val50++ {
  hasher.WriteString(":.uint64")
  hasher.WriteUint64(uint64(r.f39[val50]))
 }
 hasher.WriteString(":.map[string]map[int][]*bool")
 hasher.WriteInt(len(r.f40))
 val51 := make([]string, 0, len(r.f40))
 for val53 := range r.f40 {
  val51 = append(val51, val53)
 }
 proptools.SortOrdered(val51)
 for _, val52 := range val51 {
  hasher.WriteString(":.string")
  hasher.WriteString(val52)
  hasher.WriteString(":.map[int][]*bool")
  hasher.WriteInt(len(r.f40[val52]))
  val54 := make([]int, 0, len(r.f40[val52]))
  for val56 := range r.f40[val52] {
   val54 = append(val54, val56)
  }
  proptools.SortOrdered(val54)
  for _, val55 := range val54 {
   hasher.WriteString(":.int")
   hasher.WriteUint64(uint64(val55))
   hasher.WriteString(":.[]*bool")
   hasher.WriteInt(len(r.f40[val52][val55]))
   for val57 := 0; val57 < len(r.f40[val52][val55]); val57++ {
    hasher.WriteString(":.*bool")
    val58 := r.f40[val52][val55][val57] == nil
    if val58 {
     hasher.WriteByte(0)
    } else {
     val59 := func(hasher *proptools.Hasher) error {
      hasher.WriteString(":.bool")
      if *r.f40[val52][val55][val57] {
       hasher.WriteByte(1)
      } else {
       hasher.WriteByte(0)
      }
      return nil
     }
     if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.f40[val52][val55][val57])), val59); err != nil {
      return err
     }
    }
   }
  }
 }
 hasher.WriteString(":.unique.Handle[TestEcho]")
 val60 := r.f41 == unique.Handle[TestEcho]{}
 if val60 {
  hasher.WriteByte(0)
 } else {
  if err := proptools.HashReference(hasher, r.f41, func(*proptools.Hasher) error {
   return r.f41.Value().CustomHash(hasher)
  }); err != nil {
   return err
  }
 }
 hasher.WriteString(":main.testEchoHandle")
 hasher.WriteString(":.unique.Handle[TestEcho]")
 val61 := r.f42 == unique.Handle[TestEcho]{}
 if val61 {
  hasher.WriteByte(0)
 } else {
  if err := proptools.HashReference(hasher, r.f42, func(*proptools.Hasher) error {
   return r.f42.Value().CustomHash(hasher)
  }); err != nil {
   return err
  }
 }
 return nil
}

func (r *TestStruct) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 if err = r.TestEcho.Decode(ctx, buf); err != nil {
  return err
 }

 err = gobtools.DecodeString(buf, &r.f1)
 if err != nil {
  return err
 }

 err = gobtools.DecodeInt16(buf, &r.f2)
 if err != nil {
  return err
 }

 err = gobtools.DecodeInt32(buf, &r.f3)
 if err != nil {
  return err
 }

 err = gobtools.DecodeBool(buf, &r.f4)
 if err != nil {
  return err
 }

 err = gobtools.DecodeInt64(buf, &r.f5)
 if err != nil {
  return err
 }

 err = gobtools.DecodeString(buf, &r.f6)
 if err != nil {
  return err
 }

 if err = r.f7.Decode(ctx, buf); err != nil {
  return err
 }

 err = gobtools.DecodeUint16(buf, &r.f8)
 if err != nil {
  return err
 }

 err = gobtools.DecodeUint32(buf, &r.f9)
 if err != nil {
  return err
 }

 err = gobtools.DecodeUint64(buf, &r.f10)
 if err != nil {
  return err
 }

 var val13 int
 err = gobtools.DecodeInt(buf, &val13)
 if err != nil {
  return err
 }
 if val13 != -1 {
  r.f11 = make([]string, val13)
  for val14 := 0; val14 < int(val13); val14++ {
   err = gobtools.DecodeString(buf, &r.f11[val14])
   if err != nil {
    return err
   }
  }
 }

 var val16 int
 err = gobtools.DecodeInt(buf, &val16)
 if err != nil {
  return err
 }
 if val16 != -1 {
  r.f12 = make(map[string]int, val16)
  for val17 := 0; val17 < int(val16); val17++ {
   var val18 string
   var val19 int
   err = gobtools.DecodeString(buf, &val18)
   if err != nil {
    return err
   }
   err = gobtools.DecodeInt(buf, &val19)
   if err != nil {
    return err
   }
   r.f12[val18] = val19
  }
 }

 var val23 bool
 if err = gobtools.DecodeBool(buf, &val23); err != nil {
  return err
 }
 if !val23 {
  var val22 string
  err = gobtools.DecodeString(buf, &val22)
  if err != nil {
   return err
  }
  r.f13 = &val22
 }

 err = gobtools.DecodeInt(buf, &r.f14)
 if err != nil {
  return err
 }

 var val27 int
 err = gobtools.DecodeInt(buf, &val27)
 if err != nil {
  return err
 }
 if val27 != -1 {
  r.f15 = make([]int, val27)
  for val28 := 0; val28 < int(val27); val28++ {
   err = gobtools.DecodeInt(buf, &r.f15[val28])
   if err != nil {
    return err
   }
  }
 }

 var val31 int
 err = gobtools.DecodeInt(buf, &val31)
 if err != nil {
  return err
 }
 if val31 != -1 {
  r.f16 = make([]TestEcho, val31)
  for val32 := 0; val32 < int(val31); val32++ {
   if err = r.f16[val32].Decode(ctx, buf); err != nil {
    return err
   }
  }
 }

 var val35 bool
 if err = gobtools.DecodeBool(buf, &val35); err != nil {
  return err
 }
 if !val35 {
  var val34 TestEcho
  if err = val34.Decode(ctx, buf); err != nil {
   return err
  }
  r.f17 = &val34
 }

 if val38, err := gobtools.DecodeInterface(ctx, buf); err != nil {
  return err
 } else if val38 == nil {
  r.f18 = nil
 } else {
  r.f18 = val38.(TestEchoInterface)
 }

 var val41 int
 err = gobtools.DecodeInt(buf, &val41)
 if err != nil {
  return err
 }
 if val41 != -1 {
  r.f19 = make([]string, val41)
  for val42 := 0; val42 < int(val41); val42++ {
   err = gobtools.DecodeString(buf, &r.f19[val42])
   if err != nil {
    return err
   }
  }
 }

 var val45 bool
 if err = gobtools.DecodeBool(buf, &val45); err != nil {
  return err
 }
 if !val45 {
  tmp, err := gobtools.DecodeReference(ctx, &r.f20, buf, func(value *uniquelist.UniqueList[TestEcho], buf *bytes.Reader) error {
   var val46 []TestEcho
   var val47 int
   err = gobtools.DecodeInt(buf, &val47)
   if err != nil {
    return err
   }
   if val47 != -1 {
    val46 = make([]TestEcho, val47)
    for val48 := 0; val48 < int(val47); val48++ {
     if err = val46[val48].Decode(ctx, buf); err != nil {
      return err
     }
    }
   }
   *value = uniquelist.Make(val46)
   return nil
  })
  if err != nil {
   return err
  }
  r.f20 = *tmp
 }

 var val51 bool
 if err = gobtools.DecodeBool(buf, &val51); err != nil {
  return err
 }
 if !val51 {
  tmp, err := gobtools.DecodeReference(ctx, &r.f21, buf, func(value *uniquelist.UniqueList[TestEchoInterface], buf *bytes.Reader) error {
   var val52 []TestEchoInterface
   var val53 int
   err = gobtools.DecodeInt(buf, &val53)
   if err != nil {
    return err
   }
   if val53 != -1 {
    val52 = make([]TestEchoInterface, val53)
    for val54 := 0; val54 < int(val53); val54++ {
     if val56, err := gobtools.DecodeInterface(ctx, buf); err != nil {
      return err
     } else if val56 == nil {
      val52[val54] = nil
     } else {
      val52[val54] = val56.(TestEchoInterface)
     }
    }
   }
   *value = uniquelist.Make(val52)
   return nil
  })
  if err != nil {
   return err
  }
  r.f21 = *tmp
 }

 if err = r.f22.Decode(ctx, buf); err != nil {
  return err
 }

 var val59 int
 err = gobtools.DecodeInt(buf, &val59)
 if err != nil {
  return err
 }
 if val59 != -1 {
  r.f23 = make([]test.TypeAlias, val59)
  for val60 := 0; val60 < int(val59); val60++ {
   var val63 int
   err = gobtools.DecodeInt(buf, &val63)
   if err != nil {
    return err
   }
   if val63 != -1 {
    r.f23[val60] = make([]test.TypeStruct, val63)
    for val64 := 0; val64 < int(val63); val64++ {
     if err = r.f23[val60][val64].Decode(ctx, buf); err != nil {
      return err
     }
    }
   }
  }
 }

 if val67, err := gobtools.DecodeInterface(ctx, buf); err != nil {
  return err
 } else if val67 == nil {
  r.f24 = nil
 } else {
  r.f24 = val67.(test.TypeInterface)
 }

 var val69 test.TypeStruct
 if err = val69.Decode(ctx, buf); err != nil {
  return err
 }
 r.f25 = test.TypeIdent(val69)

 if err = r.f26.Decode(ctx, buf); err != nil {
  return err
 }

 if err = r.f27.DecodeInterface(ctx, buf); err != nil {
  return err
 }

 var val73 int
 err = gobtools.DecodeInt(buf, &val73)
 if err != nil {
  return err
 }
 if val73 != -1 {
  r.f28 = make(map[int][]string, val73)
  for val74 := 0; val74 < int(val73); val74++ {
   var val75 int
   var val76 []string
   err = gobtools.DecodeInt(buf, &val75)
   if err != nil {
    return err
   }
   var val79 int
   err = gobtools.DecodeInt(buf, &val79)
   if err != nil {
    return err
   }
   if val79 != -1 {
    val76 = make([]string, val79)
    for val80 := 0; val80 < int(val79); val80++ {
     err = gobtools.DecodeString(buf, &val76[val80])
     if err != nil {
      return err
     }
    }
   }
   r.f28[val75] = val76
  }
 }

 var val83 int
 err = gobtools.DecodeInt(buf, &val83)
 if err != nil {
  return err
 }
 if val83 != -1 {
  r.f29 = make([][]string, val83)
  for val84 := 0; val84 < int(val83); val84++ {
   var val86 int
   err = gobtools.DecodeInt(buf, &val86)
   if err != nil {
    return err
   }
   if val86 != -1 {
    r.f29[val84] = make([]string, val86)
    for val87 := 0; val87 < int(val86); val87++ {
     err = gobtools.DecodeString(buf, &r.f29[val84][val87])
     if err != nil {
      return err
     }
    }
   }
  }
 }

 if err = r.f30.DecodeString(ctx, buf); err != nil {
  return err
 }

 if val91, err := gobtools.DecodeInterface(ctx, buf); err != nil {
  return err
 } else if val91 == nil {
  r.f31 = nil
 } else {
  r.f31 = val91
 }

 var val93 int
 err = gobtools.DecodeInt(buf, &val93)
 if err != nil {
  return err
 }
 if val93 != -1 {
  r.f32 = make([]*test.TypeStruct, val93)
  for val94 := 0; val94 < int(val93); val94++ {
   var val96 bool
   if err = gobtools.DecodeBool(buf, &val96); err != nil {
    return err
   }
   if !val96 {
    var val95 test.TypeStruct
    if err = val95.Decode(ctx, buf); err != nil {
     return err
    }
    r.f32[val94] = &val95
   }
  }
 }

 err = gobtools.DecodeString(buf, &r.f33)
 if err != nil {
  return err
 }
 err = gobtools.DecodeString(buf, &r.f34)
 if err != nil {
  return err
 }

 err = gobtools.DecodeString(buf, &r.f35.s)
 if err != nil {
  return err
 }

 if err = r.f36.Decode(ctx, buf); err != nil {
  return err
 }

 var val104 bool
 if err = gobtools.DecodeBool(buf, &val104); err != nil {
  return err
 }
 if !val104 {
  var val103 TestEmbedPtr
  if err = val103.Decode(ctx, buf); err != nil {
   return err
  }
  r.TestEmbedPtr = &val103
 }

 var val107 int
 err = gobtools.DecodeInt(buf, &val107)
 if err != nil {
  return err
 }
 r.f38 = test.TypeBasic(val107)

 for val110 := 0; val110 < len(r.f39); val110++ {
  err = gobtools.DecodeUint64(buf, &r.f39[val110])
  if err != nil {
   return err
  }
 }

 var val112 int
 err = gobtools.DecodeInt(buf, &val112)
 if err != nil {
  return err
 }
 if val112 != -1 {
  r.f40 = make(map[string]map[int][]*bool, val112)
  for val113 := 0; val113 < int(val112); val113++ {
   var val114 string
   var val115 map[int][]*bool
   err = gobtools.DecodeString(buf, &val114)
   if err != nil {
    return err
   }
   var val117 int
   err = gobtools.DecodeInt(buf, &val117)
   if err != nil {
    return err
   }
   if val117 != -1 {
    val115 = make(map[int][]*bool, val117)
    for val118 := 0; val118 < int(val117); val118++ {
     var val119 int
     var val120 []*bool
     err = gobtools.DecodeInt(buf, &val119)
     if err != nil {
      return err
     }
     var val123 int
     err = gobtools.DecodeInt(buf, &val123)
     if err != nil {
      return err
     }
     if val123 != -1 {
      val120 = make([]*bool, val123)
      for val124 := 0; val124 < int(val123); val124++ {
       var val126 bool
       if err = gobtools.DecodeBool(buf, &val126); err != nil {
        return err
       }
       if !val126 {
        var val125 bool
        err = gobtools.DecodeBool(buf, &val125)
        if err != nil {
         return err
        }
        val120[val124] = &val125
       }
      }
     }
     val115[val119] = val120
    }
   }
   r.f40[val114] = val115
  }
 }

 var val129 bool
 if err = gobtools.DecodeBool(buf, &val129); err != nil {
  return err
 }
 if !val129 {
  tmp, err := gobtools.DecodeReference(ctx, &r.f41, buf, func(value *unique.Handle[TestEcho], buf *bytes.Reader) error {
   var val130 TestEcho
   if err = val130.Decode(ctx, buf); err != nil {
    return err
   }
   *value = unique.Make(val130)
   return nil
  })
  if err != nil {
   return err
  }
  r.f41 = *tmp
 }

 var val133 bool
 if err = gobtools.DecodeBool(buf, &val133); err != nil {
  return err
 }
 if !val133 {
  tmp, err := gobtools.DecodeReference(ctx, &r.f42, buf, func(value *unique.Handle[TestEcho], buf *bytes.Reader) error {
   var val134 TestEcho
   if err = val134.Decode(ctx, buf); err != nil {
    return err
   }
   *value = unique.Make(val134)
   return nil
  })
  if err != nil {
   return err
  }
  r.f42 = *tmp
 }

 return err
}

var TestStructGobRegId int16

func (r TestStruct) GetTypeId() int16 {
 return TestStructGobRegId
}

func (r TestEcho) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.EchoStr); err != nil {
  return err
 }
 return err
}

func (r TestEcho) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.TestEcho")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.EchoStr)
 return nil
}

func (r *TestEcho) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.EchoStr)
 if err != nil {
  return err
 }

 return err
}

var TestEchoGobRegId int16

func (r TestEcho) GetTypeId() int16 {
 return TestEchoGobRegId
}

func (r testEchos) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if r == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r)); err != nil {
   return err
  }
  for val1 := 0; val1 < len(r); val1++ {
   if err = gobtools.EncodeInterface(ctx, buf, r[val1]); err != nil {
    return err
   }
  }
 }
 return err
}

func (r testEchos) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":.[]TestEchoInterface")
 hasher.WriteInt(len(r))
 for val1 := 0; val1 < len(r); val1++ {
  hasher.WriteString(":main.TestEchoInterface")
  val2 := r[val1] == nil
  if val2 {
   hasher.WriteByte(0)
  } else {
   if v := reflect.ValueOf(r[val1]); v.Kind() == reflect.Ptr {
    if v.IsNil() {
     panic(fmt.Errorf("nil pointer is not supported in interface"))
    } else {
     val3 := r[val1] == nil
     if val3 {
      hasher.WriteByte(0)
     } else {
      val4 := func(hasher *proptools.Hasher) error { return r[val1].(proptools.CustomHash).CustomHash(hasher) }
      if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val4); err != nil {
       return err
      }
     }
    }
   } else {
    r[val1].(proptools.CustomHash).CustomHash(hasher)
   }
  }
 }
 return nil
}

func (r *testEchos) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val2 int
 err = gobtools.DecodeInt(buf, &val2)
 if err != nil {
  return err
 }
 if val2 != -1 {
  (*r) = make([]TestEchoInterface, val2)
  for val3 := 0; val3 < int(val2); val3++ {
   if val5, err := gobtools.DecodeInterface(ctx, buf); err != nil {
    return err
   } else if val5 == nil {
    (*r)[val3] = nil
   } else {
    (*r)[val3] = val5.(TestEchoInterface)
   }
  }
 }

 return err
}

var testEchosGobRegId int16

func (r testEchos) GetTypeId() int16 {
 return testEchosGobRegId
}

func (r testStringMap) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if r == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r)); err != nil {
   return err
  }
  for val1, val2 := range r {
   if err = gobtools.EncodeString(buf, val1); err != nil {
    return err
   }
   if val2 == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(val2)); err != nil {
     return err
    }
    for val3 := 0; val3 < len(val2); val3++ {
     if err = gobtools.EncodeString(buf, val2[val3]); err != nil {
      return err
     }
    }
   }
  }
 }
 return err
}

func (r testStringMap) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":.map[string][]string")
 hasher.WriteInt(len(r))
 val1 := make([]string, 0, len(r))
 for val3 := range r {
  val1 = append(val1, val3)
 }
 proptools.SortOrdered(val1)
 for _, val2 := range val1 {
  hasher.WriteString(":.string")
  hasher.WriteString(val2)
  hasher.WriteString(":.[]string")
  hasher.WriteInt(len(r[val2]))
  for val4 := 0; val4 < len(r[val2]); val4++ {
   hasher.WriteString(":.string")
   hasher.WriteString(r[val2][val4])
  }
 }
 return nil
}

func (r *testStringMap) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val1 int
 err = gobtools.DecodeInt(buf, &val1)
 if err != nil {
  return err
 }
 if val1 != -1 {
  (*r) = make(map[string][]string, val1)
  for val2 := 0; val2 < int(val1); val2++ {
   var val3 string
   var val4 []string
   err = gobtools.DecodeString(buf, &val3)
   if err != nil {
    return err
   }
   var val7 int
   err = gobtools.DecodeInt(buf, &val7)
   if err != nil {
    return err
   }
   if val7 != -1 {
    val4 = make([]string, val7)
    for val8 := 0; val8 < int(val7); val8++ {
     err = gobtools.DecodeString(buf, &val4[val8])
     if err != nil {
      return err
     }
    }
   }
   (*r)[val3] = val4
  }
 }

 return err
}

var testStringMapGobRegId int16

func (r testStringMap) GetTypeId() int16 {
 return testStringMapGobRegId
}

func (r testEchoMap) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if r == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r)); err != nil {
   return err
  }
  for val1, val2 := range r {
   if err = val1.Encode(ctx, buf); err != nil {
    return err
   }
   val3 := val2 == nil
   if err = gobtools.EncodeBool(buf, val3); err != nil {
    return err
   }
   if !val3 {
    if err = (*val2).Encode(ctx, buf); err != nil {
     return err
    }
   }
  }
 }
 return err
}

func (r testEchoMap) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":.map[TestEcho]*TestEcho")
 hasher.WriteInt(len(r))
 val1 := make([]TestEcho, 0, len(r))
 for val3 := range r {
  val1 = append(val1, val3)
 }
 proptools.SortCustom(val1)
 for _, val2 := range val1 {
  if err := val2.CustomHash(hasher); err != nil {
   return err
  }
  hasher.WriteString(":.*TestEcho")
  val4 := r[val2] == nil
  if val4 {
   hasher.WriteByte(0)
  } else {
   val5 := func(hasher *proptools.Hasher) error {
    if err := (*r[val2]).CustomHash(hasher); err != nil {
     return err
    }
    return nil
   }
   if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r[val2])), val5); err != nil {
    return err
   }
  }
 }
 return nil
}

func (r *testEchoMap) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val1 int
 err = gobtools.DecodeInt(buf, &val1)
 if err != nil {
  return err
 }
 if val1 != -1 {
  (*r) = make(map[TestEcho]*TestEcho, val1)
  for val2 := 0; val2 < int(val1); val2++ {
   var val3 TestEcho
   var val4 *TestEcho
   if err = val3.Decode(ctx, buf); err != nil {
    return err
   }
   var val7 bool
   if err = gobtools.DecodeBool(buf, &val7); err != nil {
    return err
   }
   if !val7 {
    var val6 TestEcho
    if err = val6.Decode(ctx, buf); err != nil {
     return err
    }
    val4 = &val6
   }
   (*r)[val3] = val4
  }
 }

 return err
}

var testEchoMapGobRegId int16

func (r testEchoMap) GetTypeId() int16 {
 return testEchoMapGobRegId
}

func (r TestEmbedPtr) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.f37); err != nil {
  return err
 }
 return err
}

func (r TestEmbedPtr) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.TestEmbedPtr")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.f37)
 return nil
}

func (r *TestEmbedPtr) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.f37)
 if err != nil {
  return err
 }

 return err
}

var TestEmbedPtrGobRegId int16

func (r TestEmbedPtr) GetTypeId() int16 {
 return TestEmbedPtrGobRegId
}

func (r TestPtrs) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 val1 := r.f1 == nil
 if err = gobtools.EncodeBool(buf, val1); err != nil {
  return err
 }
 if !val1 {
  if err = (*r.f1).Encode(ctx, buf); err != nil {
   return err
  }
 }

 val2 := r.f2 == nil
 if err = gobtools.EncodeBool(buf, val2); err != nil {
  return err
 }
 if !val2 {
  if err = (*r.f2).Encode(ctx, buf); err != nil {
   return err
  }
 }
 return err
}

func (r TestPtrs) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.TestPtrs")
 hasher.WriteInt(2)
 hasher.WriteString(":.*TestEcho")
 val1 := r.f1 == nil
 if val1 {
  hasher.WriteByte(0)
 } else {
  val2 := func(hasher *proptools.Hasher) error {
   if err := (*r.f1).CustomHash(hasher); err != nil {
    return err
   }
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.f1)), val2); err != nil {
   return err
  }
 }
 hasher.WriteString(":.*TestEcho")
 val3 := r.f2 == nil
 if val3 {
  hasher.WriteByte(0)
 } else {
  val4 := func(hasher *proptools.Hasher) error {
   if err := (*r.f2).CustomHash(hasher); err != nil {
    return err
   }
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.f2)), val4); err != nil {
   return err
  }
 }
 return nil
}

func (r *TestPtrs) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val2 bool
 if err = gobtools.DecodeBool(buf, &val2); err != nil {
  return err
 }
 if !val2 {
  var val1 TestEcho
  if err = val1.Decode(ctx, buf); err != nil {
   return err
  }
  r.f1 = &val1
 }

 var val5 bool
 if err = gobtools.DecodeBool(buf, &val5); err != nil {
  return err
 }
 if !val5 {
  var val4 TestEcho
  if err = val4.Decode(ctx, buf); err != nil {
   return err
  }
  r.f2 = &val4
 }

 return err
}

var TestPtrsGobRegId int16

func (r TestPtrs) GetTypeId() int16 {
 return TestPtrsGobRegId
}

func (r HashStruct) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeInt(buf, r.I); err != nil {
  return err
 }

 if err = gobtools.EncodeString(buf, r.S); err != nil {
  return err
 }

 if err = gobtools.EncodeBool(buf, r.B); err != nil {
  return err
 }

 if err = gobtools.EncodeInt64(buf, r.F64); err != nil {
  return err
 }
 return err
}

func (r HashStruct) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.HashStruct")
 hasher.WriteInt(4)
 hasher.WriteString(":.int")
 hasher.WriteUint64(uint64(r.I))
 hasher.WriteString(":.string")
 hasher.WriteString(r.S)
 hasher.WriteString(":.bool")
 if r.B {
  hasher.WriteByte(1)
 } else {
  hasher.WriteByte(0)
 }
 hasher.WriteString(":.int64")
 hasher.WriteUint64(uint64(r.F64))
 return nil
}

func (r *HashStruct) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeInt(buf, &r.I)
 if err != nil {
  return err
 }

 err = gobtools.DecodeString(buf, &r.S)
 if err != nil {
  return err
 }

 err = gobtools.DecodeBool(buf, &r.B)
 if err != nil {
  return err
 }

 err = gobtools.DecodeInt64(buf, &r.F64)
 if err != nil {
  return err
 }

 return err
}

var HashStructGobRegId int16

func (r HashStruct) GetTypeId() int16 {
 return HashStructGobRegId
}

func (r Pointers) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 val1 := r.A == nil
 if err = gobtools.EncodeBool(buf, val1); err != nil {
  return err
 }
 if !val1 {
  if err = gobtools.EncodeInt(buf, (*r.A)); err != nil {
   return err
  }
 }

 val2 := r.S == nil
 if err = gobtools.EncodeBool(buf, val2); err != nil {
  return err
 }
 if !val2 {
  if err = gobtools.EncodeString(buf, (*r.S)); err != nil {
   return err
  }
 }
 return err
}

func (r Pointers) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Pointers")
 hasher.WriteInt(2)
 hasher.WriteString(":.*int")
 val1 := r.A == nil
 if val1 {
  hasher.WriteByte(0)
 } else {
  val2 := func(hasher *proptools.Hasher) error {
   hasher.WriteString(":.int")
   hasher.WriteUint64(uint64((*r.A)))
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.A)), val2); err != nil {
   return err
  }
 }
 hasher.WriteString(":.*string")
 val3 := r.S == nil
 if val3 {
  hasher.WriteByte(0)
 } else {
  val4 := func(hasher *proptools.Hasher) error {
   hasher.WriteString(":.string")
   hasher.WriteString((*r.S))
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.S)), val4); err != nil {
   return err
  }
 }
 return nil
}

func (r *Pointers) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val2 bool
 if err = gobtools.DecodeBool(buf, &val2); err != nil {
  return err
 }
 if !val2 {
  var val1 int
  err = gobtools.DecodeInt(buf, &val1)
  if err != nil {
   return err
  }
  r.A = &val1
 }

 var val5 bool
 if err = gobtools.DecodeBool(buf, &val5); err != nil {
  return err
 }
 if !val5 {
  var val4 string
  err = gobtools.DecodeString(buf, &val4)
  if err != nil {
   return err
  }
  r.S = &val4
 }

 return err
}

var PointersGobRegId int16

func (r Pointers) GetTypeId() int16 {
 return PointersGobRegId
}

func (r Slices) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if r.A == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.A)); err != nil {
   return err
  }
  for val1 := 0; val1 < len(r.A); val1++ {
   if err = gobtools.EncodeInt(buf, r.A[val1]); err != nil {
    return err
   }
  }
 }

 if r.B == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.B)); err != nil {
   return err
  }
  for val2 := 0; val2 < len(r.B); val2++ {
   if err = gobtools.EncodeString(buf, r.B[val2]); err != nil {
    return err
   }
  }
 }
 return err
}

func (r Slices) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Slices")
 hasher.WriteInt(2)
 hasher.WriteString(":.[]int")
 hasher.WriteInt(len(r.A))
 for val1 := 0; val1 < len(r.A); val1++ {
  hasher.WriteString(":.int")
  hasher.WriteUint64(uint64(r.A[val1]))
 }
 hasher.WriteString(":.[]string")
 hasher.WriteInt(len(r.B))
 for val2 := 0; val2 < len(r.B); val2++ {
  hasher.WriteString(":.string")
  hasher.WriteString(r.B[val2])
 }
 return nil
}

func (r *Slices) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val2 int
 err = gobtools.DecodeInt(buf, &val2)
 if err != nil {
  return err
 }
 if val2 != -1 {
  r.A = make([]int, val2)
  for val3 := 0; val3 < int(val2); val3++ {
   err = gobtools.DecodeInt(buf, &r.A[val3])
   if err != nil {
    return err
   }
  }
 }

 var val6 int
 err = gobtools.DecodeInt(buf, &val6)
 if err != nil {
  return err
 }
 if val6 != -1 {
  r.B = make([]string, val6)
  for val7 := 0; val7 < int(val6); val7++ {
   err = gobtools.DecodeString(buf, &r.B[val7])
   if err != nil {
    return err
   }
  }
 }

 return err
}

var SlicesGobRegId int16

func (r Slices) GetTypeId() int16 {
 return SlicesGobRegId
}

func (r Maps) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if r.M == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.M)); err != nil {
   return err
  }
  for val1, val2 := range r.M {
   if err = gobtools.EncodeString(buf, val1); err != nil {
    return err
   }
   if err = gobtools.EncodeInt(buf, val2); err != nil {
    return err
   }
  }
 }
 return err
}

func (r Maps) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Maps")
 hasher.WriteInt(1)
 hasher.WriteString(":.map[string]int")
 hasher.WriteInt(len(r.M))
 val1 := make([]string, 0, len(r.M))
 for val3 := range r.M {
  val1 = append(val1, val3)
 }
 proptools.SortOrdered(val1)
 for _, val2 := range val1 {
  hasher.WriteString(":.string")
  hasher.WriteString(val2)
  hasher.WriteString(":.int")
  hasher.WriteUint64(uint64(r.M[val2]))
 }
 return nil
}

func (r *Maps) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val1 int
 err = gobtools.DecodeInt(buf, &val1)
 if err != nil {
  return err
 }
 if val1 != -1 {
  r.M = make(map[string]int, val1)
  for val2 := 0; val2 < int(val1); val2++ {
   var val3 string
   var val4 int
   err = gobtools.DecodeString(buf, &val3)
   if err != nil {
    return err
   }
   err = gobtools.DecodeInt(buf, &val4)
   if err != nil {
    return err
   }
   r.M[val3] = val4
  }
 }

 return err
}

var MapsGobRegId int16

func (r Maps) GetTypeId() int16 {
 return MapsGobRegId
}

func (r Inner) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.Val); err != nil {
  return err
 }
 return err
}

func (r Inner) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Inner")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.Val)
 return nil
}

func (r *Inner) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.Val)
 if err != nil {
  return err
 }

 return err
}

var InnerGobRegId int16

func (r Inner) GetTypeId() int16 {
 return InnerGobRegId
}

func (r Embedded) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = r.Inner.Encode(ctx, buf); err != nil {
  return err
 }

 if err = gobtools.EncodeInt32(buf, r.F); err != nil {
  return err
 }
 return err
}

func (r Embedded) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Embedded")
 hasher.WriteInt(2)
 if err := r.Inner.CustomHash(hasher); err != nil {
  return err
 }
 hasher.WriteString(":.int32")
 hasher.WriteUint64(uint64(r.F))
 return nil
}

func (r *Embedded) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 if err = r.Inner.Decode(ctx, buf); err != nil {
  return err
 }

 err = gobtools.DecodeInt32(buf, &r.F)
 if err != nil {
  return err
 }

 return err
}

var EmbeddedGobRegId int16

func (r Embedded) GetTypeId() int16 {
 return EmbeddedGobRegId
}

func (r Nested) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = r.A.Encode(ctx, buf); err != nil {
  return err
 }

 val1 := r.B == nil
 if err = gobtools.EncodeBool(buf, val1); err != nil {
  return err
 }
 if !val1 {
  if err = (*r.B).Encode(ctx, buf); err != nil {
   return err
  }
 }
 return err
}

func (r Nested) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Nested")
 hasher.WriteInt(2)
 if err := r.A.CustomHash(hasher); err != nil {
  return err
 }
 hasher.WriteString(":.*Inner")
 val1 := r.B == nil
 if val1 {
  hasher.WriteByte(0)
 } else {
  val2 := func(hasher *proptools.Hasher) error {
   if err := (*r.B).CustomHash(hasher); err != nil {
    return err
   }
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.B)), val2); err != nil {
   return err
  }
 }
 return nil
}

func (r *Nested) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 if err = r.A.Decode(ctx, buf); err != nil {
  return err
 }

 var val3 bool
 if err = gobtools.DecodeBool(buf, &val3); err != nil {
  return err
 }
 if !val3 {
  var val2 Inner
  if err = val2.Decode(ctx, buf); err != nil {
   return err
  }
  r.B = &val2
 }

 return err
}

var NestedGobRegId int16

func (r Nested) GetTypeId() int16 {
 return NestedGobRegId
}

func (r InterfaceImpl1) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.V); err != nil {
  return err
 }
 return err
}

func (r InterfaceImpl1) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.InterfaceImpl1")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.V)
 return nil
}

func (r *InterfaceImpl1) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.V)
 if err != nil {
  return err
 }

 return err
}

var InterfaceImpl1GobRegId int16

func (r InterfaceImpl1) GetTypeId() int16 {
 return InterfaceImpl1GobRegId
}

func (r InterfaceImpl2) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.V); err != nil {
  return err
 }
 return err
}

func (r InterfaceImpl2) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.InterfaceImpl2")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.V)
 return nil
}

func (r *InterfaceImpl2) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.V)
 if err != nil {
  return err
 }

 return err
}

var InterfaceImpl2GobRegId int16

func (r InterfaceImpl2) GetTypeId() int16 {
 return InterfaceImpl2GobRegId
}

func (r InterfaceHolder) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeInterface(ctx, buf, r.I); err != nil {
  return err
 }
 return err
}

func (r InterfaceHolder) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.InterfaceHolder")
 hasher.WriteInt(1)
 hasher.WriteString(":main.MyInterface")
 val1 := r.I == nil
 if val1 {
  hasher.WriteByte(0)
 } else {
  if v := reflect.ValueOf(r.I); v.Kind() == reflect.Ptr {
   if v.IsNil() {
    panic(fmt.Errorf("nil pointer is not supported in interface"))
   } else {
    val2 := r.I == nil
    if val2 {
     hasher.WriteByte(0)
    } else {
     val3 := func(hasher *proptools.Hasher) error { return r.I.(proptools.CustomHash).CustomHash(hasher) }
     if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val3); err != nil {
      return err
     }
    }
   }
  } else {
   r.I.(proptools.CustomHash).CustomHash(hasher)
  }
 }
 return nil
}

func (r *InterfaceHolder) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 if val2, err := gobtools.DecodeInterface(ctx, buf); err != nil {
  return err
 } else if val2 == nil {
  r.I = nil
 } else {
  r.I = val2.(MyInterface)
 }

 return err
}

var InterfaceHolderGobRegId int16

func (r InterfaceHolder) GetTypeId() int16 {
 return InterfaceHolderGobRegId
}

func (r Unexported) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.Exported); err != nil {
  return err
 }

 if err = gobtools.EncodeString(buf, r.unexported); err != nil {
  return err
 }
 return err
}

func (r Unexported) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Unexported")
 hasher.WriteInt(2)
 hasher.WriteString(":.string")
 hasher.WriteString(r.Exported)
 hasher.WriteString(":.string")
 hasher.WriteString(r.unexported)
 return nil
}

func (r *Unexported) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.Exported)
 if err != nil {
  return err
 }

 err = gobtools.DecodeString(buf, &r.unexported)
 if err != nil {
  return err
 }

 return err
}

var UnexportedGobRegId int16

func (r Unexported) GetTypeId() int16 {
 return UnexportedGobRegId
}

func (r Complex) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if r.MapOfSlices == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.MapOfSlices)); err != nil {
   return err
  }
  for val1, val2 := range r.MapOfSlices {
   if err = gobtools.EncodeString(buf, val1); err != nil {
    return err
   }
   if val2 == nil {
    if err = gobtools.EncodeInt(buf, -1); err != nil {
     return err
    }
   } else {
    if err = gobtools.EncodeInt(buf, len(val2)); err != nil {
     return err
    }
    for val3 := 0; val3 < len(val2); val3++ {
     if err = gobtools.EncodeInt(buf, val2[val3]); err != nil {
      return err
     }
    }
   }
  }
 }

 if r.SliceOfPtrs == nil {
  if err = gobtools.EncodeInt(buf, -1); err != nil {
   return err
  }
 } else {
  if err = gobtools.EncodeInt(buf, len(r.SliceOfPtrs)); err != nil {
   return err
  }
  for val4 := 0; val4 < len(r.SliceOfPtrs); val4++ {
   val5 := r.SliceOfPtrs[val4] == nil
   if err = gobtools.EncodeBool(buf, val5); err != nil {
    return err
   }
   if !val5 {
    if err = (*r.SliceOfPtrs[val4]).Encode(ctx, buf); err != nil {
     return err
    }
   }
  }
 }

 if err = gobtools.EncodeInterface(ctx, buf, r.InterfaceField); err != nil {
  return err
 }
 return err
}

func (r Complex) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Complex")
 hasher.WriteInt(3)
 hasher.WriteString(":.map[string][]int")
 hasher.WriteInt(len(r.MapOfSlices))
 val1 := make([]string, 0, len(r.MapOfSlices))
 for val3 := range r.MapOfSlices {
  val1 = append(val1, val3)
 }
 proptools.SortOrdered(val1)
 for _, val2 := range val1 {
  hasher.WriteString(":.string")
  hasher.WriteString(val2)
  hasher.WriteString(":.[]int")
  hasher.WriteInt(len(r.MapOfSlices[val2]))
  for val4 := 0; val4 < len(r.MapOfSlices[val2]); val4++ {
   hasher.WriteString(":.int")
   hasher.WriteUint64(uint64(r.MapOfSlices[val2][val4]))
  }
 }
 hasher.WriteString(":.[]*Inner")
 hasher.WriteInt(len(r.SliceOfPtrs))
 for val5 := 0; val5 < len(r.SliceOfPtrs); val5++ {
  hasher.WriteString(":.*Inner")
  val6 := r.SliceOfPtrs[val5] == nil
  if val6 {
   hasher.WriteByte(0)
  } else {
   val7 := func(hasher *proptools.Hasher) error {
    if err := (*r.SliceOfPtrs[val5]).CustomHash(hasher); err != nil {
     return err
    }
    return nil
   }
   if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.SliceOfPtrs[val5])), val7); err != nil {
    return err
   }
  }
 }
 hasher.WriteString(":main.MyInterface")
 val8 := r.InterfaceField == nil
 if val8 {
  hasher.WriteByte(0)
 } else {
  if v := reflect.ValueOf(r.InterfaceField); v.Kind() == reflect.Ptr {
   if v.IsNil() {
    panic(fmt.Errorf("nil pointer is not supported in interface"))
   } else {
    val9 := r.InterfaceField == nil
    if val9 {
     hasher.WriteByte(0)
    } else {
     val10 := func(hasher *proptools.Hasher) error {
      return r.InterfaceField.(proptools.CustomHash).CustomHash(hasher)
     }
     if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val10); err != nil {
      return err
     }
    }
   }
  } else {
   r.InterfaceField.(proptools.CustomHash).CustomHash(hasher)
  }
 }
 return nil
}

func (r *Complex) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val1 int
 err = gobtools.DecodeInt(buf, &val1)
 if err != nil {
  return err
 }
 if val1 != -1 {
  r.MapOfSlices = make(map[string][]int, val1)
  for val2 := 0; val2 < int(val1); val2++ {
   var val3 string
   var val4 []int
   err = gobtools.DecodeString(buf, &val3)
   if err != nil {
    return err
   }
   var val7 int
   err = gobtools.DecodeInt(buf, &val7)
   if err != nil {
    return err
   }
   if val7 != -1 {
    val4 = make([]int, val7)
    for val8 := 0; val8 < int(val7); val8++ {
     err = gobtools.DecodeInt(buf, &val4[val8])
     if err != nil {
      return err
     }
    }
   }
   r.MapOfSlices[val3] = val4
  }
 }

 var val11 int
 err = gobtools.DecodeInt(buf, &val11)
 if err != nil {
  return err
 }
 if val11 != -1 {
  r.SliceOfPtrs = make([]*Inner, val11)
  for val12 := 0; val12 < int(val11); val12++ {
   var val14 bool
   if err = gobtools.DecodeBool(buf, &val14); err != nil {
    return err
   }
   if !val14 {
    var val13 Inner
    if err = val13.Decode(ctx, buf); err != nil {
     return err
    }
    r.SliceOfPtrs[val12] = &val13
   }
  }
 }

 if val17, err := gobtools.DecodeInterface(ctx, buf); err != nil {
  return err
 } else if val17 == nil {
  r.InterfaceField = nil
 } else {
  r.InterfaceField = val17.(MyInterface)
 }

 return err
}

var ComplexGobRegId int16

func (r Complex) GetTypeId() int16 {
 return ComplexGobRegId
}

func (r PointerDuplication) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 val1 := r.F1 == nil
 if err = gobtools.EncodeBool(buf, val1); err != nil {
  return err
 }
 if !val1 {
  if err = gobtools.EncodeString(buf, (*r.F1)); err != nil {
   return err
  }
 }

 val2 := r.F2 == nil
 if err = gobtools.EncodeBool(buf, val2); err != nil {
  return err
 }
 if !val2 {
  if err = gobtools.EncodeString(buf, (*r.F2)); err != nil {
   return err
  }
 }
 return err
}

func (r PointerDuplication) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.PointerDuplication")
 hasher.WriteInt(2)
 hasher.WriteString(":.*string")
 val1 := r.F1 == nil
 if val1 {
  hasher.WriteByte(0)
 } else {
  val2 := func(hasher *proptools.Hasher) error {
   hasher.WriteString(":.string")
   hasher.WriteString((*r.F1))
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.F1)), val2); err != nil {
   return err
  }
 }
 hasher.WriteString(":.*string")
 val3 := r.F2 == nil
 if val3 {
  hasher.WriteByte(0)
 } else {
  val4 := func(hasher *proptools.Hasher) error {
   hasher.WriteString(":.string")
   hasher.WriteString((*r.F2))
   return nil
  }
  if err := proptools.HashReference(hasher, uintptr(unsafe.Pointer(r.F2)), val4); err != nil {
   return err
  }
 }
 return nil
}

func (r *PointerDuplication) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 var val2 bool
 if err = gobtools.DecodeBool(buf, &val2); err != nil {
  return err
 }
 if !val2 {
  var val1 string
  err = gobtools.DecodeString(buf, &val1)
  if err != nil {
   return err
  }
  r.F1 = &val1
 }

 var val5 bool
 if err = gobtools.DecodeBool(buf, &val5); err != nil {
  return err
 }
 if !val5 {
  var val4 string
  err = gobtools.DecodeString(buf, &val4)
  if err != nil {
   return err
  }
  r.F2 = &val4
 }

 return err
}

var PointerDuplicationGobRegId int16

func (r PointerDuplication) GetTypeId() int16 {
 return PointerDuplicationGobRegId
}

func (r Type1) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.S); err != nil {
  return err
 }
 return err
}

func (r Type1) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Type1")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.S)
 return nil
}

func (r *Type1) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.S)
 if err != nil {
  return err
 }

 return err
}

var Type1GobRegId int16

func (r Type1) GetTypeId() int16 {
 return Type1GobRegId
}

func (r Type2) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeString(buf, r.S); err != nil {
  return err
 }
 return err
}

func (r Type2) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.Type2")
 hasher.WriteInt(1)
 hasher.WriteString(":.string")
 hasher.WriteString(r.S)
 return nil
}

func (r *Type2) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 err = gobtools.DecodeString(buf, &r.S)
 if err != nil {
  return err
 }

 return err
}

var Type2GobRegId int16

func (r Type2) GetTypeId() int16 {
 return Type2GobRegId
}

func (r InterfaceWrapper) Encode(ctx gobtools.EncContext, buf *bytes.Buffer) error {
 var err error

 if err = gobtools.EncodeInterface(ctx, buf, r.V); err != nil {
  return err
 }
 return err
}

func (r InterfaceWrapper) CustomHash(hasher *proptools.Hasher) error {
 hasher.WriteString(":main.InterfaceWrapper")
 hasher.WriteInt(1)
 hasher.WriteString(":.any")
 val1 := r.V == nil
 if val1 {
  hasher.WriteByte(0)
 } else {
  if v := reflect.ValueOf(r.V); v.Kind() == reflect.Ptr {
   if v.IsNil() {
    panic(fmt.Errorf("nil pointer is not supported in interface"))
   } else {
    val2 := r.V == nil
    if val2 {
     hasher.WriteByte(0)
    } else {
     val3 := func(hasher *proptools.Hasher) error { return r.V.(proptools.CustomHash).CustomHash(hasher) }
     if err := proptools.HashReference(hasher, uintptr(v.Pointer()), val3); err != nil {
      return err
     }
    }
   }
  } else {
   r.V.(proptools.CustomHash).CustomHash(hasher)
  }
 }
 return nil
}

func (r *InterfaceWrapper) Decode(ctx gobtools.EncContext, buf *bytes.Reader) error {
 var err error

 if val2, err := gobtools.DecodeInterface(ctx, buf); err != nil {
  return err
 } else if val2 == nil {
  r.V = nil
 } else {
  r.V = val2
 }

 return err
}

var InterfaceWrapperGobRegId int16

func (r InterfaceWrapper) GetTypeId() int16 {
 return InterfaceWrapperGobRegId
}

// end of gob_test_data.go

[Dauer der Verarbeitung: 0.40 Sekunden, vorverarbeitet 2026-06-28]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik