qLibc - a simple and powerful general purpose C/C++ library

Headers, Bindings, Libraries for use with FreeBASIC, Please include example of use to help ensure they are tested and usable.
Post Reply
j8w344c6
Posts: 184
Joined: Oct 25, 2021 10:18

qLibc - a simple and powerful general purpose C/C++ library

Post by j8w344c6 »

Homepage: https://github.com/wolkykim/qlibc

fbfrog command used:

fbfrog qlibc.h -rename_ name -rename_ data -rename_ str -rename_ format -rename_ out -rename_ left -rename_ right -rename_ next -rename_ get -rename_ clear -rename_ lock -rename_ unlock -rename_ put -rename_ type

qlibc.bi

Code: Select all

#pragma once

#include once "crt/long.bi"
#include once "crt/stdio.bi"
#include once "crt/stdlib.bi"
#include once "stdbool.bi"
#include once "crt/stdint.bi"
#include once "crt/sys/types.bi"
#include once "netinet/in.bi"
#include once "crt/time.bi"

extern "C"

#define QLIBC_H
#define QTREETBL_H
type qtreetbl_t as qtreetbl_s
type qtreetbl_obj_t as qtreetbl_obj_s

enum
	QTREETBL_THREADSAFE = &h01
end enum

declare function qtreetbl(byval options as long) as qtreetbl_t ptr
declare sub qtreetbl_set_compare(byval tbl as qtreetbl_t ptr, byval cmp as function(byval name1 as const any ptr, byval namesize1 as uinteger, byval name2 as const any ptr, byval namesize2 as uinteger) as long)
declare function qtreetbl_put(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval datasize as uinteger) as bool
declare function qtreetbl_putstr(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
declare function qtreetbl_putstrf(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
declare function qtreetbl_put_by_obj(byval tbl as qtreetbl_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval data_ as const any ptr, byval datasize as uinteger) as bool
declare function qtreetbl_get(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval datasize as uinteger ptr, byval newmem as bool) as any ptr
declare function qtreetbl_getstr(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval newmem as const bool) as zstring ptr
declare function qtreetbl_get_by_obj(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval namesize as uinteger, byval datasize as uinteger ptr, byval newmem as bool) as any ptr
declare function qtreetbl_remove(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr) as bool
declare function qtreetbl_remove_by_obj(byval tbl as qtreetbl_t ptr, byval name_ as const any ptr, byval namesize as uinteger) as bool
declare function qtreetbl_getnext(byval tbl as qtreetbl_t ptr, byval obj as qtreetbl_obj_t ptr, byval newmem as const bool) as bool
declare function qtreetbl_find_min(byval tbl as qtreetbl_t ptr, byval namesize as uinteger ptr) as any ptr
declare function qtreetbl_find_max(byval tbl as qtreetbl_t ptr, byval namesize as uinteger ptr) as any ptr
declare function qtreetbl_find_nearest(byval tbl as qtreetbl_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval newmem as bool) as qtreetbl_obj_t
declare function qtreetbl_size(byval tbl as qtreetbl_t ptr) as uinteger
declare sub qtreetbl_clear(byval tbl as qtreetbl_t ptr)
declare sub qtreetbl_lock(byval tbl as qtreetbl_t ptr)
declare sub qtreetbl_unlock(byval tbl as qtreetbl_t ptr)
declare sub qtreetbl_free(byval tbl as qtreetbl_t ptr)
declare function qtreetbl_byte_cmp(byval name1 as const any ptr, byval namesize1 as uinteger, byval name2 as const any ptr, byval namesize2 as uinteger) as long
declare function qtreetbl_debug(byval tbl as qtreetbl_t ptr, byval out_ as FILE ptr) as bool
declare function qtreetbl_check(byval tbl as qtreetbl_t ptr) as long

type qtreetbl_s
	set_compare as sub(byval tbl as qtreetbl_t ptr, byval cmp as function(byval name1 as const any ptr, byval namesize1 as uinteger, byval name2 as const any ptr, byval namesize2 as uinteger) as long)
	put_ as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	putstr as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
	putstrf as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
	put_by_obj as function(byval tbl as qtreetbl_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval data_ as const any ptr, byval datasize as uinteger) as bool
	get_ as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval datasize as uinteger ptr, byval newmem as bool) as any ptr
	getstr as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
	get_by_obj as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr, byval namesize as uinteger, byval datasize as uinteger ptr, byval newmem as bool) as any ptr
	remove as function(byval tbl as qtreetbl_t ptr, byval name_ as const zstring ptr) as bool
	remove_by_obj as function(byval tbl as qtreetbl_t ptr, byval name_ as const any ptr, byval namesize as uinteger) as bool
	getnext as function(byval tbl as qtreetbl_t ptr, byval obj as qtreetbl_obj_t ptr, byval newmem as const bool) as bool
	find_min as function(byval tbl as qtreetbl_t ptr, byval namesize as uinteger ptr) as any ptr
	find_max as function(byval tbl as qtreetbl_t ptr, byval namesize as uinteger ptr) as any ptr
	find_nearest as function(byval tbl as qtreetbl_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval newmem as bool) as qtreetbl_obj_t
	size as function(byval tbl as qtreetbl_t ptr) as uinteger
	clear_ as sub(byval tbl as qtreetbl_t ptr)
	debug as function(byval tbl as qtreetbl_t ptr, byval out_ as FILE ptr) as bool
	lock_ as sub(byval tbl as qtreetbl_t ptr)
	unlock_ as sub(byval tbl as qtreetbl_t ptr)
	free as sub(byval tbl as qtreetbl_t ptr)
	compare as function(byval name1 as const any ptr, byval namesize1 as uinteger, byval name2 as const any ptr, byval namesize2 as uinteger) as long
	qmutex as any ptr
	root as qtreetbl_obj_t ptr
	num as uinteger
	tid as ubyte
end type

type qtreetbl_obj_s
	name_ as any ptr
	namesize as uinteger
	data_ as any ptr
	datasize as uinteger
	red as bool
	left_ as qtreetbl_obj_t ptr
	right_ as qtreetbl_obj_t ptr
	next_ as qtreetbl_obj_t ptr
	tid as ubyte
end type

#define QHASHTBL_H
type qhashtbl_t as qhashtbl_s
type qhashtbl_obj_t as qhashtbl_obj_s

enum
	QHASHTBL_THREADSAFE = &h01
end enum

