// License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html #ifndef _GENERAL_FUNCTIONS_H_ #define _GENERAL_FUNCTIONS_H_ #include #include bool is_natural_number(const char* c_str); bool is_whole_number(const char* c_str); void get_textfile_lines( std::string filename, std::vector &file_lines); int random_int(int minimum, int maximum); float random_float(float minimum, float maximum); int modulate(int number, int modulus); void cerr_and_exit( int exit_code, std::string error_name, std::string file_name, std::string function_name, int line_number, std::string additional_message = ""); void cerr_only( std::string error_name, std::string file_name, std::string function_name, int line_number, std::string additional_message); /* Its a good practice to prototype all functions including which are * defined in header file itself such as inline functions before defining * any function. This way, even if we use one function in another * function, we do not have to worry about function undefined error * possibilities. */ inline int absolute_number(int number); inline int smaller_number(int a, int b); inline int bigger_number(int a, int b); inline int absolute_number(int number) { if (number < 0) return -(number); else return number; } inline int smaller_number(int a, int b) { if (a > b) return b; else return a; } inline int bigger_number(int a, int b) { if (a < b) return b; else return a; } void string_to_vector( std::string &a_string, std::vector &str_vector, char delimeter = ','); void pick_random_string( std::string &str, const std::vector &str_vector); #endif