Esempio n. 1
0
        public static Dictionary <T, BitCode64> GenerateGammaCoding <T>(this IEnumerator <T> enumerator,
                                                                        T encodingSwitch, out int count, int predictCount = 0)
        {
            var _dict = GenerateFrequencyDictionary(enumerator, out count, predictCount);
            int sfre  = _switchProcess <T>(_dict);

            var sortedFrequency = _dict.OrderBy(n => n.Value);
            var dict2           = new Dictionary <T, BitCode64>(sortedFrequency.Count());

            int num           = 0;
            int sfreProcessed = 0;
            T   key;

            foreach (var pair in sortedFrequency)
            {
                if (sfreProcessed == 0 && sfre > pair.Value)
                {
                    key           = encodingSwitch;
                    sfreProcessed = 1;
                }
                else
                {
                    key = pair.Key;
                }
begin:
                int l = (int)Math.Floor(Math.Log(num));
                UInt64 code = 0;
                for (int a = 0; a <= l; a++)
                {
                    code.SetBit(63 - a, false);                   //put 0s to indicate how many bits will follow
                }
                code.SetBit(62 - l, true);                        //mark the end of the 0s
                for (int a = l - 1, i = 61 - l; a >= 0; a--, i--) //Write the bits as plain binary
                {
                    if ((code & (ulong)1 << a) > 0)
                    {
                        code.SetBit(i, true);
                    }
                    else
                    {
                        code.SetBit(i, false);
                    }
                }
                dict2.Add(key, new BitCode64(code, 2 * l + 1, true));
                num++;

                if (sfreProcessed == 1)
                {
                    key           = pair.Key;
                    sfreProcessed = 2;
                    goto begin;
                }
            }

            return(dict2);
        }
Esempio n. 2
0
 public void TestUInt64()
 {
     for (var n = 0; n < sizeof(UInt64) * 8; n++)
     {
         UInt64 a = (UInt64) ~(1L << n);
         UInt64 i = unchecked ((UInt64) ~0);
         i.SetBit(n, false);
         Assert.Equal(a, i);
     }
 }
Esempio n. 3
0
        public UInt64 CreateBitSet(params T[] elements)
        {
            UInt64 set = 0UL;

            foreach (var element in elements)
            {
                set = set.SetBit(IndexOf(element));
            }

            return(set);
        }
Esempio n. 4
0
        public UInt64 CreateBitSetFromIndices(params int[] indices)
        {
            UInt64 set = 0UL;

            foreach (var index in indices)
            {
                set = set.SetBit(index);
            }

            return(set);
        }
Esempio n. 5
0
        public UInt64 CreateFullBitSet()
        {
            UInt64 set = 0UL;

            for (int i = 0; i < _elements.Count; i++)
            {
                set = set.SetBit(i);
            }

            return(set);
        }
Esempio n. 6
0
        private UInt64 FindPlausibleFiniteDomainValues()
        {
            MultiInterval score = Score.AllowableValues.First;

            int[] setBits = FiniteDomainVariable.AllowableValues.GetSetIndices();

            UInt64 mask = 0UL;

            for (int i = 0; i < setBits.Length; i++)
            {
                if (MultiInterval.Intersects(score, _scoreMapping[setBits[i]]))
                {
                    mask = mask.SetBit(setBits[i]);
                }
            }

            return(mask);
        }
Esempio n. 7
0
        public static Dictionary <T, BitCode64> GenerateDeltaCoding <T>(this IEnumerator <T> enumerator, T encodingSwitch,
                                                                        out int count, int predictCount = 0)
        {
            var _dict = GenerateFrequencyDictionary(enumerator, out count, predictCount);
            int sfre  = _switchProcess <T>(_dict);

            var sortedFrequency = _dict.OrderBy(n => n.Value);
            var dict2           = new Dictionary <T, BitCode64>(sortedFrequency.Count());

            int num           = 0;
            int sfreProcessed = 0;
            T   key;

            foreach (var pair in sortedFrequency)
            {
                if (sfreProcessed == 0 && sfre > pair.Value)
                {
                    key           = encodingSwitch;
                    sfreProcessed = 1;
                }
                else
                {
                    key = pair.Key;
                }

begin:
                int len = 0;
                int    lengthOfLen = 0;
                UInt64 code        = 0;
                for (int temp = num; temp > 0; temp >>= 1)  // calculate 1+floor(log2(num))
                {
                    len++;
                }
                for (int temp = len; temp > 1; temp >>= 1)  // calculate floor(log2(len))
                {
                    lengthOfLen++;
                }

                int j = sizeof(int);
                for (int i = lengthOfLen; i > 0; --i)
                {
                    code.SetBit(--j, false);
                }
                for (int i = lengthOfLen; i >= 0; --i)
                {
                    code.SetBit(--j, Convert.ToBoolean(((len >> i) & 1)));
                }
                for (int i = len - 2; i >= 0; i--)
                {
                    code.SetBit(--j, Convert.ToBoolean((num >> i) & 1));
                }

                dict2.Add(key, new BitCode64(code, sizeof(int) - j, true));

                num++;

                if (sfreProcessed == 1)
                {
                    key           = pair.Key;
                    sfreProcessed = 2;
                    goto begin;
                }
            }

            return(dict2);
        }