Skip to content

Commit 18dfe55

Browse files
authored
Merge pull request #10 from nerai/dictbuilder
improve DictBuilder
2 parents 43e3156 + f7c17a9 commit 18dfe55

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

ZstdNet/DictBuilder.cs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Linq;
45
using size_t = System.UIntPtr;
56

67
namespace ZstdNet
78
{
89
public static class DictBuilder
910
{
10-
public static byte[] TrainFromBuffer(ICollection<byte[]> samples, int dictCapacity = DefaultDictCapacity)
11+
public static byte[] TrainFromBuffer(IEnumerable<byte[]> samples, int dictCapacity = DefaultDictCapacity)
1112
{
12-
var samplesBuffer = samples.SelectMany(sample => sample).ToArray();
13-
var samplesSizes = samples.Select(sample => (size_t)sample.Length).ToArray();
14-
var dictBuffer = new byte[dictCapacity];
15-
var dictSize = (int)ExternMethods.ZDICT_trainFromBuffer(dictBuffer, (size_t)dictCapacity, samplesBuffer, samplesSizes, (uint)samples.Count).EnsureZdictSuccess();
13+
var ms = new MemoryStream ();
14+
var samplesSizes = new List<size_t> ();
15+
foreach (var sample in samples) {
16+
samplesSizes.Add ((size_t) sample.Length);
17+
ms.Write (sample, 0, sample.Length);
18+
}
19+
var samplesBuffer = ms.ToArray ();
1620

17-
if (dictCapacity == dictSize)
18-
return dictBuffer;
19-
var result = new byte[dictSize];
20-
Array.Copy(dictBuffer, result, dictSize);
21-
return result;
21+
var dictBuffer = new byte[dictCapacity];
22+
var dictSize = (int)ExternMethods
23+
.ZDICT_trainFromBuffer(dictBuffer, (size_t)dictCapacity, samplesBuffer, samplesSizes.ToArray(), (uint)samplesSizes.Count)
24+
.EnsureZdictSuccess();
25+
if (dictCapacity != dictSize) {
26+
Array.Resize<byte> (ref dictBuffer, dictSize);
27+
}
28+
return dictBuffer;
2229
}
2330

2431
public const int DefaultDictCapacity = 112640; // Used by zstd utility by default

0 commit comments

Comments
 (0)