#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <boost/lexical_cast.hpp>
using namespace std;
struct Journal
{
string title;
vector<string> entries;
explicit Journal(const string& title)
: title{title}
{
}
void add(const string& entry);
// persistence is a separate concern
void save(const string& filename);
};
void Journal::add(const string& entry)
{
static int count = 1;
entries.push_back(boost::lexical_cast<string>(count++)
+ ": " + entry);
}
void Journal::save(const string& filename)
{
ofstream ofs(filename);
for (auto& s : entries)
ofs << s << endl;
}
struct PersistenceManager
{
static void save(const Journal& j, const string& filename)
{
ofstream ofs(filename);
for (auto& s : j.entries)
{
ofs << s << endl;
std::cout << s << endl;
}
}
};
int main()
{
Journal journal{"Dear Diary"};
journal.add("I ate a bug");
journal.add("I cried today");
//journal.save("diary.txt");
PersistenceManager pm;
pm.save(journal, "diary.txt");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGJvb3N0L2xleGljYWxfY2FzdC5ocHA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgSm91cm5hbAp7CiAgc3RyaW5nIHRpdGxlOwogIHZlY3RvcjxzdHJpbmc+IGVudHJpZXM7CgogIGV4cGxpY2l0IEpvdXJuYWwoY29uc3Qgc3RyaW5nJiB0aXRsZSkKICAgIDogdGl0bGV7dGl0bGV9CiAgewogIH0KCiAgdm9pZCBhZGQoY29uc3Qgc3RyaW5nJiBlbnRyeSk7CgogIC8vIHBlcnNpc3RlbmNlIGlzIGEgc2VwYXJhdGUgY29uY2VybgogIHZvaWQgc2F2ZShjb25zdCBzdHJpbmcmIGZpbGVuYW1lKTsKfTsKCnZvaWQgSm91cm5hbDo6YWRkKGNvbnN0IHN0cmluZyYgZW50cnkpCnsKICBzdGF0aWMgaW50IGNvdW50ID0gMTsKICBlbnRyaWVzLnB1c2hfYmFjayhib29zdDo6bGV4aWNhbF9jYXN0PHN0cmluZz4oY291bnQrKykKICAgICsgIjogIiArIGVudHJ5KTsKfQoKdm9pZCBKb3VybmFsOjpzYXZlKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpCnsKICBvZnN0cmVhbSBvZnMoZmlsZW5hbWUpOwogIGZvciAoYXV0byYgcyA6IGVudHJpZXMpCiAgICBvZnMgPDwgcyA8PCBlbmRsOwp9CgpzdHJ1Y3QgUGVyc2lzdGVuY2VNYW5hZ2VyCnsKICBzdGF0aWMgdm9pZCBzYXZlKGNvbnN0IEpvdXJuYWwmIGosIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpCiAgewogICAgb2ZzdHJlYW0gb2ZzKGZpbGVuYW1lKTsKICAgIGZvciAoYXV0byYgcyA6IGouZW50cmllcykKICAgIHsKICAgICAgb2ZzIDw8IHMgPDwgZW5kbDsKICAgICAgc3RkOjpjb3V0IDw8IHMgPDwgZW5kbDsKICAgIH0KICB9Cn07CgppbnQgbWFpbigpCnsKICBKb3VybmFsIGpvdXJuYWx7IkRlYXIgRGlhcnkifTsKICBqb3VybmFsLmFkZCgiSSBhdGUgYSBidWciKTsKICBqb3VybmFsLmFkZCgiSSBjcmllZCB0b2RheSIpOwoKICAvL2pvdXJuYWwuc2F2ZSgiZGlhcnkudHh0Iik7CgogIFBlcnNpc3RlbmNlTWFuYWdlciBwbTsKICBwbS5zYXZlKGpvdXJuYWwsICJkaWFyeS50eHQiKTsKICAKICByZXR1cm4gMDsKfQ==