No longer using namespace std by default

This commit is contained in:
Andrew S. Rightenburg 2023-10-05 11:27:39 +08:00
parent cb930f9f34
commit 3a55d5e218
Signed by: rail5
GPG Key ID: A0CB570AB6629159
4 changed files with 103 additions and 111 deletions

View File

@ -8,11 +8,9 @@
#include <sys/file.h>
#endif
using namespace std;
bool editor::file::set_file(string file_path) {
bool editor::file::set_file(std::string file_path) {
/***
bool set_file(string file_path):
bool set_file(std::string file_path):
Initialize the file object
Returns true if the file object is successfully initialized
@ -22,7 +20,7 @@ bool editor::file::set_file(string file_path) {
/*
Verify that the directory that the file is supposed to be in actually exists
*/
string directory = isolate_path_from_filename(file_path);
std::string directory = isolate_path_from_filename(file_path);
file_name = file_path;
file_directory = directory;
@ -40,7 +38,7 @@ bool editor::file::set_file(string file_path) {
Create the file if it doesn't already exist
*/
if (!file_exists(file_name)) {
ofstream new_file(file_name);
std::ofstream new_file(file_name);
new_file.close();
/*
@ -67,12 +65,12 @@ bool editor::file::set_file(string file_path) {
Initialize the file stream, set a POSIX file lock, and set file_length
*/
file_stream = fstream(file_name, ios::binary | ios::out | ios::in);
file_stream = std::fstream(file_name, std::ios::binary | std::ios::out | std::ios::in);
/*
Obtain file_descriptor in order to lock the file
Unfortunately, the only portable way to do this is to open a SECOND file stream with the C-type FILE*
rather than continuing with our luxury C++ fstream
rather than continuing with our luxury C++ std::fstream
This FILE* will never be used, except to get the file descriptor so that we can lock the file during editing
*/
c_type_file = fopen64(file_name.c_str(), "a+");
@ -84,7 +82,7 @@ bool editor::file::set_file(string file_path) {
return initialized;
}
file_length = filesystem::file_size(file_path);
file_length = std::filesystem::file_size(file_path);
file_length_after_last_instruction = file_length;
/*
@ -98,7 +96,7 @@ bool editor::file::set_file(string file_path) {
error_message = "";
if (verbose) {
cout << "Set file to " << file_path << endl;
std::cout << "Set file to " << file_path << std::endl;
}
/*
@ -217,11 +215,11 @@ bool editor::file::is_initialized() {
return initialized;
}
string editor::file::get_file_name() {
std::string editor::file::get_file_name() {
return file_name;
}
string editor::file::get_file_directory() {
std::string editor::file::get_file_directory() {
return file_directory;
}
@ -233,17 +231,17 @@ int64_t editor::file::get_file_length() {
return file_length;
}
vector<editor::instruction> editor::file::get_instruction_set() {
std::vector<editor::instruction> editor::file::get_instruction_set() {
return instruction_set;
}
string editor::file::get_error_message() {
std::string editor::file::get_error_message() {
return error_message;
}
void editor::file::replace(int64_t start_position, string replacement_text) {
void editor::file::replace(int64_t start_position, std::string replacement_text) {
/***
void editor::file::replace(int64_t start_position, string replacement_text):
void editor::file::replace(int64_t start_position, std::string replacement_text):
Execute a "REPLACE" instruction
Opens a file stream & replaces text inside the file, starting from start_position, with replacement_text
***/
@ -253,7 +251,7 @@ void editor::file::replace(int64_t start_position, string replacement_text) {
}
// Seek to start_position
file_stream.seekp(start_position, ios::beg);
file_stream.seekp(start_position, std::ios::beg);
// Replace
file_stream.write(replacement_text.c_str(), replacement_text.length());
@ -262,13 +260,13 @@ void editor::file::replace(int64_t start_position, string replacement_text) {
fflush(c_type_file);
if (verbose) {
cout << "Executed REPLACE instruction (" << start_position << ", " << replacement_text << ")" << endl;
std::cout << "Executed REPLACE instruction (" << start_position << ", " << replacement_text << ")" << std::endl;
}
}
void editor::file::insert(int64_t start_position, string text_to_insert) {
void editor::file::insert(int64_t start_position, std::string text_to_insert) {
/***
void editor::file::insert(int64_t start_position, string text_to_insert):
void editor::file::insert(int64_t start_position, std::string text_to_insert):
Execute an "INSERT" instruction
Opens a file stream & inserts text_to_insert into the file at position start_position, without replacing
***/
@ -290,7 +288,7 @@ void editor::file::insert(int64_t start_position, string text_to_insert) {
// Writing TO EOF
// Seek to EOF
file_stream.seekp(start_position, ios::beg);
file_stream.seekp(start_position, std::ios::beg);
// Insert
file_stream.write(text_to_insert.c_str(), text_to_insert.length());
@ -301,7 +299,7 @@ void editor::file::insert(int64_t start_position, string text_to_insert) {
}
// Add a newline char
file_stream.seekp(new_file_length - 1, ios::beg);
file_stream.seekp(new_file_length - 1, std::ios::beg);
file_stream.write("\n", 1);
// Flush changes
@ -312,7 +310,7 @@ void editor::file::insert(int64_t start_position, string text_to_insert) {
file_length = new_file_length;
if (verbose) {
cout << "Executed INSERT instruction (" << start_position << ", " << text_to_insert << ")" << endl;
std::cout << "Executed INSERT instruction (" << start_position << ", " << text_to_insert << ")" << std::endl;
}
return;
@ -326,11 +324,11 @@ void editor::file::insert(int64_t start_position, string text_to_insert) {
ftruncate(file_descriptor, new_file_length);
if (verbose) {
cout << "Adjusted file length to " << new_file_length << endl;
std::cout << "Adjusted file length to " << new_file_length << std::endl;
}
// Add a newline char
file_stream.seekp(new_file_length - 1, ios::beg);
file_stream.seekp(new_file_length - 1, std::ios::beg);
file_stream.write("\n", 1);
for (int64_t i = (new_file_length - 1); i > start_position; i = (i - amount_to_store)) {
@ -362,25 +360,25 @@ void editor::file::insert(int64_t start_position, string text_to_insert) {
char* temp_data_storage = new char[amount_to_store + 1]{0}; // Allocate memory
// Store read portion into allocated memory
file_stream.seekg(copy_from_this_position, ios::beg);
file_stream.seekg(copy_from_this_position, std::ios::beg);
file_stream.read(temp_data_storage, amount_to_store);
// Add a NUL char to the end to terminate the string
temp_data_storage[amount_to_store] = 0;
// Copy it to its new proper place
file_stream.seekp(copy_to_this_position, ios::beg);
file_stream.seekp(copy_to_this_position, std::ios::beg);
file_stream.write(temp_data_storage, amount_to_store);
delete[] temp_data_storage; // Free memory
if (verbose) {
cout << "Moved " << amount_to_store << " bytes to position #" << copy_to_this_position << " for INSERT instruction" << endl;
std::cout << "Moved " << amount_to_store << " bytes to position #" << copy_to_this_position << " for INSERT instruction" << std::endl;
}
}
// Now, finally, insert the damn data (user inputted data)
file_stream.seekp(start_position, ios::beg);
file_stream.seekp(start_position, std::ios::beg);
file_stream.write(text_to_insert.c_str(), text_to_insert.length());
// Flush changes
@ -391,7 +389,7 @@ void editor::file::insert(int64_t start_position, string text_to_insert) {
file_length = new_file_length;
if (verbose) {
cout << "Executed INSERT instruction (" << start_position << ", " << text_to_insert << ")" << endl;
std::cout << "Executed INSERT instruction (" << start_position << ", " << text_to_insert << ")" << std::endl;
}
}
@ -421,7 +419,7 @@ void editor::file::remove(int64_t start_position, int64_t end_position) {
ftruncate(file_descriptor, new_file_length);
// Add a newline char
file_stream.seekp(new_file_length - 1, ios::beg);
file_stream.seekp(new_file_length - 1, std::ios::beg);
file_stream.write("\n", 1);
// Flush changes
@ -432,7 +430,7 @@ void editor::file::remove(int64_t start_position, int64_t end_position) {
file_length = new_file_length;
if (verbose) {
cout << "Executed REMOVE instruction (" << start_position << ", " << end_position << ")" << endl;
std::cout << "Executed REMOVE instruction (" << start_position << ", " << end_position << ")" << std::endl;
}
return;
@ -455,20 +453,20 @@ void editor::file::remove(int64_t start_position, int64_t end_position) {
char* temp_data_storage = new char[amount_to_store + 1]{0}; // Allocate memory
// Store read portion into allocated memory
file_stream.seekg(copy_from_this_position, ios::beg);
file_stream.seekg(copy_from_this_position, std::ios::beg);
file_stream.read(temp_data_storage, amount_to_store);
// Add a NUL char to the end to terminate the string
temp_data_storage[amount_to_store] = 0;
// Copy it to its new proper place
file_stream.seekp(copy_to_this_position, ios::beg);
file_stream.seekp(copy_to_this_position, std::ios::beg);
file_stream.write(temp_data_storage, amount_to_store);
delete[] temp_data_storage; // Free memory
if (verbose) {
cout << "Moved " << amount_to_store << " bytes to position #" << copy_to_this_position << " for REMOVE instruction" << endl;
std::cout << "Moved " << amount_to_store << " bytes to position #" << copy_to_this_position << " for REMOVE instruction" << std::endl;
}
}
@ -476,7 +474,7 @@ void editor::file::remove(int64_t start_position, int64_t end_position) {
ftruncate(file_descriptor, new_file_length);
// Add a newline char
file_stream.seekp(new_file_length - 1, ios::beg);
file_stream.seekp(new_file_length - 1, std::ios::beg);
file_stream.write("\n", 1);
// Flush changes
@ -487,7 +485,7 @@ void editor::file::remove(int64_t start_position, int64_t end_position) {
file_length = new_file_length;
if (verbose) {
cout << "Executed REMOVE instruction (" << start_position << ", " << end_position << ")" << endl;
std::cout << "Executed REMOVE instruction (" << start_position << ", " << end_position << ")" << std::endl;
}
}
@ -512,7 +510,7 @@ bool editor::file::execute_single_instruction(instruction instruction_to_execute
}
void editor::file::close() {
/* Close the fstream */
/* Close the std::fstream */
file_stream.close();
/* Close the C-type FILE* */
fclose(c_type_file);
@ -521,7 +519,7 @@ void editor::file::close() {
}
editor::file::file(string path, int blocksize, bool verbose_mode) {
editor::file::file(std::string path, int blocksize, bool verbose_mode) {
block_size = blocksize;
verbose = verbose_mode;
set_file(path);

View File

@ -1,5 +1,3 @@
using namespace std;
void editor::instruction::clear_instruction() {
/***
void clear_instruction():
@ -28,7 +26,7 @@ void editor::instruction::process_special_chars() {
}
bool editor::instruction::set_replace_instruction(int64_t start, string text) {
bool editor::instruction::set_replace_instruction(int64_t start, std::string text) {
/***
bool set_replace_instruction():
- Sets the current instruction to type "replace"
@ -66,7 +64,7 @@ bool editor::instruction::set_replace_instruction(int64_t start, string text) {
return true;
}
bool editor::instruction::set_insert_instruction(int64_t start, string text) {
bool editor::instruction::set_insert_instruction(int64_t start, std::string text) {
/***
bool set_insert_instruction():
- Sets the current instruction to type "insert"
@ -149,16 +147,16 @@ bool editor::instruction::set_remove_instruction(int64_t start, int64_t end) {
return true;
}
void editor::instruction::set_error_message(string message) {
void editor::instruction::set_error_message(std::string message) {
/***
void set_error_message(string message):
void set_error_message(std::string message):
Set the instruction's "error_message" to the inputted string
***/
error_message = message;
}
string editor::instruction::get_error_message() {
std::string editor::instruction::get_error_message() {
return error_message;
}
@ -186,11 +184,11 @@ int64_t editor::instruction::get_end_position() {
return end_position;
}
string editor::instruction::get_text() {
std::string editor::instruction::get_text() {
return text_input;
}
editor::instruction create_replace_instruction(int64_t start_position, string text) {
editor::instruction create_replace_instruction(int64_t start_position, std::string text) {
editor::instruction new_instruction;
new_instruction.set_replace_instruction(start_position, text);
@ -198,7 +196,7 @@ editor::instruction create_replace_instruction(int64_t start_position, string te
return new_instruction;
}
editor::instruction create_insert_instruction(int64_t start_position, string text) {
editor::instruction create_insert_instruction(int64_t start_position, std::string text) {
editor::instruction new_instruction;
new_instruction.set_insert_instruction(start_position, text);
@ -215,12 +213,12 @@ editor::instruction create_remove_instruction(int64_t start_position, int end_po
}
editor::instruction parse_instruction_string(string instruction_string) {
editor::instruction parse_instruction_string(std::string instruction_string) {
/*
instruction parse_instruction_string(string instruction_string):
instruction parse_instruction_string(std::string instruction_string):
Create an 'instruction' object from a properly-formatted string
The string must be formatted in one of the following ways:
The std::string must be formatted in one of the following ways:
1.
REPLACE 5 hello
(
@ -252,12 +250,12 @@ editor::instruction parse_instruction_string(string instruction_string) {
New file:
0123456123
)
That is, the string must be formatted with these rules:
That is, the std::string must be formatted with these rules:
- Space-delimited
- The first key is the instruction name (REPLACE, INSERT, or REMOVE)
- The second key is the start position
- The third key is either:
- A string (in the case of REPLACE or INSERT)
- A std::string (in the case of REPLACE or INSERT)
- The end position (in the case of REMOVE)
*/
@ -268,10 +266,10 @@ editor::instruction parse_instruction_string(string instruction_string) {
instruction_string = remove_leading_whitespace(instruction_string);
/*
Split the string into a vector<string> delimited by spaces
Split the std::string into a std::vector<std::string> delimited by spaces
See: shared_functions/explode.cpp
*/
vector<string> instruction_vector = explode(instruction_string, ' ', 3);
std::vector<std::string> instruction_vector = explode(instruction_string, ' ', 3);
/*
Set up an 'instruction' object marked invalid to return if there's a problem
@ -286,9 +284,9 @@ editor::instruction parse_instruction_string(string instruction_string) {
return invalid_instruction;
}
string first_element = "";
string second_element = "";
string third_element = "";
std::string first_element = "";
std::string second_element = "";
std::string third_element = "";
bool second_element_is_end = false;
bool third_element_is_end = false;
@ -387,10 +385,10 @@ editor::instruction parse_instruction_string(string instruction_string) {
}
vector<editor::instruction> parse_instruction_set_string(string instruction_set_string) {
std::vector<editor::instruction> parse_instruction_set_string(std::string instruction_set_string) {
/***
vector<instruction> parse_instruction_set_string(string instruction_set_string):
Create a vector of 'instruction' objects from a newline-delimited string of properly-formatted instructions
std::vector<instruction> parse_instruction_set_string(std::string instruction_set_string):
Create a std::vector of 'instruction' objects from a newline-delimited std::string of properly-formatted instructions
Example of ONE properly-formatted "instruction set" string:
REPLACE 5 hello
@ -398,16 +396,16 @@ vector<editor::instruction> parse_instruction_set_string(string instruction_set_
REMOVE 7 10
Each line must follow the normal rules for properly-formatted instructions
See: parse_instruction_string(string instruction_string)
See: parse_instruction_string(std::string instruction_string)
The "instruction set" itself must be newline-delimited
That is, each individual instruction must be on its own line
***/
vector<editor::instruction> output_instruction_set;
std::vector<editor::instruction> output_instruction_set;
vector<string> instruction_strings = explode(instruction_set_string, '\n');
std::vector<std::string> instruction_strings = explode(instruction_set_string, '\n');
for (string i : instruction_strings) {
for (std::string i : instruction_strings) {
output_instruction_set.push_back( parse_instruction_string(i) );
}

View File

@ -10,13 +10,11 @@
#include <getopt.h>
#endif
using namespace std;
int main(int argc, char* argv[]) {
string program_name = "polonius-editor";
std::string program_name = "polonius-editor";
string help_string =
std::string help_string =
program_name + " " + program_version + "\nCopyright (C) 2023 " + program_author + "\n\n"
"This is free software (GNU GPL 3), and you are welcome to redistribute it under certain conditions.\n\n"
""
@ -80,20 +78,20 @@ int main(int argc, char* argv[]) {
/*
Necessary information for the program to do its job
*/
string file_to_edit = "";
std::string file_to_edit = "";
bool received_filename = false;
vector<editor::instruction> instructions_to_add;
std::vector<editor::instruction> instructions_to_add;
int block_size = 10240;
bool interpret_special_chars = false;
bool verbose = false;
/*
temp_instruction_set vector
-s / --add-instruction-set option fills this vector, moves its elements to instructions_to_add, and then clears this vector
temp_instruction_set std::vector
-s / --add-instruction-set option fills this std::vector, moves its elements to instructions_to_add, and then clears this std::vector
*/
vector<editor::instruction> temp_instruction_set;
std::vector<editor::instruction> temp_instruction_set;
/*
@ -128,7 +126,7 @@ int main(int argc, char* argv[]) {
switch(c) {
case 'i':
if (received_filename) {
cerr << "polonius-editor: Error: Multiple files specified" << endl;
std::cerr << "polonius-editor: Error: Multiple files specified" << std::endl;
return EXIT_BADFILE;
}
file_to_edit = optarg;
@ -147,7 +145,7 @@ int main(int argc, char* argv[]) {
case 'b':
block_size = parse_block_units(optarg);
if (block_size == -1) {
cerr << program_name << ": Block size '" << optarg << "' is not understood" << endl << "Use -h for help" << endl;
std::cerr << program_name << ": Block size '" << optarg << "' is not understood" << std::endl << "Use -h for help" << std::endl;
return EXIT_BADARG;
}
break;
@ -161,18 +159,18 @@ int main(int argc, char* argv[]) {
break;
case 'V':
cout << program_version << endl;
std::cout << program_version << std::endl;
return EXIT_SUCCESS;
break;
case 'h':
cout << help_string;
std::cout << help_string;
return EXIT_SUCCESS;
break;
case '?':
if (optopt == 'i' || optopt == 's' || optopt == 'a' || optopt == 'b') {
cerr << program_name << ": Option -" << (char)optopt << " requires an argument" << endl << "Use -h for help" << endl;
std::cerr << program_name << ": Option -" << (char)optopt << " requires an argument" << std::endl << "Use -h for help" << std::endl;
return EXIT_BADOPT;
}
break;
@ -181,7 +179,7 @@ int main(int argc, char* argv[]) {
for (option_index = optind; option_index < argc; option_index++) {
if (received_filename) {
cerr << "polonius-editor: Error: Multiple files specified" << endl;
std::cerr << "polonius-editor: Error: Multiple files specified" << std::endl;
return EXIT_BADFILE;
}
file_to_edit = argv[option_index];
@ -189,14 +187,14 @@ int main(int argc, char* argv[]) {
}
if (!received_filename) {
cerr << program_name << ": No input file given. Use -h for help" << endl;
std::cerr << program_name << ": No input file given. Use -h for help" << std::endl;
return EXIT_BADFILE;
}
editor::file document(file_to_edit, block_size, verbose);
if (!document.is_initialized()) {
cerr << program_name << ": " << document.get_error_message() << endl;
std::cerr << program_name << ": " << document.get_error_message() << std::endl;
return EXIT_OTHER;
}
@ -207,12 +205,12 @@ int main(int argc, char* argv[]) {
}
if (!document.add_instruction(instructions_to_add[i])) {
cerr << program_name << ": " << instructions_to_add[i].get_error_message() << endl;
std::cerr << program_name << ": " << instructions_to_add[i].get_error_message() << std::endl;
return EXIT_BADARG;
}
}
vector<editor::instruction> instruction_set = document.get_instruction_set();
std::vector<editor::instruction> instruction_set = document.get_instruction_set();
for (int i = 0; i < instruction_set.size(); i++) {
document.execute_single_instruction(instruction_set[i]);

View File

@ -1,5 +1,3 @@
using namespace std;
namespace editor {
enum operation_type {
@ -24,18 +22,18 @@ namespace editor {
int64_t start_position = -1;
int64_t end_position = -1;
string text_input = "";
std::string text_input = "";
string error_message = "";
std::string error_message = "";
public:
void clear_instruction();
void process_special_chars();
bool set_replace_instruction(int64_t start, string text);
bool set_insert_instruction(int64_t start, string text);
bool set_replace_instruction(int64_t start, std::string text);
bool set_insert_instruction(int64_t start, std::string text);
bool set_remove_instruction(int64_t start, int64_t end);
void set_error_message(string message);
void set_error_message(std::string message);
string get_error_message();
std::string get_error_message();
void update_start_position(int64_t start);
void update_end_position(int64_t end);
@ -44,46 +42,46 @@ namespace editor {
int get_operation_type();
int64_t get_start_position();
int64_t get_end_position();
string get_text();
std::string get_text();
};
instruction create_replace_instruction(int64_t start_position, string text);
instruction create_insert_instruction(int64_t start_position, string text);
instruction create_replace_instruction(int64_t start_position, std::string text);
instruction create_insert_instruction(int64_t start_position, std::string text);
instruction create_remove_instruction(int64_t start_position, int64_t end_position);
instruction parse_instruction_string(string instruction_string);
instruction parse_instruction_string(std::string instruction_string);
vector<instruction> parse_instruction_set_string(string instruction_set);
std::vector<instruction> parse_instruction_set_string(std::string instruction_set);
class file {
private:
bool initialized = false;
string file_name;
string file_directory;
std::string file_name;
std::string file_directory;
int64_t file_length = 0;
fstream file_stream;
std::fstream file_stream;
FILE* c_type_file;
int file_descriptor;
int block_size = 10240;
vector<instruction> instruction_set;
std::vector<instruction> instruction_set;
int64_t file_length_after_last_instruction = 0;
string error_message = "";
std::string error_message = "";
bool verbose = false;
public:
bool set_file(string file_path);
bool set_file(std::string file_path);
void set_block_size(int specified_blocksize);
void replace(int64_t start_position, string replacement_text);
void insert(int64_t start_position, string text_to_insert);
void replace(int64_t start_position, std::string replacement_text);
void insert(int64_t start_position, std::string text_to_insert);
void remove(int64_t start_position, int64_t end_position);
bool add_instruction(instruction &input_instruction);
@ -94,23 +92,23 @@ namespace editor {
bool is_initialized();
string get_file_name();
string get_file_directory();
std::string get_file_name();
std::string get_file_directory();
int get_block_size();
int64_t get_file_length();
vector<instruction> get_instruction_set();
std::vector<instruction> get_instruction_set();
string get_error_message();
std::string get_error_message();
void close();
/*
Constructor
*/
file(string path, int blocksize = 10240, bool verbose_mode = false);
file(std::string path, int blocksize = 10240, bool verbose_mode = false);
};
}