#include <string>
#include <iostream>
void game(const std::string& from);
class PathTracker {
std::string m_path;
public:
PathTracker(const std::string& path_, const char* func_)
: m_path(path_)
{
m_path += ">";
m_path += func_;
std::cout << m_path << " +enter+" << std::endl;
}
const std::string path() const { return m_path; }
~PathTracker() { std::cout << m_path << " -return-" << std::endl; }
};
void gameSummary(const std::string& from)
{
PathTracker p(from, "gameSummary");
std::cout << "[game summary]" << std::endl;
}
void isTrue(const std::string& from)
{
PathTracker p(from, "isTrue");
std::cout << "Another game? ";
char answer;
std::cin >> answer;
std::cout << "Got " << answer << std::endl;
if (answer == 'Y' || answer == 'y') {
game(p.path());
}
gameSummary(p.path());
}
void game(const std::string& from)
{
PathTracker p(from, "game");
std::cout << "[get user input]" << std::endl;
isTrue(p.path());
}
int main(int argc, const char* argv[])
{
game("main");
}
CSNpbmNsdWRlIDxzdHJpbmc+CgkjaW5jbHVkZSA8aW9zdHJlYW0+CgoJdm9pZCBnYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBmcm9tKTsKCgljbGFzcyBQYXRoVHJhY2tlciB7CgkJc3RkOjpzdHJpbmcgbV9wYXRoOwoKCXB1YmxpYzoKCQlQYXRoVHJhY2tlcihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aF8sIGNvbnN0IGNoYXIqIGZ1bmNfKQoJCQk6IG1fcGF0aChwYXRoXykKCQkJewoJCQkJbV9wYXRoICs9ICI+IjsKCQkJCW1fcGF0aCArPSBmdW5jXzsKCQkJCXN0ZDo6Y291dCA8PCBtX3BhdGggPDwgIiArZW50ZXIrIiA8PCBzdGQ6OmVuZGw7CgkJCX0KCgkJY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQoKCQl+UGF0aFRyYWNrZXIoKSB7IHN0ZDo6Y291dCA8PCBtX3BhdGggPDwgIiAtcmV0dXJuLSIgPDwgc3RkOjplbmRsOyB9Cgl9OwoKCXZvaWQgZ2FtZVN1bW1hcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGZyb20pCgl7CgkJUGF0aFRyYWNrZXIgcChmcm9tLCAiZ2FtZVN1bW1hcnkiKTsKCQlzdGQ6OmNvdXQgPDwgIltnYW1lIHN1bW1hcnldIiA8PCBzdGQ6OmVuZGw7Cgl9CgoJdm9pZCBpc1RydWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZyb20pCgl7CgkJUGF0aFRyYWNrZXIgcChmcm9tLCAiaXNUcnVlIik7CgkJc3RkOjpjb3V0IDw8ICJBbm90aGVyIGdhbWU/ICI7CgkJY2hhciBhbnN3ZXI7CgkJc3RkOjpjaW4gPj4gYW5zd2VyOwoJCXN0ZDo6Y291dCA8PCAiR290ICIgPDwgYW5zd2VyIDw8IHN0ZDo6ZW5kbDsKCQlpZiAoYW5zd2VyID09ICdZJyB8fCBhbnN3ZXIgPT0gJ3knKSB7CgkJCWdhbWUocC5wYXRoKCkpOwoJCX0KCQlnYW1lU3VtbWFyeShwLnBhdGgoKSk7Cgl9CgoJdm9pZCBnYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBmcm9tKQoJewoJCVBhdGhUcmFja2VyIHAoZnJvbSwgImdhbWUiKTsKCQlzdGQ6OmNvdXQgPDwgIltnZXQgdXNlciBpbnB1dF0iIDw8IHN0ZDo6ZW5kbDsKCQlpc1RydWUocC5wYXRoKCkpOwoJfQoKCWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCgl7CgkJZ2FtZSgibWFpbiIpOwoJfQo=