00001 /* 00002 * Copyright (c) 2004 CSIRO ICT Centre 00003 * 00004 * $Id: IndexedActiveList.h 587 2004-12-03 15:06:33Z nch $ 00005 */ 00006 00007 /* 00008 * IndexedActiveList implements an ActiveList with a data 00009 * structure that is very efficient for: 00010 * - adding objects in order of declination; 00011 * - removing all objects up to a given declination limit; and 00012 * - reporting all objects that fall within a given right 00013 * ascension range. 00014 */ 00015 00016 #ifndef INDEXEDACTIVELIST_DEFINED 00017 #define INDEXEDACTIVELIST_DEFINED 00018 00019 #include "ActiveList.h" 00020 #include "ALStructure.h" 00021 00022 class ActiveObject; 00023 class Object; 00024 class ObjectPairConsumer; 00025 class ObjectConsumer; 00026 00027 00028 class IndexedActiveList : public ActiveList 00029 { 00030 public: 00031 IndexedActiveList(); 00032 virtual ~IndexedActiveList(); 00033 00034 virtual void deletePriorObjects(double boundary, 00035 ObjectConsumer * uActiveCons); 00036 virtual void pushBack(Object const * object, 00037 bool matchedPreviously=false); 00038 virtual bool testObject(Object const * testObject, 00039 double upperLimitOnDistance, 00040 ObjectPairConsumer * matchedConsumer); 00041 virtual void clear(ObjectConsumer * uActiveCons); 00042 virtual void finished(ObjectConsumer * uActiveCons); 00043 virtual bool isEmpty(); 00044 virtual ActiveObject * popFront(); 00045 00046 private: 00047 ALStructure * activeStructure; 00048 double activeMaxSD; 00049 00050 IndexedActiveList(IndexedActiveList const &); 00051 IndexedActiveList & operator=(IndexedActiveList const &); 00052 00053 ALElement * remove(ALElement * i); 00054 }; 00055 00056 #endif // ifndef INDEXEDACTIVELIST_DEFINED 00057