#pragma once
#include "ast/fpa/fpa2bv_converter.h"
#include "ast/converters/model_converter.h"
#include "ast/fpa/bv2fpa_converter.h"
class fpa2bv_model_converter : public model_converter {
ast_manager & m;
bv2fpa_converter * m_bv2fp;
public:
fpa2bv_model_converter(ast_manager & m, fpa2bv_converter & conv):
m(m),
m_bv2fp(alloc(bv2fpa_converter, m, conv)) {
}
~fpa2bv_model_converter() override {
dealloc(m_bv2fp);
}
void operator()(model_ref & md) override {
model_ref new_model = alloc(model, m);
convert(md.get(), new_model.get());
md = new_model;
}
void display(std::ostream & out) override;
model_converter * translate(ast_translation & translator) override;
protected:
fpa2bv_model_converter(ast_manager & m) :
m(m),
m_bv2fp(nullptr) {}
void convert(model_core * mc, model * float_mdl);
};
model_converter * mk_fpa2bv_model_converter(ast_manager & m, fpa2bv_converter & conv);