Esempio n. 1
0
 /// <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);
 }
Esempio n. 2
0
 /// <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));
 }