Added Tools class
A class that provides some static functions
This commit is contained in:
parent
116c420c7a
commit
0f1be15f30
2 changed files with 56 additions and 0 deletions
47
Hazard/Hazard/Tools.cpp
Normal file
47
Hazard/Hazard/Tools.cpp
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Tools.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// convert the binary representation of x to a string with the specified length
|
||||||
|
char* Tools::BinaryToChars(uint x, char length)
|
||||||
|
{
|
||||||
|
// warning: this breaks for numbers with more than 64 bits (= variables)
|
||||||
|
char* c = new char[length+1];
|
||||||
|
c += length; // last char
|
||||||
|
|
||||||
|
*c = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
*--c = '0' + (x & 1); // 0 or 1 at the specified position
|
||||||
|
x >>= 1;
|
||||||
|
} while (--length);
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
// converts a gray number to its binary representation
|
||||||
|
// yes, this is quite slow and we could generate a lookup table to speed it up.
|
||||||
|
uint Tools::GrayToBinary(uint x)
|
||||||
|
{
|
||||||
|
uint x1 = x;
|
||||||
|
char r = 0; // r = ceil(ld(x))
|
||||||
|
do
|
||||||
|
r++;
|
||||||
|
while (x1 >>= 1);
|
||||||
|
|
||||||
|
if ((r & (r-1)) != 0) // keine Potenz von 2
|
||||||
|
{
|
||||||
|
char r1 = 0; // r1 = ceil(ld(r))
|
||||||
|
do
|
||||||
|
r1++;
|
||||||
|
while (r >>= 1);
|
||||||
|
|
||||||
|
r = 1 << r1; // aufrunden auf Zweierpotenz
|
||||||
|
}
|
||||||
|
|
||||||
|
for (char i = 1; i < r; i++) // Umwandeln von Gray in Binary
|
||||||
|
x ^= x / 2;
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
9
Hazard/Hazard/Tools.h
Normal file
9
Hazard/Hazard/Tools.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class Tools
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static char* Tools::BinaryToChars(uint x, char length);
|
||||||
|
|
||||||
|
static uint GrayToBinary(uint x);
|
||||||
|
};
|
Loading…
Reference in a new issue