module Bindings.APR.Allocator where
#strict_import
import Bindings.APR
+import Bindings.APR.Allocator.Types
import Bindings.APR.Errno
-
-#opaque_t apr_allocator_t
-
-#starttype struct apr_memnode_t
-#field next , Ptr <apr_memnode_t>
-#field ref , Ptr (Ptr <apr_memnode_t>)
-#field index , <apr_uint32_t>
-#field free_index , <apr_uint32_t>
-#field first_avail, Ptr CChar
-#field endp , Ptr CChar
-#stoptype
+import Bindings.APR.Pools
#num APR_MEMNODE_T_SIZE
#num APR_ALLOCATOR_MAX_FREE_UNLIMITED
#ccall apr_allocator_alloc , Ptr <apr_allocator_t> -> <apr_size_t> -> IO (Ptr <apr_memnode_t>)
#ccall apr_allocator_free , Ptr <apr_allocator_t> -> Ptr <apr_memnode_t> -> IO ()
--- FIXME: incomplete
+#ccall apr_allocator_owner_set, Ptr <apr_allocator_t> -> Ptr <apr_pool_t> -> IO ()
+#ccall apr_allocator_owner_get, Ptr <apr_allocator_t> -> IO (Ptr <apr_pool_t>)
+
+#ccall apr_allocator_max_free_set, Ptr <apr_allocator_t> -> <apr_size_t> -> IO ()
+
+-- FIXME: incomplete
\ No newline at end of file
--- /dev/null
+#include <bindings.dsl.h>
+#include <apr_pools.h>
+
+module Bindings.APR.Pools where
+#strict_import
+import Bindings.APR
+import Bindings.APR.Allocator.Types
+import Bindings.APR.Errno
+
+#opaque_t apr_pool_t
+
+#num APR_POOL_DEBUG
+
+#callback apr_abortfunc_t, CInt -> IO CInt
+
+#ccall apr_pool_initialize, IO <apr_status_t>
+#ccall apr_pool_terminate , IO ()
+
+#if APR_POOL_DEBUG
+
+# cinline apr_pool_create_ex, Ptr (Ptr <apr_pool_t>) -> Ptr <apr_pool_t> -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> IO <apr_status_t>
+# cinline apr_pool_create_core_ex, Ptr (Ptr <apr_pool_t>) -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> IO <apr_status_t>
+# cinline apr_pool_create_unmanaged_ex, Ptr (Ptr <apr_pool_t>) -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> IO <apr_status_t>
+
+# ccall apr_pool_create_ex_debug, Ptr (Ptr <apr_pool_t>) -> Ptr <apr_pool_t> -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> Ptr CChar -> IO <apr_status_t>
+# ccall apr_pool_create_core_ex_debug, Ptr (Ptr <apr_pool_t>) -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> Ptr CChar -> IO <apr_status_t>
+# ccall apr_pool_create_unmanaged_ex_debug, Ptr (Ptr <apr_pool_t>) -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> Ptr CChar -> IO <apr_status_t>
+
+#else
+
+# ccall apr_pool_create_ex, Ptr (Ptr <apr_pool_t>) -> Ptr <apr_pool_t> -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> IO <apr_status_t>
+# ccall apr_pool_create_core_ex, Ptr (Ptr <apr_pool_t>) -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> IO <apr_status_t>
+# ccall apr_pool_create_unmanaged_ex, Ptr (Ptr <apr_pool_t>) -> <apr_abortfunc_t> -> Ptr <apr_allocator_t> -> IO <apr_status_t>
+
+#endif
+
+#cinline apr_pool_create, Ptr (Ptr <apr_pool_t>) -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#cinline apr_pool_create_core, Ptr (Ptr <apr_pool_t>) -> IO <apr_status_t>
+#cinline apr_pool_create_unmanaged, Ptr (Ptr <apr_pool_t>) -> IO <apr_status_t>
+
+#ccall apr_pool_allocator_get, Ptr <apr_pool_t> -> IO (Ptr <apr_allocator_t>)
+
+#if APR_POOL_DEBUG
+# cinline apr_pool_clear, Ptr <apr_pool_t> -> IO ()
+# ccall apr_pool_clear_debug, Ptr <apr_pool_t> -> Ptr CChar -> IO ()
+#else
+# ccall apr_pool_clear, Ptr <apr_pool_t> -> IO ()
+#endif
+
+#if APR_POOL_DEBUG
+# cinline apr_pool_destroy, Ptr <apr_pool_t> -> IO ()
+# ccall apr_pool_destroy_debug, Ptr <apr_pool_t> -> Ptr CChar -> IO ()
+#else
+# ccall apr_pool_destroy, Ptr <apr_pool_t> -> IO ()
+#endif
+
+#if APR_POOL_DEBUG
+# cinline apr_palloc, Ptr <apr_pool_t> -> <apr_size_t> -> IO (Ptr ())
+# ccall apr_palloc_debug, Ptr <apr_pool_t> -> <apr_size_t> -> Ptr CChar -> IO (Ptr ())
+#else
+# ccall apr_palloc, Ptr <apr_pool_t> -> <apr_size_t> -> IO (Ptr ())
+#endif
+
+#cinline apr_pcalloc, Ptr <apr_pool_t> -> <apr_size_t> -> IO (Ptr ())
+#if APR_POOL_DEBUG
+# ccall apr_pcalloc_debug, Ptr <apr_pool_t> -> <apr_size_t> -> Ptr CChar -> IO (Ptr ())
+#endif
+
+#ccall apr_pool_abort_set , <apr_abortfunc_t> -> Ptr <apr_pool_t> -> IO ()
+#ccall apr_pool_abort_get , Ptr <apr_pool_t> -> IO <apr_abortfunc_t>
+#ccall apr_pool_parent_get , Ptr <apr_pool_t> -> IO (Ptr <apr_pool_t>)
+#ccall apr_pool_is_ancestor, Ptr <apr_pool_t> -> Ptr <apr_pool_t> -> IO CInt
+#ccall apr_pool_tag , Ptr <apr_pool_t> -> Ptr CChar -> IO ()
+
+#ccall apr_pool_userdata_set , Ptr () -> Ptr CChar -> FunPtr (Ptr () -> IO <apr_status_t>) -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_pool_userdata_setn, Ptr () -> Ptr CChar -> FunPtr (Ptr () -> IO <apr_status_t>) -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_pool_userdata_get , Ptr (Ptr ()) -> Ptr CChar -> Ptr <apr_pool_t> -> IO <apr_status_t>
+
+#ccall apr_pool_cleanup_register , Ptr <apr_pool_t> -> Ptr () -> FunPtr (Ptr () -> IO <apr_status_t>) -> FunPtr (Ptr () -> IO <apr_status_t>) -> IO ()
+#ccall apr_pool_pre_cleanup_register, Ptr <apr_pool_t> -> Ptr () -> FunPtr (Ptr () -> IO <apr_status_t>) -> IO ()
+#ccall apr_pool_cleanup_kill , Ptr <apr_pool_t> -> Ptr () -> FunPtr (Ptr () -> IO <apr_status_t>) -> IO ()
+#ccall apr_pool_child_cleanup_set , Ptr <apr_pool_t> -> Ptr () -> FunPtr (Ptr () -> IO <apr_status_t>) -> FunPtr (Ptr () -> IO <apr_status_t>) -> IO ()
+#ccall apr_pool_cleanup_run , Ptr <apr_pool_t> -> Ptr () -> FunPtr (Ptr () -> IO <apr_status_t>) -> IO <apr_status_t>
+#ccall apr_pool_cleanup_null , Ptr () -> IO <apr_status_t>
+#ccall apr_pool_cleanup_for_exec , Ptr () -> IO ()
+
+#if APR_POOL_DEBUG
+# ccall apr_pool_join , Ptr <apr_pool_t> -> Ptr <apr_pool_t> -> IO ()
+# ccall apr_pool_find , Ptr () -> IO (Ptr <apr_pool_t>)
+# ccall apr_pool_num_bytes, Ptr <apr_pool_t> -> CInt -> IO <apr_size_t>
+# ccall apr_pool_lock , Ptr <apr_pool_t> -> CInt -> IO ()
+#else
+# cinline apr_pool_join, Ptr <apr_pool_t> -> Ptr <apr_pool_t> -> IO ()
+# cinline apr_pool_lock, Ptr <apr_pool_t> -> CInt -> IO ()
+#endif
--- /dev/null
+#include <bindings.cmacros.h>
+#include <apr_pools.h>
+
+#if APR_POOL_DEBUG
+BC_INLINE4(apr_pool_create_ex, apr_pool_t**, apr_pool_t*, apr_abortfunc_t, apr_allocator_t*, apr_status_t)
+BC_INLINE3(apr_pool_create_core_ex, apr_pool_t**, apr_abortfunc_t, apr_allocator_t*, apr_status_t)
+BC_INLINE3(apr_pool_create_unmanaged_ex, apr_pool_t**, apr_abortfunc_t, apr_allocator_t*, apr_status_t)
+#endif
+
+BC_INLINE2(apr_pool_create, apr_pool_t**, apr_pool_t*, apr_status_t)
+BC_INLINE1(apr_pool_create_core, apr_pool_t**, apr_status_t)
+BC_INLINE1(apr_pool_create_unmanaged, apr_pool_t**, apr_status_t)
+
+#if APR_POOL_DEBUG
+BC_INLINE1VOID(apr_pool_clear , apr_pool_t*)
+BC_INLINE1VOID(apr_pool_destroy, apr_pool_t*)
+BC_INLINE3(apr_palloc, apr_pool_t*, apr_size_t, const char*, void*)
+#endif
+
+BC_INLINE2(apr_pcalloc, apr_pool_t*, apr_size_t, void*)
+
+BC_INLINE2VOID(apr_pool_join, apr_pool_t*, apr_pool_t*)
+BC_INLINE2VOID(apr_pool_lock, apr_pool_t*, int)