//Size IEnumerable public static int SizeIEnumerable(ref BssomSizeContext context, IEnumerable value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } IBssomFormatter <object> formatter = context.Option.FormatterResolver.GetFormatterWithVerify <object>(); long dataLen = 0; foreach (object item in value) { dataLen += formatter.Size(ref context, item); } if (value is ICollection coll) { return(BssomBinaryPrimitives.Array2TypeSize(coll.Count, dataLen)); } else { return(BssomBinaryPrimitives.Array2TypeSizeWithFixU32Count(dataLen)); } }
public int Size(ref BssomSizeContext context, BssomNumber value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } switch (value.NumberType) { case BssomNumber.BssomNumberType.SByte: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.Int8Size); case BssomNumber.BssomNumberType.Byte: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.UInt8Size); case BssomNumber.BssomNumberType.Short: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.Int16Size); case BssomNumber.BssomNumberType.Int: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.Int32Size); case BssomNumber.BssomNumberType.Long: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.Int64Size); case BssomNumber.BssomNumberType.UShort: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.UInt16Size); case BssomNumber.BssomNumberType.UInt: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.UInt32Size); default: //case BssomNumberType.ULong: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.UInt64Size); } }
public void SizeTestWithContext() { int val = int.MaxValue; BssomSizeContext context = new BssomSizeContext(); BssomSerializer.Size(ref context, val).Is(5); }
public int Size(ref BssomSizeContext context, BssomBoolean value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.BooleanSize); }
public int Size(ref BssomSizeContext context, BssomChar value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } return(BssomBinaryPrimitives.NativeTypeCodeSize + BssomBinaryPrimitives.CharSize); }
public int Size(ref BssomSizeContext context, string value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } return(BssomBinaryPrimitives.StringSize(value) + BssomBinaryPrimitives.BuildInTypeCodeSize); }
public int Size(ref BssomSizeContext context, ArraySegment <SByte> value) { if (value.Array == null) { return(BssomBinaryPrimitives.NullSize); } return(BssomBinaryPrimitives.Array1BuildInTypeSize(BssomBinaryPrimitives.Int8Size, value.Count)); }
public int Size(ref BssomSizeContext context, SByte[] value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } return(BssomBinaryPrimitives.Array1BuildInTypeSize(BssomBinaryPrimitives.Int8Size, value.Length)); }
public int Size(ref BssomSizeContext context, SByte?value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } return(BssomBinaryPrimitives.Int8Size + BssomBinaryPrimitives.BuildInTypeCodeSize); }
public int Size(ref BssomSizeContext context, BssomDateTime value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } if (context.Option.IsUseStandardDateTime) { return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.StandardDateTimeSize); } return(BssomBinaryPrimitives.NativeTypeCodeSize + BssomBinaryPrimitives.NativeDateTimeSize); }
public int Size(ref BssomSizeContext context, BssomFloat value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } switch (value.FloatType) { case BssomFloat.BssomFloatType.Single: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.Float32Size); default: //case BssomFloatType.Double: return(BssomBinaryPrimitives.BuildInTypeCodeSize + BssomBinaryPrimitives.Float64Size); } }
public static int Size <TKey, TValue>(ref BssomSizeContext context, IEnumerable <KeyValuePair <TKey, TValue> > value, int count) { if (typeof(TKey) == typeof(DateTime)) { context.Option = context.Option.WithIsUseStandardDateTime(false); } if (context.Option.IDictionaryIsSerializeMap1Type) { return(MapFormatterHelper_Map1.Size(ref context, value, count)); } else { return(MapFormatterHelper_Map2.Size(ref context, value, count)); } }
public void MyTest() { var option = BssomSerializerOptions.Default.WithFormatterResolver(MyStringFormatterResolver.Instance); string str = RandomHelper.RandomValue <string>(); BssomSizeContext sizeContext = new BssomSizeContext(option); int len = BssomSerializer.Size(ref sizeContext, str); if (len > 1000) { throw new Exception("Size of value storage binary exceeded"); } BssomSerializeContext serContext = new BssomSerializeContext(option); sizeContext.ContextDataSlots.SetMyStringStack(serContext.ContextDataSlots); var bytes = BssomSerializer.Serialize(ref serContext, str); var deStr = BssomSerializer.Deserialize <string>(bytes); Assert.Equal(str, deStr); }
public int Size(ref BssomSizeContext context, object value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } Type realType = value.GetType(); if (realType == typeof(object)) { return(BssMapObjMarshal.Empty.Length + BssomBinaryPrimitives.BuildInTypeCodeSize); } object formatter = context.Option.FormatterResolver.GetFormatterWithVerify(realType); if (!SizeDelegates.TryGetValue(realType, out SizeMethod sizeDelegate)) { Type formatterType = typeof(IBssomFormatter <>).MakeGenericType(realType); ParameterExpression param0 = Expression.Parameter(typeof(object), "formatter"); ParameterExpression param1 = Expression.Parameter(typeof(BssomSizeContext).MakeByRefType(), "context"); ParameterExpression param2 = Expression.Parameter(typeof(object), "value"); MethodInfo sizeMethod = formatterType.GetRuntimeMethod(nameof(Size), new[] { typeof(BssomSizeContext).MakeByRefType(), realType }); MethodCallExpression body = Expression.Call( Expression.Convert(param0, formatterType), sizeMethod, param1, realType.IsValueType ? Expression.Unbox(param2, realType) : Expression.Convert(param2, realType) ); sizeDelegate = Expression.Lambda <SizeMethod>(body, param0, param1, param2).Compile(); SizeDelegates.TryAdd(realType, sizeDelegate); } return(sizeDelegate(formatter, ref context, value)); }
//Size IEnumerable<> public static int SizeGenericIEnumerable <TElement>(ref BssomSizeContext context, IEnumerable <TElement> value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } IBssomFormatter <TElement> formatter = context.Option.FormatterResolver.GetFormatterWithVerify <TElement>(); long dataLen = 0; foreach (TElement item in value) { dataLen += formatter.Size(ref context, item); } if (value.TryGetICollectionCount(out int count)) { return(BssomBinaryPrimitives.Array2TypeSize(count, dataLen)); } else { return(BssomBinaryPrimitives.Array2TypeSizeWithFixU32Count(dataLen)); } }
public int Size(ref BssomSizeContext context, BssomValue value) { if (value == null) { return(BssomBinaryPrimitives.NullSize); } switch (value.ValueType) { case BssomValueType.Array: return(BssomArrayFormatter.Instance.Size(ref context, (BssomArray)value)); case BssomValueType.Map: return(BssomMapFormatter.Instance.Size(ref context, (BssomMap)value)); case BssomValueType.Null: return(BssomNullFormatter.Instance.Size(ref context, (BssomNull)(value))); case BssomValueType.Number: return(BssomNumberFormatter.Instance.Size(ref context, (BssomNumber)value)); case BssomValueType.String: return(BssomStringFormatter.Instance.Size(ref context, (BssomString)(value))); case BssomValueType.Char: return(BssomCharFormatter.Instance.Size(ref context, (BssomChar)(value))); case BssomValueType.Guid: return(BssomGuidFormatter.Instance.Size(ref context, (BssomGuid)(value))); case BssomValueType.Boolean: return(BssomBooleanFormatter.Instance.Size(ref context, (BssomBoolean)(value))); default: //case BssomValueType.DateTime: return(BssomDateTimeFormatter.Instance.Size(ref context, (BssomDateTime)(value))); } }
public int Size(ref BssomSizeContext context, T value) { return(size + BssomBinaryPrimitives.BuildInTypeCodeSize); }
public int Size(ref BssomSizeContext context, Guid value) { return(BssomBinaryPrimitives.GuidSize + BssomBinaryPrimitives.NativeTypeCodeSize); }
public int Size(ref BssomSizeContext context, Decimal value) { return(BssomBinaryPrimitives.DecimalSize + BssomBinaryPrimitives.NativeTypeCodeSize); }
public int Size(ref BssomSizeContext context, BssomMap value) { return(MapFormatterHelper.SizeGenericDictionary(ref context, value.GetMap())); }
public int Size(ref BssomSizeContext context, IDictionary value) { return(MapFormatterHelper.SizeIDictionary(ref context, value)); }
public int Size(ref BssomSizeContext context, BssomArray value) { return(ObjectFormatter.Instance.Size(ref context, value.RawValue)); }
public int Size(ref BssomSizeContext context, DateTime value) { return(BssomBinaryPrimitives.DateTimeSize(context.Option.IsUseStandardDateTime)); }
public int Size(ref BssomSizeContext context, int value) { return(PrimitiveResolver.Instance.GetFormatter <int>().Size(ref context, value)); }
public int Size(ref BssomSizeContext context, Double value) { return(BssomBinaryPrimitives.Float64Size + BssomBinaryPrimitives.BuildInTypeCodeSize); }
public int Size(ref BssomSizeContext context, _Attribute_Class_3 value) { SecurityVerification(value, context.Option); return(MapCodeGenResolver.Instance.GetFormatter <_Attribute_Class_3>().Size(ref context, value)); }
public int Size(ref BssomSizeContext context, BssomNull value) { return(BssomBinaryPrimitives.NullSize); }