/* Copyright (C) 1997, 1998, 1999, 2000 by Alex Pfaffe (Digital Dawn Graphics Inc) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _ddgGroup_Class_ #define _ddgGroup_Class_ #include "struct/ddgnode.h" #define LIST_BLOCK_SIZE 10 #define LIST_NOT_MEMBER -1 class WEXP ddgGroup : public ddgNode { typedef ddgNode super; private: static const unsigned long _block; unsigned long _buffer; unsigned long _size; // A list of entities ddgNode **_nodes; public: ddgGroup( ); virtual ~ddgGroup( void ); ddgNode* add( ddgNode* n ); bool remove( ddgNode* n, bool k = false); ddgNode* index( unsigned long n ) const { return ( n>=0 && n <_size) ? _nodes[n] : 0; } long which( ddgNode *n ) const; long size( void ) const { return _size; } bool init (ddgContext *ctx); bool draw( ddgContext *c ); }; class ddgIterator { ddgGroup * _list; long _index; public: ddgIterator( void ) : _list(0) , _index(0) {} ddgIterator( ddgGroup *l ) { _list = l; _index = 0; } void initFirst( ddgGroup * l ) { _list = l; _index = 0; } void initLast ( ddgGroup * l ) { _list = l; _index = _list->size()-1; } ddgNode* operator*( void ) const { return ( _list && (_index < _list->size())) ? _list->index(_index) : 0; } ddgIterator& operator++( void ); ddgIterator& operator++( int ); ddgIterator& operator--( void ); ddgIterator& operator--( int ); }; #endif