z3-z3-4.13.0.src.smt.spanning_tree_base.h Maven / Gradle / Ivy
The newest version!
/*++
Copyright (c) 2013 Microsoft Corporation
Module Name:
spanning_tree_base.h
Abstract:
Represent spanning trees with needed operations for Network Simplex
Author:
Anh-Dung Phan (t-anphan) 2013-11-06
Notes:
--*/
#pragma once
#include "util/util.h"
#include "util/vector.h"
namespace smt {
template
inline std::string pp_vector(std::string const & label, TV v) {
std::ostringstream oss;
oss << label << " ";
for (unsigned i = 0; i < v.size(); ++i) {
oss << v[i] << " ";
}
oss << std::endl;
return oss.str();
}
class spanning_tree_base {
public:
typedef int node_id;
typedef int edge_id;
virtual void initialize(svector const & tree) = 0;
virtual void get_descendants(node_id start, svector & descendants) = 0;
virtual void update(edge_id enter_id, edge_id leave_id) = 0;
virtual void get_path(node_id start, node_id end, svector & path, bool_vector & against) = 0;
virtual bool in_subtree_t2(node_id child) = 0;
virtual bool check_well_formed() = 0;
};
}