#ifndef __glubin_h_ #define __glubin_h_ /************************************************************************** * * * Copyright (C) 1992, Silicon Graphics, Inc. * * * * These coded instructions, statements, and computer programs contain * * unpublished proprietary information of Silicon Graphics, Inc., and * * are protected by Federal copyright law. They may not be disclosed * * to third parties or copied or duplicated in any form, in whole or * * in part, without the prior written consent of Silicon Graphics, Inc. * * * **************************************************************************/ /* * bin.h - $Revision: 1.2 $ */ #include "myassert.h" #include "arc.h" #include "defines.h" #ifdef NT class Bin { /* a linked list of jordan arcs */ #else struct Bin { /* a linked list of jordan arcs */ #endif private: Arc * head; /* first arc on list */ Arc * current; /* current arc on list */ public: Bin(); ~Bin(); inline Arc * firstarc( void ); inline Arc * nextarc( void ); inline Arc * removearc( void ); inline int isnonempty( void ) { return (head ? 1 : 0); } inline void addarc( Arc * ); void remove_this_arc( Arc * ); int numarcs( void ); void adopt( void ); void markall( void ); void show( char * ); void listBezier( void ); }; /*---------------------------------------------------------------------------- * Bin::addarc - add an Arc * to head of linked list of Arc *s *---------------------------------------------------------------------------- */ inline void Bin::addarc( Arc *jarc ) { jarc->link = head; head = jarc; } /*---------------------------------------------------------------------------- * Bin::removearc - remove first Arc * from bin *---------------------------------------------------------------------------- */ inline Arc * Bin::removearc( void ) { Arc * jarc = head; if( jarc ) head = jarc->link; return jarc; } /*---------------------------------------------------------------------------- * BinIter::nextarc - return current arc in bin and advance pointer to next arc *---------------------------------------------------------------------------- */ inline Arc * Bin::nextarc( void ) { Arc * jarc = current; #ifdef DEBUG assert( jarc->check() != 0 ); #endif if( jarc ) current = jarc->link; return jarc; } /*---------------------------------------------------------------------------- * BinIter::firstarc - set current arc to first arc of bin advance to next arc *---------------------------------------------------------------------------- */ inline Arc * Bin::firstarc( void ) { current = head; return nextarc( ); } #endif /* __glubin_h_ */