summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAlexey Gavrilov <rebovas@yahoo.com>2024-02-22 14:18:39 +0700
committerAlexey Gavrilov <rebovas@yahoo.com>2024-02-22 14:18:39 +0700
commitcbcbf6e7d614ecf94dd7e1b9033f8d599f48662e (patch)
tree59872849d347794cc58c8ad3aa201a14e0db526f /include
parentc18781e37e6bfe153e7c0f2bc8b04df0aecf151d (diff)
Implement support of cpuid instruction + include folder + some updates
Diffstat (limited to 'include')
-rw-r--r--include/TypeConverter.cpp52
-rw-r--r--include/TypeConverter.h22
-rw-r--r--include/types.h7
3 files changed, 81 insertions, 0 deletions
diff --git a/include/TypeConverter.cpp b/include/TypeConverter.cpp
new file mode 100644
index 0000000..5ab429d
--- /dev/null
+++ b/include/TypeConverter.cpp
@@ -0,0 +1,52 @@
+#include "TypeConverter.h"
+
+IntConverter::IntConverter()
+{
+ resetProps();
+};
+
+void IntConverter::resetProps()
+{
+ for(int i = 0; i < 21; i++) buffer[i] = '\0';
+ index = bufferSize - 2;
+};
+
+char *IntConverter::intToChar(int n)
+{
+ resetProps();
+
+ int number = n >> 31; // n < 0 - n = -1, else n = 0
+ number = (n ^ number) - number; // Clear sign bit
+
+ bool isNegative = n < 0;
+
+ writeNumberToBuffer(number);
+
+ if(isNegative) buffer[index] = '-';
+
+ return &buffer[index];
+};
+
+char *IntConverter::uintToChar(const uint32 n)
+{
+ resetProps();
+ writeNumberToBuffer(n);
+
+ return &buffer[++index];
+};
+
+char *IntConverter::uintToChar(const uint64 n)
+{
+ resetProps();
+ writeNumberToBuffer(n);
+
+ return &buffer[++index];
+};
+
+void IntConverter::writeNumberToBuffer(uint64 n)
+{
+ do {
+ buffer[index--] = '0' + (n % 10);
+ n /= 10;
+ }while(n != 0);
+};
diff --git a/include/TypeConverter.h b/include/TypeConverter.h
new file mode 100644
index 0000000..f9db95c
--- /dev/null
+++ b/include/TypeConverter.h
@@ -0,0 +1,22 @@
+#ifndef TYPECONVERTER_H
+#define TYPECONVERTER_H
+
+#include <types.h>
+
+class IntConverter
+{
+ private:
+ const static unsigned int bufferSize = 21;
+ char buffer[bufferSize];
+ uint8 index;
+ void resetProps();
+ void writeNumberToBuffer(uint64 n);
+
+ public:
+ IntConverter();
+ char *intToChar(int n);
+ char *uintToChar(const uint32 n);
+ char *uintToChar(const uint64 n);
+};
+
+#endif
diff --git a/include/types.h b/include/types.h
new file mode 100644
index 0000000..54dcc25
--- /dev/null
+++ b/include/types.h
@@ -0,0 +1,7 @@
+#define NULL 0
+
+
+typedef unsigned char uint8;
+typedef unsigned short int uint16;
+typedef unsigned long uint32;
+typedef unsigned long long uint64;