当前位置: 首页>>代码示例>>C#>>正文


C# Helper.Serialize方法代码示例

本文整理汇总了C#中Helper.Serialize方法的典型用法代码示例。如果您正苦于以下问题:C# Helper.Serialize方法的具体用法?C# Helper.Serialize怎么用?C# Helper.Serialize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Helper的用法示例。


在下文中一共展示了Helper.Serialize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Compress

        public static void Compress(BinaryWriter writer, long[] values, int index, int count, Helper helper)
        {
            writer.Write(VERSION);

            if (count == 0)
                return;

            long value = values[index];
            CountCompression.Serialize(writer, (ulong)value);
            if (count == 1)
                return;

            Debug.Assert(count == helper.Count);
            if (!helper.IsReady)
                helper.Prepare();

            index++;
            count--;
            int maxIndex = index + count - 1;

            helper.Serialize(writer);

            if (helper.Type == HelperType.Raw)
            {
                while (index <= maxIndex)
                    writer.Write(values[index++]);

                return;
            }

            if (helper.Type == HelperType.OneStep)
                return;

            ulong maxDelta = helper.Delta;
            bool alwaysUseDelta = helper.AlwaysUseDelta;
            int bitCount = BitUtils.GetBitBounds(maxDelta);

            bool writeSign = helper.Type == HelperType.Delta;

            CommonArray common = new CommonArray();
            int sizeBits = helper.SizeBits > 0 ? helper.SizeBits : (1 + 1 + 64) * (count - 1);
            common.ByteArray = new byte[(int)Math.Ceiling(sizeBits / 8.0)];
            ulong[] data = common.UInt64Array;
            int bitIndex = 0;

            ulong delta;
            bool sign; //false - positive, true - negative

            for (; index <= maxIndex; index++)
            {
                long newValue = values[index];
                if (newValue >= value)
                {
                    sign = false;
                    delta = (ulong)(newValue - value);
                }
                else
                {
                    sign = true;
                    delta = (ulong)(value - newValue);
                }

                if (alwaysUseDelta || delta <= maxDelta)
                {
                    if (!alwaysUseDelta)
                    {
                        SetFlag(data, bitIndex/*, true*/); //use delta
                        bitIndex++;
                    }

                    if (writeSign)
                    {
                        if (sign)
                            SetFlag(data, bitIndex/*, sign*/);
                        bitIndex++;
                    }

                    SetBits(data, bitIndex, delta, bitCount);
                    bitIndex += bitCount;
                }
                else
                {
                    //SetFlag(data, bitIndex, false); //don't use delta
                    bitIndex++;

                    SetValue(data, bitIndex, (ulong)newValue);
                    bitIndex += 64;
                }

                value = newValue;
            }

            int bytesCount = (int)Math.Ceiling(bitIndex / 8.0);
            CountCompression.Serialize(writer, (ulong)bytesCount);
            writer.Write(common.ByteArray, 0, bytesCount);
        }
开发者ID:ZhenghaiYe,项目名称:iveely,代码行数:96,代码来源:DeltaCompression.cs


注:本文中的Helper.Serialize方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。