diff options
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/io.cc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/util/io.cc b/src/util/io.cc new file mode 100644 index 0000000..531bd47 --- /dev/null +++ b/src/util/io.cc @@ -0,0 +1,99 @@ +#include "util/io.h" + +namespace ov4 +{ + +using namespace std; + +void atomic_print(char *s, bool ignore_wrap) +{ + if (ignore_wrap) + for (int i = 0; s[i] != 0; i++) + if (s[i] == '\n') + { + write(STDOUT_FILENO, s, i); + return; + } + write(STDOUT_FILENO, s, strlen(s)); +} + +void atomic_print(int x) +{ + char msg[LENGTH]; + itoa(x, msg, DECIMAL); + atomic_print(msg); +} + +void reverse(char str[], int length) +{ + int start = 0; + int end = length - 1; + while (start < end) { + char temp = str[start]; + str[start] = str[end]; + str[end] = temp; + end--; + start++; + } +} + +void atomic_debug(char *s, bool ignore_wrap) +{ + if (verbose && GLOBAL_DEBUG) atomic_print(s, ignore_wrap); +} + +void atomic_debug(int x) +{ + if (verbose && GLOBAL_DEBUG) atomic_print(x); +} + +bool isnum(char *s) +{ + for (int i = 0; s[i] != 0; i++) + if (!isdigit(s[i])) + return false; + return true; +} + + +char *itoa(int num, char* str, int base) +{ + int i = 0; + bool isNegative = false; + + /* Handle 0 explicitly, otherwise empty string is + * printed for 0 */ + if (num == 0) { + str[i++] = '0'; + str[i] = '\0'; + return str; + } + + // In standard itoa(), negative numbers are handled + // only with base 10. Otherwise numbers are + // considered unsigned. + if (num < 0 && base == 10) { + isNegative = true; + num = -num; + } + + // Process individual digits + while (num != 0) { + int rem = num % base; + str[i++] = (rem > 9) ? (rem - 10) + 'a' : rem + '0'; + num = num / base; + } + + // If number is negative, append '-' + if (isNegative) + str[i++] = '-'; + + str[i] = '\0'; // Append string terminator + + // Reverse the string + reverse(str, i); + + return str; +} + +} |
