00001 /* 00002 SagaEngine library 00003 Copyright (c) 2002-2006 Skalden Studio AS 00004 00005 This software is provided 'as-is', without any express or implied 00006 warranty. In no event will the authors be held liable for any 00007 damages arising from the use of this software. 00008 00009 Permission is granted to distribute the library under the terms of the 00010 Q Public License version 1.0. Be sure to read and understand the license 00011 before using the library. It should be included here, or you may read it 00012 at http://www.trolltech.com/products/qt/licenses/licensing/qpl 00013 00014 The original version of this library can be located at: 00015 http://www.sagaengine.com/ 00016 00017 Rune Myrland 00018 rune@skalden.com 00019 */ 00020 00021 00022 #ifndef CompositeList_hpp 00023 #define CompositeList_hpp 00024 00025 #include "../comp.hpp" 00026 #include "../schema/CompSchema.hpp" 00027 00028 namespace se_core { 00029 00030 class _SeCoreExport CompositeList { 00031 public: 00032 typedef CompSchema::VoidList::iterator_type iterator_type; 00033 class _SeCoreExport Iterator { 00034 public: 00035 Iterator(); 00036 Iterator(const CompositeList& mgo); 00037 void init(const CompositeList& mgo); 00038 void init(short firstNode); 00039 00040 inline bool hasNext() { 00041 return it_ != CompSchema::VoidList::end(); 00042 } 00043 00044 inline Composite& next() { 00045 return *static_cast<Composite*>(CompSchema::voidList.next(it_)); 00046 } 00047 00048 private: 00049 CompSchema::VoidList::iterator_type it_; 00050 }; 00051 00052 00053 class _SeCoreExport TreeIterator { 00054 public: 00055 TreeIterator(); 00056 TreeIterator(const CompositeList& mgo); 00057 void init(const CompositeList& mgo); 00058 00059 bool hasNext(); 00060 Composite& next(); 00061 00062 private: 00063 static const int MAX_STACK_DEPTH = 10; 00064 CompositeList::Iterator itStack_[ MAX_STACK_DEPTH ]; 00065 short stackPointer_; 00066 }; 00067 00068 CompositeList(); 00069 virtual ~CompositeList(); 00070 virtual void add(Composite& value); 00071 void add(CompositeList& msc); 00072 virtual void remove(Composite& value); 00073 void initIterator(CompSchema::VoidList::iterator_type& iterator) const; 00074 inline CompSchema::VoidList::iterator_type iterator() const { return firstNode_; } 00075 bool contains(Composite& value) const; 00076 bool contains(CompositeList& msc) const; 00077 bool sharesAny(CompositeList& msc) const; 00078 bool isEmpty() const; 00079 void destroyMembersAndClear(); 00080 void clear(); 00081 int size() const; 00082 00083 protected: 00084 CompSchema::VoidList::iterator_type firstNode_; 00085 }; 00086 } 00087 00088 #endif
Home Page | SagaEngine trunk (updated nightly) reference generated Sun Dec 2 20:06:10 2007 by Doxygen version 1.3.9.1.