3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-22 05:43:39 +00:00
z3/src/util/scoped_limit_trail.h
Nikolaj Bjorner 7327023c88
add variable replay, remove MacOS from Travis (#4681)
* 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>
2020-09-08 05:57:07 -07:00

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;
}
}
};