Disallow unlimited limited maps
This commit is contained in:
parent
fd2d862fbc
commit
8b06894194
1 changed files with 11 additions and 8 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue