mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
add char_decl_plugin
This commit is contained in:
parent
20332c6d3e
commit
32058d9c68
6 changed files with 241 additions and 11 deletions
75
src/model/char_factory.h
Normal file
75
src/model/char_factory.h
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*++
|
||||
Copyright (c) 2011 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
char_factory.h
|
||||
|
||||
Author:
|
||||
|
||||
Nikolaj Bjorner (nbjorner) 2011-14-11
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
#pragma once
|
||||
|
||||
#include "util/uint_set.h"
|
||||
#include "ast/char_decl_plugin.h"
|
||||
#include "ast/seq_decl_plugin.h"
|
||||
#include "model/model_core.h"
|
||||
#include "model/value_factory.h"
|
||||
|
||||
class char_factory : public value_factory {
|
||||
model_core& m_model;
|
||||
ast_manager& m;
|
||||
seq_util u;
|
||||
uint_set m_chars;
|
||||
unsigned m_next { 'A' };
|
||||
expr_ref_vector m_trail;
|
||||
|
||||
public:
|
||||
|
||||
char_factory(ast_manager & m, family_id fid, model_core& md):
|
||||
value_factory(m, fid),
|
||||
m_model(md),
|
||||
m(m),
|
||||
u(m),
|
||||
m_trail(m)
|
||||
{
|
||||
}
|
||||
|
||||
expr* get_some_value(sort* s) override {
|
||||
m_chars.insert('a');
|
||||
return u.mk_char('a');
|
||||
}
|
||||
|
||||
bool get_some_values(sort* s, expr_ref& v1, expr_ref& v2) override {
|
||||
v1 = u.mk_char('a');
|
||||
v2 = u.mk_char('b');
|
||||
m_chars.insert('a');
|
||||
m_chars.insert('b');
|
||||
return true;
|
||||
}
|
||||
|
||||
expr* get_fresh_value(sort* s) override {
|
||||
while (m_chars.contains(m_next))
|
||||
++m_next;
|
||||
if (m_next > u.max_char())
|
||||
throw default_exception("Character range exhausted");
|
||||
m_chars.insert(m_next);
|
||||
return u.mk_char(m_next++);
|
||||
}
|
||||
|
||||
void register_value(expr* n) override {
|
||||
unsigned ch;
|
||||
if (u.is_const_char(n, ch))
|
||||
m_chars.insert(ch);
|
||||
}
|
||||
|
||||
void add_trail(expr* e) {
|
||||
m_trail.push_back(e);
|
||||
}
|
||||
|
||||
};
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue