package jsoniter

import (
	
	
	
)

type dynamicEncoder struct {
	valType reflect2.Type
}

func ( *dynamicEncoder) ( unsafe.Pointer,  *Stream) {
	 := .valType.UnsafeIndirect()
	.WriteVal()
}

func ( *dynamicEncoder) ( unsafe.Pointer) bool {
	return .valType.UnsafeIndirect() == nil
}

type efaceDecoder struct {
}

func ( *efaceDecoder) ( unsafe.Pointer,  *Iterator) {
	 := (*interface{})()
	 := *
	if  == nil {
		* = .Read()
		return
	}
	 := reflect2.TypeOf()
	if .Kind() != reflect.Ptr {
		* = .Read()
		return
	}
	 := .(*reflect2.UnsafePtrType)
	 := .Elem()
	if .WhatIsNext() == NilValue {
		if .Kind() != reflect.Ptr {
			.skipFourBytes('n', 'u', 'l', 'l')
			* = nil
			return
		}
	}
	if reflect2.IsNil() {
		 := .New()
		.ReadVal()
		* = 
		return
	}
	.ReadVal()
}

type ifaceDecoder struct {
	valType *reflect2.UnsafeIFaceType
}

func ( *ifaceDecoder) ( unsafe.Pointer,  *Iterator) {
	if .ReadNil() {
		.valType.UnsafeSet(, .valType.UnsafeNew())
		return
	}
	 := .valType.UnsafeIndirect()
	if reflect2.IsNil() {
		.ReportError("decode non empty interface", "can not unmarshal into nil")
		return
	}
	.ReadVal()
}