public int WriteFieldToBlob(byte[] blob, int index) { blob[index++] = (byte)this.CollectionItemType; ComplianceSerializer.WriteIntToBlob(blob, index, this.NumberItems); index += 4; foreach (ComplianceSerializer.CollectionItem collectionItem in this.CollectionItems) { index = collectionItem.WriteItemToBlob(blob, index); } return(index); }
public int WriteItemToBlob(byte[] blob, int index) { if (this.IsFixedWidth) { Array.Copy(this.ItemBlob, 0, blob, index, this.ItemBlob.Length); } else { ComplianceSerializer.WriteIntToBlob(blob, index, this.ItemBlob.Length); Array.Copy(this.ItemBlob, 0, blob, index + 4, this.ItemBlob.Length); } return(index + this.GetSerializedSize()); }
public static ComplianceSerializer.CollectionItem GetCollectionItemFromObject(CollectionItemType itemType, object obj) { ComplianceSerializer.CollectionItem collectionItem = new ComplianceSerializer.CollectionItem(); switch (itemType) { case CollectionItemType.Short: collectionItem.IsFixedWidth = true; collectionItem.ItemBlob = new byte[2]; ComplianceSerializer.WriteShortToBlob(collectionItem.ItemBlob, 0, (short)obj); break; case CollectionItemType.Int: collectionItem.IsFixedWidth = true; collectionItem.ItemBlob = new byte[4]; ComplianceSerializer.WriteIntToBlob(collectionItem.ItemBlob, 0, (int)obj); break; case CollectionItemType.Long: collectionItem.IsFixedWidth = true; collectionItem.ItemBlob = new byte[8]; ComplianceSerializer.WriteLongToBlob(collectionItem.ItemBlob, 0, (long)obj); break; case CollectionItemType.Double: collectionItem.IsFixedWidth = true; collectionItem.ItemBlob = new byte[8]; ComplianceSerializer.WriteDoubleToBlob(collectionItem.ItemBlob, 0, (double)obj); break; case CollectionItemType.Guid: collectionItem.IsFixedWidth = true; collectionItem.ItemBlob = new byte[16]; ComplianceSerializer.WriteGuidToBlob(collectionItem.ItemBlob, 0, (Guid)obj); break; case CollectionItemType.String: collectionItem.IsFixedWidth = false; collectionItem.ItemBlob = Encoding.UTF8.GetBytes((string)obj); break; case CollectionItemType.Blob: collectionItem.IsFixedWidth = false; collectionItem.ItemBlob = (byte[])obj; break; } return(collectionItem); }
private static int WriteFixedWidthFieldsToBlob <T>(ref ComplianceSerializationDescription <T> description, ref T inputObject, byte[] blob, int startIndex, int width, ComplianceSerializer.FixedWidthType widthType, int totalFields) where T : class, new() { byte b = Convert.ToByte(totalFields); blob[startIndex] = b; int num = startIndex + 1; for (byte b2 = 0; b2 < b; b2 += 1) { switch (widthType) { case ComplianceSerializer.FixedWidthType.Byte: { byte b3 = 0; description.TryGetByteProperty(inputObject, b2, out b3); blob[num] = b3; break; } case ComplianceSerializer.FixedWidthType.Short: { short shortValue = 0; description.TryGetShortProperty(inputObject, b2, out shortValue); ComplianceSerializer.WriteShortToBlob(blob, num, shortValue); break; } case ComplianceSerializer.FixedWidthType.Int: { int intValue = 0; description.TryGetIntegerProperty(inputObject, b2, out intValue); ComplianceSerializer.WriteIntToBlob(blob, num, intValue); break; } case ComplianceSerializer.FixedWidthType.Long: { long longValue = 0L; description.TryGetLongProperty(inputObject, b2, out longValue); ComplianceSerializer.WriteLongToBlob(blob, num, longValue); break; } case ComplianceSerializer.FixedWidthType.Double: { double doubleValue = 0.0; description.TryGetDoubleProperty(inputObject, b2, out doubleValue); ComplianceSerializer.WriteDoubleToBlob(blob, num, doubleValue); break; } case ComplianceSerializer.FixedWidthType.Guid: { Guid empty = Guid.Empty; description.TryGetGuidProperty(inputObject, b2, out empty); ComplianceSerializer.WriteGuidToBlob(blob, num, empty); break; } default: throw new ArgumentException("widthType"); } num += width; } return(num); }