/// <summary> /// 获取成员位图内存池 /// </summary> /// <param name="size">成员位图字节数量</param> /// <returns></returns> internal static MemberMapPool GetPool(int size) { if (size > 0) { int index = size >> 3; if (index < pools.Length) { MemberMapPool pool = pools[index]; if (pool != null) { return(pool); } poolLock.EnterSleep(); if ((pool = pools[index]) == null) { try { pools[index] = pool = new MemberMapPool(size); } finally { poolLock.Exit(); } } else { poolLock.Exit(); } return(pool); } } return(null); }
/// <summary> /// 成员位图类型信息 /// </summary> /// <param name="type">类型</param> /// <param name="members">成员索引集合</param> /// <param name="fieldCount">字段成员数量</param> internal MemberMapType(Type type, AutoCSer.Metadata.MemberIndexInfo[] members, int fieldCount) { Type = type; MemberCount = members.Length; FieldCount = fieldCount; MemberMapSize = ((MemberCount + 63) >> 6) << 3; BinarySerializeSize = ((fieldCount + 31) >> 5) << 2; Pool = MemberMapPool.GetPool(MemberMapSize); NameIndexSearcher = new AutoCSer.StateSearcher.CharSearcher(AutoCSer.StateSearcher.CharBuilder.Create(members.getArray(value => value.Member.Name), true)); }