#ifndef _MY_SHMEM_HASH_H_

#define _MY_SHMEM_HASH_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "my_shmem.h"
#include <apr_hash.h>

apr_hash_t * my_shmem_hash_make( MY_SHMEM *shm );

/*
  my_shmem_hash_copy() can be used to translate, for example, an apr_pool_t based hash into a MY_SHMEM based hash
 */
apr_hash_t * my_shmem_hash_copy( MY_SHMEM         * shm,
				 const apr_hash_t * orig );

/*
  param 'overlay' must be a MY_SHMEM based hash ???
 */
apr_hash_t * my_shmem_hash_overlay( MY_SHMEM         * shm, 
				    const apr_hash_t * overlay, 
				    const apr_hash_t * base );

/*
  param 'overlay' must be a MY_SHMEM based hash ???
 */
apr_hash_t * my_shmem_hash_merge( MY_SHMEM         * shm,
				  const apr_hash_t * overlay, 
				  const apr_hash_t * base,
				  void             * (*merger)(MY_SHMEM   * p,
							       const void * key,
							       apr_ssize_t  klen,
							       const void * h1_val,
							       const void * h2_val,
							       const void * data),
				  const void       * data );

#ifdef __cplusplus
}
#endif

#endif /* _MY_SHMEM_HASH_H_ */
