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"); } }
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); } }
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); }
public MethodExpandSimple(ElementSizeStrategy sizeStrategy, bool fromResource) { _fromResource = fromResource; _sizeStrategy = sizeStrategy; }
public MethodExtract(ElementSizeStrategy sizeStrategy) { _sizeStrategy = sizeStrategy; }
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('}'); }