/* 
 * idmap_internal.h
 *
 * x-kernel v3.3
 *
 * Copyright (c) 1993,1991,1990,1996  Arizona Board of Regents
 *
 * $Revision: 1.2 $
 * $Date: 1996/01/29 20:03:17 $
 */
#ifndef idmap_internal_h
#define idmap_internal_h

/*
 * These should go into platform.h:
 */
#define XK_ALIGNED(a,t) (((unsigned long)(a) & (sizeof(t) - 1)) == 0)
#ifdef __PREDICTIONS__
# define PREDICT_FALSE	@0
# define PREDICT_TRUE	@1
#else
# define PREDICT_FALSE
# define PREDICT_TRUE
#endif


#define FIXED_MAP_ELEMENT_SIZE(key_size) \
  ((long)&(((MapElement*)0)->u.fixed.key) + (key_size))

#define VAR_MAP_ELEMENT_SIZE(key_size) \
  ((long)&(((MapElement*)0)->u.var.key) + (key_size))

#define	GETMAPELEM(m, el) \
{ \
    (el) = (m)->freelist; \
    if (!(el)) { \
	(el) = (MapElement*) xMalloc(FIXED_MAP_ELEMENT_SIZE((m)->key_size)); \
    } else { \
        (m)->freelist = (el)->next; \
    } /* if */ \
}

#define	FREEIT(m, el) { \
    (el)->next = (m)->freelist; \
    (m)->freelist = (el); \
}

#define	GETVARMAPELEM(m, el, key_size) \
{ \
    (el) = (m)->freelist; \
    if (!el) { \
	(el) = (MapElement*) xMalloc(VAR_MAP_ELEMENT_SIZE(key_size)); \
    } else { \
        (m)->freelist = (el)->next; \
    } /* if */ \
}

#define	FREEVARMAPELEM(m, el)	xFree((char *)el)

#endif /* idmap_internal_h */
