1
1
openmpi/ompi/mca/coll/libnbc/dict.h
Torsten Hoefler 6b22641669 added LibNBC (http://www.unixer.de/NBC) as collv1 (blocking) component.
I know it does not make much sense but one can play around with the
performance. Numbers are available at http://www.unixer.de/research/nbcoll/perf/.
This is the first step towards collv2. Next step includes the addition
of non-blocking functions to the MPI-Layer and the collv1 interface.

It implements all MPI-1 collective algorithms in a non-blocking manner.
However, the collv1 interface does not allow non-blocking collectives so
that all collectives are used blocking by the ompi-glue layer.

I wanted to add LibNBC as a separate subdirectory, but I could not
convince the buildsystem (and had not the time). So the component looks
pretty messy. It would be great if somebody could explain me how to move
all nbc*{c,h}, and {hb,dict}*{c,h} to a seperate subdirectory.

It's .ompi_ignored because I did not test it exhaustively yet.

This commit was SVN r11401.
2006-08-24 16:47:18 +00:00

141 строка
4.6 KiB
C

/*
* dict.h
*
* Interface for generic access to dictionary library.
* Copyright (C) 2001-2004 Farooq Mela.
*
* $Id: dict.h,v 1.6 2001/11/14 05:21:10 farooq Exp farooq $
*/
#ifndef _DICT_H_
#define _DICT_H_
#include <stddef.h>
#define DICT_VERSION_MAJOR 0
#define DICT_VERSION_MINOR 2
#define DICT_VERSION_PATCH 1
#ifndef __P
# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) || \
defined(_MSC_VER)
# define __P(x) x
# else /* !__STDC__ && !__cplusplus && !c_plusplus && !_MSC_VER */
# define __P(x)
# endif
#endif /* !__P */
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
#if defined(__cplusplus) || defined(c_plusplus)
# define BEGIN_DECL extern "C" {
# define END_DECL }
#else
# define BEGIN_DECL
# define END_DECL
#endif
BEGIN_DECL
typedef void *(*dict_malloc_func)(size_t);
typedef void (*dict_free_func)(void *);
dict_malloc_func dict_set_malloc __P((dict_malloc_func func));
dict_free_func dict_set_free __P((dict_free_func func));
typedef int (*dict_cmp_func) __P((const void *, const void *));
typedef void (*dict_del_func) __P((void *));
typedef int (*dict_vis_func) __P((const void *, void *));
typedef unsigned (*dict_hsh_func) __P((const void *));
typedef struct dict dict;
typedef struct dict_itor dict_itor;
struct dict {
void *_object;
int (*_insert) __P((void *obj, void *k, void *d, int ow));
int (*_probe) __P((void *obj, void *key, void **dat));
void *(*_search) __P((void *obj, const void *k));
const void *(*_csearch) __P((const void *obj, const void *k));
int (*_remove) __P((void *obj, const void *key, int del));
void (*_walk) __P((void *obj, dict_vis_func func));
unsigned (*_count) __P((const void *obj));
void (*_empty) __P((void *obj, int del));
void (*_destroy) __P((void *obj, int del));
dict_itor *(*_inew) __P((void *obj));
};
#define dict_private(dct) (dct)->_object
#define dict_insert(dct,k,d,o) (dct)->_insert((dct)->_object, (k), (d), (o))
#define dict_probe(dct,k,d) (dct)->_probe((dct)->_object, (k), (d))
#define dict_search(dct,k) (dct)->_search((dct)->_object, (k))
#define dict_csearch(dct,k) (dct)->_csearch((dct)->_object, (k))
#define dict_remove(dct,k,del) (dct)->_remove((dct)->_object, (k), (del))
#define dict_walk(dct,f) (dct)->_walk((dct)->_object, (f))
#define dict_count(dct) (dct)->_count((dct)->_object)
#define dict_empty(dct,d) (dct)->_empty((dct)->_object, (d))
void dict_destroy __P((dict *dct, int del));
#define dict_itor_new(dct) (dct)->_inew((dct)->_object)
struct dict_itor {
void *_itor;
int (*_valid) __P((const void *itor));
void (*_invalid) __P((void *itor));
int (*_next) __P((void *itor));
int (*_prev) __P((void *itor));
int (*_nextn) __P((void *itor, unsigned count));
int (*_prevn) __P((void *itor, unsigned count));
int (*_first) __P((void *itor));
int (*_last) __P((void *itor));
int (*_search) __P((void *itor, const void *key));
const void *(*_key) __P((void *itor));
void *(*_data) __P((void *itor));
const void *(*_cdata) __P((const void *itor));
int (*_setdata) __P((void *itor, void *dat, int del));
int (*_remove) __P((void *itor, int del));
int (*_compare) __P((void *itor1, void *itor2));
void (*_destroy) __P((void *itor));
};
#define dict_itor_private(i) (i)->_itor
#define dict_itor_valid(i) (i)->_valid((i)->_itor)
#define dict_itor_invalidate(i) (i)->_invalid((i)->_itor)
#define dict_itor_next(i) (i)->_next((i)->_itor)
#define dict_itor_prev(i) (i)->_prev((i)->_itor)
#define dict_itor_nextn(i,n) (i)->_nextn((i)->_itor, (n))
#define dict_itor_prevn(i,n) (i)->_prevn((i)->_itor, (n))
#define dict_itor_first(i) (i)->_first((i)->_itor)
#define dict_itor_last(i) (i)->_last((i)->_itor)
#define dict_itor_search(i,k) (i)->_search((i)->_itor, (k))
#define dict_itor_key(i) (i)->_key((i)->_itor)
#define dict_itor_data(i) (i)->_data((i)->_itor)
#define dict_itor_cdata(i) (i)->_cdata((i)->_itor)
#define dict_itor_set_data(i,dat,d) (i)->_setdata((i)->_itor, (dat), (d))
#define dict_itor_remove(i) (i)->_remove((i)->_itor)
void dict_itor_destroy __P((dict_itor *itor));
int dict_int_cmp __P((const void *k1, const void *k2));
int dict_uint_cmp __P((const void *k1, const void *k2));
int dict_long_cmp __P((const void *k1, const void *k2));
int dict_ulong_cmp __P((const void *k1, const void *k2));
int dict_ptr_cmp __P((const void *k1, const void *k2));
int dict_str_cmp __P((const void *k1, const void *k2));
END_DECL
/*#include "hashtable.h"*/
#include "hb_tree.h"
/*#include "pr_tree.h"
#include "rb_tree.h"
#include "sp_tree.h"
#include "tr_tree.h"
#include "wb_tree.h"*/
#endif /* !_DICT_H_ */