private static int[][] SplitData(int[] source)
{
Func<int, bool> skipFilter = i => i < 0;
Func<int, bool> takeFilter = i => i >= 0;
var result = new List<int[]>();
var position = 0;
SkipWhile(source, ref position, skipFilter);
while (position < source.Length)
{
result.Add(TakeWhile(source, ref position, takeFilter));
SkipWhile(source, ref position, skipFilter);
}
return result.ToArray();
}