// 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; for (int i = ix_top_line; i < ix_stop_line; ++i) { if (i <= v_lines.size()) { if (i == ix_current_line) cout << '>'; else cout << ' '; cout << std::setw(5) << i+1; if (i < v_lines.size()) cout << " " << v_lines[i]; } cout << '\n'; } } bool Buffer::open(const string & new_file_name) { std::ifstream file(new_file_name); if (!file) return false; v_lines.clear(); // Note: the vector is cleared only after we know the file // opened successfully. string line; while (getline(file, line)) v_lines.push_back(line); file_name = new_file_name; ix_current_line = ix_top_line = 0; 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 : v_lines) file << s << '\n'; return true; }