00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __detectpano_boundedset_h
00022 #define __detectpano_boundedset_h
00023
00024 #include <set>
00025 #include <limits>
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifdef _WIN32
00035 #undef max
00036 #undef min
00037 #endif
00038
00039 namespace lfeat
00040 {
00041
00042 template <typename _Key, typename _Compare = std::less<_Key> >
00043 class bounded_set
00044 {
00045 private:
00046 size_t _maxSize;
00047 std::set< _Key, _Compare> _set;
00048
00049 public:
00050 typedef typename std::set<_Key, _Compare>::iterator iterator;
00051
00052
00053 bounded_set() : _maxSize(std::numeric_limits<size_t>::max()), _set(std::set<_Key, _Compare>()) {}
00054
00055 bounded_set(size_t iMaxSize) : _set(std::set<_Key, _Compare>()), _maxSize (iMaxSize) {}
00056
00058 void setMaxSize(int iMax)
00059 {
00060 _maxSize = iMax;
00061 }
00062
00064 size_t max_size() const
00065 {
00066 return _maxSize;
00067 }
00068
00070 size_t size() const
00071 {
00072 return _set.size();
00073 }
00074
00075 iterator begin()
00076 {
00077 return _set.begin();
00078 }
00079
00080 iterator end()
00081 {
00082 return _set.end();
00083 }
00084
00085
00086
00087
00088
00089
00090 void truncate()
00091 {
00092 while (_set.size() > _maxSize)
00093 {
00094 _set.erase(_set.begin());
00095 }
00096 }
00097
00098
00099
00100 void insert(const _Key& x)
00101 {
00102 _set.insert(x);
00103 truncate();
00104 }
00105
00106 std::set< _Key, _Compare>& getSet()
00107 {
00108 return _set;
00109 }
00110
00111 };
00112
00113 }
00114
00115 #endif // __detectpano_boundedset_h