コード例 #1
0
 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);
 }
コード例 #2
0
 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());
 }
コード例 #3
0
            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);
            }
コード例 #4
0
        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);
        }