/// <summary> /// /// </summary> /// <param name="field"></param> /// <returns></returns> internal static memberInfo GetSerialize(fieldIndex field) { memberInfo member = new memberInfo(field); Type type = field.Member.FieldType; if (type.IsEnum) { cSharp.dataSerialize.FixedSizes.TryGetValue(type.GetEnumUnderlyingType(), out member.SerializeFixedSize); } else if (type.IsValueType) { Type nullType = type.nullableType(); if (nullType == null) { cSharp.dataSerialize.FixedSizes.TryGetValue(type, out member.SerializeFixedSize); if (type == typeof(bool)) { member.NullMapSize = 1; } } else { member.NullMapSize = type == typeof(bool?) ? (byte)2 : (byte)1; cSharp.dataSerialize.FixedSizes.TryGetValue(nullType, out member.SerializeFixedSize); } } else { member.NullMapSize = 1; } return(member); }
/// <summary> /// /// </summary> /// <param name="members"></param> /// <returns></returns> public memberInfo[] CheckMembers(sqlStreamMember[] members) { int count = 0; foreach (sqlStreamMember member in members) { foreach (memberInfo field in Members) { if (field.Type == member.Member.Type && field.MemberName == member.Member.MemberName) { ++count; break; } } } if (count == Members.Length) { return(Members); } if (count == 0) { return(null); } memberInfo[] fields = new memberInfo[count]; foreach (sqlStreamMember member in members) { foreach (memberInfo field in Members) { if (field.Type == member.Member.Type && field.MemberName == member.Member.MemberName) { int memberIndex = fields.Length - count; fields[--count] = new memberInfo((FieldInfo)field.Member, memberIndex); break; } } } return(fields); }
/// <summary> /// /// </summary> /// <param name="left"></param> /// <param name="right"></param> /// <returns></returns> internal static int SerializeFixedSizeSort(memberInfo left, memberInfo right) { return((int)((uint)right.SerializeFixedSize & (0U - (uint)right.SerializeFixedSize)) - (int)((uint)left.SerializeFixedSize & (0U - (uint)left.SerializeFixedSize))); }