00001 // -*- C++ -*- 00002 00008 #if !defined(__ads_HeapHandleArray_h__) 00009 #define __ads_HeapHandleArray_h__ 00010 00011 #include "../defs.h" 00012 00013 BEGIN_NAMESPACE_ADS 00014 00016 00021 template <typename DataConstIterator, typename HeapIterator> 00022 class HeapHandleArray 00023 { 00024 public: 00025 00027 typedef DataConstIterator data_const_iterator; 00029 typedef HeapIterator heap_iterator; 00030 00031 private: 00032 00033 // 00034 // Member data 00035 // 00036 00037 data_const_iterator _data_begin; 00038 heap_iterator* _handles_begin; 00039 00040 private: 00041 00042 // Assignment operator not implemented. 00043 HeapHandleArray& 00044 operator=( const HeapHandleArray& ); 00045 00046 public: 00047 00048 // 00049 // Constructors 00050 // 00051 00053 HeapHandleArray() : 00054 _data_begin( 0 ), 00055 _handles_begin( 0 ) 00056 {} 00057 00059 template <class DataArray, class HandleArray> 00060 HeapHandleArray( const DataArray& data, HandleArray& handles ) : 00061 _data_begin( data.begin() ), 00062 _handles_begin( handles.begin() ) 00063 {} 00064 00066 HeapHandleArray( const HeapHandleArray& x ) : 00067 _data_begin( x._data_begin ), 00068 _handles_begin( x._handles_begin ) 00069 {} 00070 00071 // 00072 // Accessors 00073 // 00074 00076 heap_iterator 00077 operator()( data_const_iterator h ) const 00078 { 00079 return _handles_begin[ h - _data_begin ]; 00080 } 00081 00082 // 00083 // Manipulators 00084 // 00085 00087 heap_iterator& 00088 operator()( data_const_iterator h ) 00089 { 00090 return _handles_begin[ h - _data_begin ]; 00091 } 00092 00094 template <class DataArray, class HandleArray> 00095 void 00096 initialize( const DataArray& data, HandleArray& handles ) 00097 { 00098 _data_begin = data.begin(); 00099 _handles_begin = handles.begin(); 00100 } 00101 00102 }; 00103 00104 END_NAMESPACE_ADS 00105 00106 #endif