// Package gomobile_bind is an autogenerated binder stub for package ignore.
//   gobind -lang=go ignore
//
// File is generated by gobind. Do not edit.
package gomobile_bind

/*
#include <stdlib.h>
#include <stdint.h>
#include "seq.h"
#include "ignore.h"

*/
import "C"

import (
	_seq "golang.org/x/mobile/bind/seq"
	"ignore"
)

// suppress the error if seq ends up unused
var _ = _seq.FromRefNum

// skipped field S.F with unsupported type: *types.Interface

// skipped method S.Argument with unsupported parameter or return types

// skipped method S.Result with unsupported parameter or return types

//export new_ignore_S
func new_ignore_S() C.int32_t {
	return C.int32_t(_seq.ToRefNum(new(ignore.S)))
}

// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

type proxyignore_I _seq.Ref

func (p *proxyignore_I) Bind_proxy_refnum__() int32 { return (*_seq.Ref)(p).Bind_IncNum() }

// skipped method I.Argument with unsupported parameter or result types
// skipped method I.Result with unsupported parameter or result types
// skipped variable V with unsupported type *types.Interface

// skipped variable Var with unsupported type *types.Interface

// skipped function Argument with unsupported parameter or result types
// skipped function Result with unsupported parameter or result types
