feat(util/sexpr/format): expose flatten

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2014-08-23 12:00:32 -07:00
parent e602c4ba49
commit 01736bf82a
3 changed files with 12 additions and 4 deletions

View file

@ -120,6 +120,13 @@ static void tst5() {
std::cout << "{" << format() << "}" << "\n"; std::cout << "{" << format() << "}" << "\n";
} }
static void tst6() {
format r = (format("test") ^ format("hello")) + line() + format("world");
std::cout << "test6\n";
std::cout << r << "\n";
std::cout << flatten(r) << "\n";
}
int main() { int main() {
save_stack_info(); save_stack_info();
tst1(); tst1();
@ -127,5 +134,6 @@ int main() {
tst3(); tst3();
tst4(); tst4();
tst5(); tst5();
tst6();
return has_violations() ? 1 : 0; return has_violations() ? 1 : 0;
} }

View file

@ -152,12 +152,12 @@ sexpr format::flatten(sexpr const & s) {
} }
lean_unreachable(); // LCOV_EXCL_LINE lean_unreachable(); // LCOV_EXCL_LINE
} }
format format::flatten(format const & f){ format flatten(format const & f){
return format(flatten(f.m_value)); return format(format::flatten(f.m_value));
} }
format group(format const & f) { format group(format const & f) {
get_g_diff_flatten() = false; get_g_diff_flatten() = false;
format flat_f = format::flatten(f); format flat_f = flatten(f);
if (get_g_diff_flatten()) { if (get_g_diff_flatten()) {
return choice(flat_f, f); return choice(flat_f, f);
} else { } else {

View file

@ -41,7 +41,6 @@ public:
private: private:
sexpr m_value; sexpr m_value;
static sexpr flatten(sexpr const & s); static sexpr flatten(sexpr const & s);
static format flatten(format const & f);
// Functions for the internal sexpr representation // Functions for the internal sexpr representation
static inline format_kind sexpr_kind(sexpr const & s) { static inline format_kind sexpr_kind(sexpr const & s) {
@ -196,6 +195,7 @@ public:
friend format above(format const & f1, format const & f2); friend format above(format const & f1, format const & f2);
friend format bracket(std::string const & l, format const & x, std::string const & r); friend format bracket(std::string const & l, format const & x, std::string const & r);
friend format wrap(format const & f1, format const & f2); friend format wrap(format const & f1, format const & f2);
friend format flatten(format const & f);
// x + y = x <> y // x + y = x <> y
friend format operator+(format const & f1, format const & f2); friend format operator+(format const & f1, format const & f2);