#ifndef __ASCIIK_HH__ #define __ASCIIK_HH__ #include #include "vector.hh" #include "revision.hh" class asciik { public: asciik(std::ostream & os, size_t min_width = 0); // Prints an ASCII-k chunk using the given revisions. // Multiple lines are supported in annotation (the graph will stretch // accordingly); empty newlines at the end will be removed. void print(revision_id const & rev, std::set const & parents, std::string const & annotation); //TODO: change set-of-parents to vector-of-successors private: void links_cross(std::set > const & links, std::set & crosses) const; void draw(size_t const curr_items, size_t const next_items, size_t const curr_loc, std::set > const & links, std::set const & curr_ghosts, std::string const & annotation) const; bool try_draw(std::vector const & next_row, size_t const curr_loc, std::set const & parents, std::string const & annotation) const; // internal state size_t width; std::ostream & output; std::vector curr_row; }; #endif