declare function qhashtbl(byval range as uinteger, byval options as long) as qhashtbl_t ptr
declare function qhashtbl_put(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qhashtbl_putstr(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
declare function qhashtbl_putstrf(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
declare function qhashtbl_putint(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval num as longint) as bool
declare function qhashtbl_get(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qhashtbl_getstr(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
declare function qhashtbl_getint(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr) as longint
declare function qhashtbl_remove(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr) as bool
declare function qhashtbl_getnext(byval tbl as qhashtbl_t ptr, byval obj as qhashtbl_obj_t ptr, byval newmem as bool) as bool
declare function qhashtbl_size(byval tbl as qhashtbl_t ptr) as uinteger
declare sub qhashtbl_clear(byval tbl as qhashtbl_t ptr)
declare function qhashtbl_debug(byval tbl as qhashtbl_t ptr, byval out_ as FILE ptr) as bool
declare sub qhashtbl_lock(byval tbl as qhashtbl_t ptr)
declare sub qhashtbl_unlock(byval tbl as qhashtbl_t ptr)
declare sub qhashtbl_free(byval tbl as qhashtbl_t ptr)

type qhashtbl_s
	put_ as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	putstr as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
	putstrf as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
	putint as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval num as const longint) as bool
	get_ as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getstr as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
	getint as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr) as longint
	remove as function(byval tbl as qhashtbl_t ptr, byval name_ as const zstring ptr) as bool
	getnext as function(byval tbl as qhashtbl_t ptr, byval obj as qhashtbl_obj_t ptr, byval newmem as bool) as bool
	size as function(byval tbl as qhashtbl_t ptr) as uinteger
	clear_ as sub(byval tbl as qhashtbl_t ptr)
	debug as function(byval tbl as qhashtbl_t ptr, byval out_ as FILE ptr) as bool
	lock_ as sub(byval tbl as qhashtbl_t ptr)
	unlock_ as sub(byval tbl as qhashtbl_t ptr)
	free as sub(byval tbl as qhashtbl_t ptr)
	qmutex as any ptr
	num as uinteger
	range as uinteger
	slots as qhashtbl_obj_t ptr ptr
end type

type qhashtbl_obj_s
	hash as ulong
	name_ as zstring ptr
	data_ as any ptr
	size as uinteger
	next_ as qhashtbl_obj_t ptr
end type

#define QHASHARR_H
const Q_HASHARR_NAMESIZE = 16
const Q_HASHARR_DATASIZE = 32

type qhasharr_t as qhasharr_s
type qhasharr_slot_t as qhasharr_slot_s
type qhasharr_data_t as qhasharr_data_s
type qhasharr_obj_t as qhasharr_obj_s

declare function qhasharr(byval memory as any ptr, byval memsize as uinteger) as qhasharr_t ptr
declare function qhasharr_calculate_memsize(byval max as long) as uinteger
declare function qhasharr_put(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval value as const any ptr, byval size as uinteger) as bool
declare function qhasharr_putstr(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval str_ as const zstring ptr) as bool
declare function qhasharr_putstrf(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
declare function qhasharr_put_by_obj(byval tbl as qhasharr_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval data_ as const any ptr, byval datasize as uinteger) as bool
declare function qhasharr_get(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval size as uinteger ptr) as any ptr
declare function qhasharr_getstr(byval tbl as qhasharr_t ptr, byval key as const zstring ptr) as zstring ptr
declare function qhasharr_get_by_obj(byval tbl as qhasharr_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval datasize as uinteger ptr) as any ptr
declare function qhasharr_remove(byval tbl as qhasharr_t ptr, byval key as const zstring ptr) as bool
declare function qhasharr_remove_by_obj(byval tbl as qhasharr_t ptr, byval name_ as const zstring ptr, byval namesize as uinteger) as bool
declare function qhasharr_remove_by_idx(byval tbl as qhasharr_t ptr, byval idx as long) as bool
declare function qhasharr_getnext(byval tbl as qhasharr_t ptr, byval obj as qhasharr_obj_t ptr, byval idx as long ptr) as bool
declare function qhasharr_size(byval tbl as qhasharr_t ptr, byval maxslots as long ptr, byval usedslots as long ptr) as long
declare sub qhasharr_clear(byval tbl as qhasharr_t ptr)
declare function qhasharr_debug(byval tbl as qhasharr_t ptr, byval out_ as FILE ptr) as bool
declare sub qhasharr_free(byval tbl as qhasharr_t ptr)

type qhasharr_s
	put_ as function(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval value as const any ptr, byval size as uinteger) as bool
	putstr as function(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval str_ as const zstring ptr) as bool
	putstrf as function(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
	put_by_obj as function(byval tbl as qhasharr_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval data_ as const any ptr, byval datasize as uinteger) as bool
	get_ as function(byval tbl as qhasharr_t ptr, byval key as const zstring ptr, byval size as uinteger ptr) as any ptr
	getstr as function(byval tbl as qhasharr_t ptr, byval key as const zstring ptr) as zstring ptr
	get_by_obj as function(byval tbl as qhasharr_t ptr, byval name_ as const any ptr, byval namesize as uinteger, byval datasize as uinteger ptr) as any ptr
	remove as function(byval tbl as qhasharr_t ptr, byval key as const zstring ptr) as bool
	remove_by_obj as function(byval tbl as qhasharr_t ptr, byval name_ as const zstring ptr, byval namesize as uinteger) as bool
	remove_by_idx as function(byval tbl as qhasharr_t ptr, byval idx as long) as bool
	getnext as function(byval tbl as qhasharr_t ptr, byval obj as qhasharr_obj_t ptr, byval idx as long ptr) as bool
	size as function(byval tbl as qhasharr_t ptr, byval maxslots as long ptr, byval usedslots as long ptr) as long
	clear_ as sub(byval tbl as qhasharr_t ptr)
	debug as function(byval tbl as qhasharr_t ptr, byval out_ as FILE ptr) as bool
	free as sub(byval tbl as qhasharr_t ptr)
	data_ as qhasharr_data_t ptr
end type

type Q_HASHARR_SLOT_KEYVAL
	data_(0 to 31) as ubyte
	name_(0 to 15) as ubyte
	namesize as ushort
	namemd5(0 to 15) as ubyte
end type

type Q_HASHARR_SLOT_EXT
	data_(0 to sizeof(Q_HASHARR_SLOT_KEYVAL) - 1) as ubyte
end type

union qhasharr_slot_s_data
	pair as Q_HASHARR_SLOT_KEYVAL
	ext as Q_HASHARR_SLOT_EXT
end union

type qhasharr_slot_s
	count as short
	hash as ulong
	datasize as ubyte
	link as long
	data_ as qhasharr_slot_s_data
end type

type qhasharr_data_s
	maxslots as long
	usedslots as long
	num as long
end type

type qhasharr_obj_s
	name_ as any ptr
	namesize as uinteger
	data_ as any ptr
	datasize as uinteger
end type

#define QLISTTBL_H
type qlisttbl_t as qlisttbl_s
type qlisttbl_obj_t as qlisttbl_obj_s
type qlisttbl_data_t as qlisttbl_data_s

enum
	QLISTTBL_THREADSAFE = &h01
	QLISTTBL_UNIQUE = &h01 shl 1
	QLISTTBL_CASEINSENSITIVE = &h01 shl 2
	QLISTTBL_INSERTTOP = &h01 shl 3
	QLISTTBL_LOOKUPFORWARD = &h01 shl 4
end enum

declare function qlisttbl(byval options as long) as qlisttbl_t ptr
declare function qlisttbl_put(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qlisttbl_putstr(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
declare function qlisttbl_putstrf(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
declare function qlisttbl_putint(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval num as longint) as bool
declare function qlisttbl_get(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qlisttbl_getstr(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
declare function qlisttbl_getint(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as longint
declare function qlisttbl_getmulti(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool, byval numobjs as uinteger ptr) as qlisttbl_data_t ptr
declare sub qlisttbl_freemulti(byval objs as qlisttbl_data_t ptr)
declare function qlisttbl_remove(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as uinteger
declare function qlisttbl_removeobj(byval tbl as qlisttbl_t ptr, byval obj as const qlisttbl_obj_t ptr) as bool
declare function qlisttbl_getnext(byval tbl as qlisttbl_t ptr, byval obj as qlisttbl_obj_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as bool
declare function qlisttbl_size(byval tbl as qlisttbl_t ptr) as uinteger
declare sub qlisttbl_sort(byval tbl as qlisttbl_t ptr)
declare sub qlisttbl_clear(byval tbl as qlisttbl_t ptr)
declare function qlisttbl_save(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval encode as bool) as bool
declare function qlisttbl_load(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval decode as bool) as integer
declare function qlisttbl_debug(byval tbl as qlisttbl_t ptr, byval out_ as FILE ptr) as bool
declare sub qlisttbl_lock(byval tbl as qlisttbl_t ptr)
declare sub qlisttbl_unlock(byval tbl as qlisttbl_t ptr)
declare sub qlisttbl_free(byval tbl as qlisttbl_t ptr)

type qlisttbl_s
	put_ as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	putstr as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
	putstrf as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
	putint as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval num as longint) as bool
	get_ as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getstr as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
	getint as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as longint
	getmulti as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool, byval numobjs as uinteger ptr) as qlisttbl_data_t ptr
	freemulti as sub(byval objs as qlisttbl_data_t ptr)
	remove as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as uinteger
	removeobj as function(byval tbl as qlisttbl_t ptr, byval obj as const qlisttbl_obj_t ptr) as bool
	getnext as function(byval tbl as qlisttbl_t ptr, byval obj as qlisttbl_obj_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as bool
	size as function(byval tbl as qlisttbl_t ptr) as uinteger
	sort as sub(byval tbl as qlisttbl_t ptr)
	clear_ as sub(byval tbl as qlisttbl_t ptr)
	save as function(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval encode as bool) as bool
	load as function(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval decode as bool) as integer
	debug as function(byval tbl as qlisttbl_t ptr, byval out_ as FILE ptr) as bool
	lock_ as sub(byval tbl as qlisttbl_t ptr)
	unlock_ as sub(byval tbl as qlisttbl_t ptr)
	free as sub(byval tbl as qlisttbl_t ptr)
	namematch as function(byval obj as qlisttbl_obj_t ptr, byval name_ as const zstring ptr, byval hash as ulong) as bool
	namecmp as function(byval s1 as const zstring ptr, byval s2 as const zstring ptr) as long
	unique as bool
	caseinsensitive as bool
	keepsorted as bool
	inserttop as bool
	lookupforward as bool
	qmutex as any ptr
	num as uinteger
	first as qlisttbl_obj_t ptr
	last as qlisttbl_obj_t ptr
end type

type qlisttbl_obj_s
	hash as ulong
	name_ as zstring ptr
	data_ as any ptr
	size as uinteger
	prev as qlisttbl_obj_t ptr
	next_ as qlisttbl_obj_t ptr
end type

type qlisttbl_data_s
	data_ as any ptr
	size as uinteger
	type_ as ubyte
end type

#define QLIST_H
type qlist_t as qlist_s
type qlist_obj_t as qlist_obj_s

enum
	QLIST_THREADSAFE = &h01
end enum

declare function qlist(byval options as long) as qlist_t ptr
declare function qlist_setsize(byval list as qlist_t ptr, byval max as uinteger) as uinteger
declare function qlist_addfirst(byval list as qlist_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qlist_addlast(byval list as qlist_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qlist_addat(byval list as qlist_t ptr, byval index as long, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qlist_getfirst(byval list as qlist_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qlist_getlast(byval list as qlist_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qlist_getat(byval list as qlist_t ptr, byval index as long, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qlist_popfirst(byval list as qlist_t ptr, byval size as uinteger ptr) as any ptr
declare function qlist_poplast(byval list as qlist_t ptr, byval size as uinteger ptr) as any ptr
declare function qlist_popat(byval list as qlist_t ptr, byval index as long, byval size as uinteger ptr) as any ptr
declare function qlist_removefirst(byval list as qlist_t ptr) as bool
declare function qlist_removelast(byval list as qlist_t ptr) as bool
declare function qlist_removeat(byval list as qlist_t ptr, byval index as long) as bool
declare function qlist_getnext(byval list as qlist_t ptr, byval obj as qlist_obj_t ptr, byval newmem as bool) as bool
declare function qlist_size(byval list as qlist_t ptr) as uinteger
declare function qlist_datasize(byval list as qlist_t ptr) as uinteger
declare sub qlist_reverse(byval list as qlist_t ptr)
declare sub qlist_clear(byval list as qlist_t ptr)
declare function qlist_toarray(byval list as qlist_t ptr, byval size as uinteger ptr) as any ptr
declare function qlist_tostring(byval list as qlist_t ptr) as zstring ptr
declare function qlist_debug(byval list as qlist_t ptr, byval out_ as FILE ptr) as bool
declare sub qlist_lock(byval list as qlist_t ptr)
declare sub qlist_unlock(byval list as qlist_t ptr)
declare sub qlist_free(byval list as qlist_t ptr)

type qlist_s
	setsize as function(byval list as qlist_t ptr, byval max as uinteger) as uinteger
	addfirst as function(byval list as qlist_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	addlast as function(byval list as qlist_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	addat as function(byval list as qlist_t ptr, byval index as long, byval data_ as const any ptr, byval size as uinteger) as bool
	getfirst as function(byval list as qlist_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getlast as function(byval list as qlist_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getat as function(byval list as qlist_t ptr, byval index as long, byval size as uinteger ptr, byval newmem as bool) as any ptr
	popfirst as function(byval list as qlist_t ptr, byval size as uinteger ptr) as any ptr
	poplast as function(byval list as qlist_t ptr, byval size as uinteger ptr) as any ptr
	popat as function(byval list as qlist_t ptr, byval index as long, byval size as uinteger ptr) as any ptr
	removefirst as function(byval list as qlist_t ptr) as bool
	removelast as function(byval list as qlist_t ptr) as bool
	removeat as function(byval list as qlist_t ptr, byval index as long) as bool
	getnext as function(byval list as qlist_t ptr, byval obj as qlist_obj_t ptr, byval newmem as bool) as bool
	reverse as sub(byval list as qlist_t ptr)
	clear_ as sub(byval list as qlist_t ptr)
	size as function(byval list as qlist_t ptr) as uinteger
	datasize as function(byval list as qlist_t ptr) as uinteger
	toarray as function(byval list as qlist_t ptr, byval size as uinteger ptr) as any ptr
	tostring as function(byval list as qlist_t ptr) as zstring ptr
	debug as function(byval list as qlist_t ptr, byval out_ as FILE ptr) as bool
	lock_ as sub(byval list as qlist_t ptr)
	unlock_ as sub(byval list as qlist_t ptr)
	free as sub(byval list as qlist_t ptr)
	qmutex as any ptr
	num as uinteger
	max as uinteger
	datasum as uinteger
	first as qlist_obj_t ptr
	last as qlist_obj_t ptr
end type

type qlist_obj_s
	data_ as any ptr
	size as uinteger
	prev as qlist_obj_t ptr
	next_ as qlist_obj_t ptr
end type

#define QVECTOR_H
type qvector_t as qvector_s
type qvector_obj_t as qvector_obj_s

enum
	QVECTOR_THREADSAFE = &h01
	QVECTOR_RESIZE_DOUBLE = &h02
	QVECTOR_RESIZE_LINEAR = &h04
	QVECTOR_RESIZE_EXACT = &h08
end enum

declare function qvector(byval max as uinteger, byval objsize as uinteger, byval options as long) as qvector_t ptr
declare function qvector_addfirst(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
declare function qvector_addlast(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
declare function qvector_addat(byval vector as qvector_t ptr, byval index as long, byval data_ as const any ptr) as bool
declare function qvector_getfirst(byval vector as qvector_t ptr, byval newmem as bool) as any ptr
declare function qvector_getlast(byval vector as qvector_t ptr, byval newmem as bool) as any ptr
declare function qvector_getat(byval vector as qvector_t ptr, byval index as long, byval newmem as bool) as any ptr
declare function qvector_setfirst(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
declare function qvector_setlast(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
declare function qvector_setat(byval vector as qvector_t ptr, byval index as long, byval data_ as const any ptr) as bool
declare function qvector_popfirst(byval vector as qvector_t ptr) as any ptr
declare function qvector_poplast(byval vector as qvector_t ptr) as any ptr
declare function qvector_popat(byval vector as qvector_t ptr, byval index as long) as any ptr
declare function qvector_removefirst(byval vector as qvector_t ptr) as bool
declare function qvector_removelast(byval vector as qvector_t ptr) as bool
declare function qvector_removeat(byval vector as qvector_t ptr, byval index as long) as bool
declare function qvector_size(byval vector as qvector_t ptr) as uinteger
declare function qvector_resize(byval vector as qvector_t ptr, byval newmax as uinteger) as bool
declare function qvector_toarray(byval vector as qvector_t ptr, byval size as uinteger ptr) as any ptr
declare sub qvector_lock(byval vector as qvector_t ptr)
declare sub qvector_unlock(byval vector as qvector_t ptr)
declare sub qvector_clear(byval vector as qvector_t ptr)
declare function qvector_debug(byval vector as qvector_t ptr, byval out_ as FILE ptr) as bool
declare sub qvector_free(byval vector as qvector_t ptr)
declare sub qvector_reverse(byval vector as qvector_t ptr)
declare function qvector_getnext(byval vector as qvector_t ptr, byval obj as qvector_obj_t ptr, byval newmem as bool) as bool

type qvector_s
	addfirst as function(byval vector as qvector_t ptr, byval object as const any ptr) as bool
	addlast as function(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
	addat as function(byval vector as qvector_t ptr, byval index as long, byval data_ as const any ptr) as bool
	getfirst as function(byval vector as qvector_t ptr, byval newmem as bool) as any ptr
	getlast as function(byval vector as qvector_t ptr, byval newmem as bool) as any ptr
	getat as function(byval vector as qvector_t ptr, byval index as long, byval newmem as bool) as any ptr
	setfirst as function(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
	setlast as function(byval vector as qvector_t ptr, byval data_ as const any ptr) as bool
	setat as function(byval vector as qvector_t ptr, byval index as long, byval data_ as const any ptr) as bool
	popfirst as function(byval vector as qvector_t ptr) as any ptr
	poplast as function(byval vector as qvector_t ptr) as any ptr
	popat as function(byval vector as qvector_t ptr, byval index as long) as any ptr
	removefirst as function(byval vector as qvector_t ptr) as bool
	removelast as function(byval vector as qvector_t ptr) as bool
	removeat as function(byval vector as qvector_t ptr, byval index as long) as bool
	size as function(byval vector as qvector_t ptr) as uinteger
	resize as function(byval vector as qvector_t ptr, byval newmax as uinteger) as bool
	toarray as function(byval vector as qvector_t ptr, byval size as uinteger ptr) as any ptr
	lock_ as sub(byval vector as qvector_t ptr)
	unlock_ as sub(byval vector as qvector_t ptr)
	clear_ as sub(byval vector as qvector_t ptr)
	debug as function(byval vector as qvector_t ptr, byval out_ as FILE ptr) as bool
	free as sub(byval vector as qvector_t ptr)
	reverse as sub(byval vector as qvector_t ptr)
	getnext as function(byval vector as qvector_t ptr, byval obj as qvector_obj_t ptr, byval newmem as bool) as bool
	qmutex as any ptr
	data_ as any ptr
	num as uinteger
	objsize as uinteger
	max as uinteger
	options as long
	initnum as uinteger
end type

type qvector_obj_s
	data_ as any ptr
	index as long
end type

#define QQUEUE_H
type qqueue_t as qqueue_s

enum
	QQUEUE_THREADSAFE = QLIST_THREADSAFE
end enum

declare function qqueue(byval options as long) as qqueue_t ptr
declare function qqueue_setsize(byval queue as qqueue_t ptr, byval max as uinteger) as uinteger
declare function qqueue_push(byval queue as qqueue_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qqueue_pushstr(byval queue as qqueue_t ptr, byval str_ as const zstring ptr) as bool
declare function qqueue_pushint(byval queue as qqueue_t ptr, byval num as longint) as bool
declare function qqueue_pop(byval queue as qqueue_t ptr, byval size as uinteger ptr) as any ptr
declare function qqueue_popstr(byval queue as qqueue_t ptr) as zstring ptr
declare function qqueue_popint(byval queue as qqueue_t ptr) as longint
declare function qqueue_popat(byval queue as qqueue_t ptr, byval index as long, byval size as uinteger ptr) as any ptr
declare function qqueue_get(byval queue as qqueue_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qqueue_getstr(byval queue as qqueue_t ptr) as zstring ptr
declare function qqueue_getint(byval queue as qqueue_t ptr) as longint
declare function qqueue_getat(byval queue as qqueue_t ptr, byval index as long, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qqueue_size(byval queue as qqueue_t ptr) as uinteger
declare sub qqueue_clear(byval queue as qqueue_t ptr)
declare function qqueue_debug(byval queue as qqueue_t ptr, byval out_ as FILE ptr) as bool
declare sub qqueue_free(byval queue as qqueue_t ptr)

type qqueue_s
	setsize as function(byval stack as qqueue_t ptr, byval max as uinteger) as uinteger
	push as function(byval stack as qqueue_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	pushstr as function(byval stack as qqueue_t ptr, byval str_ as const zstring ptr) as bool
	pushint as function(byval stack as qqueue_t ptr, byval num as longint) as bool
	pop as function(byval stack as qqueue_t ptr, byval size as uinteger ptr) as any ptr
	popstr as function(byval stack as qqueue_t ptr) as zstring ptr
	popint as function(byval stack as qqueue_t ptr) as longint
	popat as function(byval stack as qqueue_t ptr, byval index as long, byval size as uinteger ptr) as any ptr
	get_ as function(byval stack as qqueue_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getstr as function(byval stack as qqueue_t ptr) as zstring ptr
	getint as function(byval stack as qqueue_t ptr) as longint
	getat as function(byval stack as qqueue_t ptr, byval index as long, byval size as uinteger ptr, byval newmem as bool) as any ptr
	size as function(byval stack as qqueue_t ptr) as uinteger
	clear_ as sub(byval stack as qqueue_t ptr)
	debug as function(byval stack as qqueue_t ptr, byval out_ as FILE ptr) as bool
	free as sub(byval stack as qqueue_t ptr)
	list as qlist_t ptr
end type

#define QSTACK_H
type qstack_t as qstack_s

enum
	QSTACK_THREADSAFE = QLIST_THREADSAFE
end enum

declare function qstack(byval options as long) as qstack_t ptr
declare function qstack_setsize(byval stack as qstack_t ptr, byval max as uinteger) as uinteger
declare function qstack_push(byval stack as qstack_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qstack_pushstr(byval stack as qstack_t ptr, byval str_ as const zstring ptr) as bool
declare function qstack_pushint(byval stack as qstack_t ptr, byval num as longint) as bool
declare function qstack_pop(byval stack as qstack_t ptr, byval size as uinteger ptr) as any ptr
declare function qstack_popstr(byval stack as qstack_t ptr) as zstring ptr
declare function qstack_popint(byval stack as qstack_t ptr) as longint
declare function qstack_popat(byval stack as qstack_t ptr, byval index as long, byval size as uinteger ptr) as any ptr
declare function qstack_get(byval stack as qstack_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qstack_getstr(byval stack as qstack_t ptr) as zstring ptr
declare function qstack_getint(byval stack as qstack_t ptr) as longint
declare function qstack_getat(byval stack as qstack_t ptr, byval index as long, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qstack_size(byval stack as qstack_t ptr) as uinteger
declare sub qstack_clear(byval stack as qstack_t ptr)
declare function qstack_debug(byval stack as qstack_t ptr, byval out_ as FILE ptr) as bool
declare sub qstack_free(byval stack as qstack_t ptr)

type qstack_s
	setsize as function(byval stack as qstack_t ptr, byval max as uinteger) as uinteger
	push as function(byval stack as qstack_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	pushstr as function(byval stack as qstack_t ptr, byval str_ as const zstring ptr) as bool
	pushint as function(byval stack as qstack_t ptr, byval num as longint) as bool
	pop as function(byval stack as qstack_t ptr, byval size as uinteger ptr) as any ptr
	popstr as function(byval stack as qstack_t ptr) as zstring ptr
	popint as function(byval stack as qstack_t ptr) as longint
	popat as function(byval stack as qstack_t ptr, byval index as long, byval size as uinteger ptr) as any ptr
	get_ as function(byval stack as qstack_t ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getstr as function(byval stack as qstack_t ptr) as zstring ptr
	getint as function(byval stack as qstack_t ptr) as longint
	getat as function(byval stack as qstack_t ptr, byval index as long, byval size as uinteger ptr, byval newmem as bool) as any ptr
	size as function(byval stack as qstack_t ptr) as uinteger
	clear_ as sub(byval stack as qstack_t ptr)
	debug as function(byval stack as qstack_t ptr, byval out_ as FILE ptr) as bool
	free as sub(byval stack as qstack_t ptr)
	list as qlist_t ptr
end type

#define QGROW_H
type qgrow_t as qgrow_s

enum
	QGROW_THREADSAFE = QLIST_THREADSAFE
end enum

declare function qgrow(byval options as long) as qgrow_t ptr
declare function qgrow_add(byval grow as qgrow_t ptr, byval object as const any ptr, byval size as uinteger) as bool
declare function qgrow_addstr(byval grow as qgrow_t ptr, byval str_ as const zstring ptr) as bool
declare function qgrow_addstrf(byval grow as qgrow_t ptr, byval format_ as const zstring ptr, ...) as bool
declare function qgrow_size(byval grow as qgrow_t ptr) as uinteger
declare function qgrow_datasize(byval grow as qgrow_t ptr) as uinteger
declare function qgrow_toarray(byval grow as qgrow_t ptr, byval size as uinteger ptr) as any ptr
declare function qgrow_tostring(byval grow as qgrow_t ptr) as zstring ptr
declare sub qgrow_clear(byval grow as qgrow_t ptr)
declare function qgrow_debug(byval grow as qgrow_t ptr, byval out_ as FILE ptr) as bool
declare sub qgrow_free(byval grow as qgrow_t ptr)

type qgrow_s
	add as function(byval grow as qgrow_t ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	addstr as function(byval grow as qgrow_t ptr, byval str_ as const zstring ptr) as bool
	addstrf as function(byval grow as qgrow_t ptr, byval format_ as const zstring ptr, ...) as bool
	size as function(byval grow as qgrow_t ptr) as uinteger
	datasize as function(byval grow as qgrow_t ptr) as uinteger
	toarray as function(byval grow as qgrow_t ptr, byval size as uinteger ptr) as any ptr
	tostring as function(byval grow as qgrow_t ptr) as zstring ptr
	clear_ as sub(byval grow as qgrow_t ptr)
	debug as function(byval grow as qgrow_t ptr, byval out_ as FILE ptr) as bool
	free as sub(byval grow as qgrow_t ptr)
	list as qlist_t ptr
end type

#define QCOUNT_H
declare function qcount_read(byval filepath as const zstring ptr) as longint
declare function qcount_save(byval filepath as const zstring ptr, byval number as longint) as bool
declare function qcount_update(byval filepath as const zstring ptr, byval number as longint) as longint
#define QENCODE_H
declare function qparse_queries(byval tbl as qlisttbl_t ptr, byval query as const zstring ptr, byval equalchar as byte, byval sepchar as byte, byval count as long ptr) as qlisttbl_t ptr
declare function qurl_encode(byval bin as const any ptr, byval size as uinteger) as zstring ptr
declare function qurl_decode(byval str_ as zstring ptr) as uinteger
declare function qbase64_encode(byval bin as const any ptr, byval size as uinteger) as zstring ptr
declare function qbase64_decode(byval str_ as zstring ptr) as uinteger
declare function qhex_encode(byval bin as const any ptr, byval size as uinteger) as zstring ptr
declare function qhex_decode(byval str_ as zstring ptr) as uinteger
#define QFILE_H
declare function qfile_lock(byval fd as long) as bool
declare function qfile_unlock(byval fd as long) as bool
declare function qfile_exist(byval filepath as const zstring ptr) as bool
declare function qfile_load(byval filepath as const zstring ptr, byval nbytes as uinteger ptr) as any ptr
declare function qfile_read(byval fp as FILE ptr, byval nbytes as uinteger ptr) as any ptr
declare function qfile_save(byval filepath as const zstring ptr, byval buf as const any ptr, byval size as uinteger, byval append as bool) as integer
declare function qfile_mkdir(byval dirpath as const zstring ptr, byval mode as mode_t, byval recursive as bool) as bool
declare function qfile_get_name(byval filepath as const zstring ptr) as zstring ptr
declare function qfile_get_dir(byval filepath as const zstring ptr) as zstring ptr
declare function qfile_get_ext(byval filepath as const zstring ptr) as zstring ptr
declare function qfile_get_size(byval filepath as const zstring ptr) as off_t
declare function qfile_check_path(byval path as const zstring ptr) as bool
declare function qfile_correct_path(byval path as zstring ptr) as zstring ptr
declare function qfile_abspath(byval buf as zstring ptr, byval bufsize as uinteger, byval path as const zstring ptr) as zstring ptr
#define QHASH_H
declare function qhashmd5(byval data_ as const any ptr, byval nbytes as uinteger, byval retbuf as any ptr) as bool
declare function qhashmd5_file(byval filepath as const zstring ptr, byval offset as off_t, byval nbytes as integer, byval retbuf as any ptr) as bool
declare function qhashfnv1_32(byval data_ as const any ptr, byval nbytes as uinteger) as ulong
declare function qhashfnv1_64(byval data_ as const any ptr, byval nbytes as uinteger) as ulongint
declare function qhashmurmur3_32(byval data_ as const any ptr, byval nbytes as uinteger) as ulong
declare function qhashmurmur3_128(byval data_ as const any ptr, byval nbytes as uinteger, byval retbuf as any ptr) as bool
#define QIO_H
declare function qio_wait_readable(byval fd as long, byval timeoutms as long) as long
declare function qio_wait_writable(byval fd as long, byval timeoutms as long) as long
declare function qio_read(byval fd as long, byval buf as any ptr, byval nbytes as uinteger, byval timeoutms as long) as integer
declare function qio_write(byval fd as long, byval data_ as const any ptr, byval nbytes as uinteger, byval timeoutms as long) as integer
declare function qio_send(byval outfd as long, byval infd as long, byval nbytes as off_t, byval timeoutms as long) as off_t
declare function qio_gets(byval fd as long, byval buf as zstring ptr, byval bufsize as uinteger, byval timeoutms as long) as integer
declare function qio_puts(byval fd as long, byval str_ as const zstring ptr, byval timeoutms as long) as integer
declare function qio_printf(byval fd as long, byval timeoutms as long, byval format_ as const zstring ptr, ...) as integer
#define QSOCKET_H
declare function qsocket_open(byval hostname as const zstring ptr, byval port as long, byval timeoutms as long) as long
declare function qsocket_close(byval sockfd as long, byval timeoutms as long) as bool
declare function qsocket_get_addr(byval addr as sockaddr_in ptr, byval hostname as const zstring ptr, byval port as long) as bool
declare function qsocket_get_localaddr(byval buf as zstring ptr, byval bufsize as uinteger) as zstring ptr
#define QSTRING_H
declare function qstrtrim(byval str_ as zstring ptr) as zstring ptr
declare function qstrtrim_head(byval str_ as zstring ptr) as zstring ptr
declare function qstrtrim_tail(byval str_ as zstring ptr) as zstring ptr
declare function qstrunchar(byval str_ as zstring ptr, byval head as byte, byval tail as byte) as zstring ptr
declare function qstrreplace(byval mode as const zstring ptr, byval srcstr as zstring ptr, byval tokstr as const zstring ptr, byval word as const zstring ptr) as zstring ptr
declare function qstrcpy(byval dst as zstring ptr, byval size as uinteger, byval src as const zstring ptr) as zstring ptr
declare function qstrncpy(byval dst as zstring ptr, byval size as uinteger, byval src as const zstring ptr, byval nbytes as uinteger) as zstring ptr
declare function qstrdupf(byval format_ as const zstring ptr, ...) as zstring ptr
declare function qstrdup_between(byval str_ as const zstring ptr, byval start as const zstring ptr, byval end as const zstring ptr) as zstring ptr
declare function qmemdup(byval data_ as const any ptr, byval size as uinteger) as any ptr
declare function qstrcatf(byval str_ as zstring ptr, byval format_ as const zstring ptr, ...) as zstring ptr
declare function qstrgets(byval buf as zstring ptr, byval size as uinteger, byval offset as zstring ptr ptr) as zstring ptr
declare function qstrrev(byval str_ as zstring ptr) as zstring ptr
declare function qstrupper(byval str_ as zstring ptr) as zstring ptr
declare function qstrlower(byval str_ as zstring ptr) as zstring ptr
declare function qstrtok(byval str_ as zstring ptr, byval delimiters as const zstring ptr, byval retstop as zstring ptr, byval offset as long ptr) as zstring ptr
declare function qstrtokenizer(byval str_ as const zstring ptr, byval delimiters as const zstring ptr) as qlist_t ptr
declare function qstrunique(byval seed as const zstring ptr) as zstring ptr
declare function qstr_comma_number(byval number as long) as zstring ptr
declare function qstrtest(byval testfunc as function(byval as long) as long, byval str_ as const zstring ptr) as bool
declare function qstr_is_email(byval email as const zstring ptr) as bool
declare function qstr_is_ip4addr(byval str_ as const zstring ptr) as bool
declare function qstr_conv_encoding(byval fromstr as const zstring ptr, byval fromcode as const zstring ptr, byval tocode as const zstring ptr, byval mag as single) as zstring ptr
#define QSYSTEM_H
declare function qgetenv(byval envname as const zstring ptr, byval nullstr as const zstring ptr) as const zstring ptr
declare function qsyscmd(byval cmd as const zstring ptr) as zstring ptr
#define QTIME_H
declare sub qtime_timespec_diff(byval t1 as timespec, byval t2 as timespec, byval diff as timespec ptr)
declare sub qtime_timeval_diff(byval t1 as timeval, byval t2 as timeval, byval diff as timeval ptr)
declare function qtime_current_milli() as clong
declare function qtime_localtime_strf(byval buf as zstring ptr, byval size as long, byval utctime as time_t, byval format_ as const zstring ptr) as zstring ptr
declare function qtime_localtime_str(byval utctime as time_t) as zstring ptr
declare function qtime_localtime_staticstr(byval utctime as time_t) as const zstring ptr
declare function qtime_gmt_strf(byval buf as zstring ptr, byval size as long, byval utctime as time_t, byval format_ as const zstring ptr) as zstring ptr
declare function qtime_gmt_str(byval utctime as time_t) as zstring ptr
declare function qtime_gmt_staticstr(byval utctime as time_t) as const zstring ptr
declare function qtime_parse_gmtstr(byval gmtstr as const zstring ptr) as time_t
#define QSEM_H
declare function qsem_init(byval keyfile as const zstring ptr, byval keyid as long, byval nsems as long, byval recreate as bool) as long
declare function qsem_getid(byval keyfile as const zstring ptr, byval keyid as long) as long
declare function qsem_enter(byval semid as long, byval semno as long) as bool
declare function qsem_enter_nowait(byval semid as long, byval semno as long) as bool
declare function qsem_enter_force(byval semid as long, byval semno as long, byval maxwaitms as long, byval forceflag as bool ptr) as bool
declare function qsem_leave(byval semid as long, byval semno as long) as bool
declare function qsem_check(byval semid as long, byval semno as long) as bool
declare function qsem_free(byval semid as long) as bool
#define QSHM_H
declare function qshm_init(byval keyfile as const zstring ptr, byval keyid as long, byval size as uinteger, byval recreate as bool) as long
declare function qshm_getid(byval keyfile as const zstring ptr, byval keyid as long) as long
declare function qshm_get(byval shmid as long) as any ptr
declare function qshm_free(byval shmid as long) as bool

end extern
j8w344c6
Posts: 184
Joined: Oct 25, 2021 10:18

Re: qLibc - a simple and powerful general purpose C/C++ library

Post by j8w344c6 »

fbfrog command used:

fbfrog qlibcext.h -rename_ name -rename_ data -rename_ str -rename_ format -rename_ out -rename_ left -rename_ right -rename_ next -rename_ get -rename_ clear -rename_ lock -rename_ unlock -rename_ put -rename_ type

I manually replaced '' TODO: #define QAC_CB(func) char *func(qaconf_cbdata_t *data, void *userdata) with:

Code: Select all

#macro QAC_CB(func)
   declare function func(byval data_ as qaconf_cbdata_t ptr, byval userdata as any ptr) as zstring ptr
#endmacro
qlibcext.bi

Code: Select all

#pragma once

#include once "crt/long.bi"
#include once "crt/stdlib.bi"
#include once "stdbool.bi"
#include once "crt/stdint.bi"
#include once "crt/limits.bi"

extern "C"

#define QLIBCEXT_H
#define QCONFIG_H
#define QLISTTBL_H

type qlisttbl_t as qlisttbl_s
type qlisttbl_obj_t as qlisttbl_obj_s
type qlisttbl_data_t as qlisttbl_data_s

enum
	QLISTTBL_THREADSAFE = &h01
	QLISTTBL_UNIQUE = &h01 shl 1
	QLISTTBL_CASEINSENSITIVE = &h01 shl 2
	QLISTTBL_INSERTTOP = &h01 shl 3
	QLISTTBL_LOOKUPFORWARD = &h01 shl 4
end enum

declare function qlisttbl(byval options as long) as qlisttbl_t ptr
declare function qlisttbl_put(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
declare function qlisttbl_putstr(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
declare function qlisttbl_putstrf(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
declare function qlisttbl_putint(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval num as longint) as bool
declare function qlisttbl_get(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
declare function qlisttbl_getstr(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
declare function qlisttbl_getint(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as longint
declare function qlisttbl_getmulti(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool, byval numobjs as uinteger ptr) as qlisttbl_data_t ptr
declare sub qlisttbl_freemulti(byval objs as qlisttbl_data_t ptr)
declare function qlisttbl_remove(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as uinteger
declare function qlisttbl_removeobj(byval tbl as qlisttbl_t ptr, byval obj as const qlisttbl_obj_t ptr) as bool
declare function qlisttbl_getnext(byval tbl as qlisttbl_t ptr, byval obj as qlisttbl_obj_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as bool
declare function qlisttbl_size(byval tbl as qlisttbl_t ptr) as uinteger
declare sub qlisttbl_sort(byval tbl as qlisttbl_t ptr)
declare sub qlisttbl_clear(byval tbl as qlisttbl_t ptr)
declare function qlisttbl_save(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval encode as bool) as bool
declare function qlisttbl_load(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval decode as bool) as integer
declare function qlisttbl_debug(byval tbl as qlisttbl_t ptr, byval out_ as FILE ptr) as bool
declare sub qlisttbl_lock(byval tbl as qlisttbl_t ptr)
declare sub qlisttbl_unlock(byval tbl as qlisttbl_t ptr)
declare sub qlisttbl_free(byval tbl as qlisttbl_t ptr)

type qlisttbl_s
	put_ as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval data_ as const any ptr, byval size as uinteger) as bool
	putstr as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval str_ as const zstring ptr) as bool
	putstrf as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval format_ as const zstring ptr, ...) as bool
	putint as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval num as longint) as bool
	get_ as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval size as uinteger ptr, byval newmem as bool) as any ptr
	getstr as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as zstring ptr
	getint as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as longint
	getmulti as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr, byval newmem as bool, byval numobjs as uinteger ptr) as qlisttbl_data_t ptr
	freemulti as sub(byval objs as qlisttbl_data_t ptr)
	remove as function(byval tbl as qlisttbl_t ptr, byval name_ as const zstring ptr) as uinteger
	removeobj as function(byval tbl as qlisttbl_t ptr, byval obj as const qlisttbl_obj_t ptr) as bool
	getnext as function(byval tbl as qlisttbl_t ptr, byval obj as qlisttbl_obj_t ptr, byval name_ as const zstring ptr, byval newmem as bool) as bool
	size as function(byval tbl as qlisttbl_t ptr) as uinteger
	sort as sub(byval tbl as qlisttbl_t ptr)
	clear_ as sub(byval tbl as qlisttbl_t ptr)
	save as function(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval encode as bool) as bool
	load as function(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte, byval decode as bool) as integer
	debug as function(byval tbl as qlisttbl_t ptr, byval out_ as FILE ptr) as bool
	lock_ as sub(byval tbl as qlisttbl_t ptr)
	unlock_ as sub(byval tbl as qlisttbl_t ptr)
	free as sub(byval tbl as qlisttbl_t ptr)
	namematch as function(byval obj as qlisttbl_obj_t ptr, byval name_ as const zstring ptr, byval hash as ulong) as bool
	namecmp as function(byval s1 as const zstring ptr, byval s2 as const zstring ptr) as long
	unique as bool
	caseinsensitive as bool
	keepsorted as bool
	inserttop as bool
	lookupforward as bool
	qmutex as any ptr
	num as uinteger
	first as qlisttbl_obj_t ptr
	last as qlisttbl_obj_t ptr
end type

type qlisttbl_obj_s
	hash as ulong
	name_ as zstring ptr
	data_ as any ptr
	size as uinteger
	prev as qlisttbl_obj_t ptr
	next_ as qlisttbl_obj_t ptr
end type

type qlisttbl_data_s
	data_ as any ptr
	size as uinteger
	type_ as ubyte
end type

declare function qconfig_parse_file(byval tbl as qlisttbl_t ptr, byval filepath as const zstring ptr, byval sepchar as byte) as qlisttbl_t ptr
declare function qconfig_parse_str(byval tbl as qlisttbl_t ptr, byval str_ as const zstring ptr, byval sepchar as byte) as qlisttbl_t ptr
#define QACONF_H
type qaconf_t as qaconf_s
type qaconf_option_t as qaconf_option_s
type qaconf_cbdata_t as qaconf_cbdata_s
declare function qaconf() as qaconf_t ptr
#macro QAC_CB(func)
   declare function func(byval data_ as qaconf_cbdata_t ptr, byval userdata as any ptr) as zstring ptr
#endmacro
#define QAC_TAKEn(n) (n)

enum
	QAC_CASEINSENSITIVE = 1
	QAC_IGNOREUNKNOWN = 2
end enum

type qaconf_take as long
enum
	QAC_A1_STR = 0
	QAC_A2_STR = 0
	QAC_A3_STR = 0
	QAC_A4_STR = 0
	QAC_A5_STR = 0
	QAC_AA_STR = 0
	QAC_A1_INT = 1 shl 8
	QAC_A2_INT = QAC_A1_INT shl 1
	QAC_A3_INT = QAC_A1_INT shl 2
	QAC_A4_INT = QAC_A1_INT shl 3
	QAC_A5_INT = QAC_A1_INT shl 4
	QAC_AA_INT = QAC_A1_INT shl 5
	QAC_A1_FLOAT = 1 shl 16
	QAC_A2_FLOAT = QAC_A1_FLOAT shl 1
	QAC_A3_FLOAT = QAC_A1_FLOAT shl 2
	QAC_A4_FLOAT = QAC_A1_FLOAT shl 3
	QAC_A5_FLOAT = QAC_A1_FLOAT shl 4
	QAC_AA_FLOAT = QAC_A1_FLOAT shl 5
	QAC_A1_BOOL = 1 shl 24
	QAC_A2_BOOL = QAC_A1_BOOL shl 1
	QAC_A3_BOOL = QAC_A1_BOOL shl 2
	QAC_A4_BOOL = QAC_A1_BOOL shl 3
	QAC_A5_BOOL = QAC_A1_BOOL shl 4
	QAC_AA_BOOL = QAC_A1_BOOL shl 5
	QAC_TAKENONE = 0
	QAC_TAKE0 = QAC_TAKENONE
	QAC_TAKE1 = 1
	QAC_TAKE2 = 2
	QAC_TAKE3 = 3
	QAC_TAKE4 = 4
	QAC_TAKE5 = 5
	QAC_TAKEALL = &hFF
	QAC_TAKE_STR = QAC_TAKE1 or QAC_A1_STR
	QAC_TAKE_INT = QAC_TAKE1 or QAC_A1_INT
	QAC_TAKE_FLOAT = QAC_TAKE1 or QAC_A1_FLOAT
	QAC_TAKE_BOOL = QAC_TAKE1 or QAC_A1_BOOL
end enum

#define QAC_TAKEn(n) (n)

type qaconf_section as long
enum
	QAC_SECTION_ALL = 0
	QAC_SECTION_ROOT = 1
end enum

type qaconf_otype as long
enum
	QAC_OTYPE_OPTION = 0
	QAC_OTYPE_SECTIONOPEN = 1
	QAC_OTYPE_SECTIONCLOSE = 2
end enum

type qaconf_s
	addoptions as function(byval qaconf as qaconf_t ptr, byval options as const qaconf_option_t ptr) as long
	setdefhandler as sub(byval qaconf as qaconf_t ptr, byval callback as function(byval data_ as qaconf_cbdata_t ptr, byval userdata as any ptr) as zstring ptr)
	setuserdata as sub(byval qaconf as qaconf_t ptr, byval userdata as const any ptr)
	parse as function(byval qaconf as qaconf_t ptr, byval filepath as const zstring ptr, byval flags as ubyte) as long
	errmsg as function(byval qaconf as qaconf_t ptr) as const zstring ptr
	reseterror as sub(byval qaconf as qaconf_t ptr)
	free as sub(byval qaconf as qaconf_t ptr)
	numoptions as long
	options as qaconf_option_t ptr
	defcb as function(byval data_ as qaconf_cbdata_t ptr, byval userdata as any ptr) as zstring ptr
	userdata as any ptr
	filepath as zstring ptr
	lineno as long
	errstr as zstring ptr
end type

type qaconf_option_s
	name_ as zstring ptr
	take as ulong
	cb as function(byval data_ as qaconf_cbdata_t ptr, byval userdata as any ptr) as zstring ptr
	sectionid as ulongint
	sections as ulongint
end type

#define QAC_OPTION_END (NULL, 0, NULL, 0, 0)

type qaconf_cbdata_s
	otype as qaconf_otype
	section as ulongint
	sections as ulongint
	level as ubyte
	parent as qaconf_cbdata_t ptr
	argc as long
	argv as zstring ptr ptr
	data_ as any ptr
end type

#define QLOG_H
type qlog_t as qlog_s
const QLOG_OPT_THREADSAFE = &h01
const QLOG_OPT_FLUSH = &h01 shl 1
declare function qlog(byval filepathfmt as const zstring ptr, byval mode as mode_t, byval rotateinterval as long, byval options as long) as qlog_t ptr

type qlog_s
	write as function(byval log as qlog_t ptr, byval str_ as const zstring ptr) as bool
	writef as function(byval log as qlog_t ptr, byval format_ as const zstring ptr, ...) as bool
	duplicate as function(byval log as qlog_t ptr, byval outfp as FILE ptr, byval flush as bool) as bool
	flush as function(byval log as qlog_t ptr) as bool
	free as sub(byval log as qlog_t ptr)
	qmutex as any ptr
	filepathfmt as zstring * PATH_MAX
	filepath as zstring * PATH_MAX
	fp as FILE ptr
	mode as mode_t
	rotateinterval as long
	nextrotate as long
	logflush as bool
	outfp as FILE ptr
	outflush as bool
end type

#define QHTTPCLIENT_H
type qhttpclient_t as qhttpclient_s
#define QHTTPCLIENT_NAME "qLibc"
declare function qhttpclient(byval hostname as const zstring ptr, byval port as long) as qhttpclient_t ptr

type qhttpclient_s
	setssl as function(byval client as qhttpclient_t ptr) as bool
	settimeout as sub(byval client as qhttpclient_t ptr, byval timeoutms as long)
	setkeepalive as sub(byval client as qhttpclient_t ptr, byval keepalive as bool)
	setuseragent as sub(byval client as qhttpclient_t ptr, byval useragent as const zstring ptr)
	open as function(byval client as qhttpclient_t ptr) as bool
	head as function(byval client as qhttpclient_t ptr, byval uri as const zstring ptr, byval rescode as long ptr, byval reqheaders as qlisttbl_t ptr, byval resheaders as qlisttbl_t ptr) as bool
	get_ as function(byval client as qhttpclient_t ptr, byval uri as const zstring ptr, byval fd as long, byval savesize as off_t ptr, byval rescode as long ptr, byval reqheaders as qlisttbl_t ptr, byval resheaders as qlisttbl_t ptr, byval callback as function(byval userdata as any ptr, byval recvbytes as off_t) as bool, byval userdata as any ptr) as bool
	put_ as function(byval client as qhttpclient_t ptr, byval uri as const zstring ptr, byval fd as long, byval length as off_t, byval retcode as long ptr, byval userheaders as qlisttbl_t ptr, byval resheaders as qlisttbl_t ptr, byval callback as function(byval userdata as any ptr, byval sentbytes as off_t) as bool, byval userdata as any ptr) as bool
	cmd as function(byval client as qhttpclient_t ptr, byval method as const zstring ptr, byval uri as const zstring ptr, byval data_ as any ptr, byval size as uinteger, byval rescode as long ptr, byval contentslength as uinteger ptr, byval reqheaders as qlisttbl_t ptr, byval resheaders as qlisttbl_t ptr) as any ptr
	sendrequest as function(byval client as qhttpclient_t ptr, byval method as const zstring ptr, byval uri as const zstring ptr, byval reqheaders as qlisttbl_t ptr) as bool
	readresponse as function(byval client as qhttpclient_t ptr, byval resheaders as qlisttbl_t ptr, byval contentlength as off_t ptr) as long
	gets as function(byval client as qhttpclient_t ptr, byval buf as zstring ptr, byval bufsize as uinteger) as integer
	read as function(byval client as qhttpclient_t ptr, byval buf as any ptr, byval nbytes as uinteger) as integer
	write as function(byval client as qhttpclient_t ptr, byval buf as const any ptr, byval nbytes as uinteger) as integer
	recvfile as function(byval client as qhttpclient_t ptr, byval fd as long, byval nbytes as off_t) as off_t
	sendfile as function(byval client as qhttpclient_t ptr, byval fd as long, byval nbytes as off_t) as off_t
	close as function(byval client as qhttpclient_t ptr) as bool
	free as sub(byval client as qhttpclient_t ptr)
	socket as long
	ssl as any ptr
	addr as sockaddr_in
	hostname as zstring ptr
	port as long
	timeoutms as long
	keepalive as bool
	useragent as zstring ptr
	connclose as bool
end type

#define QDATABASE_H
type qdbresult_t as qdbresult_s
type qdb_t as qdb_s
declare function qdb(byval dbtype as const zstring ptr, byval addr as const zstring ptr, byval port as long, byval database as const zstring ptr, byval username as const zstring ptr, byval password as const zstring ptr, byval autocommit as bool) as qdb_t ptr

type qdbresult_s
	getstr as function(byval result as qdbresult_t ptr, byval field as const zstring ptr) as const zstring ptr
	get_str_at as function(byval result as qdbresult_t ptr, byval idx as long) as const zstring ptr
	getint as function(byval result as qdbresult_t ptr, byval field as const zstring ptr) as long
	get_int_at as function(byval result as qdbresult_t ptr, byval idx as long) as long
	getnext as function(byval result as qdbresult_t ptr) as bool
	get_cols as function(byval result as qdbresult_t ptr) as long
	get_rows as function(byval result as qdbresult_t ptr) as long
	get_row as function(byval result as qdbresult_t ptr) as long
	free as sub(byval result as qdbresult_t ptr)
end type

type qdb_s_info
	dbtype as zstring ptr
	addr as zstring ptr
	port as long
	username as zstring ptr
	password as zstring ptr
	database as zstring ptr
	autocommit as bool
	fetchtype as bool
end type

type qdb_s
	open as function(byval db as qdb_t ptr) as bool
	close as function(byval db as qdb_t ptr) as bool
	execute_update as function(byval db as qdb_t ptr, byval query as const zstring ptr) as long
	execute_updatef as function(byval db as qdb_t ptr, byval format_ as const zstring ptr, ...) as long
	execute_query as function(byval db as qdb_t ptr, byval query as const zstring ptr) as qdbresult_t ptr
	execute_queryf as function(byval db as qdb_t ptr, byval format_ as const zstring ptr, ...) as qdbresult_t ptr
	begin_tran as function(byval db as qdb_t ptr) as bool
	end_tran as function(byval db as qdb_t ptr, byval commit as bool) as bool
	commit as function(byval db as qdb_t ptr) as bool
	rollback as function(byval db as qdb_t ptr) as bool
	set_fetchtype as function(byval db as qdb_t ptr, byval fromdb as bool) as bool
	get_conn_status as function(byval db as qdb_t ptr) as bool
	ping as function(byval db as qdb_t ptr) as bool
	get_error as function(byval db as qdb_t ptr, byval errorno as ulong ptr) as const zstring ptr
	free as sub(byval db as qdb_t ptr)
	qmutex as any ptr
	connected as bool
	info as qdb_s_info
end type

#define QTOKENBUCKET_H
type qtokenbucket_t as qtokenbucket_s
declare sub qtokenbucket_init(byval bucket as qtokenbucket_t ptr, byval init_tokens as long, byval max_tokens as long, byval tokens_per_sec as long)
declare function qtokenbucket_consume(byval bucket as qtokenbucket_t ptr, byval tokens as long) as bool
declare function qtokenbucket_waittime(byval bucket as qtokenbucket_t ptr, byval tokens as long) as clong

type qtokenbucket_s
	tokens as double
	max_tokens as long
	tokens_per_sec as long
	last_fill as clong
end type

end extern
Post Reply