public void Serialize(int id, T row) { BitWriter bitWriter = new BitWriter(m_writer.RecordSize); int indexFieldOffSet = 0; for (int i = 0; i < m_writer.FieldCache.Length; i++) { FieldCache <T> info = m_writer.FieldCache[i]; if (info.IndexMapField && m_writer.Flags.HasFlagExt(DB2Flags.Index)) { indexFieldOffSet++; continue; } int fieldIndex = i - indexFieldOffSet; if (info.IsArray) { if (arrayWriters.TryGetValue(info.Field.FieldType, out var writer)) { writer(bitWriter, m_writer, m_fieldMeta[fieldIndex], (Array)info.Getter(row)); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleWriters.TryGetValue(info.Field.FieldType, out var writer)) { writer(bitWriter, m_writer, m_fieldMeta[fieldIndex], info.Getter(row)); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } } // pad to record size if (!m_writer.Flags.HasFlagExt(DB2Flags.Sparse)) { bitWriter.Resize(m_writer.RecordSize); } else { bitWriter.ResizeToMultiple(4); } Records[id] = bitWriter; }
public void Serialize(int id, T row) { BitWriter bitWriter = new BitWriter(m_writer.RecordSize); StringLengths[id] = 0; for (int i = 0; i < m_writer.FieldCache.Length; i++) { FieldCache <T> info = m_writer.FieldCache[i]; if (info.IsArray) { if (arrayWriters.TryGetValue(info.Field.FieldType, out var writer)) { Array array = (Array)info.Getter(row); writer(bitWriter, m_writer, array); if (array is string[] strings) { StringLengths[id] = (ushort)strings.Sum(x => x.Length == 0 ? 0 : x.Length + 1); } } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleWriters.TryGetValue(info.Field.FieldType, out var writer)) { object value = info.Getter(row); writer(bitWriter, m_writer, value); if (value is string strings) { StringLengths[id] = (ushort)(strings.Length == 0 ? 0 : strings.Length + 1); } } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } } // pad to record size bitWriter.Resize(m_writer.RecordSize); Records[id] = bitWriter; }
public void Serialize(int id, T row) { BitWriter bitWriter = new BitWriter(m_writer.RecordSize); for (int i = 0; i < m_writer.FieldCache.Length; i++) { FieldCache <T> info = m_writer.FieldCache[i]; if (info.IsArray) { if (arrayWriters.TryGetValue(info.Field.FieldType, out var writer)) { writer(bitWriter, m_writer, (Array)info.Getter(row)); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleWriters.TryGetValue(info.Field.FieldType, out var writer)) { writer(bitWriter, m_writer, info.Getter(row)); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } } // pad to record size bitWriter.Resize(m_writer.RecordSize); Records[id] = bitWriter; }
public void Serialize(int id, T row) { BitWriter bitWriter = new BitWriter(m_writer.RecordSize); int indexFieldOffSet = 0; for (int i = 0; i < m_writer.FieldCache.Length; i++) { FieldCache <T> info = m_writer.FieldCache[i]; if (i == m_writer.IdFieldIndex && m_writer.Flags.HasFlagExt(DB2Flags.Index)) { indexFieldOffSet++; continue; } int fieldIndex = i - indexFieldOffSet; // reference data field if (fieldIndex >= m_writer.Meta.Length) { m_writer.ReferenceData.Add((int)Convert.ChangeType(info.Getter(row), typeof(int))); continue; } if (info.IsArray) { if (arrayWriters.TryGetValue(info.Field.FieldType, out var writer)) { writer(bitWriter, m_writer, m_fieldMeta[fieldIndex], m_columnMeta[fieldIndex], m_palletData[fieldIndex], m_commonData[fieldIndex], (Array)info.Getter(row)); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleWriters.TryGetValue(info.Field.FieldType, out var writer)) { writer(id, bitWriter, m_writer, m_fieldMeta[fieldIndex], m_columnMeta[fieldIndex], m_palletData[fieldIndex], m_commonData[fieldIndex], info.Getter(row)); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } } // pad to record size if (!m_writer.Flags.HasFlagExt(DB2Flags.Sparse)) { bitWriter.Resize(m_writer.RecordSize); } else { bitWriter.ResizeToMultiple(4); } Records[id] = bitWriter; }