// automatically generated by stateify.

package refs

import (
	"gvisor.dev/gvisor/pkg/state"
)

func (w *WeakRef) StateTypeName() string {
	return "pkg/refs.WeakRef"
}

func (w *WeakRef) StateFields() []string {
	return []string{
		"obj",
		"user",
	}
}

func (w *WeakRef) beforeSave() {}

func (w *WeakRef) StateSave(stateSinkObject state.Sink) {
	w.beforeSave()
	var objValue savedReference = w.saveObj()
	stateSinkObject.SaveValue(0, objValue)
	stateSinkObject.Save(1, &w.user)
}

func (w *WeakRef) afterLoad() {}

func (w *WeakRef) StateLoad(stateSourceObject state.Source) {
	stateSourceObject.Load(1, &w.user)
	stateSourceObject.LoadValue(0, new(savedReference), func(y interface{}) { w.loadObj(y.(savedReference)) })
}

func (r *AtomicRefCount) StateTypeName() string {
	return "pkg/refs.AtomicRefCount"
}

func (r *AtomicRefCount) StateFields() []string {
	return []string{
		"refCount",
		"name",
		"stack",
	}
}

func (r *AtomicRefCount) beforeSave() {}

func (r *AtomicRefCount) StateSave(stateSinkObject state.Sink) {
	r.beforeSave()
	stateSinkObject.Save(0, &r.refCount)
	stateSinkObject.Save(1, &r.name)
	stateSinkObject.Save(2, &r.stack)
}

func (r *AtomicRefCount) afterLoad() {}

func (r *AtomicRefCount) StateLoad(stateSourceObject state.Source) {
	stateSourceObject.Load(0, &r.refCount)
	stateSourceObject.Load(1, &r.name)
	stateSourceObject.Load(2, &r.stack)
}

func (s *savedReference) StateTypeName() string {
	return "pkg/refs.savedReference"
}

func (s *savedReference) StateFields() []string {
	return []string{
		"obj",
	}
}

func (s *savedReference) beforeSave() {}

func (s *savedReference) StateSave(stateSinkObject state.Sink) {
	s.beforeSave()
	stateSinkObject.Save(0, &s.obj)
}

func (s *savedReference) afterLoad() {}

func (s *savedReference) StateLoad(stateSourceObject state.Source) {
	stateSourceObject.Load(0, &s.obj)
}

func (l *weakRefList) StateTypeName() string {
	return "pkg/refs.weakRefList"
}

func (l *weakRefList) StateFields() []string {
	return []string{
		"head",
		"tail",
	}
}

func (l *weakRefList) beforeSave() {}

func (l *weakRefList) StateSave(stateSinkObject state.Sink) {
	l.beforeSave()
	stateSinkObject.Save(0, &l.head)
	stateSinkObject.Save(1, &l.tail)
}

func (l *weakRefList) afterLoad() {}

func (l *weakRefList) StateLoad(stateSourceObject state.Source) {
	stateSourceObject.Load(0, &l.head)
	stateSourceObject.Load(1, &l.tail)
}

func (e *weakRefEntry) StateTypeName() string {
	return "pkg/refs.weakRefEntry"
}

func (e *weakRefEntry) StateFields() []string {
	return []string{
		"next",
		"prev",
	}
}

func (e *weakRefEntry) beforeSave() {}

func (e *weakRefEntry) StateSave(stateSinkObject state.Sink) {
	e.beforeSave()
	stateSinkObject.Save(0, &e.next)
	stateSinkObject.Save(1, &e.prev)
}

func (e *weakRefEntry) afterLoad() {}

func (e *weakRefEntry) StateLoad(stateSourceObject state.Source) {
	stateSourceObject.Load(0, &e.next)
	stateSourceObject.Load(1, &e.prev)
}

func init() {
	state.Register((*WeakRef)(nil))
	state.Register((*AtomicRefCount)(nil))
	state.Register((*savedReference)(nil))
	state.Register((*weakRefList)(nil))
	state.Register((*weakRefEntry)(nil))
}