3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-13 12:28:44 +00:00
z3/src/util/compressed_limit_trail.h
Nikolaj Bjorner 4562c07ceb redo egraph
2020-09-29 13:43:49 -07:00

37 lines
786 B
C++

#include "util/vector.h"
#pragma once
class compressed_limit_trail {
unsigned_vector m_lim;
unsigned m_scopes{ 0 };
unsigned m_last{ 0 };
public:
void push(unsigned n) {
if (m_last == n)
m_scopes++;
else {
for (; m_scopes > 0; --m_scopes)
m_lim.push_back(m_last);
m_last = n;
}
}
unsigned pop(unsigned n) {
SASSERT(n > 0);
SASSERT(m_scopes + m_lim.size() >= n);
if (n <= m_scopes) {
m_scopes -= n;
return m_last;
}
else {
n -= m_scopes;
m_scopes = 0;
m_last = m_lim[m_lim.size() - n];
m_lim.shrink(m_lim.size() - n);
return m_last;
}
}
};