// Buffer.cpp #include "Buffer.h" #include #include #include using std::cout; #include using std::string; void Buffer::display() const { int ix_stop_line = ix_top_line + window_height; auto itr = itr_top_line; for (int i = ix_top_line; i < ix_stop_line; ++i) { if (i <= ls_lines.size()) { if (i == ix_current_line) cout << '>'; else cout << ' '; cout << std::setw(5) << i+1; if (i < ls_lines.size()) { cout << " " << *itr; ++itr; } } cout << '\n'; } } bool Buffer::open(const string & new_file_name) { std::ifstream file(new_file_name); if (!file) return false; ls_lines.clear(); // Note: the list is cleared only after we know the file // opened successfully. string line; while (getline(file, line)) ls_lines.push_back(line); file_name = new_file_name; ix_current_line = ix_top_line = 0; itr_current_line = itr_top_line = ls_lines.begin(); return true; } bool Buffer::save(const string & new_file_name) { std::ofstream file(new_file_name); if (!file) return false; file_name = new_file_name; for (const string & s : ls_lines) file << s << '\n'; return true; }