// Objective-C API for talking to ignore Go package.
//   gobind -lang=objc ignore
//
// File is generated by gobind. Do not edit.

#include <Foundation/Foundation.h>
#include "seq.h"
#include "_cgo_export.h"
#include "Ignore.objc.h"


@implementation IgnoreS {
}

- (nonnull instancetype)initWithRef:(_Nonnull id)ref {
	self = [super init];
	if (self) { __ref = ref; }
	return self;
}

- (nonnull instancetype)init {
	self = [super init];
	if (self) {
		__ref = go_seq_from_refnum(new_ignore_S());
	}
	return self;
}

// skipped unsupported field F with type interface{}

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

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

@end


@implementation IgnoreI {
}

- (nonnull instancetype)initWithRef:(id)ref {
	self = [super init];
	if (self) { __ref = ref; }
	return self;
}

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

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

@end


// skipped const Cuint with unsupported type: uint

// skipped const Cuint32 with unsupported type: uint32

// skipped const Cuint64 with unsupported type: uint64

// skipped const NamedConst with unsupported type: ignore.NamedString


@implementation Ignore
// skipped variable C128 with unsupported type: complex128

// skipped variable C64 with unsupported type: complex64

// skipped variable Uint with unsupported type: uint

// skipped variable Uint32 with unsupported type: uint32

// skipped variable Uint64 with unsupported type: uint64

// skipped variable V with unsupported type: interface{}

// skipped variable Var with unsupported type: interface{}

@end


// skipped function Argument with unsupported parameter or return types

// skipped function Result with unsupported parameter or return types

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

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

__attribute__((constructor)) static void init() {
	init_seq();
}
