mirror of
https://github.com/Z3Prover/z3
synced 2025-06-22 05:43:39 +00:00
* na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * dbg Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * bv Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * drat and fresh Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * move ackerman functionality Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * debugability Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * towards debugability Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * missing file Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove csp Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * replay variables created by solver Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove old function Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix scoped-limit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
37 lines
814 B
C++
37 lines
814 B
C++
|
|
#include "util/vector.h"
|
|
|
|
#pragma once
|
|
|
|
class scoped_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_lim.push_back(n);
|
|
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;
|
|
}
|
|
}
|
|
};
|