package sqlite3_wrap

import (
	

	sqlite3_wasm 
	
)

type Wrapper struct {
	*sqlite3_wasm.Module
	*Memory
	DB       any
	SysError error

	mmapState
	handles []any
	deleted int
}

func ( *Wrapper) () ( error) {
	for ,  := range .handles {
		if ,  := .(io.Closer);  {
			if  := .Close();  == nil {
				 = 
			}
		}
	}
	if  := .Memory.Close();  != nil {
		 = 
	}
	* = Wrapper{}
	return 
}

func ( *Wrapper) ( Ptr_t) any {
	if  == 0 {
		return nil
	}
	return .handles[^]
}

func ( *Wrapper) ( Ptr_t) error {
	if  == 0 {
		return nil
	}
	 := .handles[^]
	.handles[^] = nil
	if  := Ptr_t(len(.handles));  == ^ {
		.handles = .handles[:-1]
	} else {
		.deleted++
	}
	if ,  := .(io.Closer);  {
		return .Close()
	}
	return nil
}

func ( *Wrapper) ( any) Ptr_t {
	if  == nil {
		panic(errutil.NilErr)
	}

	// Find an empty slot.
	if .deleted > cap(.handles)-len(.handles) {
		for ,  := range .handles {
			if  == nil {
				.deleted--
				.handles[] = 
				return ^Ptr_t()
			}
		}
	}

	// Add a new slot.
	.handles = append(.handles, )
	return -Ptr_t(len(.handles))
}