// Code generated by cmd/cgo; DO NOT EDIT.

//line /tmp/go-build1083180389/b001/_main_swig.go:1:1
/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (https://www.swig.org).
 * Version 4.1.0
 *
 * Do not make changes to this file unless you know what you are doing - modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */

// source: main.swigcxx

package main

/*
#define intgo swig_intgo
typedef void *swig_voidp;

#include <stddef.h>
#include <stdint.h>


typedef long long intgo;
typedef unsigned long long uintgo;



typedef struct { char *p; intgo n; } _gostring_;
typedef struct { void* array; intgo len; intgo cap; } _goslice_;


typedef _gostring_ swig_type_1;
typedef _gostring_ swig_type_2;
typedef _gostring_ swig_type_3;
extern void _wrap_Swig_free_main_905969086ef7fd43(uintptr_t arg1);
extern uintptr_t _wrap_Swig_malloc_main_905969086ef7fd43(swig_intgo arg1);
extern uintptr_t _wrap__swig_NewDirectorCallbackCallback_main_905969086ef7fd43(int);
extern void _wrap_DeleteDirectorCallback_main_905969086ef7fd43(uintptr_t arg1);
extern swig_type_1 _wrap__swig_DirectorCallback_upcall_Run_main_905969086ef7fd43(uintptr_t);
extern void _wrap_delete_Callback_main_905969086ef7fd43(uintptr_t arg1);
extern swig_type_2 _wrap_Callback_run_main_905969086ef7fd43(uintptr_t arg1);
extern uintptr_t _wrap_new_Callback_main_905969086ef7fd43(void);
extern uintptr_t _wrap_new_Caller_main_905969086ef7fd43(void);
extern void _wrap_delete_Caller_main_905969086ef7fd43(uintptr_t arg1);
extern void _wrap_Caller_delCallback_main_905969086ef7fd43(uintptr_t arg1);
extern void _wrap_Caller_setCallback_main_905969086ef7fd43(uintptr_t arg1, uintptr_t arg2);
extern swig_type_3 _wrap_Caller_call_main_905969086ef7fd43(uintptr_t arg1);
#undef intgo
*/
import _ "unsafe"

import "unsafe"
import _ "runtime/cgo"
import "sync"


type _ unsafe.Pointer



var Swig_escape_always_false bool
var Swig_escape_val interface{}


type _swig_fnptr *byte
type _swig_memberptr *byte


func getSwigcptr(v interface { Swigcptr() uintptr }) uintptr {
	if v == nil {
		return 0
	}
	return v.Swigcptr()
}


type _ sync.Mutex


type swig_gostring struct { p uintptr; n int }
func swigCopyString(s string) string {
  p := *(*swig_gostring)(unsafe.Pointer(&s))
  r := string((*[0x7fffffff]byte)(unsafe.Pointer(p.p))[:p.n])
  Swig_free(p.p)
  return r
}

func Swig_free(arg1 uintptr) {
	_swig_i_0 := arg1
	( /*line :88:2*/_Cfunc__wrap_Swig_free_main_905969086ef7fd43 /*line :88:40*/)( /*line :88:42*/_Ctype_uintptr_t /*line :88:53*/(_swig_i_0))
}

func Swig_malloc(arg1 int) (_swig_ret uintptr) {
	var swig_r uintptr
	_swig_i_0 := arg1
	swig_r = (uintptr)(( /*line :94:21*/_Cfunc__wrap_Swig_malloc_main_905969086ef7fd43 /*line :94:61*/)( /*line :94:63*/_Ctype_swig_intgo /*line :94:75*/(_swig_i_0)))
	return swig_r
}

type _swig_DirectorCallback struct {
	SwigcptrCallback
	v interface{}
}

func (p *_swig_DirectorCallback) Swigcptr() uintptr {
	return getSwigcptr(p.SwigcptrCallback)
}

func (p *_swig_DirectorCallback) SwigIsCallback() {
}

func (p *_swig_DirectorCallback) DirectorInterface() interface{} {
	return p.v
}

func NewDirectorCallback(v interface{}) Callback {
	p := &_swig_DirectorCallback{0, v}
	p.SwigcptrCallback = SwigcptrCallback(( /*line :116:40*/_Cfunc__wrap__swig_NewDirectorCallbackCallback_main_905969086ef7fd43 /*line :116:102*/)( /*line :116:104*/_Ctype_int /*line :116:109*/(swigDirectorAdd(p))))
	return p
}

func DeleteDirectorCallback(arg1 Callback) {
	_swig_i_0 := getSwigcptr(arg1)
	( /*line :122:2*/_Cfunc__wrap_DeleteDirectorCallback_main_905969086ef7fd43 /*line :122:53*/)( /*line :122:55*/_Ctype_uintptr_t /*line :122:66*/(_swig_i_0))
}

//export Swiggo_DeleteDirector_Callback_main_905969086ef7fd43
func Swiggo_DeleteDirector_Callback_main_905969086ef7fd43(c int) {
	swigDirectorLookup(c).(*_swig_DirectorCallback).SwigcptrCallback = 0
	swigDirectorDelete(c)
}

type _swig_DirectorInterfaceCallbackRun interface {
	Run() string
}

func (swig_p *_swig_DirectorCallback) Run() string {
	if swig_g, swig_ok := swig_p.v.(_swig_DirectorInterfaceCallbackRun); swig_ok {
		return swig_g.Run()
	}
	var swig_r string
	swig_r_p := ( /*line :140:14*/_Cfunc__wrap__swig_DirectorCallback_upcall_Run_main_905969086ef7fd43 /*line :140:76*/)( /*line :140:78*/_Ctype_uintptr_t /*line :140:89*/(swig_p.SwigcptrCallback))
	swig_r = *(*string)(unsafe.Pointer(&swig_r_p))
	var swig_r_1 string
 swig_r_1 = swigCopyString(swig_r) 
	return swig_r_1
}

func DirectorCallbackRun(swig_p Callback) string {
	var swig_r string
	swig_r_p := ( /*line :149:14*/_Cfunc__wrap__swig_DirectorCallback_upcall_Run_main_905969086ef7fd43 /*line :149:76*/)( /*line :149:78*/_Ctype_uintptr_t /*line :149:89*/(swig_p.(*_swig_DirectorCallback).SwigcptrCallback))
	swig_r = *(*string)(unsafe.Pointer(&swig_r_p))
	var swig_r_1 string
 swig_r_1 = swigCopyString(swig_r) 
	return swig_r_1
}

//export Swig_DirectorCallback_callback_run_main_905969086ef7fd43
func Swig_DirectorCallback_callback_run_main_905969086ef7fd43(swig_c int) (swig_result string) {
	var swig_r string
	swig_p := swigDirectorLookup(swig_c).(*_swig_DirectorCallback)
	swig_r = swig_p.Run()
	var swig_r_1 string

  {
    p := Swig_malloc(len(swig_r))
    s := (*[1<<30]byte)(unsafe.Pointer(p))[:len(swig_r)]
    copy(s, swig_r)
    swig_r_1 = *(*string)(unsafe.Pointer(&s))
  }

	return swig_r_1
}

type SwigcptrCallback uintptr

func (p SwigcptrCallback) Swigcptr() uintptr {
	return (uintptr)(p)
}

func (p SwigcptrCallback) SwigIsCallback() {
}

func (p SwigcptrCallback) DirectorInterface() interface{} {
	return nil
}

func DeleteCallback(arg1 Callback) {
	_swig_i_0 := getSwigcptr(arg1)
	( /*line :188:2*/_Cfunc__wrap_delete_Callback_main_905969086ef7fd43 /*line :188:46*/)( /*line :188:48*/_Ctype_uintptr_t /*line :188:59*/(_swig_i_0))
}

func (arg1 SwigcptrCallback) Run() (_swig_ret string) {
	var swig_r string
	_swig_i_0 := arg1
	swig_r_p := ( /*line :194:14*/_Cfunc__wrap_Callback_run_main_905969086ef7fd43 /*line :194:55*/)( /*line :194:57*/_Ctype_uintptr_t /*line :194:68*/(_swig_i_0))
	swig_r = *(*string)(unsafe.Pointer(&swig_r_p))
	var swig_r_1 string
 swig_r_1 = swigCopyString(swig_r) 
	return swig_r_1
}

func NewCallback() (_swig_ret Callback) {
	var swig_r Callback
	swig_r = (Callback)(SwigcptrCallback(( /*line :203:39*/_Cfunc__wrap_new_Callback_main_905969086ef7fd43 /*line :203:80*/)()))
	return swig_r
}

type Callback interface {
	Swigcptr() uintptr
	SwigIsCallback()
	DirectorInterface() interface{}
	Run() (_swig_ret string)
}

type SwigcptrCaller uintptr

func (p SwigcptrCaller) Swigcptr() uintptr {
	return (uintptr)(p)
}

func (p SwigcptrCaller) SwigIsCaller() {
}

func (p SwigcptrCaller) DirectorInterface() interface{} {
	return nil
}

func NewCaller() (_swig_ret Caller) {
	var swig_r Caller
	swig_r = (Caller)(SwigcptrCaller(( /*line :229:35*/_Cfunc__wrap_new_Caller_main_905969086ef7fd43 /*line :229:74*/)()))
	return swig_r
}

func DeleteCaller(arg1 Caller) {
	_swig_i_0 := getSwigcptr(arg1)
	( /*line :235:2*/_Cfunc__wrap_delete_Caller_main_905969086ef7fd43 /*line :235:44*/)( /*line :235:46*/_Ctype_uintptr_t /*line :235:57*/(_swig_i_0))
}

func (arg1 SwigcptrCaller) DelCallback() {
	_swig_i_0 := arg1
	( /*line :240:2*/_Cfunc__wrap_Caller_delCallback_main_905969086ef7fd43 /*line :240:49*/)( /*line :240:51*/_Ctype_uintptr_t /*line :240:62*/(_swig_i_0))
}

func (arg1 SwigcptrCaller) SetCallback(arg2 Callback) {
	_swig_i_0 := arg1
	_swig_i_1 := getSwigcptr(arg2)
	( /*line :246:2*/_Cfunc__wrap_Caller_setCallback_main_905969086ef7fd43 /*line :246:49*/)( /*line :246:51*/_Ctype_uintptr_t /*line :246:62*/(_swig_i_0),  /*line :246:75*/_Ctype_uintptr_t /*line :246:86*/(_swig_i_1))
}

func (arg1 SwigcptrCaller) Call() (_swig_ret string) {
	var swig_r string
	_swig_i_0 := arg1
	swig_r_p := ( /*line :252:14*/_Cfunc__wrap_Caller_call_main_905969086ef7fd43 /*line :252:54*/)( /*line :252:56*/_Ctype_uintptr_t /*line :252:67*/(_swig_i_0))
	swig_r = *(*string)(unsafe.Pointer(&swig_r_p))
	var swig_r_1 string
 swig_r_1 = swigCopyString(swig_r) 
	return swig_r_1
}

type Caller interface {
	Swigcptr() uintptr
	SwigIsCaller()
	DirectorInterface() interface{}
	DelCallback()
	SetCallback(arg2 Callback)
	Call() (_swig_ret string)
}


type SwigcptrSwigDirector_Callback uintptr
type SwigDirector_Callback interface {
	Swigcptr() uintptr;
}
func (p SwigcptrSwigDirector_Callback) Swigcptr() uintptr {
	return uintptr(p)
}



var swigDirectorTrack struct {
	sync.Mutex
	m map[int]interface{}
	c int
}

func swigDirectorAdd(v interface{}) int {
	swigDirectorTrack.Lock()
	defer swigDirectorTrack.Unlock()
	if swigDirectorTrack.m == nil {
		swigDirectorTrack.m = make(map[int]interface{})
	}
	swigDirectorTrack.c++
	ret := swigDirectorTrack.c
	swigDirectorTrack.m[ret] = v
	return ret
}

func swigDirectorLookup(c int) interface{} {
	swigDirectorTrack.Lock()
	defer swigDirectorTrack.Unlock()
	ret := swigDirectorTrack.m[c]
	if ret == nil {
		panic("C++ director pointer not found (possible	use-after-free)")
	}
	return ret
}

func swigDirectorDelete(c int) {
	swigDirectorTrack.Lock()
	defer swigDirectorTrack.Unlock()
	if swigDirectorTrack.m[c] == nil {
		if c > swigDirectorTrack.c {
			panic("C++ director pointer invalid (possible memory corruption")
		} else {
			panic("C++ director pointer not found (possible use-after-free)")
		}
	}
	delete(swigDirectorTrack.m, c)
}


