Disallow unlimited limited maps

This commit is contained in:
Casey Rodarmor 2015-08-17 12:06:45 -04:00
parent fd2d862fbc
commit 8b06894194

View file

@ -27,7 +27,11 @@ protected:
size_type nMaxSize; size_type nMaxSize;
public: public:
limitedmap(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; } limitedmap(size_type nMaxSizeIn)
{
assert(nMaxSizeIn > 0);
nMaxSize = nMaxSizeIn;
}
const_iterator begin() const { return map.begin(); } const_iterator begin() const { return map.begin(); }
const_iterator end() const { return map.end(); } const_iterator end() const { return map.end(); }
size_type size() const { return map.size(); } size_type size() const { return map.size(); }
@ -38,13 +42,12 @@ public:
{ {
std::pair<iterator, bool> ret = map.insert(x); std::pair<iterator, bool> ret = map.insert(x);
if (ret.second) { if (ret.second) {
if (nMaxSize && map.size() > nMaxSize) { if (map.size() > nMaxSize) {
map.erase(rmap.begin()->second); map.erase(rmap.begin()->second);
rmap.erase(rmap.begin()); rmap.erase(rmap.begin());
} }
rmap.insert(make_pair(x.second, ret.first)); rmap.insert(make_pair(x.second, ret.first));
} }
return;
} }
void erase(const key_type& k) void erase(const key_type& k)
{ {
@ -81,11 +84,11 @@ public:
size_type max_size() const { return nMaxSize; } size_type max_size() const { return nMaxSize; }
size_type max_size(size_type s) size_type max_size(size_type s)
{ {
if (s) assert(s > 0);
while (map.size() > s) { while (map.size() > s) {
map.erase(rmap.begin()->second); map.erase(rmap.begin()->second);
rmap.erase(rmap.begin()); rmap.erase(rmap.begin());
} }
nMaxSize = s; nMaxSize = s;
return nMaxSize; return nMaxSize;
} }