Skip to content

Instantly share code, notes, and snippets.

@HamedMasafi
Created December 21, 2021 15:54
Show Gist options
  • Save HamedMasafi/42fa5c923f21900c492f82965f5f4340 to your computer and use it in GitHub Desktop.
Save HamedMasafi/42fa5c923f21900c492f82965f5f4340 to your computer and use it in GitHub Desktop.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Zabtkar.Code
{
class BitSet<T> //where T : IComparable, IComparable<Int32>, IConvertible, IEquatable<Int32>, IFormattable
{
Int64 _n;
public BitSet()
{
_n = 0;
}
public BitSet(Int64 n)
{
_n = n;
}
public Int64 Value { get => _n; set => _n = value; }
public bool Get(int index)
{
return (_n & (1 << index)) == 1;
}
public void Set(int index, bool value)
{
if (value)
_n |= (1 << index);
else
_n &= ~(1 << index);
}
public int Length()
{
return 0;// sizeof(T) *8;
}
}
public class UniqueIDManager
{
private static BitArray ToBitArray(ulong n)
{
var bitArray = new BitArray(sizeof(ulong) * 8);
for (int i = 0; i < sizeof(ulong) * 8; i++)
bitArray.Set(i, (n & (1UL << i)) != 0);
return bitArray;
}
private static ulong FromBitArray(BitArray bitArray)
{
ulong n = 0;
for (int i = 0; i < bitArray.Length; i++)
{
if (bitArray.Get(i))
n |= (1UL << i);
else
n &= ~(1UL << i);
}
return n;
}
private static string ToString(BitArray bitArray)
{
string s="";
for (int i = 0; i < bitArray.Length; i++)
{
s = bitArray.Get(i) ? "1" : "0" + s;
}
return s;
}
public static ulong Encode(ulong n, ref string binary)
{
var input = ToBitArray(n);
var output = new BitArray(sizeof(long) * 8);
output.Set(11, input.Get(17));
output.Set(1, input.Get(13));
output.Set(14, input.Get(1));
output.Set(10, input.Get(5));
output.Set(6, input.Get(9));
output.Set(21, input.Get(11));
output.Set(20, input.Get(18));
output.Set(15, input.Get(12));
output.Set(5, input.Get(3));
output.Set(12, input.Get(19));
output.Set(4, input.Get(10));
output.Set(8, input.Get(21));
output.Set(22, input.Get(22));
output.Set(18, input.Get(2));
output.Set(16, input.Get(20));
output.Set(7, input.Get(16));
output.Set(2, input.Get(8));
output.Set(13, input.Get(14));
output.Set(9, input.Get(4));
output.Set(17, input.Get(15));
output.Set(0, input.Get(7));
output.Set(3, input.Get(0));
output.Set(19, input.Get(6));
output.Set(23, input.Get(23));
binary = ToString(input);
return FromBitArray(output);
}
public static ulong Decode(ulong n, ref string binary)
{
var input = ToBitArray(n);
var output = new BitArray(sizeof(long) * 8);
output.Set(17, input.Get(11));
output.Set(13, input.Get(1));
output.Set(1, input.Get(14));
output.Set(5, input.Get(10));
output.Set(9, input.Get(6));
output.Set(11, input.Get(21));
output.Set(18, input.Get(20));
output.Set(12, input.Get(15));
output.Set(3, input.Get(5));
output.Set(19, input.Get(12));
output.Set(10, input.Get(4));
output.Set(21, input.Get(8));
output.Set(22, input.Get(22));
output.Set(2, input.Get(18));
output.Set(20, input.Get(16));
output.Set(16, input.Get(7));
output.Set(8, input.Get(2));
output.Set(14, input.Get(13));
output.Set(4, input.Get(9));
output.Set(15, input.Get(17));
output.Set(7, input.Get(0));
output.Set(0, input.Get(3));
output.Set(6, input.Get(19));
output.Set(23, input.Get(23));
output.Set(24, true);
binary = ToString(input);
return FromBitArray(output);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment