private ArrayView PackDefinitions(TSystemType?[] data, int maxDefinitionLevel, out int[] definitionLevels, out int definitionsLength, out int nullCount) { definitionLevels = IntPool.Rent(data.Length); definitionsLength = data.Length; WritableArrayView <TSystemType> result = ArrayView.CreateWritable <TSystemType>(data.Length); int ir = 0; nullCount = 0; for (int i = 0; i < data.Length; i++) { TSystemType?value = data[i]; if (value == null) { definitionLevels[i] = 0; nullCount++; } else { definitionLevels[i] = maxDefinitionLevel; result[ir++] = value.Value; } } return(result); }
protected ArrayView PackDefinitions <TNullable>(TNullable[] data, int maxDefinitionLevel, out int[] definitionLevels, out int definitionsLength, out int nullCount) where TNullable : class { definitionLevels = IntPool.Rent(data.Length); definitionsLength = data.Length; nullCount = 0; WritableArrayView <TNullable> result = ArrayView.CreateWritable <TNullable>(data.Length); int ir = 0; for (int i = 0; i < data.Length; i++) { TNullable value = data[i]; if (value == null) { definitionLevels[i] = 0; nullCount++; } else { definitionLevels[i] = maxDefinitionLevel; result[ir++] = value; } } return(result); }