コード例 #1
0
        public static CompressedBlob Compress(Compression method, ElementSizeStrategy elementSize, IList <int> uncompressedBlob)
        {
            switch (method)
            {
            case Compression.None:
                return(new CompressedBlob(Compression.None, elementSize, elementSize, uncompressedBlob));

            case Compression.CTB:
                return(new CompressedBlob(Compression.CTB, elementSize, U8SizeStrategy.Instance, Collapse_CTB(uncompressedBlob).ToArray()));

            case Compression.Simple:
                return(new CompressedBlob(Compression.Simple, elementSize, elementSize, Collapse_Simple(elementSize.MaxValue, uncompressedBlob).ToArray()));

            case Compression.Auto:
                var tmp = Collapse_Simple(elementSize.MaxValue, uncompressedBlob);

                if (tmp.Count < uncompressedBlob.Count)
                {
                    return(new CompressedBlob(Compression.Simple, elementSize, elementSize, tmp));
                }
                else
                {
                    return(new CompressedBlob(Compression.None, elementSize, elementSize, uncompressedBlob));
                }

            default:
                throw new InvalidOperationException("Unrecognised compression method");
            }
        }
コード例 #2
0
        public static HelperMethod[] GetDecompressionMethods(Compression method, ElementSizeStrategy sizeStrategy, bool fromResource)
        {
            switch (method)
            {
            case Compression.Simple:
                return(new HelperMethod[]
                {
                    new MethodExpandSimple(sizeStrategy, fromResource),
                });

            case Compression.CTB:
                return(new HelperMethod[]
                {
                    new MethodExpandCTB(sizeStrategy, fromResource),
                });

            case Compression.None:
                if (fromResource)
                {
                    return(new HelperMethod[]
                    {
                        new MethodExtract(sizeStrategy),
                    });
                }
                else
                {
                    return(Empty);
                }

            default: return(Empty);
            }
        }
コード例 #3
0
 CompressedBlob(Compression method, ElementSizeStrategy elementSize, ElementSizeStrategy blobSize, IList <int> blob)
 {
     Method      = method;
     ElementSize = elementSize;
     BlobSize    = blobSize;
     _blob       = new int[blob.Count];
     blob.CopyTo(_blob, 0);
 }
コード例 #4
0
 public MethodExpandSimple(ElementSizeStrategy sizeStrategy, bool fromResource)
 {
     _fromResource = fromResource;
     _sizeStrategy = sizeStrategy;
 }
コード例 #5
0
 public MethodExtract(ElementSizeStrategy sizeStrategy)
 {
     _sizeStrategy = sizeStrategy;
 }
コード例 #6
0
        public static void WriteLargeIntArray(TextWriter writer, int indent, int wrap, IList <int> data, ElementSizeStrategy elementSize)
        {
            writer.Write("new ");
            writer.Write(elementSize.Keyword);
            writer.Write('[');
            writer.Write(data.Count);
            writer.WriteLine(']');
            WriteIndent(writer, indent);
            writer.Write('{');

            var cutOff = 0;

            for (var i = 0; i < data.Count; i++)
            {
                if (cutOff == 0)
                {
                    writer.WriteLine();
                    WriteIndent(writer, indent + 1);
                    cutOff = wrap;
                }
                else
                {
                    writer.Write(' ');
                }

                writer.Write(data[i]);
                writer.Write(',');
                cutOff--;
            }

            writer.WriteLine();
            WriteIndent(writer, indent);
            writer.Write('}');
        }