From cbcbf6e7d614ecf94dd7e1b9033f8d599f48662e Mon Sep 17 00:00:00 2001 From: Alexey Gavrilov Date: Thu, 22 Feb 2024 14:18:39 +0700 Subject: Implement support of cpuid instruction + include folder + some updates --- include/TypeConverter.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++ include/TypeConverter.h | 22 ++++++++++++++++++++ include/types.h | 7 +++++++ 3 files changed, 81 insertions(+) create mode 100644 include/TypeConverter.cpp create mode 100644 include/TypeConverter.h create mode 100644 include/types.h (limited to 'include') 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 + +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; -- cgit v1.2.3