// 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 {
}

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

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

// skipped unsupported field F with type *types.Var

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

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

@end


@implementation IgnoreI {
}

- (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 NamedConst with unsupported type: *types.Const


@implementation Ignore
// skipped variable V with unsupported type: *types.Interface

// skipped variable Var with unsupported type: *types.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();
}
