blob: 43074a74c8f2d7f196091d2cecad61222881327f [file] [log] [blame]
/*
* Fstruct.h
*
* The author of this software is Alain K\"{a}gi.
*
* Copyright (c) 1993 by Alain K\"{a}gi and the University of Wisconsin
* Board of Trustees.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose without fee is hereby granted, provided that this entire notice
* is included in all copies of any software which is or includes a copy
* or modification of this software and in all copies of the supporting
* documentation for such software.
*
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR THE UNIVERSITY OF
* WISCONSIN MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING
* THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
* PURPOSE.
*
* ------------------------------------------------------------------------
*
* This is an implementation of an algorithm described in the paper:
*
* , by Michael L. Fredman and Robert Endre Tarjan, in
* Journal of Association for Computing Machinery, Vol. 34, No. 3,
* July 1987, Pages 596-615.
*
* The algorithm is theirs. Any discrepancy between the algorithm
* description which appears in the paper and this implementation is
* a consequence of my misunderstanding of their intent.
*
* ------------------------------------------------------------------------
*
* $Id$
*
*/
#ifndef _fstruct_h
#define _fstruct_h
#define ITEM(P) ((*(P)).item)
#define PARENT(P) ((*(P)).parent)
#define CHILD(P) ((*(P)).child)
#define FORWARD(P) ((*(P)).forward)
#define BACKWARD(P) ((*(P)).backward)
#define RANK(P) ((*(P)).rank)
#define MARKED(P) ((*(P)).marked)
#define ORPHAN(P) (PARENT(P) == NULL_HEAP)
#define ONLY_CHILD(P) ((P) == FORWARD(P))
#define PARENT_OF(P, C) (CHILD(P) == (C))
#define TRUE 1
#define FALSE 0
#define MAX_RANK 10000
#endif