CreatePrimitiveArray() static private method

static private CreatePrimitiveArray ( InternalPrimitiveTypeE code, int length ) : Array
code InternalPrimitiveTypeE
length int
return System.Array
示例#1
0
 private void ReadArrayAsBytes(ParseRecord pr)
 {
     if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Byte)
     {
         pr.PRnewObj = (object)this.ReadBytes(pr.PRlengthA[0]);
     }
     else if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Char)
     {
         pr.PRnewObj = (object)this.ReadChars(pr.PRlengthA[0]);
     }
     else
     {
         int num1 = Converter.TypeLength(pr.PRarrayElementTypeCode);
         pr.PRnewObj = (object)Converter.CreatePrimitiveArray(pr.PRarrayElementTypeCode, pr.PRlengthA[0]);
         Array dst  = (Array)pr.PRnewObj;
         int   num2 = 0;
         if (this.byteBuffer == null)
         {
             this.byteBuffer = new byte[4096];
         }
         while (num2 < dst.Length)
         {
             int num3 = Math.Min(4096 / num1, dst.Length - num2);
             int num4 = num3 * num1;
             this.ReadBytes(this.byteBuffer, 0, num4);
             Buffer.InternalBlockCopy((Array)this.byteBuffer, 0, dst, num2 * num1, num4);
             num2 += num3;
         }
     }
 }
 private void ReadArrayAsBytes(ParseRecord pr)
 {
     if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Byte)
     {
         pr.PRnewObj = this.ReadBytes(pr.PRlengthA[0]);
     }
     else if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Char)
     {
         pr.PRnewObj = this.ReadChars(pr.PRlengthA[0]);
     }
     else
     {
         int num = Converter.TypeLength(pr.PRarrayElementTypeCode);
         pr.PRnewObj = Converter.CreatePrimitiveArray(pr.PRarrayElementTypeCode, pr.PRlengthA[0]);
         Array pRnewObj = (Array)pr.PRnewObj;
         int   num2     = 0;
         if (this.byteBuffer == null)
         {
             this.byteBuffer = new byte[0x1000];
         }
         while (num2 < pRnewObj.Length)
         {
             int num3 = Math.Min((int)(0x1000 / num), (int)(pRnewObj.Length - num2));
             int size = num3 * num;
             this.ReadBytes(this.byteBuffer, 0, size);
             Buffer.InternalBlockCopy(this.byteBuffer, 0, pRnewObj, num2 * num, size);
             num2 += num3;
         }
     }
 }
        private void ReadArrayAsBytes(ParseRecord pr)
        {
            Debug.Assert(pr._lengthA != null);
            if (pr._arrayElementTypeCode == InternalPrimitiveTypeE.Byte)
            {
                pr._newObj = ReadBytes(pr._lengthA[0]);
            }
            else if (pr._arrayElementTypeCode == InternalPrimitiveTypeE.Char)
            {
                pr._newObj = ReadChars(pr._lengthA[0]);
            }
            else
            {
                int typeLength = Converter.TypeLength(pr._arrayElementTypeCode);

                pr._newObj = Converter.CreatePrimitiveArray(pr._arrayElementTypeCode, pr._lengthA[0]);
                Debug.Assert((pr._newObj != null), "[BinaryParser expected a Primitive Array]");

                Array array       = (Array)pr._newObj;
                int   arrayOffset = 0;
                if (_byteBuffer == null)
                {
                    _byteBuffer = new byte[ChunkSize];
                }

                while (arrayOffset < array.Length)
                {
                    int numArrayItems = Math.Min(ChunkSize / typeLength, array.Length - arrayOffset);
                    int bufferUsed    = numArrayItems * typeLength;
                    ReadBytes(_byteBuffer, 0, bufferUsed);
                    if (!BitConverter.IsLittleEndian)
                    {
                        // we know that we are reading a primitive type, so just do a simple swap
                        Debug.Fail("Re-review this code if/when we start running on big endian systems");
                        for (int i = 0; i < bufferUsed; i += typeLength)
                        {
                            for (int j = 0; j < typeLength / 2; j++)
                            {
                                byte tmp = _byteBuffer[i + j];
                                _byteBuffer[i + j] = _byteBuffer[i + typeLength - 1 - j];
                                _byteBuffer[i + typeLength - 1 - j] = tmp;
                            }
                        }
                    }
                    Buffer.BlockCopy(_byteBuffer, 0, array, arrayOffset * typeLength, bufferUsed);
                    arrayOffset += numArrayItems;
                }
            }
        }
        private void ReadArrayAsBytes(ParseRecord pr)
        {
            if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Byte)
            {
                pr.PRnewObj = ReadBytes(pr.PRlengthA[0]);
            }
            else if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Char)
            {
                pr.PRnewObj = ReadChars(pr.PRlengthA[0]);
            }
            else
            {
                int typeLength = Converter.TypeLength(pr.PRarrayElementTypeCode);

                pr.PRnewObj = Converter.CreatePrimitiveArray(pr.PRarrayElementTypeCode, pr.PRlengthA[0]);

                //pr.PRnewObj = Array.CreateInstance(pr.PRarrayElementType, pr.PRlengthA[0]);
                BCLDebug.Assert((pr.PRnewObj != null), "[BinaryParser expected a Primitive Array]");

                Array array       = (Array)pr.PRnewObj;
                int   arrayOffset = 0;
                if (byteBuffer == null)
                {
                    byteBuffer = new byte[chunkSize];
                }

                while (arrayOffset < array.Length)
                {
                    int numArrayItems = Math.Min(chunkSize / typeLength, array.Length - arrayOffset);
                    int bufferUsed    = numArrayItems * typeLength;
                    ReadBytes(byteBuffer, 0, bufferUsed);
                    Buffer.InternalBlockCopy(byteBuffer, 0, array, arrayOffset * typeLength, bufferUsed);
                    arrayOffset += numArrayItems;
                }
            }
        }