public StreamedBinaryTableHDU(RowSource rs, int bufSize, StringWriteMode writeMode, int stringTruncationLength, bool padLeft, char padChar) { _writerMap = CreateWriterMap(); _rs = rs; _buf = new byte[bufSize]; _byteRenderers = new ByteRenderer[_rs.ModelRow.Length]; _writeMode = writeMode; _stringTruncationLength = stringTruncationLength; _padLeft = padLeft; _padChar = padChar; SetupRenderers(); }
protected void SetupRenderers() { Array[] modelRow = ReplaceTroolean(_rs.ModelRow); Array[] modelRow2 = null; switch (_writeMode) { case StringWriteMode.HEAP: case StringWriteMode.PAD: modelRow2 = CopyModelRowReplaceStrings(modelRow, new int[2]); modelRow2 = CopyModelRowStripUnknowns(modelRow2, new byte[1]); // _rowSizeInBytes = ArrayFuncs.ComputeSize(CopyModelRowReplaceStrings(modelRow, new int[2])); _rowSizeInBytes = ArrayFuncs.ComputeSize(modelRow2); modelRow2 = CopyModelRowStripUnknowns(modelRow, new byte[1]); //myHeader = ManufactureHeader(modelRow, _rs.ColumnNames, _rs.TNULL, _rs.NRows); myHeader = ManufactureHeader(modelRow2, _rs.ColumnNames, _rs.TNULL, _rs.NRows); _stringArrayRenderer = ByteRenderer.STRING_ARRAY_RENDERER_HEAP; break; case StringWriteMode.TRUNCATE: modelRow2 = CopyModelRowReplaceStrings(modelRow, new String[] { new String(' ', _stringTruncationLength) }); modelRow2 = CopyModelRowStripUnknowns(modelRow2, new byte[1]); _rowSizeInBytes = ArrayFuncs.ComputeSize(modelRow2); myHeader = ManufactureHeader(modelRow2, _rs.ColumnNames, _rs.TNULL, _rs.NRows); _stringArrayRenderer = new ByteRenderer.StringArrayByteRendererTruncate(_stringTruncationLength, _padChar, _padLeft, false); break; } _hasStrings = false; for (int i = 0; i < _rs.ModelRow.Length; ++i) { _byteRenderers[i] = ByteRenderer.GetByteRenderer(_rs.ModelRow[i].GetType()); if (_rs.ModelRow[i] is String[]) { _byteRenderers[i] = _stringArrayRenderer; _hasStrings = true; } if (_byteRenderers[i].GetType() == typeof(ByteRenderer.NullByteRenderer)) { myHeader.AddComment("COLUMN " + (i + 1) + " NULL DUE TO UNKNOWN TYPE."); } } }
protected static Array[] CopyModelRowStripUnknowns(Array[] a, Array a2) { Array[] result = new Array[a.Length]; for (int i = 0; i < a.Length; ++i) { if (a[i] == null || (a[i].GetType() != typeof(String[]) && ByteRenderer.GetByteRenderer(a[i].GetType()).GetType() == typeof(ByteRenderer.NullByteRenderer))) { result[i] = a2; } else { result[i] = a[i]; } } return(result); }