00001
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
00035
00036
00037 data_const_iterator _data_begin;
00038 heap_iterator* _handles_begin;
00039
00040 private:
00041
00042
00043 HeapHandleArray&
00044 operator=( const HeapHandleArray& );
00045
00046 public:
00047
00048
00049
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
00073
00074
00076 heap_iterator
00077 operator()( data_const_iterator h ) const
00078 {
00079 return _handles_begin[ h - _data_begin ];
00080 }
00081
00082
00083
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